From 76146cf57cb4211cb25f28a61d300c780104d943 Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Wed, 25 May 2022 05:51:02 +0200 Subject: [PATCH] Fix deCONZ does not generate unique IDs for battery sensors (#72455) --- homeassistant/components/deconz/sensor.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/deconz/sensor.py b/homeassistant/components/deconz/sensor.py index 663aadde73f..2aff2b12448 100644 --- a/homeassistant/components/deconz/sensor.py +++ b/homeassistant/components/deconz/sensor.py @@ -246,13 +246,16 @@ async def async_setup_entry( def async_add_sensor(_: EventType, sensor_id: str) -> None: """Add sensor from deCONZ.""" sensor = gateway.api.sensors[sensor_id] + entities: list[DeconzSensor] = [] if not gateway.option_allow_clip_sensor and sensor.type.startswith("CLIP"): return - if sensor.battery is None: + if sensor.battery is None and not sensor.type.startswith("CLIP"): DeconzBatteryTracker(sensor_id, gateway, async_add_entities) + known_entities = set(gateway.entities[DOMAIN]) + for description in ( ENTITY_DESCRIPTIONS.get(type(sensor), []) + SENSOR_DESCRIPTIONS ): @@ -262,7 +265,11 @@ async def async_setup_entry( ): continue - async_add_entities([DeconzSensor(sensor, gateway, description)]) + entity = DeconzSensor(sensor, gateway, description) + if entity.unique_id not in known_entities: + entities.append(entity) + + async_add_entities(entities) gateway.register_platform_add_device_callback( async_add_sensor, @@ -403,6 +410,7 @@ class DeconzBatteryTracker: """Update the device's state.""" if "battery" in self.sensor.changed_keys: self.unsub() - self.async_add_entities( - [DeconzSensor(self.sensor, self.gateway, SENSOR_DESCRIPTIONS[0])] - ) + known_entities = set(self.gateway.entities[DOMAIN]) + entity = DeconzSensor(self.sensor, self.gateway, SENSOR_DESCRIPTIONS[0]) + if entity.unique_id not in known_entities: + self.async_add_entities([entity])