1 """Support for V2C EVSE sensors."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
9 from pytrydan
import TrydanData
10 from pytrydan.models.trydan
import SlaveCommunicationState
15 SensorEntityDescription,
20 UnitOfElectricPotential,
29 from .
import V2CConfigEntry
30 from .coordinator
import V2CUpdateCoordinator
31 from .entity
import V2CBaseEntity
33 _LOGGER = logging.getLogger(__name__)
36 @dataclass(frozen=True, kw_only=True)
38 """Describes an EVSE Power sensor entity."""
40 value_fn: Callable[[TrydanData], StateType]
44 """Return the value of the enum and replace slave by meter."""
45 return value.name.lower().replace(
"slave",
"meter")
48 _METER_ERROR_OPTIONS = [
get_meter_value(error)
for error
in SlaveCommunicationState]
53 translation_key=
"charge_power",
54 native_unit_of_measurement=UnitOfPower.WATT,
55 state_class=SensorStateClass.MEASUREMENT,
56 device_class=SensorDeviceClass.POWER,
57 value_fn=
lambda evse_data: evse_data.charge_power,
60 key=
"voltage_installation",
61 translation_key=
"voltage_installation",
62 native_unit_of_measurement=UnitOfElectricPotential.VOLT,
63 state_class=SensorStateClass.MEASUREMENT,
64 device_class=SensorDeviceClass.VOLTAGE,
65 value_fn=
lambda evse_data: evse_data.voltage_installation,
66 entity_registry_enabled_default=
False,
70 translation_key=
"charge_energy",
71 native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
72 state_class=SensorStateClass.TOTAL_INCREASING,
73 device_class=SensorDeviceClass.ENERGY,
74 value_fn=
lambda evse_data: evse_data.charge_energy,
78 translation_key=
"charge_time",
79 native_unit_of_measurement=UnitOfTime.SECONDS,
80 state_class=SensorStateClass.TOTAL_INCREASING,
81 device_class=SensorDeviceClass.DURATION,
82 value_fn=
lambda evse_data: evse_data.charge_time,
86 translation_key=
"house_power",
87 native_unit_of_measurement=UnitOfPower.WATT,
88 state_class=SensorStateClass.MEASUREMENT,
89 device_class=SensorDeviceClass.POWER,
90 value_fn=
lambda evse_data: evse_data.house_power,
94 translation_key=
"fv_power",
95 native_unit_of_measurement=UnitOfPower.WATT,
96 state_class=SensorStateClass.MEASUREMENT,
97 device_class=SensorDeviceClass.POWER,
98 value_fn=
lambda evse_data: evse_data.fv_power,
102 translation_key=
"meter_error",
103 entity_category=EntityCategory.DIAGNOSTIC,
105 entity_registry_enabled_default=
False,
106 device_class=SensorDeviceClass.ENUM,
107 options=_METER_ERROR_OPTIONS,
111 translation_key=
"battery_power",
112 native_unit_of_measurement=UnitOfPower.WATT,
113 state_class=SensorStateClass.MEASUREMENT,
114 device_class=SensorDeviceClass.POWER,
115 value_fn=
lambda evse_data: evse_data.battery_power,
116 entity_registry_enabled_default=
False,
120 translation_key=
"ssid",
121 entity_category=EntityCategory.DIAGNOSTIC,
122 value_fn=
lambda evse_data: evse_data.SSID,
123 entity_registry_enabled_default=
False,
127 translation_key=
"ip_address",
128 entity_category=EntityCategory.DIAGNOSTIC,
129 value_fn=
lambda evse_data: evse_data.IP,
130 entity_registry_enabled_default=
False,
134 translation_key=
"signal_status",
135 entity_category=EntityCategory.DIAGNOSTIC,
136 state_class=SensorStateClass.MEASUREMENT,
137 value_fn=
lambda evse_data: evse_data.signal_status,
138 entity_registry_enabled_default=
False,
145 config_entry: V2CConfigEntry,
146 async_add_entities: AddEntitiesCallback,
148 """Set up V2C sensor platform."""
149 coordinator = config_entry.runtime_data
153 for description
in TRYDAN_SENSORS
158 """Defines a base v2c sensor entity."""
160 entity_description: V2CSensorEntityDescription
164 coordinator: V2CUpdateCoordinator,
165 description: SensorEntityDescription,
168 """Initialize V2C Power entity."""
169 super().
__init__(coordinator, description)
174 """Return the state of the sensor."""
None __init__(self, V2CUpdateCoordinator coordinator, SensorEntityDescription description, str entry_id)
StateType native_value(self)
None async_setup_entry(HomeAssistant hass, V2CConfigEntry config_entry, AddEntitiesCallback async_add_entities)
str get_meter_value(SlaveCommunicationState value)