Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Velbus sensors."""
2 
3 from __future__ import annotations
4 
5 from velbusaio.channels import ButtonCounter, LightSensor, SensorNumber, Temperature
6 
8  SensorDeviceClass,
9  SensorEntity,
10  SensorStateClass,
11 )
12 from homeassistant.config_entries import ConfigEntry
13 from homeassistant.core import HomeAssistant
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 
16 from .const import DOMAIN
17 from .entity import VelbusEntity
18 
19 
21  hass: HomeAssistant,
22  entry: ConfigEntry,
23  async_add_entities: AddEntitiesCallback,
24 ) -> None:
25  """Set up Velbus switch based on config_entry."""
26  await hass.data[DOMAIN][entry.entry_id]["tsk"]
27  cntrl = hass.data[DOMAIN][entry.entry_id]["cntrl"]
28  entities = []
29  for channel in cntrl.get_all("sensor"):
30  entities.append(VelbusSensor(channel))
31  if channel.is_counter_channel():
32  entities.append(VelbusSensor(channel, True))
33  async_add_entities(entities)
34 
35 
37  """Representation of a sensor."""
38 
39  _channel: ButtonCounter | Temperature | LightSensor | SensorNumber
40 
41  def __init__(
42  self,
43  channel: ButtonCounter | Temperature | LightSensor | SensorNumber,
44  counter: bool = False,
45  ) -> None:
46  """Initialize a sensor Velbus entity."""
47  super().__init__(channel)
48  self._is_counter: bool = counter
49  if self._is_counter:
50  self._attr_device_class_attr_device_class = SensorDeviceClass.ENERGY
51  self._attr_icon_attr_icon = "mdi:counter"
52  self._attr_name_attr_name_attr_name = f"{self._attr_name}-counter"
53  self._attr_state_class_attr_state_class = SensorStateClass.TOTAL_INCREASING
54  self._attr_unique_id_attr_unique_id_attr_unique_id = f"{self._attr_unique_id}-counter"
55  elif channel.is_counter_channel():
56  self._attr_device_class_attr_device_class = SensorDeviceClass.POWER
57  self._attr_state_class_attr_state_class = SensorStateClass.MEASUREMENT
58  elif channel.is_temperature():
59  self._attr_device_class_attr_device_class = SensorDeviceClass.TEMPERATURE
60  self._attr_state_class_attr_state_class = SensorStateClass.MEASUREMENT
61  else:
62  self._attr_state_class_attr_state_class = SensorStateClass.MEASUREMENT
63  # unit
64  if self._is_counter:
65  self._attr_native_unit_of_measurement_attr_native_unit_of_measurement = channel.get_counter_unit()
66  else:
67  self._attr_native_unit_of_measurement_attr_native_unit_of_measurement = channel.get_unit()
68 
69  @property
70  def native_value(self) -> float | int | None:
71  """Return the state of the sensor."""
72  if self._is_counter:
73  return float(self._channel_channel.get_counter_state())
74  return float(self._channel_channel.get_state())
None __init__(self, ButtonCounter|Temperature|LightSensor|SensorNumber channel, bool counter=False)
Definition: sensor.py:45
str get_state(int upload, int download)
Definition: sensor.py:182
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:24