1 """Support for Modbus Register sensors."""
3 from __future__
import annotations
5 from datetime
import datetime
19 CONF_UNIT_OF_MEASUREMENT,
26 DataUpdateCoordinator,
30 from .const
import CONF_SLAVE_COUNT, CONF_VIRTUAL_COUNT
31 from .entity
import BaseStructPlatform
32 from .modbus
import ModbusHub
34 _LOGGER = logging.getLogger(__name__)
42 async_add_entities: AddEntitiesCallback,
43 discovery_info: DiscoveryInfoType |
None =
None,
45 """Set up the Modbus sensors."""
47 if discovery_info
is None:
50 sensors: list[ModbusRegisterSensor | SlaveSensor] = []
51 hub =
get_hub(hass, discovery_info[CONF_NAME])
52 for entry
in discovery_info[CONF_SENSORS]:
53 slave_count = entry.get(CONF_SLAVE_COUNT,
None)
or entry.get(
58 sensors.extend(await sensor.async_setup_slaves(hass, slave_count, entry))
59 sensors.append(sensor)
64 """Modbus register sensor."""
70 entry: dict[str, Any],
73 """Initialize the modbus register sensor."""
77 self.
_coordinator_coordinator: DataUpdateCoordinator[list[float] |
None] |
None =
None
83 self, hass: HomeAssistant, slave_count: int, entry: dict[str, Any]
84 ) -> list[SlaveSensor]:
85 """Add slaves as needed (1 read for multiple sensors)."""
103 """Handle entity which will be added."""
110 """Update the state of the sensor."""
114 raw_result = await self.
_hub_hub.async_pb_call(
117 if raw_result
is None:
121 self.
_coordinator_coordinator.async_set_updated_data(
None)
135 self.
_coordinator_coordinator.async_set_updated_data(result_array)
138 self.
_coordinator_coordinator.async_set_updated_data(
None)
146 CoordinatorEntity[DataUpdateCoordinator[list[float] |
None]],
150 """Modbus slave register sensor."""
154 coordinator: DataUpdateCoordinator[list[float] |
None],
156 entry: dict[str, Any],
158 """Initialize the Modbus register sensor."""
172 """Handle entity which will be added."""
173 if state := await self.async_get_last_state():
179 """Handle updated data from the coordinator."""
180 result = self.coordinator.data
_attr_native_unit_of_measurement
list[SlaveSensor] async_setup_slaves(self, HomeAssistant hass, int slave_count, dict[str, Any] entry)
None __init__(self, HomeAssistant hass, ModbusHub hub, dict[str, Any] entry, int slave_count)
None async_update(self, datetime|None now=None)
None async_added_to_hass(self)
None _handle_coordinator_update(self)
None __init__(self, DataUpdateCoordinator[list[float]|None] coordinator, int idx, dict[str, Any] entry)
_attr_native_unit_of_measurement
None async_added_to_hass(self)
SensorExtraStoredData|None async_get_last_sensor_data(self)
None async_write_ha_state(self)
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)
ModbusHub get_hub(HomeAssistant hass, str name)