Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for ADS sensors."""
2 
3 from __future__ import annotations
4 
5 import voluptuous as vol
6 
8  CONF_STATE_CLASS,
9  DEVICE_CLASSES_SCHEMA as SENSOR_DEVICE_CLASSES_SCHEMA,
10  PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA,
11  STATE_CLASSES_SCHEMA as SENSOR_STATE_CLASSES_SCHEMA,
12  SensorDeviceClass,
13  SensorEntity,
14  SensorStateClass,
15 )
16 from homeassistant.const import CONF_DEVICE_CLASS, CONF_NAME, CONF_UNIT_OF_MEASUREMENT
17 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, StateType
21 
22 from . import ADS_TYPEMAP, CONF_ADS_FACTOR, CONF_ADS_TYPE
23 from .const import CONF_ADS_VAR, DATA_ADS, STATE_KEY_STATE, AdsType
24 from .entity import AdsEntity
25 from .hub import AdsHub
26 
27 DEFAULT_NAME = "ADS sensor"
28 
29 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
30  {
31  vol.Required(CONF_ADS_VAR): cv.string,
32  vol.Optional(CONF_ADS_FACTOR): cv.positive_int,
33  vol.Optional(CONF_ADS_TYPE, default=AdsType.INT): vol.All(
34  vol.Coerce(AdsType),
35  vol.In(
36  [
37  AdsType.BOOL,
38  AdsType.BYTE,
39  AdsType.INT,
40  AdsType.UINT,
41  AdsType.SINT,
42  AdsType.USINT,
43  AdsType.DINT,
44  AdsType.UDINT,
45  AdsType.WORD,
46  AdsType.DWORD,
47  AdsType.LREAL,
48  AdsType.REAL,
49  ]
50  ),
51  ),
52  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
53  vol.Optional(CONF_DEVICE_CLASS): SENSOR_DEVICE_CLASSES_SCHEMA,
54  vol.Optional(CONF_STATE_CLASS): SENSOR_STATE_CLASSES_SCHEMA,
55  vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,
56  }
57 )
58 
59 
61  hass: HomeAssistant,
62  config: ConfigType,
63  add_entities: AddEntitiesCallback,
64  discovery_info: DiscoveryInfoType | None = None,
65 ) -> None:
66  """Set up an ADS sensor device."""
67  ads_hub = hass.data[DATA_ADS]
68 
69  ads_var: str = config[CONF_ADS_VAR]
70  ads_type: AdsType = config[CONF_ADS_TYPE]
71  name: str = config[CONF_NAME]
72  factor: int | None = config.get(CONF_ADS_FACTOR)
73  device_class: SensorDeviceClass | None = config.get(CONF_DEVICE_CLASS)
74  state_class: SensorStateClass | None = config.get(CONF_STATE_CLASS)
75  unit_of_measurement: str | None = config.get(CONF_UNIT_OF_MEASUREMENT)
76 
77  entity = AdsSensor(
78  ads_hub,
79  ads_var,
80  ads_type,
81  name,
82  factor,
83  device_class,
84  state_class,
85  unit_of_measurement,
86  )
87 
88  add_entities([entity])
89 
90 
92  """Representation of an ADS sensor entity."""
93 
94  def __init__(
95  self,
96  ads_hub: AdsHub,
97  ads_var: str,
98  ads_type: AdsType,
99  name: str,
100  factor: int | None,
101  device_class: SensorDeviceClass | None,
102  state_class: SensorStateClass | None,
103  unit_of_measurement: str | None,
104  ) -> None:
105  """Initialize AdsSensor entity."""
106  super().__init__(ads_hub, name, ads_var)
107  self._ads_type_ads_type = ads_type
108  self._factor_factor = factor
109  self._attr_device_class_attr_device_class = device_class
110  self._attr_state_class_attr_state_class = state_class
111  self._attr_native_unit_of_measurement_attr_native_unit_of_measurement = unit_of_measurement
112 
113  async def async_added_to_hass(self) -> None:
114  """Register device notification."""
115  await self.async_initialize_deviceasync_initialize_device(
116  self._ads_var_ads_var,
117  ADS_TYPEMAP[self._ads_type_ads_type],
118  STATE_KEY_STATE,
119  self._factor_factor,
120  )
121 
122  @property
123  def native_value(self) -> StateType:
124  """Return the state of the device."""
125  return self._state_dict[STATE_KEY_STATE]
None async_initialize_device(self, str ads_var, type plctype, str state_key=STATE_KEY_STATE, int|None factor=None)
Definition: entity.py:37
None __init__(self, AdsHub ads_hub, str ads_var, AdsType ads_type, str name, int|None factor, SensorDeviceClass|None device_class, SensorStateClass|None state_class, str|None unit_of_measurement)
Definition: sensor.py:104
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: sensor.py:65
def add_entities(account, async_add_entities, tracked)
Definition: sensor.py:40