Improve Plugwise runtime-updating (#120230)
This commit is contained in:
parent
ab9cbf64da
commit
213cb6f0fd
7 changed files with 41 additions and 73 deletions
|
@ -89,26 +89,20 @@ async def async_setup_entry(
|
|||
if not coordinator.new_devices:
|
||||
return
|
||||
|
||||
entities: list[PlugwiseBinarySensorEntity] = []
|
||||
for device_id, device in coordinator.data.devices.items():
|
||||
if not (binary_sensors := device.get("binary_sensors")):
|
||||
continue
|
||||
for description in BINARY_SENSORS:
|
||||
if description.key not in binary_sensors:
|
||||
continue
|
||||
|
||||
entities.append(
|
||||
PlugwiseBinarySensorEntity(
|
||||
coordinator,
|
||||
device_id,
|
||||
description,
|
||||
)
|
||||
async_add_entities(
|
||||
PlugwiseBinarySensorEntity(coordinator, device_id, description)
|
||||
for device_id in coordinator.new_devices
|
||||
if (
|
||||
binary_sensors := coordinator.data.devices[device_id].get(
|
||||
"binary_sensors"
|
||||
)
|
||||
async_add_entities(entities)
|
||||
|
||||
entry.async_on_unload(coordinator.async_add_listener(_add_entities))
|
||||
)
|
||||
for description in BINARY_SENSORS
|
||||
if description.key in binary_sensors
|
||||
)
|
||||
|
||||
_add_entities()
|
||||
entry.async_on_unload(coordinator.async_add_listener(_add_entities))
|
||||
|
||||
|
||||
class PlugwiseBinarySensorEntity(PlugwiseEntity, BinarySensorEntity):
|
||||
|
|
|
@ -41,13 +41,12 @@ async def async_setup_entry(
|
|||
|
||||
async_add_entities(
|
||||
PlugwiseClimateEntity(coordinator, device_id)
|
||||
for device_id, device in coordinator.data.devices.items()
|
||||
if device["dev_class"] in MASTER_THERMOSTATS
|
||||
for device_id in coordinator.new_devices
|
||||
if coordinator.data.devices[device_id]["dev_class"] in MASTER_THERMOSTATS
|
||||
)
|
||||
|
||||
entry.async_on_unload(coordinator.async_add_listener(_add_entities))
|
||||
|
||||
_add_entities()
|
||||
entry.async_on_unload(coordinator.async_add_listener(_add_entities))
|
||||
|
||||
|
||||
class PlugwiseClimateEntity(PlugwiseEntity, ClimateEntity):
|
||||
|
|
|
@ -15,7 +15,6 @@ from homeassistant.config_entries import ConfigEntry
|
|||
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_USERNAME
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import ConfigEntryError
|
||||
from homeassistant.helpers import device_registry as dr
|
||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||
from homeassistant.helpers.debounce import Debouncer
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||
|
@ -55,8 +54,8 @@ class PlugwiseDataUpdateCoordinator(DataUpdateCoordinator[PlugwiseData]):
|
|||
timeout=30,
|
||||
websession=async_get_clientsession(hass, verify_ssl=False),
|
||||
)
|
||||
self.device_list: list[dr.DeviceEntry] = []
|
||||
self.new_devices: bool = False
|
||||
self._current_devices: set[str] = set()
|
||||
self.new_devices: set[str] = set()
|
||||
|
||||
async def _connect(self) -> None:
|
||||
"""Connect to the Plugwise Smile."""
|
||||
|
@ -81,13 +80,8 @@ class PlugwiseDataUpdateCoordinator(DataUpdateCoordinator[PlugwiseData]):
|
|||
raise ConfigEntryError("Device with unsupported firmware") from err
|
||||
except ConnectionFailedError as err:
|
||||
raise UpdateFailed("Failed to connect to the Plugwise Smile") from err
|
||||
|
||||
device_reg = dr.async_get(self.hass)
|
||||
device_list = dr.async_entries_for_config_entry(
|
||||
device_reg, self.config_entry.entry_id
|
||||
)
|
||||
|
||||
self.new_devices = len(data.devices.keys()) - len(self.device_list) > 0
|
||||
self.device_list = device_list
|
||||
else:
|
||||
self.new_devices = set(data.devices) - self._current_devices
|
||||
self._current_devices = set(data.devices)
|
||||
|
||||
return data
|
||||
|
|
|
@ -81,14 +81,13 @@ async def async_setup_entry(
|
|||
|
||||
async_add_entities(
|
||||
PlugwiseNumberEntity(coordinator, device_id, description)
|
||||
for device_id, device in coordinator.data.devices.items()
|
||||
for device_id in coordinator.new_devices
|
||||
for description in NUMBER_TYPES
|
||||
if description.key in device
|
||||
if description.key in coordinator.data.devices[device_id]
|
||||
)
|
||||
|
||||
entry.async_on_unload(coordinator.async_add_listener(_add_entities))
|
||||
|
||||
_add_entities()
|
||||
entry.async_on_unload(coordinator.async_add_listener(_add_entities))
|
||||
|
||||
|
||||
class PlugwiseNumberEntity(PlugwiseEntity, NumberEntity):
|
||||
|
|
|
@ -74,14 +74,13 @@ async def async_setup_entry(
|
|||
|
||||
async_add_entities(
|
||||
PlugwiseSelectEntity(coordinator, device_id, description)
|
||||
for device_id, device in coordinator.data.devices.items()
|
||||
for device_id in coordinator.new_devices
|
||||
for description in SELECT_TYPES
|
||||
if description.options_key in device
|
||||
if description.options_key in coordinator.data.devices[device_id]
|
||||
)
|
||||
|
||||
entry.async_on_unload(coordinator.async_add_listener(_add_entities))
|
||||
|
||||
_add_entities()
|
||||
entry.async_on_unload(coordinator.async_add_listener(_add_entities))
|
||||
|
||||
|
||||
class PlugwiseSelectEntity(PlugwiseEntity, SelectEntity):
|
||||
|
|
|
@ -414,27 +414,16 @@ async def async_setup_entry(
|
|||
if not coordinator.new_devices:
|
||||
return
|
||||
|
||||
entities: list[PlugwiseSensorEntity] = []
|
||||
for device_id, device in coordinator.data.devices.items():
|
||||
if not (sensors := device.get("sensors")):
|
||||
continue
|
||||
for description in SENSORS:
|
||||
if description.key not in sensors:
|
||||
continue
|
||||
|
||||
entities.append(
|
||||
PlugwiseSensorEntity(
|
||||
coordinator,
|
||||
device_id,
|
||||
description,
|
||||
)
|
||||
)
|
||||
|
||||
async_add_entities(entities)
|
||||
|
||||
entry.async_on_unload(coordinator.async_add_listener(_add_entities))
|
||||
async_add_entities(
|
||||
PlugwiseSensorEntity(coordinator, device_id, description)
|
||||
for device_id in coordinator.new_devices
|
||||
if (sensors := coordinator.data.devices[device_id].get("sensors"))
|
||||
for description in SENSORS
|
||||
if description.key in sensors
|
||||
)
|
||||
|
||||
_add_entities()
|
||||
entry.async_on_unload(coordinator.async_add_listener(_add_entities))
|
||||
|
||||
|
||||
class PlugwiseSensorEntity(PlugwiseEntity, SensorEntity):
|
||||
|
|
|
@ -68,22 +68,16 @@ async def async_setup_entry(
|
|||
if not coordinator.new_devices:
|
||||
return
|
||||
|
||||
entities: list[PlugwiseSwitchEntity] = []
|
||||
for device_id, device in coordinator.data.devices.items():
|
||||
if not (switches := device.get("switches")):
|
||||
continue
|
||||
for description in SWITCHES:
|
||||
if description.key not in switches:
|
||||
continue
|
||||
entities.append(
|
||||
PlugwiseSwitchEntity(coordinator, device_id, description)
|
||||
)
|
||||
|
||||
async_add_entities(entities)
|
||||
|
||||
entry.async_on_unload(coordinator.async_add_listener(_add_entities))
|
||||
async_add_entities(
|
||||
PlugwiseSwitchEntity(coordinator, device_id, description)
|
||||
for device_id in coordinator.new_devices
|
||||
if (switches := coordinator.data.devices[device_id].get("switches"))
|
||||
for description in SWITCHES
|
||||
if description.key in switches
|
||||
)
|
||||
|
||||
_add_entities()
|
||||
entry.async_on_unload(coordinator.async_add_listener(_add_entities))
|
||||
|
||||
|
||||
class PlugwiseSwitchEntity(PlugwiseEntity, SwitchEntity):
|
||||
|
|
Loading…
Add table
Reference in a new issue