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
|
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(
|
||||||
config_entry_id=entry.entry_id,
|
|
||||||
identifiers={(DOMAIN, "global_bridge_hub")},
|
identifiers={(DOMAIN, "global_bridge_hub")},
|
||||||
name="WhatsApp Bridge Hub",
|
name="WhatsApp Bridge Hub",
|
||||||
manufacturer="Bahmcloud",
|
manufacturer="Bahmcloud",
|
||||||
model="Bridge Server",
|
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
|
# 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"])
|
||||||
|
|||||||
Reference in New Issue
Block a user