From 01fe0c07e86190d88a2230e919f720105c38942b Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Sun, 4 Aug 2019 01:03:53 -0600 Subject: [PATCH 1/3] Fix issue with incorrect Notion bridge IDs --- homeassistant/components/notion/__init__.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/notion/__init__.py b/homeassistant/components/notion/__init__.py index d2c45330bdb75c..14dfef93f50d1f 100644 --- a/homeassistant/components/notion/__init__.py +++ b/homeassistant/components/notion/__init__.py @@ -235,16 +235,16 @@ def device_state_attributes(self) -> dict: @property def device_info(self): """Return device registry information for this entity.""" - bridge = self._notion.bridges[self._bridge_id] - sensor = self._notion.sensors[self._sensor_id] + bridge = self._notion.bridges.get(self._bridge_id, {}) + sensor = self._notion.sensors.get(self._sensor_id, {}) return { - "identifiers": {(DOMAIN, sensor["hardware_id"])}, + "identifiers": {(DOMAIN, sensor.get("hardware_id"))}, "manufacturer": "Silicon Labs", - "model": sensor["hardware_revision"], - "name": sensor["name"], - "sw_version": sensor["firmware_version"], - "via_device": (DOMAIN, bridge["hardware_id"]), + "model": sensor.get("hardware_revision"), + "name": sensor.get("name"), + "sw_version": sensor.get("firmware_version"), + "via_device": (DOMAIN, bridge.get("hardware_id")), } @property From 480facf5c9922daffa5fb959e7c9e5c3b482b368 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Sun, 4 Aug 2019 01:18:34 -0600 Subject: [PATCH 2/3] Less aggressive --- homeassistant/components/notion/__init__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/notion/__init__.py b/homeassistant/components/notion/__init__.py index 14dfef93f50d1f..86eaef7fa5dd93 100644 --- a/homeassistant/components/notion/__init__.py +++ b/homeassistant/components/notion/__init__.py @@ -236,14 +236,14 @@ def device_state_attributes(self) -> dict: def device_info(self): """Return device registry information for this entity.""" bridge = self._notion.bridges.get(self._bridge_id, {}) - sensor = self._notion.sensors.get(self._sensor_id, {}) + sensor = self._notion.sensors[self._sensor_id] return { - "identifiers": {(DOMAIN, sensor.get("hardware_id"))}, + "identifiers": {(DOMAIN, sensor["hardware_id"])}, "manufacturer": "Silicon Labs", - "model": sensor.get("hardware_revision"), - "name": sensor.get("name"), - "sw_version": sensor.get("firmware_version"), + "model": sensor["hardware_revision"], + "name": sensor["name"], + "sw_version": sensor["firmware_version"], "via_device": (DOMAIN, bridge.get("hardware_id")), } From 0f14328a994da1ddb60251da6cd86c79f4baa9a0 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Sun, 4 Aug 2019 12:45:35 -0600 Subject: [PATCH 3/3] Member comments --- homeassistant/components/notion/__init__.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/notion/__init__.py b/homeassistant/components/notion/__init__.py index 86eaef7fa5dd93..62deb4999d9c36 100644 --- a/homeassistant/components/notion/__init__.py +++ b/homeassistant/components/notion/__init__.py @@ -271,7 +271,14 @@ async def _update_bridge_id(self): Sensors can move to other bridges based on signal strength, etc. """ sensor = self._notion.sensors[self._sensor_id] - if self._bridge_id == sensor["bridge"]["id"]: + + # If the sensor's bridge ID is the same as what we had before or if it points + # to a bridge that doesn't exist (which can happen due to a Notion API bug), + # return immediately: + if ( + self._bridge_id == sensor["bridge"]["id"] + or sensor["bridge"]["id"] not in self._notion.bridges + ): return self._bridge_id = sensor["bridge"]["id"]