custom_components/whatsapp_bridge_integration/__init__.py aktualisiert

0.2.3
This commit is contained in:
2026-06-15 09:52:16 +00:00
parent eb6be8cdf4
commit d4ede6669a

View File

@@ -9,33 +9,48 @@ async def async_setup(hass: HomeAssistant, config: dict):
return True return True
async def async_setup_entry(hass: HomeAssistant, entry): 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.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = entry.data hass.data[DOMAIN][entry.entry_id] = entry.data
device_registry = dr.async_get(hass) 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( device_registry.async_get_or_create(
config_entry_id=entry.entry_id, config_entry_id=entry.entry_id,
identifiers={(DOMAIN, entry.entry_id)}, # Einzigartig pro Eintrag identifiers={(DOMAIN, entry.entry_id)},
name=f"WhatsApp {entry.title}", name=f"WhatsApp {entry.title}",
manufacturer="Bahmcloud", manufacturer="Bahmcloud",
model="Kontakt-Endpunkt", 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) # 3. Zentralen System-Hub VOLLKOMMEN UNABHÄNGIG anlegen (ohne feste config_entry_id Bindung)
if not hass.data[DOMAIN].get("hub_device_created"): device_registry.async_get_or_create(
device_registry.async_get_or_create( identifiers={(DOMAIN, "global_bridge_hub")},
config_entry_id=entry.entry_id, name="WhatsApp Bridge Hub",
identifiers={(DOMAIN, "global_bridge_hub")}, manufacturer="Bahmcloud",
name="WhatsApp Bridge Hub", model="Bridge Server",
manufacturer="Bahmcloud", sw_version="0.2.3",
model="Bridge Server", )
sw_version="0.2.2",
)
hass.data[DOMAIN]["hub_device_created"] = True
# Forward the setup to the sensor platform to create entities # Forward the setup to the sensor platform to create entities
await hass.config_entries.async_forward_entry_setups(entry, ["sensor"]) await hass.config_entries.async_forward_entry_setups(entry, ["sensor"])