Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Platform for binary sensor integration."""
2 
3 from __future__ import annotations
4 
5 import logging
6 
7 from laundrify_aio import LaundrifyDevice
8 
10  BinarySensorDeviceClass,
11  BinarySensorEntity,
12 )
13 from homeassistant.config_entries import ConfigEntry
14 from homeassistant.core import HomeAssistant, callback
15 from homeassistant.helpers.device_registry import DeviceInfo
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 from homeassistant.helpers.update_coordinator import CoordinatorEntity
18 
19 from .const import DOMAIN, MANUFACTURER, MODELS
20 from .coordinator import LaundrifyUpdateCoordinator
21 
22 _LOGGER = logging.getLogger(__name__)
23 
24 
26  hass: HomeAssistant, config: ConfigEntry, async_add_entities: AddEntitiesCallback
27 ) -> None:
28  """Set up sensors from a config entry created in the integrations UI."""
29 
30  coordinator: LaundrifyUpdateCoordinator = hass.data[DOMAIN][config.entry_id][
31  "coordinator"
32  ]
33 
35  LaundrifyPowerPlug(coordinator, device) for device in coordinator.data.values()
36  )
37 
38 
40  CoordinatorEntity[LaundrifyUpdateCoordinator], BinarySensorEntity
41 ):
42  """Representation of a laundrify Power Plug."""
43 
44  _attr_device_class = BinarySensorDeviceClass.RUNNING
45  _attr_unique_id: str
46  _attr_has_entity_name = True
47  _attr_translation_key = "wash_cycle"
48 
49  def __init__(
50  self, coordinator: LaundrifyUpdateCoordinator, device: LaundrifyDevice
51  ) -> None:
52  """Pass coordinator to CoordinatorEntity."""
53  super().__init__(coordinator)
54  self._device_device = device
55  unique_id = device.id
56  self._attr_unique_id_attr_unique_id = unique_id
57  self._attr_device_info_attr_device_info = DeviceInfo(
58  identifiers={(DOMAIN, unique_id)},
59  name=device.name,
60  manufacturer=MANUFACTURER,
61  model=MODELS[device.model],
62  sw_version=device.firmwareVersion,
63  configuration_url=f"http://{device.internalIP}",
64  )
65 
66  @property
67  def available(self) -> bool:
68  """Check if the device is available."""
69  return (
70  self._attr_unique_id_attr_unique_id in self.coordinator.data
71  and self.coordinator.last_update_success
72  )
73 
74  @property
75  def is_on(self) -> bool:
76  """Return entity state."""
77  return bool(self._device_device.status == "ON")
78 
79  @callback
80  def _handle_coordinator_update(self) -> None:
81  """Handle updated data from the coordinator."""
82  self._device_device = self.coordinator.data[self._attr_unique_id_attr_unique_id]
None __init__(self, LaundrifyUpdateCoordinator coordinator, LaundrifyDevice device)
None async_setup_entry(HomeAssistant hass, ConfigEntry config, AddEntitiesCallback async_add_entities)