Add new sensors exposed by HomeWizard kWh meter (#108850)

* Add new sensors exposed by kWh meter

* Add entity translation placeholders

* Fix Mypy issue

* Adjusts tests

* Remove suggested display precision for disabled-by-default sensors

* Update test-snapshots

* Update snapshots
This commit is contained in:
Duco Sebel 2024-01-29 14:42:16 +01:00 committed by GitHub
parent e9e289286e
commit d631cad07f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 4426 additions and 139 deletions

View file

@ -18,8 +18,10 @@ from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
ATTR_VIA_DEVICE,
PERCENTAGE,
POWER_VOLT_AMPERE_REACTIVE,
EntityCategory,
Platform,
UnitOfApparentPower,
UnitOfElectricCurrent,
UnitOfElectricPotential,
UnitOfEnergy,
@ -57,6 +59,11 @@ class HomeWizardExternalSensorEntityDescription(SensorEntityDescription):
device_name: str
def to_percentage(value: float | None) -> float | None:
"""Convert 0..1 value to percentage when value is not None."""
return value * 100 if value is not None else None
SENSORS: Final[tuple[HomeWizardSensorEntityDescription, ...]] = (
HomeWizardSensorEntityDescription(
key="smr_version",
@ -259,6 +266,15 @@ SENSORS: Final[tuple[HomeWizardSensorEntityDescription, ...]] = (
has_fn=lambda data: data.active_power_l3_w is not None,
value_fn=lambda data: data.active_power_l3_w,
),
HomeWizardSensorEntityDescription(
key="active_voltage_v",
native_unit_of_measurement=UnitOfElectricPotential.VOLT,
device_class=SensorDeviceClass.VOLTAGE,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_voltage_v is not None,
value_fn=lambda data: data.active_voltage_v,
),
HomeWizardSensorEntityDescription(
key="active_voltage_l1_v",
translation_key="active_voltage_phase_v",
@ -292,6 +308,15 @@ SENSORS: Final[tuple[HomeWizardSensorEntityDescription, ...]] = (
has_fn=lambda data: data.active_voltage_l3_v is not None,
value_fn=lambda data: data.active_voltage_l3_v,
),
HomeWizardSensorEntityDescription(
key="active_current_a",
native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
device_class=SensorDeviceClass.CURRENT,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_current_a is not None,
value_fn=lambda data: data.active_current_a,
),
HomeWizardSensorEntityDescription(
key="active_current_l1_a",
translation_key="active_current_phase_a",
@ -334,6 +359,132 @@ SENSORS: Final[tuple[HomeWizardSensorEntityDescription, ...]] = (
has_fn=lambda data: data.active_frequency_hz is not None,
value_fn=lambda data: data.active_frequency_hz,
),
HomeWizardSensorEntityDescription(
key="active_apparent_power_va",
native_unit_of_measurement=UnitOfApparentPower.VOLT_AMPERE,
device_class=SensorDeviceClass.APPARENT_POWER,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_apparent_power_va is not None,
value_fn=lambda data: data.active_apparent_power_va,
),
HomeWizardSensorEntityDescription(
key="active_apparent_power_l1_va",
translation_key="active_apparent_power_phase_va",
translation_placeholders={"phase": "1"},
native_unit_of_measurement=UnitOfApparentPower.VOLT_AMPERE,
device_class=SensorDeviceClass.APPARENT_POWER,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_apparent_power_l1_va is not None,
value_fn=lambda data: data.active_apparent_power_l1_va,
),
HomeWizardSensorEntityDescription(
key="active_apparent_power_l2_va",
translation_key="active_apparent_power_phase_va",
translation_placeholders={"phase": "2"},
native_unit_of_measurement=UnitOfApparentPower.VOLT_AMPERE,
device_class=SensorDeviceClass.APPARENT_POWER,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_apparent_power_l2_va is not None,
value_fn=lambda data: data.active_apparent_power_l2_va,
),
HomeWizardSensorEntityDescription(
key="active_apparent_power_l3_va",
translation_key="active_apparent_power_phase_va",
translation_placeholders={"phase": "3"},
native_unit_of_measurement=UnitOfApparentPower.VOLT_AMPERE,
device_class=SensorDeviceClass.APPARENT_POWER,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_apparent_power_l3_va is not None,
value_fn=lambda data: data.active_apparent_power_l3_va,
),
HomeWizardSensorEntityDescription(
key="active_reactive_power_var",
native_unit_of_measurement=POWER_VOLT_AMPERE_REACTIVE,
device_class=SensorDeviceClass.REACTIVE_POWER,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_reactive_power_var is not None,
value_fn=lambda data: data.active_reactive_power_var,
),
HomeWizardSensorEntityDescription(
key="active_reactive_power_l1_var",
translation_key="active_reactive_power_phase_var",
translation_placeholders={"phase": "1"},
native_unit_of_measurement=POWER_VOLT_AMPERE_REACTIVE,
device_class=SensorDeviceClass.REACTIVE_POWER,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_reactive_power_l1_var is not None,
value_fn=lambda data: data.active_reactive_power_l1_var,
),
HomeWizardSensorEntityDescription(
key="active_reactive_power_l2_var",
translation_key="active_reactive_power_phase_var",
translation_placeholders={"phase": "2"},
native_unit_of_measurement=POWER_VOLT_AMPERE_REACTIVE,
device_class=SensorDeviceClass.REACTIVE_POWER,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_reactive_power_l2_var is not None,
value_fn=lambda data: data.active_reactive_power_l2_var,
),
HomeWizardSensorEntityDescription(
key="active_reactive_power_l3_var",
translation_key="active_reactive_power_phase_var",
translation_placeholders={"phase": "3"},
native_unit_of_measurement=POWER_VOLT_AMPERE_REACTIVE,
device_class=SensorDeviceClass.REACTIVE_POWER,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_reactive_power_l3_var is not None,
value_fn=lambda data: data.active_reactive_power_l3_var,
),
HomeWizardSensorEntityDescription(
key="active_power_factor",
native_unit_of_measurement=PERCENTAGE,
device_class=SensorDeviceClass.POWER_FACTOR,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_power_factor is not None,
value_fn=lambda data: to_percentage(data.active_power_factor),
),
HomeWizardSensorEntityDescription(
key="active_power_factor_l1",
translation_key="active_power_factor_phase",
translation_placeholders={"phase": "1"},
native_unit_of_measurement=PERCENTAGE,
device_class=SensorDeviceClass.POWER_FACTOR,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_power_factor_l1 is not None,
value_fn=lambda data: to_percentage(data.active_power_factor_l1),
),
HomeWizardSensorEntityDescription(
key="active_power_factor_l2",
translation_key="active_power_factor_phase",
translation_placeholders={"phase": "2"},
native_unit_of_measurement=PERCENTAGE,
device_class=SensorDeviceClass.POWER_FACTOR,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_power_factor_l2 is not None,
value_fn=lambda data: to_percentage(data.active_power_factor_l2),
),
HomeWizardSensorEntityDescription(
key="active_power_factor_l3",
translation_key="active_power_factor_phase",
translation_placeholders={"phase": "3"},
native_unit_of_measurement=PERCENTAGE,
device_class=SensorDeviceClass.POWER_FACTOR,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=False,
has_fn=lambda data: data.active_power_factor_l3 is not None,
value_fn=lambda data: to_percentage(data.active_power_factor_l3),
),
HomeWizardSensorEntityDescription(
key="voltage_sag_l1_count",
translation_key="voltage_sag_phase_count",