Fix unhandled exception with Guardian paired sensor coordinators (#53663)
This commit is contained in:
parent
a2d66bd1c0
commit
c04671ac64
4 changed files with 22 additions and 20 deletions
|
@ -26,6 +26,7 @@ from .const import (
|
||||||
CONF_UID,
|
CONF_UID,
|
||||||
DATA_CLIENT,
|
DATA_CLIENT,
|
||||||
DATA_COORDINATOR,
|
DATA_COORDINATOR,
|
||||||
|
DATA_COORDINATOR_PAIRED_SENSOR,
|
||||||
DATA_PAIRED_SENSOR_MANAGER,
|
DATA_PAIRED_SENSOR_MANAGER,
|
||||||
DATA_UNSUB_DISPATCHER_CONNECT,
|
DATA_UNSUB_DISPATCHER_CONNECT,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
|
@ -44,6 +45,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
{
|
{
|
||||||
DATA_CLIENT: {},
|
DATA_CLIENT: {},
|
||||||
DATA_COORDINATOR: {},
|
DATA_COORDINATOR: {},
|
||||||
|
DATA_COORDINATOR_PAIRED_SENSOR: {},
|
||||||
DATA_PAIRED_SENSOR_MANAGER: {},
|
DATA_PAIRED_SENSOR_MANAGER: {},
|
||||||
DATA_UNSUB_DISPATCHER_CONNECT: {},
|
DATA_UNSUB_DISPATCHER_CONNECT: {},
|
||||||
},
|
},
|
||||||
|
@ -51,9 +53,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
client = hass.data[DOMAIN][DATA_CLIENT][entry.entry_id] = Client(
|
client = hass.data[DOMAIN][DATA_CLIENT][entry.entry_id] = Client(
|
||||||
entry.data[CONF_IP_ADDRESS], port=entry.data[CONF_PORT]
|
entry.data[CONF_IP_ADDRESS], port=entry.data[CONF_PORT]
|
||||||
)
|
)
|
||||||
hass.data[DOMAIN][DATA_COORDINATOR][entry.entry_id] = {
|
hass.data[DOMAIN][DATA_COORDINATOR][entry.entry_id] = {}
|
||||||
API_SENSOR_PAIRED_SENSOR_STATUS: {}
|
hass.data[DOMAIN][DATA_COORDINATOR_PAIRED_SENSOR][entry.entry_id] = {}
|
||||||
}
|
|
||||||
hass.data[DOMAIN][DATA_UNSUB_DISPATCHER_CONNECT][entry.entry_id] = []
|
hass.data[DOMAIN][DATA_UNSUB_DISPATCHER_CONNECT][entry.entry_id] = []
|
||||||
|
|
||||||
# The valve controller's UDP-based API can't handle concurrent requests very well,
|
# The valve controller's UDP-based API can't handle concurrent requests very well,
|
||||||
|
@ -113,6 +114,7 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
if unload_ok:
|
if unload_ok:
|
||||||
hass.data[DOMAIN][DATA_CLIENT].pop(entry.entry_id)
|
hass.data[DOMAIN][DATA_CLIENT].pop(entry.entry_id)
|
||||||
hass.data[DOMAIN][DATA_COORDINATOR].pop(entry.entry_id)
|
hass.data[DOMAIN][DATA_COORDINATOR].pop(entry.entry_id)
|
||||||
|
hass.data[DOMAIN][DATA_COORDINATOR_PAIRED_SENSOR].pop(entry.entry_id)
|
||||||
for unsub in hass.data[DOMAIN][DATA_UNSUB_DISPATCHER_CONNECT][entry.entry_id]:
|
for unsub in hass.data[DOMAIN][DATA_UNSUB_DISPATCHER_CONNECT][entry.entry_id]:
|
||||||
unsub()
|
unsub()
|
||||||
hass.data[DOMAIN][DATA_UNSUB_DISPATCHER_CONNECT].pop(entry.entry_id)
|
hass.data[DOMAIN][DATA_UNSUB_DISPATCHER_CONNECT].pop(entry.entry_id)
|
||||||
|
@ -143,8 +145,8 @@ class PairedSensorManager:
|
||||||
|
|
||||||
self._paired_uids.add(uid)
|
self._paired_uids.add(uid)
|
||||||
|
|
||||||
coordinator = self._hass.data[DOMAIN][DATA_COORDINATOR][self._entry.entry_id][
|
coordinator = self._hass.data[DOMAIN][DATA_COORDINATOR_PAIRED_SENSOR][
|
||||||
API_SENSOR_PAIRED_SENSOR_STATUS
|
self._entry.entry_id
|
||||||
][uid] = GuardianDataUpdateCoordinator(
|
][uid] = GuardianDataUpdateCoordinator(
|
||||||
self._hass,
|
self._hass,
|
||||||
client=self._client,
|
client=self._client,
|
||||||
|
@ -194,8 +196,8 @@ class PairedSensorManager:
|
||||||
|
|
||||||
# Clear out objects related to this paired sensor:
|
# Clear out objects related to this paired sensor:
|
||||||
self._paired_uids.remove(uid)
|
self._paired_uids.remove(uid)
|
||||||
self._hass.data[DOMAIN][DATA_COORDINATOR][self._entry.entry_id][
|
self._hass.data[DOMAIN][DATA_COORDINATOR_PAIRED_SENSOR][
|
||||||
API_SENSOR_PAIRED_SENSOR_STATUS
|
self._entry.entry_id
|
||||||
].pop(uid)
|
].pop(uid)
|
||||||
|
|
||||||
# Remove the paired sensor device from the device registry (which will
|
# Remove the paired sensor device from the device registry (which will
|
||||||
|
@ -297,7 +299,6 @@ class ValveControllerEntity(GuardianEntity):
|
||||||
return any(
|
return any(
|
||||||
coordinator.last_update_success
|
coordinator.last_update_success
|
||||||
for coordinator in self.coordinators.values()
|
for coordinator in self.coordinators.values()
|
||||||
if coordinator
|
|
||||||
)
|
)
|
||||||
|
|
||||||
async def _async_continue_entity_setup(self) -> None:
|
async def _async_continue_entity_setup(self) -> None:
|
||||||
|
|
|
@ -15,11 +15,11 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
||||||
|
|
||||||
from . import PairedSensorEntity, ValveControllerEntity
|
from . import PairedSensorEntity, ValveControllerEntity
|
||||||
from .const import (
|
from .const import (
|
||||||
API_SENSOR_PAIRED_SENSOR_STATUS,
|
|
||||||
API_SYSTEM_ONBOARD_SENSOR_STATUS,
|
API_SYSTEM_ONBOARD_SENSOR_STATUS,
|
||||||
API_WIFI_STATUS,
|
API_WIFI_STATUS,
|
||||||
CONF_UID,
|
CONF_UID,
|
||||||
DATA_COORDINATOR,
|
DATA_COORDINATOR,
|
||||||
|
DATA_COORDINATOR_PAIRED_SENSOR,
|
||||||
DATA_UNSUB_DISPATCHER_CONNECT,
|
DATA_UNSUB_DISPATCHER_CONNECT,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
SIGNAL_PAIRED_SENSOR_COORDINATOR_ADDED,
|
SIGNAL_PAIRED_SENSOR_COORDINATOR_ADDED,
|
||||||
|
@ -49,9 +49,9 @@ async def async_setup_entry(
|
||||||
@callback
|
@callback
|
||||||
def add_new_paired_sensor(uid: str) -> None:
|
def add_new_paired_sensor(uid: str) -> None:
|
||||||
"""Add a new paired sensor."""
|
"""Add a new paired sensor."""
|
||||||
coordinator = hass.data[DOMAIN][DATA_COORDINATOR][entry.entry_id][
|
coordinator = hass.data[DOMAIN][DATA_COORDINATOR_PAIRED_SENSOR][entry.entry_id][
|
||||||
API_SENSOR_PAIRED_SENSOR_STATUS
|
uid
|
||||||
][uid]
|
]
|
||||||
|
|
||||||
entities = []
|
entities = []
|
||||||
for kind in PAIRED_SENSOR_SENSORS:
|
for kind in PAIRED_SENSOR_SENSORS:
|
||||||
|
@ -95,8 +95,8 @@ async def async_setup_entry(
|
||||||
)
|
)
|
||||||
|
|
||||||
# Add all paired sensor-specific binary sensors:
|
# Add all paired sensor-specific binary sensors:
|
||||||
for coordinator in hass.data[DOMAIN][DATA_COORDINATOR][entry.entry_id][
|
for coordinator in hass.data[DOMAIN][DATA_COORDINATOR_PAIRED_SENSOR][
|
||||||
API_SENSOR_PAIRED_SENSOR_STATUS
|
entry.entry_id
|
||||||
].values():
|
].values():
|
||||||
for kind in PAIRED_SENSOR_SENSORS:
|
for kind in PAIRED_SENSOR_SENSORS:
|
||||||
name, device_class = SENSOR_ATTRS_MAP[kind]
|
name, device_class = SENSOR_ATTRS_MAP[kind]
|
||||||
|
|
|
@ -16,6 +16,7 @@ CONF_UID = "uid"
|
||||||
|
|
||||||
DATA_CLIENT = "client"
|
DATA_CLIENT = "client"
|
||||||
DATA_COORDINATOR = "coordinator"
|
DATA_COORDINATOR = "coordinator"
|
||||||
|
DATA_COORDINATOR_PAIRED_SENSOR = "coordinator_paired_sensor"
|
||||||
DATA_PAIRED_SENSOR_MANAGER = "paired_sensor_manager"
|
DATA_PAIRED_SENSOR_MANAGER = "paired_sensor_manager"
|
||||||
DATA_UNSUB_DISPATCHER_CONNECT = "unsub_dispatcher_connect"
|
DATA_UNSUB_DISPATCHER_CONNECT = "unsub_dispatcher_connect"
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,11 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
||||||
|
|
||||||
from . import PairedSensorEntity, ValveControllerEntity
|
from . import PairedSensorEntity, ValveControllerEntity
|
||||||
from .const import (
|
from .const import (
|
||||||
API_SENSOR_PAIRED_SENSOR_STATUS,
|
|
||||||
API_SYSTEM_DIAGNOSTICS,
|
API_SYSTEM_DIAGNOSTICS,
|
||||||
API_SYSTEM_ONBOARD_SENSOR_STATUS,
|
API_SYSTEM_ONBOARD_SENSOR_STATUS,
|
||||||
CONF_UID,
|
CONF_UID,
|
||||||
DATA_COORDINATOR,
|
DATA_COORDINATOR,
|
||||||
|
DATA_COORDINATOR_PAIRED_SENSOR,
|
||||||
DATA_UNSUB_DISPATCHER_CONNECT,
|
DATA_UNSUB_DISPATCHER_CONNECT,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
SIGNAL_PAIRED_SENSOR_COORDINATOR_ADDED,
|
SIGNAL_PAIRED_SENSOR_COORDINATOR_ADDED,
|
||||||
|
@ -54,9 +54,9 @@ async def async_setup_entry(
|
||||||
@callback
|
@callback
|
||||||
def add_new_paired_sensor(uid: str) -> None:
|
def add_new_paired_sensor(uid: str) -> None:
|
||||||
"""Add a new paired sensor."""
|
"""Add a new paired sensor."""
|
||||||
coordinator = hass.data[DOMAIN][DATA_COORDINATOR][entry.entry_id][
|
coordinator = hass.data[DOMAIN][DATA_COORDINATOR_PAIRED_SENSOR][entry.entry_id][
|
||||||
API_SENSOR_PAIRED_SENSOR_STATUS
|
uid
|
||||||
][uid]
|
]
|
||||||
|
|
||||||
entities = []
|
entities = []
|
||||||
for kind in PAIRED_SENSOR_SENSORS:
|
for kind in PAIRED_SENSOR_SENSORS:
|
||||||
|
@ -96,8 +96,8 @@ async def async_setup_entry(
|
||||||
)
|
)
|
||||||
|
|
||||||
# Add all paired sensor-specific binary sensors:
|
# Add all paired sensor-specific binary sensors:
|
||||||
for coordinator in hass.data[DOMAIN][DATA_COORDINATOR][entry.entry_id][
|
for coordinator in hass.data[DOMAIN][DATA_COORDINATOR_PAIRED_SENSOR][
|
||||||
API_SENSOR_PAIRED_SENSOR_STATUS
|
entry.entry_id
|
||||||
].values():
|
].values():
|
||||||
for kind in PAIRED_SENSOR_SENSORS:
|
for kind in PAIRED_SENSOR_SENSORS:
|
||||||
name, device_class, icon, unit = SENSOR_ATTRS_MAP[kind]
|
name, device_class, icon, unit = SENSOR_ATTRS_MAP[kind]
|
||||||
|
|
Loading…
Add table
Reference in a new issue