1 """Platform for sensor integration."""
3 from __future__
import annotations
5 from devolo_home_control_api.devices.zwave
import Zwave
6 from devolo_home_control_api.homecontrol
import HomeControl
17 from .
import DevoloHomeControlConfigEntry
18 from .entity
import DevoloDeviceEntity
20 DEVICE_CLASS_MAPPING = {
21 "battery": SensorDeviceClass.BATTERY,
22 "temperature": SensorDeviceClass.TEMPERATURE,
23 "humidity": SensorDeviceClass.HUMIDITY,
24 "current": SensorDeviceClass.POWER,
25 "total": SensorDeviceClass.ENERGY,
26 "voltage": SensorDeviceClass.VOLTAGE,
29 STATE_CLASS_MAPPING = {
30 "battery": SensorStateClass.MEASUREMENT,
31 "temperature": SensorStateClass.MEASUREMENT,
32 "light": SensorStateClass.MEASUREMENT,
33 "humidity": SensorStateClass.MEASUREMENT,
34 "current": SensorStateClass.MEASUREMENT,
35 "total": SensorStateClass.TOTAL_INCREASING,
36 "voltage": SensorStateClass.MEASUREMENT,
42 entry: DevoloHomeControlConfigEntry,
43 async_add_entities: AddEntitiesCallback,
45 """Get all sensor devices and setup them via config entry."""
46 entities: list[SensorEntity] = []
48 for gateway
in entry.runtime_data:
52 device_instance=device,
53 element_uid=multi_level_sensor,
55 for device
in gateway.multi_level_sensor_devices
56 for multi_level_sensor
in device.multi_level_sensor_property
61 device_instance=device,
62 element_uid=consumption,
63 consumption=consumption_type,
65 for device
in gateway.devices.values()
66 if hasattr(device,
"consumption_property")
67 for consumption
in device.consumption_property
68 for consumption_type
in (
"current",
"total")
73 device_instance=device,
74 element_uid=f
"devolo.BatterySensor:{device.uid}",
76 for device
in gateway.devices.values()
77 if hasattr(device,
"battery_level")
84 """Abstract representation of a multi level sensor within devolo Home Control."""
88 """Return the state of the sensor."""
93 """Representation of a generic multi level sensor within devolo Home Control."""
97 homecontrol: HomeControl,
98 device_instance: Zwave,
101 """Initialize a devolo multi level sensor."""
107 homecontrol=homecontrol,
108 device_instance=device_instance,
109 element_uid=element_uid,
122 if element_uid.startswith(
"devolo.VoltageMultiLevelSensor:"):
127 """Representation of a battery entity within devolo Home Control."""
129 _attr_entity_category = EntityCategory.DIAGNOSTIC
130 _attr_native_unit_of_measurement = PERCENTAGE
131 _attr_name =
"Battery level"
132 _attr_device_class = SensorDeviceClass.BATTERY
133 _attr_state_class = SensorStateClass.MEASUREMENT
136 self, homecontrol: HomeControl, device_instance: Zwave, element_uid: str
138 """Initialize a battery sensor."""
141 homecontrol=homecontrol,
142 device_instance=device_instance,
143 element_uid=element_uid,
150 """Representation of a consumption entity within devolo Home Control."""
154 homecontrol: HomeControl,
155 device_instance: Zwave,
159 """Initialize a devolo consumption sensor."""
162 homecontrol=homecontrol,
163 device_instance=device_instance,
164 element_uid=element_uid,
171 device_instance.consumption_property[element_uid], f
"{consumption}_unit"
175 device_instance.consumption_property[element_uid], consumption
178 self.
_attr_name_attr_name = f
"{consumption.capitalize()} consumption"
182 """Return the unique ID of the entity.
184 As both sensor types share the same element_uid we need to extend original
185 self._attr_unique_id to be really unique.
187 return f
"{self._attr_unique_id}_{self._sensor_type}"
189 def _sync(self, message: tuple) ->
None:
190 """Update the consumption sensor state."""
None _generic_message(self, tuple message)
None __init__(self, HomeControl homecontrol, Zwave device_instance, str element_uid)
None __init__(self, HomeControl homecontrol, Zwave device_instance, str element_uid, str consumption)
_attr_native_unit_of_measurement
None _sync(self, tuple message)
_attr_native_unit_of_measurement
None __init__(self, HomeControl homecontrol, Zwave device_instance, str element_uid)
_multi_level_sensor_property
_attr_entity_registry_enabled_default
None schedule_update_ha_state(self, bool force_refresh=False)
None async_setup_entry(HomeAssistant hass, DevoloHomeControlConfigEntry entry, AddEntitiesCallback async_add_entities)