1 """Support for OSO Energy sensors."""
3 from collections.abc
import Callable
4 from dataclasses
import dataclass
6 from apyosoenergyapi
import OSOEnergy
7 from apyosoenergyapi.helper.const
import OSOEnergySensorData
12 SensorEntityDescription,
26 from .const
import DOMAIN
27 from .entity
import OSOEnergyEntity
30 @dataclass(frozen=True, kw_only=True)
32 """Class describing OSO Energy heater sensor entities."""
34 value_fn: Callable[[OSOEnergy], StateType]
37 SENSOR_TYPES: dict[str, OSOEnergySensorEntityDescription] = {
40 translation_key=
"heater_mode",
41 device_class=SensorDeviceClass.ENUM,
52 value_fn=
lambda entity_data: entity_data.state.lower(),
55 key=
"optimization_mode",
56 translation_key=
"optimization_mode",
57 device_class=SensorDeviceClass.ENUM,
58 options=[
"off",
"oso",
"gridcompany",
"smartcompany",
"advanced"],
59 value_fn=
lambda entity_data: entity_data.state.lower(),
63 device_class=SensorDeviceClass.POWER,
64 state_class=SensorStateClass.MEASUREMENT,
65 native_unit_of_measurement=UnitOfPower.KILO_WATT,
66 value_fn=
lambda entity_data: entity_data.state,
69 key=
"tapping_capacity",
70 translation_key=
"tapping_capacity",
71 device_class=SensorDeviceClass.ENERGY,
72 native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
73 value_fn=
lambda entity_data: entity_data.state,
76 key=
"capacity_mixed_water_40",
77 translation_key=
"capacity_mixed_water_40",
78 device_class=SensorDeviceClass.VOLUME,
79 native_unit_of_measurement=UnitOfVolume.LITERS,
80 value_fn=
lambda entity_data: entity_data.state,
84 translation_key=
"v40_min",
85 device_class=SensorDeviceClass.VOLUME,
86 native_unit_of_measurement=UnitOfVolume.LITERS,
87 value_fn=
lambda entity_data: entity_data.state,
91 translation_key=
"v40_level_min",
92 device_class=SensorDeviceClass.VOLUME,
93 native_unit_of_measurement=UnitOfVolume.LITERS,
94 value_fn=
lambda entity_data: entity_data.state,
98 translation_key=
"v40_level_max",
99 device_class=SensorDeviceClass.VOLUME,
100 native_unit_of_measurement=UnitOfVolume.LITERS,
101 value_fn=
lambda entity_data: entity_data.state,
105 device_class=SensorDeviceClass.VOLUME,
106 native_unit_of_measurement=UnitOfVolume.LITERS,
107 value_fn=
lambda entity_data: entity_data.state,
110 key=
"temperature_top",
111 translation_key=
"temperature_top",
112 device_class=SensorDeviceClass.TEMPERATURE,
113 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
114 value_fn=
lambda entity_data: entity_data.state,
117 key=
"temperature_mid",
118 translation_key=
"temperature_mid",
119 device_class=SensorDeviceClass.TEMPERATURE,
120 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
121 value_fn=
lambda entity_data: entity_data.state,
124 key=
"temperature_low",
125 translation_key=
"temperature_low",
126 device_class=SensorDeviceClass.TEMPERATURE,
127 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
128 value_fn=
lambda entity_data: entity_data.state,
131 key=
"temperature_one",
132 translation_key=
"temperature_one",
133 device_class=SensorDeviceClass.TEMPERATURE,
134 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
135 value_fn=
lambda entity_data: entity_data.state,
141 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
143 """Set up OSO Energy sensor."""
144 osoenergy = hass.data[DOMAIN][entry.entry_id]
145 devices = osoenergy.session.device_list.get(
"sensor")
149 sensor_type = dev.osoEnergyType.lower()
150 if sensor_type
in SENSOR_TYPES:
159 """OSO Energy Sensor Entity."""
161 entity_description: OSOEnergySensorEntityDescription
166 description: OSOEnergySensorEntityDescription,
167 entity_data: OSOEnergySensorData,
169 """Initialize the OSO Energy sensor."""
170 super().
__init__(instance, entity_data)
172 device_id = entity_data.device_id
178 """Return the state of the sensor."""
182 """Update all data for OSO Energy."""
183 await self.osoenergy.session.update_data()
None __init__(self, OSOEnergy instance, OSOEnergySensorEntityDescription description, OSOEnergySensorData entity_data)
StateType native_value(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)