Add tier summation delivered for Lixee Zlinky TIC (#82602)

* Add tier summation delivered for zlinky

* Improve name case

* Add other tiers and register tier

* Fix smartenergy sensor update

* Account for new reporting configuration in unit tests

* Use cluster ID attributes instead of hardcoding the values

* Use tier names instead of the numeric constants for formatter

* Revert active register tier delivered

* Fix tests

Co-authored-by: puddly <32534428+puddly@users.noreply.github.com>
This commit is contained in:
Paul Bottein
2023-01-16 16:33:18 +01:00
committed by GitHub
parent 83591704b5
commit c3e27f6812
4 changed files with 186 additions and 43 deletions

View File

@@ -1,6 +1,7 @@
"""Sensors on Zigbee Home Automation networks."""
from __future__ import annotations
import enum
import functools
import numbers
from typing import TYPE_CHECKING, Any, TypeVar
@@ -174,7 +175,7 @@ class Sensor(ZhaEntity, SensorEntity):
"""Handle state update from channel."""
self.async_write_ha_state()
def formatter(self, value: int) -> int | float | None:
def formatter(self, value: int | enum.IntEnum) -> int | float | str | None:
"""Numeric pass-through formatter."""
if self._decimals > 0:
return round(
@@ -495,7 +496,7 @@ class SmartEnergySummation(SmartEnergyMetering, id_suffix="summation_delivered")
@MULTI_MATCH(
channel_names=CHANNEL_SMARTENERGY_METERING,
models={"TS011F"},
models={"TS011F", "ZLinky_TIC"},
stop_on_match_group=CHANNEL_SMARTENERGY_METERING,
)
class PolledSmartEnergySummation(SmartEnergySummation):
@@ -510,6 +511,84 @@ class PolledSmartEnergySummation(SmartEnergySummation):
await self._channel.async_force_update()
@MULTI_MATCH(
channel_names=CHANNEL_SMARTENERGY_METERING,
models={"ZLinky_TIC"},
)
class Tier1SmartEnergySummation(
SmartEnergySummation, id_suffix="tier1_summation_delivered"
):
"""Tier 1 Smart Energy Metering summation sensor."""
SENSOR_ATTR: int | str = "current_tier1_summ_delivered"
_attr_name: str = "Tier 1 summation delivered"
@MULTI_MATCH(
channel_names=CHANNEL_SMARTENERGY_METERING,
models={"ZLinky_TIC"},
)
class Tier2SmartEnergySummation(
SmartEnergySummation, id_suffix="tier2_summation_delivered"
):
"""Tier 2 Smart Energy Metering summation sensor."""
SENSOR_ATTR: int | str = "current_tier2_summ_delivered"
_attr_name: str = "Tier 2 summation delivered"
@MULTI_MATCH(
channel_names=CHANNEL_SMARTENERGY_METERING,
models={"ZLinky_TIC"},
)
class Tier3SmartEnergySummation(
SmartEnergySummation, id_suffix="tier3_summation_delivered"
):
"""Tier 3 Smart Energy Metering summation sensor."""
SENSOR_ATTR: int | str = "current_tier3_summ_delivered"
_attr_name: str = "Tier 3 summation delivered"
@MULTI_MATCH(
channel_names=CHANNEL_SMARTENERGY_METERING,
models={"ZLinky_TIC"},
)
class Tier4SmartEnergySummation(
SmartEnergySummation, id_suffix="tier4_summation_delivered"
):
"""Tier 4 Smart Energy Metering summation sensor."""
SENSOR_ATTR: int | str = "current_tier4_summ_delivered"
_attr_name: str = "Tier 4 summation delivered"
@MULTI_MATCH(
channel_names=CHANNEL_SMARTENERGY_METERING,
models={"ZLinky_TIC"},
)
class Tier5SmartEnergySummation(
SmartEnergySummation, id_suffix="tier5_summation_delivered"
):
"""Tier 5 Smart Energy Metering summation sensor."""
SENSOR_ATTR: int | str = "current_tier5_summ_delivered"
_attr_name: str = "Tier 5 summation delivered"
@MULTI_MATCH(
channel_names=CHANNEL_SMARTENERGY_METERING,
models={"ZLinky_TIC"},
)
class Tier6SmartEnergySummation(
SmartEnergySummation, id_suffix="tier6_summation_delivered"
):
"""Tier 6 Smart Energy Metering summation sensor."""
SENSOR_ATTR: int | str = "current_tier6_summ_delivered"
_attr_name: str = "Tier 6 summation delivered"
@MULTI_MATCH(channel_names=CHANNEL_PRESSURE)
class Pressure(Sensor):
"""Pressure sensor."""