mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 16:57:53 +00:00
Remove duplicate code in livisi coordinator (#90227)
* Simplify coordinator * remove window sensor specific code (isOpen) * parameter order, type hinta * Update homeassistant/components/livisi/coordinator.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update homeassistant/components/livisi/coordinator.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> --------- Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
This commit is contained in:
parent
ee74e21541
commit
3157579992
@ -99,14 +99,15 @@ class LivisiClimate(LivisiEntity, ClimateEntity):
|
||||
|
||||
await super().async_added_to_hass()
|
||||
|
||||
target_temperature = await self.coordinator.async_get_vrcc_target_temperature(
|
||||
self._target_temperature_capability
|
||||
target_temperature = await self.coordinator.async_get_device_state(
|
||||
self._target_temperature_capability,
|
||||
"setpointTemperature" if self.coordinator.is_avatar else "pointTemperature",
|
||||
)
|
||||
temperature = await self.coordinator.async_get_vrcc_temperature(
|
||||
self._temperature_capability
|
||||
temperature = await self.coordinator.async_get_device_state(
|
||||
self._temperature_capability, "temperature"
|
||||
)
|
||||
humidity = await self.coordinator.async_get_vrcc_humidity(
|
||||
self._humidity_capability
|
||||
humidity = await self.coordinator.async_get_device_state(
|
||||
self._humidity_capability, "humidity"
|
||||
)
|
||||
if temperature is None:
|
||||
self._attr_current_temperature = None
|
||||
|
@ -58,6 +58,10 @@ class LivisiDataUpdateCoordinator(DataUpdateCoordinator[list[dict[str, Any]]]):
|
||||
except ClientConnectorError as exc:
|
||||
raise UpdateFailed("Failed to get LIVISI the devices") from exc
|
||||
|
||||
def _async_dispatcher_send(self, event: str, source: str, data: Any) -> None:
|
||||
if data is not None:
|
||||
async_dispatcher_send(self.hass, f"{event}_{source}", data)
|
||||
|
||||
async def async_setup(self) -> None:
|
||||
"""Set up the Livisi Smart Home Controller."""
|
||||
if not self.aiolivisi.livisi_connection_data:
|
||||
@ -83,44 +87,14 @@ class LivisiDataUpdateCoordinator(DataUpdateCoordinator[list[dict[str, Any]]]):
|
||||
"""Set the discovered devices list."""
|
||||
return await self.aiolivisi.async_get_devices()
|
||||
|
||||
async def async_get_pss_state(self, capability: str) -> bool | None:
|
||||
"""Set the PSS state."""
|
||||
response: dict[str, Any] | None = await self.aiolivisi.async_get_device_state(
|
||||
async def async_get_device_state(self, capability: str, key: str) -> Any | None:
|
||||
"""Get state from livisi devices."""
|
||||
response: dict[str, Any] = await self.aiolivisi.async_get_device_state(
|
||||
capability[1:]
|
||||
)
|
||||
if response is None:
|
||||
return None
|
||||
on_state = response["onState"]
|
||||
return on_state["value"]
|
||||
|
||||
async def async_get_vrcc_target_temperature(self, capability: str) -> float | None:
|
||||
"""Get the target temperature of the climate device."""
|
||||
response: dict[str, Any] | None = await self.aiolivisi.async_get_device_state(
|
||||
capability[1:]
|
||||
)
|
||||
if response is None:
|
||||
return None
|
||||
if self.is_avatar:
|
||||
return response["setpointTemperature"]["value"]
|
||||
return response["pointTemperature"]["value"]
|
||||
|
||||
async def async_get_vrcc_temperature(self, capability: str) -> float | None:
|
||||
"""Get the temperature of the climate device."""
|
||||
response: dict[str, Any] | None = await self.aiolivisi.async_get_device_state(
|
||||
capability[1:]
|
||||
)
|
||||
if response is None:
|
||||
return None
|
||||
return response["temperature"]["value"]
|
||||
|
||||
async def async_get_vrcc_humidity(self, capability: str) -> int | None:
|
||||
"""Get the humidity of the climate device."""
|
||||
response: dict[str, Any] | None = await self.aiolivisi.async_get_device_state(
|
||||
capability[1:]
|
||||
)
|
||||
if response is None:
|
||||
return None
|
||||
return response["humidity"]["value"]
|
||||
return response.get(key, {}).get("value")
|
||||
|
||||
async def async_set_all_rooms(self) -> None:
|
||||
"""Set the room list."""
|
||||
@ -132,34 +106,20 @@ class LivisiDataUpdateCoordinator(DataUpdateCoordinator[list[dict[str, Any]]]):
|
||||
|
||||
def on_data(self, event_data: LivisiEvent) -> None:
|
||||
"""Define a handler to fire when the data is received."""
|
||||
if event_data.onState is not None:
|
||||
async_dispatcher_send(
|
||||
self.hass,
|
||||
f"{LIVISI_STATE_CHANGE}_{event_data.source}",
|
||||
event_data.onState,
|
||||
)
|
||||
if event_data.vrccData is not None:
|
||||
async_dispatcher_send(
|
||||
self.hass,
|
||||
f"{LIVISI_STATE_CHANGE}_{event_data.source}",
|
||||
event_data.vrccData,
|
||||
)
|
||||
if event_data.isReachable is not None:
|
||||
async_dispatcher_send(
|
||||
self.hass,
|
||||
f"{LIVISI_REACHABILITY_CHANGE}_{event_data.source}",
|
||||
event_data.isReachable,
|
||||
)
|
||||
self._async_dispatcher_send(
|
||||
LIVISI_STATE_CHANGE, event_data.source, event_data.onState
|
||||
)
|
||||
self._async_dispatcher_send(
|
||||
LIVISI_STATE_CHANGE, event_data.source, event_data.vrccData
|
||||
)
|
||||
self._async_dispatcher_send(
|
||||
LIVISI_REACHABILITY_CHANGE, event_data.source, event_data.isReachable
|
||||
)
|
||||
|
||||
async def on_close(self) -> None:
|
||||
"""Define a handler to fire when the websocket is closed."""
|
||||
for device_id in self.devices:
|
||||
is_reachable: bool = False
|
||||
async_dispatcher_send(
|
||||
self.hass,
|
||||
f"{LIVISI_REACHABILITY_CHANGE}_{device_id}",
|
||||
is_reachable,
|
||||
)
|
||||
self._async_dispatcher_send(LIVISI_REACHABILITY_CHANGE, device_id, False)
|
||||
|
||||
await self.websocket.connect(self.on_data, self.on_close, self.port)
|
||||
|
||||
|
@ -81,7 +81,9 @@ class LivisiSwitch(LivisiEntity, SwitchEntity):
|
||||
"""Register callbacks."""
|
||||
await super().async_added_to_hass()
|
||||
|
||||
response = await self.coordinator.async_get_pss_state(self._capability_id)
|
||||
response = await self.coordinator.async_get_device_state(
|
||||
self._capability_id, "onState"
|
||||
)
|
||||
if response is None:
|
||||
self._attr_is_on = False
|
||||
self._attr_available = False
|
||||
|
Loading…
x
Reference in New Issue
Block a user