custom_components/whatsapp_bridge_integration/__init__.py aktualisiert
0.2.3
This commit is contained in:
@@ -9,33 +9,48 @@ async def async_setup(hass: HomeAssistant, config: dict):
|
||||
return True
|
||||
|
||||
async def async_setup_entry(hass: HomeAssistant, entry):
|
||||
"""Set up entry, create specific contact device, central hub and forward to platforms."""
|
||||
"""Set up entry, create devices, and clean up old orphaned devices."""
|
||||
hass.data.setdefault(DOMAIN, {})
|
||||
hass.data[DOMAIN][entry.entry_id] = entry.data
|
||||
|
||||
device_registry = dr.async_get(hass)
|
||||
|
||||
# 1. Eigenes Gerät SPEZIFISCH für diesen Account/Kontakt anlegen
|
||||
# 1. Automatisches Aufräumen von alten Geister-Geräten
|
||||
active_entry_ids = set(hass.config_entries.async_entries(DOMAIN))
|
||||
active_ids = {e.entry_id for e in active_entry_ids}
|
||||
|
||||
# Durchsuche die HA-Datenbank nach Geräten unserer Integration
|
||||
devices_to_clean = [
|
||||
dev for dev in device_registry.devices.values()
|
||||
if any(identifier[0] == DOMAIN for identifier in dev.identifiers)
|
||||
]
|
||||
|
||||
for device in devices_to_clean:
|
||||
# Falls ein Gerät zu einem gelöschten Config Entry gehört -> Löschen!
|
||||
# Der globale Hub ("global_bridge_hub") wird ignoriert und bleibt erhalten.
|
||||
for config_id in device.config_entries:
|
||||
if config_id not in active_ids and not any(idx == "global_bridge_hub" for _, idx in device.identifiers):
|
||||
_LOGGER.info(f"Entferne verwaistes WhatsApp-Gerät: {device.name}")
|
||||
device_registry.async_remove_device(device.id)
|
||||
|
||||
# 2. Eigenes Gerät SPEZIFISCH für dieses aktive Konto anlegen
|
||||
device_registry.async_get_or_create(
|
||||
config_entry_id=entry.entry_id,
|
||||
identifiers={(DOMAIN, entry.entry_id)}, # Einzigartig pro Eintrag
|
||||
identifiers={(DOMAIN, entry.entry_id)},
|
||||
name=f"WhatsApp {entry.title}",
|
||||
manufacturer="Bahmcloud",
|
||||
model="Kontakt-Endpunkt",
|
||||
sw_version="0.2.2",
|
||||
sw_version="0.2.3",
|
||||
)
|
||||
|
||||
# 2. Zentralen System-Hub NUR EINMALIG anlegen (wird an den ersten geladenen Account gekoppelt)
|
||||
if not hass.data[DOMAIN].get("hub_device_created"):
|
||||
# 3. Zentralen System-Hub VOLLKOMMEN UNABHÄNGIG anlegen (ohne feste config_entry_id Bindung)
|
||||
device_registry.async_get_or_create(
|
||||
config_entry_id=entry.entry_id,
|
||||
identifiers={(DOMAIN, "global_bridge_hub")},
|
||||
name="WhatsApp Bridge Hub",
|
||||
manufacturer="Bahmcloud",
|
||||
model="Bridge Server",
|
||||
sw_version="0.2.2",
|
||||
sw_version="0.2.3",
|
||||
)
|
||||
hass.data[DOMAIN]["hub_device_created"] = True
|
||||
|
||||
# Forward the setup to the sensor platform to create entities
|
||||
await hass.config_entries.async_forward_entry_setups(entry, ["sensor"])
|
||||
|
||||
Reference in New Issue
Block a user