linky_tarif/sensor.py
2025-04-25 20:28:36 +02:00

45 lines
1.7 KiB
Python

from homeassistant.components.sensor import SensorEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.exceptions import ConfigEntryNotReady
from .coordinator import LinkyTarifCoordinator
from .const import DOMAIN, CONF_IEEE, CONF_INTERVAL
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback):
coordinator = LinkyTarifCoordinator(
hass,
ieee=entry.data[CONF_IEEE],
interval=entry.options.get(CONF_INTERVAL, 300),
)
try:
await coordinator.async_refresh()
if coordinator.last_update_success is False:
raise ConfigEntryNotReady
except Exception:
raise ConfigEntryNotReady
async_add_entities([LinkyTarifSensor(coordinator)])
class LinkyTarifSensor(SensorEntity):
def __init__(self, coordinator: LinkyTarifCoordinator):
self.coordinator = coordinator
self._attr_unique_id = f"linky_tarif_{coordinator._ieee}"
self._attr_name = "Linky Tarif Period"
self._attr_icon = "mdi:flash"
self._attr_device_info = DeviceInfo(identifiers={(DOMAIN, coordinator._ieee)})
@property
def native_value(self):
return self.coordinator.data.get("tariff") if self.coordinator.data else None
@property
def extra_state_attributes(self):
return {"last_update": self.coordinator.data.get("last_update")} if self.coordinator.data else {}
async def async_update(self):
await self.coordinator.async_request_refresh()