45 lines
1.7 KiB
Python
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()
|