22
33from __future__ import annotations
44
5+ from datetime import datetime
56from typing import Literal
67
78from pydantic import ValidationInfo , field_validator
@@ -42,9 +43,9 @@ class ElectricalMeasurementState(BaseModel):
4243 ]
4344 state : str | float | int | None = None
4445 measurement_type : str | None = None
45- active_power_max : str | None = None
46- rms_current_max : str | None = None
47- rms_voltage_max : int | None = None
46+ active_power_max : float | None = None
47+ rms_current_max : float | None = None
48+ rms_voltage_max : float | None = None
4849 available : bool
4950
5051
@@ -68,6 +69,23 @@ class DeviceCounterSensorState(BaseModel):
6869 available : bool
6970
7071
72+ class SmartEnergyMeteringEntityDescription (BaseModel ):
73+ """Model that describes a Zigbee smart energy metering entity."""
74+
75+ key : str = "instantaneous_demand"
76+ state_class : SensorStateClass | None = SensorStateClass .MEASUREMENT
77+ scale : int = 1
78+ native_unit_of_measurement : str | None = None
79+ device_class : SensorDeviceClass | None = None
80+
81+
82+ class SmartEnergySummationEntityDescription (SmartEnergyMeteringEntityDescription ):
83+ """Model that describes a Zigbee smart energy summation entity."""
84+
85+ key : str = "summation_delivered"
86+ state_class : SensorStateClass | None = SensorStateClass .TOTAL_INCREASING
87+
88+
7189class BaseSensorEntityInfo (BasePlatformEntityInfo ):
7290 """Sensor model."""
7391
@@ -76,6 +94,9 @@ class BaseSensorEntityInfo(BasePlatformEntityInfo):
7694 divisor : int
7795 multiplier : int | float
7896 unit : int | str | None = None
97+ device_class : SensorDeviceClass | None = None
98+ state_class : SensorStateClass | None = None
99+ extra_state_attribute_names : set [str ] | None = None
79100
80101
81102class SensorEntityInfo (BaseSensorEntityInfo ):
@@ -101,7 +122,6 @@ class SensorEntityInfo(BaseSensorEntityInfo):
101122 "LastSeenSensor" ,
102123 "PiHeatingDemand" ,
103124 "SetpointChangeSource" ,
104- "SetpointChangeSourceTimestamp" ,
105125 "TimeLeft" ,
106126 "DeviceTemperature" ,
107127 "WindowCoveringTypeSensor" ,
@@ -123,8 +143,21 @@ class SensorEntityInfo(BaseSensorEntityInfo):
123143 "Flow" ,
124144 ]
125145 state : GenericState
126- device_class : SensorDeviceClass | None = None
127- state_class : SensorStateClass | None = None
146+
147+
148+ class TimestampState (BaseModel ):
149+ """Default state model."""
150+
151+ class_name : Literal ["SetpointChangeSourceTimestamp" ,]
152+ available : bool | None = None
153+ state : datetime | None = None
154+
155+
156+ class SetpointChangeSourceTimestampSensorEntityInfo (BaseSensorEntityInfo ):
157+ """Setpoint change source timestamp sensor model."""
158+
159+ class_name : Literal ["SetpointChangeSourceTimestamp" ]
160+ state : TimestampState
128161
129162
130163class DeviceCounterSensorEntityInfo (BaseEventedModel , BaseEntityInfo ):
@@ -191,6 +224,11 @@ class SmartEnergyMeteringEntityInfo(BaseSensorEntityInfo):
191224 "SmartEnergyMetering" , "SmartEnergySummation" , "SmartEnergySummationReceived"
192225 ]
193226 state : SmartEnergyMeteringState
227+ entity_description : (
228+ SmartEnergySummationEntityDescription
229+ | SmartEnergyMeteringEntityDescription
230+ | None
231+ ) = None
194232
195233
196234class DeviceCounterEntityInfo (BaseEntityInfo ):
0 commit comments