1 """Support for Solax inverter via local API."""
3 from __future__
import annotations
5 from solax.units
import Units
10 SensorEntityDescription,
15 UnitOfElectricCurrent,
16 UnitOfElectricPotential,
27 from .
import SolaxConfigEntry
28 from .const
import DOMAIN, MANUFACTURER
29 from .coordinator
import SolaxDataUpdateCoordinator
34 SENSOR_DESCRIPTIONS: dict[tuple[Units, bool], SensorEntityDescription] = {
36 key=f
"{Units.C}_{False}",
37 device_class=SensorDeviceClass.TEMPERATURE,
38 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
39 state_class=SensorStateClass.MEASUREMENT,
42 key=f
"{Units.KWH}_{False}",
43 device_class=SensorDeviceClass.ENERGY,
44 native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
45 state_class=SensorStateClass.MEASUREMENT,
48 key=f
"{Units.KWH}_{True}",
49 device_class=SensorDeviceClass.ENERGY,
50 native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
51 state_class=SensorStateClass.TOTAL_INCREASING,
54 key=f
"{Units.V}_{False}",
55 device_class=SensorDeviceClass.VOLTAGE,
56 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
57 state_class=SensorStateClass.MEASUREMENT,
60 key=f
"{Units.A}_{False}",
61 device_class=SensorDeviceClass.CURRENT,
62 native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
63 state_class=SensorStateClass.MEASUREMENT,
66 key=f
"{Units.W}_{False}",
67 device_class=SensorDeviceClass.POWER,
68 native_unit_of_measurement=UnitOfPower.WATT,
69 state_class=SensorStateClass.MEASUREMENT,
72 key=f
"{Units.PERCENT}_{False}",
73 device_class=SensorDeviceClass.BATTERY,
74 native_unit_of_measurement=PERCENTAGE,
75 state_class=SensorStateClass.MEASUREMENT,
78 key=f
"{Units.HZ}_{False}",
79 device_class=SensorDeviceClass.FREQUENCY,
80 native_unit_of_measurement=UnitOfFrequency.HERTZ,
81 state_class=SensorStateClass.MEASUREMENT,
84 key=f
"{Units.NONE}_{False}",
91 entry: SolaxConfigEntry,
92 async_add_entities: AddEntitiesCallback,
95 api = entry.runtime_data.api
96 coordinator = entry.runtime_data.coordinator
97 resp = coordinator.data
98 serial = resp.serial_number
99 version = resp.version
100 entities: list[InverterSensorEntity] = []
101 for sensor, (idx, measurement)
in api.inverter.sensor_map().items():
102 description = SENSOR_DESCRIPTIONS[(measurement.unit, measurement.is_monotonic)]
104 uid = f
"{serial}-{idx}"
108 api.inverter.manufacturer,
113 description.native_unit_of_measurement,
114 description.state_class,
115 description.device_class,
122 """Class for a sensor."""
124 _attr_should_poll =
False
128 coordinator: SolaxDataUpdateCoordinator,
135 state_class: SensorStateClass | str |
None,
136 device_class: SensorDeviceClass |
None,
138 """Initialize an inverter sensor."""
146 identifiers={(DOMAIN, serial)},
147 manufacturer=MANUFACTURER,
148 name=f
"{manufacturer} {serial}",
155 """State of this inverter attribute."""
156 return self.coordinator.data.data[self.
keykey]
None __init__(self, SolaxDataUpdateCoordinator coordinator, str manufacturer, str uid, str serial, str version, str key, str|None unit, SensorStateClass|str|None state_class, SensorDeviceClass|None device_class)
_attr_native_unit_of_measurement
None async_setup_entry(HomeAssistant hass, SolaxConfigEntry entry, AddEntitiesCallback async_add_entities)