Add phase information to YouLess (#89255)
parent
38f3b9f165
commit
bfb5daa31c
|
@ -10,7 +10,14 @@ from homeassistant.components.sensor import (
|
|||
SensorStateClass,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_DEVICE, UnitOfEnergy, UnitOfPower, UnitOfVolume
|
||||
from homeassistant.const import (
|
||||
CONF_DEVICE,
|
||||
UnitOfElectricCurrent,
|
||||
UnitOfElectricPotential,
|
||||
UnitOfEnergy,
|
||||
UnitOfPower,
|
||||
UnitOfVolume,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity import DeviceInfo
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
@ -47,6 +54,15 @@ async def async_setup_entry(
|
|||
DeliveryMeterSensor(coordinator, device, "high"),
|
||||
ExtraMeterSensor(coordinator, device, "total"),
|
||||
ExtraMeterPowerSensor(coordinator, device, "usage"),
|
||||
PhasePowerSensor(coordinator, device, 1),
|
||||
PhaseVoltageSensor(coordinator, device, 1),
|
||||
PhaseCurrentSensor(coordinator, device, 1),
|
||||
PhasePowerSensor(coordinator, device, 2),
|
||||
PhaseVoltageSensor(coordinator, device, 2),
|
||||
PhaseCurrentSensor(coordinator, device, 2),
|
||||
PhasePowerSensor(coordinator, device, 3),
|
||||
PhaseVoltageSensor(coordinator, device, 3),
|
||||
PhaseCurrentSensor(coordinator, device, 3),
|
||||
]
|
||||
)
|
||||
|
||||
|
@ -193,6 +209,87 @@ class EnergyMeterSensor(YoulessBaseSensor):
|
|||
return getattr(self.coordinator.data.power_meter, f"_{self._type}", None)
|
||||
|
||||
|
||||
class PhasePowerSensor(YoulessBaseSensor):
|
||||
"""The current power usage of a single phase."""
|
||||
|
||||
_attr_native_unit_of_measurement = UnitOfPower.WATT
|
||||
_attr_device_class = SensorDeviceClass.POWER
|
||||
_attr_state_class = SensorStateClass.MEASUREMENT
|
||||
|
||||
def __init__(
|
||||
self, coordinator: DataUpdateCoordinator[YoulessAPI], device: str, phase: int
|
||||
) -> None:
|
||||
"""Initialize the power phase sensor."""
|
||||
super().__init__(
|
||||
coordinator, device, "power", "Energy usage", f"phase_{phase}_power"
|
||||
)
|
||||
self._attr_name = f"Phase {phase} power"
|
||||
self._phase = phase
|
||||
|
||||
@property
|
||||
def get_sensor(self) -> YoulessSensor | None:
|
||||
"""Get the sensor value from the coordinator."""
|
||||
phase_sensor = getattr(self.coordinator.data, f"phase{self._phase}", None)
|
||||
if phase_sensor is None:
|
||||
return None
|
||||
|
||||
return phase_sensor.power
|
||||
|
||||
|
||||
class PhaseVoltageSensor(YoulessBaseSensor):
|
||||
"""The current voltage of a single phase."""
|
||||
|
||||
_attr_native_unit_of_measurement = UnitOfElectricPotential.VOLT
|
||||
_attr_device_class = SensorDeviceClass.VOLTAGE
|
||||
_attr_state_class = SensorStateClass.MEASUREMENT
|
||||
|
||||
def __init__(
|
||||
self, coordinator: DataUpdateCoordinator[YoulessAPI], device: str, phase: int
|
||||
) -> None:
|
||||
"""Initialize the voltage phase sensor."""
|
||||
super().__init__(
|
||||
coordinator, device, "power", "Energy usage", f"phase_{phase}_voltage"
|
||||
)
|
||||
self._attr_name = f"Phase {phase} voltage"
|
||||
self._phase = phase
|
||||
|
||||
@property
|
||||
def get_sensor(self) -> YoulessSensor | None:
|
||||
"""Get the sensor value from the coordinator for phase voltage."""
|
||||
phase_sensor = getattr(self.coordinator.data, f"phase{self._phase}", None)
|
||||
if phase_sensor is None:
|
||||
return None
|
||||
|
||||
return phase_sensor.voltage
|
||||
|
||||
|
||||
class PhaseCurrentSensor(YoulessBaseSensor):
|
||||
"""The current current of a single phase."""
|
||||
|
||||
_attr_native_unit_of_measurement = UnitOfElectricCurrent.AMPERE
|
||||
_attr_device_class = SensorDeviceClass.CURRENT
|
||||
_attr_state_class = SensorStateClass.MEASUREMENT
|
||||
|
||||
def __init__(
|
||||
self, coordinator: DataUpdateCoordinator[YoulessAPI], device: str, phase: int
|
||||
) -> None:
|
||||
"""Initialize the current phase sensor."""
|
||||
super().__init__(
|
||||
coordinator, device, "power", "Energy usage", f"phase_{phase}_current"
|
||||
)
|
||||
self._attr_name = f"Phase {phase} current"
|
||||
self._phase = phase
|
||||
|
||||
@property
|
||||
def get_sensor(self) -> YoulessSensor | None:
|
||||
"""Get the sensor value from the coordinator for phase current."""
|
||||
phase_sensor = getattr(self.coordinator.data, f"phase{self._phase}", None)
|
||||
if phase_sensor is None:
|
||||
return None
|
||||
|
||||
return phase_sensor.current
|
||||
|
||||
|
||||
class ExtraMeterSensor(YoulessBaseSensor):
|
||||
"""The Youless extra meter value sensor (s0)."""
|
||||
|
||||
|
|
Loading…
Reference in New Issue