from __future__ import annotations from dataclasses import dataclass from typing import Any from homeassistant.components.sensor import SensorEntity, SensorEntityDescription from homeassistant.config_entries import ConfigEntry from homeassistant.const import UnitOfTemperature from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from .const import ( CURRENT_TIME_KEY, DATA_COORDINATOR, DOMAIN, STATUS_TEXT_KEY, STEAM_TARGET_KEY, STEAM_TEMP_KEY, WATER_TARGET_KEY, WATER_TEMP_KEY, ) from .coordinator import DualPidDataUpdateCoordinator from .entity import DualPidEntity @dataclass(frozen=True, kw_only=True) class DualPidSensorDescription(SensorEntityDescription): value_key: str SENSORS: tuple[DualPidSensorDescription, ...] = ( DualPidSensorDescription( key="status", name="Status", icon="mdi:coffee-maker", value_key=STATUS_TEXT_KEY, ), DualPidSensorDescription( key="current_time", name="Controller-Zeit", icon="mdi:clock-outline", value_key=CURRENT_TIME_KEY, ), DualPidSensorDescription( key="water_temp", name="Wasser Temperatur", icon="mdi:thermometer-water", native_unit_of_measurement=UnitOfTemperature.CELSIUS, value_key=WATER_TEMP_KEY, ), DualPidSensorDescription( key="water_target", name="Wasser Sollwert", icon="mdi:thermometer-chevron-up", native_unit_of_measurement=UnitOfTemperature.CELSIUS, value_key=WATER_TARGET_KEY, ), DualPidSensorDescription( key="steam_temp", name="Dampf Temperatur", icon="mdi:thermometer", native_unit_of_measurement=UnitOfTemperature.CELSIUS, value_key=STEAM_TEMP_KEY, ), DualPidSensorDescription( key="steam_target", name="Dampf Sollwert", icon="mdi:thermometer-chevron-up", native_unit_of_measurement=UnitOfTemperature.CELSIUS, value_key=STEAM_TARGET_KEY, ), ) async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: coordinator: DualPidDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][DATA_COORDINATOR] async_add_entities(DualPidSensor(coordinator, entry, description) for description in SENSORS) class DualPidSensor(DualPidEntity, SensorEntity): """Representation of a Dual PID sensor.""" entity_description: DualPidSensorDescription def __init__( self, coordinator: DualPidDataUpdateCoordinator, entry: ConfigEntry, description: DualPidSensorDescription, ) -> None: super().__init__(coordinator, entry, description.key) self.entity_description = description self._attr_name = description.name self._attr_icon = description.icon @property def native_value(self) -> Any: return self.coordinator.data.get(self.entity_description.value_key)