Files
ha-emporia-vue/custom_components/emporia_vue/charger_entity.py
Mike Marvin 92647f6835 Initial Support for Re-Auth and Reconfiguration (#350)
- Updates to config flows to support re-auth when password changes and
reconfiguration to change the configuration normally set during
initialization.
- Add config option to invert solar data, defaults to true. This should
allow the user to choose if they want it inverted, since the energy
dashboard requires positive data but emporia usually provides negative
for generation.
- A bunch of typing and similar style updates
- Update some translation strings
- Add support for using the API simulator without dev code
2025-02-02 17:26:32 -05:00

84 lines
2.6 KiB
Python

"""Emporia Charger Entity."""
from typing import Any
from pyemvue import pyemvue
from pyemvue.device import ChargerDevice, VueDevice
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import (
CoordinatorEntity,
DataUpdateCoordinator,
)
from .const import DOMAIN
class EmporiaChargerEntity(CoordinatorEntity):
"""Emporia Charger Entity."""
def __init__(
self,
coordinator: DataUpdateCoordinator[dict[str, Any]],
vue: pyemvue.PyEmVue,
device: VueDevice,
units: str | None,
device_class: str,
enabled_default=True,
) -> None:
"""Initialize the sensor."""
super().__init__(coordinator)
self._coordinator = coordinator
self._device: VueDevice = device
self._device_gid = str(device.device_gid)
self._vue: pyemvue.PyEmVue = vue
self._enabled_default: bool = enabled_default
self._attr_unit_of_measurement = units
self._attr_device_class = device_class
self._attr_has_entity_name = True
self._attr_name = None
@property
def available(self) -> bool:
"""Return True if entity is available."""
return self._device is not None
@property
def entity_registry_enabled_default(self) -> bool:
"""Return whether the entity should be enabled when first added to the entity registry."""
return self._enabled_default
@property
def extra_state_attributes(self) -> dict[str, Any]:
"""Return the state attributes of the device."""
data: ChargerDevice = self._coordinator.data[self._device_gid]
if data:
return {
"charging_rate": data.charging_rate,
"max_charging_rate": data.max_charging_rate,
"status": data.status,
"message": data.message,
"fault_text": data.fault_text,
"icon_name": data.icon,
"icon_label": data.icon_label,
"icon_detail_text": data.icon_detail_text,
}
return {}
@property
def unique_id(self) -> str:
"""Unique ID for the charger."""
return f"charger.emporia_vue.{self._device_gid}"
@property
def device_info(self) -> DeviceInfo:
"""Return the device information."""
return DeviceInfo(
identifiers={(DOMAIN, f"{self._device_gid}-1,2,3")},
name=self._device.device_name,
model=self._device.model,
sw_version=self._device.firmware,
manufacturer="Emporia",
)