From d4ede6669a2d41f571829da13d53a1f1bf598c50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Bachmann?= Date: Mon, 15 Jun 2026 09:52:16 +0000 Subject: [PATCH] custom_components/whatsapp_bridge_integration/__init__.py aktualisiert 0.2.3 --- .../whatsapp_bridge_integration/__init__.py | 45 ++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/custom_components/whatsapp_bridge_integration/__init__.py b/custom_components/whatsapp_bridge_integration/__init__.py index be6d67b..6f4a936 100644 --- a/custom_components/whatsapp_bridge_integration/__init__.py +++ b/custom_components/whatsapp_bridge_integration/__init__.py @@ -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"): - 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", - ) - hass.data[DOMAIN]["hub_device_created"] = True + # 3. Zentralen System-Hub VOLLKOMMEN UNABHÄNGIG anlegen (ohne feste config_entry_id Bindung) + device_registry.async_get_or_create( + identifiers={(DOMAIN, "global_bridge_hub")}, + name="WhatsApp Bridge Hub", + manufacturer="Bahmcloud", + model="Bridge Server", + sw_version="0.2.3", + ) # Forward the setup to the sensor platform to create entities await hass.config_entries.async_forward_entry_setups(entry, ["sensor"])