Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Support for OSO Energy binary sensors."""
2 
3 from collections.abc import Callable
4 from dataclasses import dataclass
5 
6 from apyosoenergyapi import OSOEnergy
7 from apyosoenergyapi.helper.const import OSOEnergyBinarySensorData
8 
10  BinarySensorEntity,
11  BinarySensorEntityDescription,
12 )
13 from homeassistant.config_entries import ConfigEntry
14 from homeassistant.core import HomeAssistant
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 
17 from .const import DOMAIN
18 from .entity import OSOEnergyEntity
19 
20 
21 @dataclass(frozen=True, kw_only=True)
23  """Class describing OSO Energy heater binary sensor entities."""
24 
25  value_fn: Callable[[OSOEnergy], bool]
26 
27 
28 SENSOR_TYPES: dict[str, OSOEnergyBinarySensorEntityDescription] = {
30  key="power_save",
31  translation_key="power_save",
32  value_fn=lambda entity_data: entity_data.state,
33  ),
35  key="extra_energy",
36  translation_key="extra_energy",
37  value_fn=lambda entity_data: entity_data.state,
38  ),
40  key="heating",
41  translation_key="heating",
42  value_fn=lambda entity_data: entity_data.state,
43  ),
44 }
45 
46 
48  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
49 ) -> None:
50  """Set up OSO Energy binary sensor."""
51  osoenergy: OSOEnergy = hass.data[DOMAIN][entry.entry_id]
52  entities = [
53  OSOEnergyBinarySensor(osoenergy, sensor_type, dev)
54  for dev in osoenergy.session.device_list.get("binary_sensor", [])
55  if (sensor_type := SENSOR_TYPES.get(dev.osoEnergyType.lower()))
56  ]
57 
58  async_add_entities(entities, True)
59 
60 
62  OSOEnergyEntity[OSOEnergyBinarySensorData], BinarySensorEntity
63 ):
64  """OSO Energy Sensor Entity."""
65 
66  entity_description: OSOEnergyBinarySensorEntityDescription
67 
68  def __init__(
69  self,
70  instance: OSOEnergy,
71  description: OSOEnergyBinarySensorEntityDescription,
72  entity_data: OSOEnergyBinarySensorData,
73  ) -> None:
74  """Set up OSO Energy binary sensor."""
75  super().__init__(instance, entity_data)
76 
77  device_id = entity_data.device_id
78  self._attr_unique_id_attr_unique_id = f"{device_id}_{description.key}"
79  self.entity_descriptionentity_description = description
80 
81  @property
82  def is_on(self) -> bool | None:
83  """Return the state of the sensor."""
84  return self.entity_descriptionentity_description.value_fn(self.entity_dataentity_data)
85 
86  async def async_update(self) -> None:
87  """Update all data for OSO Energy."""
88  await self.osoenergy.session.update_data()
89  self.entity_dataentity_data = await self.osoenergy.binary_sensor.get_sensor(
90  self.entity_dataentity_data
91  )
None __init__(self, OSOEnergy instance, OSOEnergyBinarySensorEntityDescription description, OSOEnergyBinarySensorData entity_data)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)