Skip to content

Commit 1565009

Browse files
committed
model updates
1 parent 5ebfc02 commit 1565009

File tree

5 files changed

+50
-7
lines changed

5 files changed

+50
-7
lines changed

zha/application/discovery.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
DeviceCounterSensorEntityInfo,
5959
ElectricalMeasurementEntityInfo,
6060
SensorEntityInfo,
61+
SetpointChangeSourceTimestampSensorEntityInfo,
6162
SmartEnergyMeteringEntityInfo,
6263
)
6364
from zha.application.platforms.siren.model import SirenEntityInfo
@@ -211,6 +212,7 @@
211212
ElectricalMeasurementEntityInfo: sensor.WebSocketClientSensorEntity,
212213
SmartEnergyMeteringEntityInfo: sensor.WebSocketClientSensorEntity,
213214
DeviceCounterSensorEntityInfo: sensor.WebSocketClientSensorEntity,
215+
SetpointChangeSourceTimestampSensorEntityInfo: sensor.WebSocketClientSensorEntity,
214216
}
215217

216218

zha/application/platforms/events.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
DeviceCounterSensorState,
2121
ElectricalMeasurementState,
2222
SmartEnergyMeteringState,
23+
TimestampState,
2324
)
2425
from zha.application.platforms.switch.model import SwitchState
2526
from zha.application.platforms.update.model import FirmwareUpdateState
@@ -52,6 +53,7 @@ class EntityStateChangedEvent(BaseEvent):
5253
| ThermostatState
5354
| FirmwareUpdateState
5455
| DeviceCounterSensorState
56+
| TimestampState
5557
| None,
5658
Field(discriminator="class_name"), # noqa: F821
5759
]

zha/application/platforms/model.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ class GenericState(BaseModel):
9292
"LastSeenSensor",
9393
"PiHeatingDemand",
9494
"SetpointChangeSource",
95-
"SetpointChangeSourceTimestamp",
9695
"TimeLeft",
9796
"DeviceTemperature",
9897
"WindowCoveringTypeSensor",

zha/application/platforms/sensor/model.py

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from __future__ import annotations
44

5+
from datetime import datetime
56
from typing import Literal
67

78
from 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+
7189
class 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

81102
class 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

130163
class 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

196234
class DeviceCounterEntityInfo(BaseEntityInfo):

zha/zigbee/model.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
DeviceCounterSensorEntityInfo,
2828
ElectricalMeasurementEntityInfo,
2929
SensorEntityInfo,
30+
SetpointChangeSourceTimestampSensorEntityInfo,
3031
SmartEnergyMeteringEntityInfo,
3132
)
3233
from zha.application.platforms.siren.model import SirenEntityInfo
@@ -236,6 +237,7 @@ class ExtendedDeviceInfo(DeviceInfo):
236237
SmartEnergyMeteringEntityInfo,
237238
ThermostatEntityInfo,
238239
DeviceCounterSensorEntityInfo,
240+
SetpointChangeSourceTimestampSensorEntityInfo,
239241
],
240242
Field(discriminator="class_name"),
241243
],

0 commit comments

Comments
 (0)