Small cleanup in Plugwise binary sensors (#65738)

This commit is contained in:
Franck Nijhof 2022-02-05 08:44:31 +01:00 committed by GitHub
parent 313387fda5
commit 6871271e73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,10 +1,13 @@
"""Plugwise Binary Sensor component for Home Assistant.""" """Plugwise Binary Sensor component for Home Assistant."""
import logging import logging
from plugwise.smile import Smile
from homeassistant.components.binary_sensor import BinarySensorEntity from homeassistant.components.binary_sensor import BinarySensorEntity
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .const import ( from .const import (
COORDINATOR, COORDINATOR,
@ -33,8 +36,10 @@ async def async_setup_entry(
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up the Smile binary_sensors from a config entry.""" """Set up the Smile binary_sensors from a config entry."""
api = hass.data[DOMAIN][config_entry.entry_id]["api"] api: Smile = hass.data[DOMAIN][config_entry.entry_id]["api"]
coordinator = hass.data[DOMAIN][config_entry.entry_id][COORDINATOR] coordinator: DataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id][
COORDINATOR
]
entities: list[BinarySensorEntity] = [] entities: list[BinarySensorEntity] = []
is_thermostat = api.single_master_thermostat() is_thermostat = api.single_master_thermostat()
@ -72,17 +77,21 @@ async def async_setup_entry(
async_add_entities(entities, True) async_add_entities(entities, True)
class SmileBinarySensor(SmileGateway): class SmileBinarySensor(SmileGateway, BinarySensorEntity):
"""Represent Smile Binary Sensors.""" """Represent Smile Binary Sensors."""
def __init__(self, api, coordinator, name, dev_id, binary_sensor): def __init__(
self,
api: Smile,
coordinator: DataUpdateCoordinator,
name: str,
dev_id: str,
binary_sensor: str,
) -> None:
"""Initialise the binary_sensor.""" """Initialise the binary_sensor."""
super().__init__(api, coordinator, name, dev_id) super().__init__(api, coordinator, name, dev_id)
self._binary_sensor = binary_sensor self._binary_sensor = binary_sensor
self._attr_is_on = False
self._icon = None
self._is_on = False
if dev_id == self._api.heater_id: if dev_id == self._api.heater_id:
self._entity_name = "Auxiliary" self._entity_name = "Auxiliary"
@ -95,27 +104,17 @@ class SmileBinarySensor(SmileGateway):
self._unique_id = f"{dev_id}-{binary_sensor}" self._unique_id = f"{dev_id}-{binary_sensor}"
@property
def icon(self):
"""Return the icon of this entity."""
return self._icon
@property
def is_on(self):
"""Return true if the binary sensor is on."""
return self._is_on
@callback @callback
def _async_process_data(self): def _async_process_data(self) -> None:
"""Update the entity.""" """Update the entity."""
raise NotImplementedError raise NotImplementedError
class PwBinarySensor(SmileBinarySensor, BinarySensorEntity): class PwBinarySensor(SmileBinarySensor):
"""Representation of a Plugwise binary_sensor.""" """Representation of a Plugwise binary_sensor."""
@callback @callback
def _async_process_data(self): def _async_process_data(self) -> None:
"""Update the entity.""" """Update the entity."""
if not (data := self._api.get_device_data(self._dev_id)): if not (data := self._api.get_device_data(self._dev_id)):
_LOGGER.error("Received no data for device %s", self._binary_sensor) _LOGGER.error("Received no data for device %s", self._binary_sensor)
@ -126,50 +125,54 @@ class PwBinarySensor(SmileBinarySensor, BinarySensorEntity):
self.async_write_ha_state() self.async_write_ha_state()
return return
self._is_on = data[self._binary_sensor] self._attr_is_on = data[self._binary_sensor]
if self._binary_sensor == "dhw_state": if self._binary_sensor == "dhw_state":
self._icon = FLOW_ON_ICON if self._is_on else FLOW_OFF_ICON self._attr_icon = FLOW_ON_ICON if self._attr_is_on else FLOW_OFF_ICON
if self._binary_sensor == "slave_boiler_state": if self._binary_sensor == "slave_boiler_state":
self._icon = FLAME_ICON if self._is_on else IDLE_ICON self._attr_icon = FLAME_ICON if self._attr_is_on else IDLE_ICON
self.async_write_ha_state() self.async_write_ha_state()
class PwNotifySensor(SmileBinarySensor, BinarySensorEntity): class PwNotifySensor(SmileBinarySensor):
"""Representation of a Plugwise Notification binary_sensor.""" """Representation of a Plugwise Notification binary_sensor."""
def __init__(self, api, coordinator, name, dev_id, binary_sensor): def __init__(
self,
api: Smile,
coordinator: DataUpdateCoordinator,
name: str,
dev_id: str,
binary_sensor: str,
) -> None:
"""Set up the Plugwise API.""" """Set up the Plugwise API."""
super().__init__(api, coordinator, name, dev_id, binary_sensor) super().__init__(api, coordinator, name, dev_id, binary_sensor)
self._attributes = {} self._attr_extra_state_attributes = {}
@property
def extra_state_attributes(self):
"""Return the state attributes."""
return self._attributes
@callback @callback
def _async_process_data(self): def _async_process_data(self) -> None:
"""Update the entity.""" """Update the entity."""
notify = self._api.notifications notify = self._api.notifications
for severity in SEVERITIES: for severity in SEVERITIES:
self._attributes[f"{severity}_msg"] = [] self._attr_extra_state_attributes[f"{severity}_msg"] = []
self._is_on = False self._attr_is_on = False
self._icon = NO_NOTIFICATION_ICON self._attr_icon = NO_NOTIFICATION_ICON
if notify: if notify:
self._is_on = True self._attr_is_on = True
self._icon = NOTIFICATION_ICON self._attr_icon = NOTIFICATION_ICON
for details in notify.values(): for details in notify.values():
for msg_type, msg in details.items(): for msg_type, msg in details.items():
if msg_type not in SEVERITIES: if msg_type not in SEVERITIES:
msg_type = "other" msg_type = "other"
self._attributes[f"{msg_type.lower()}_msg"].append(msg) self._attr_extra_state_attributes[f"{msg_type.lower()}_msg"].append(
msg
)
self.async_write_ha_state() self.async_write_ha_state()