Files
Dual-PID/Home Assistant Erweiterung/custom_components/dual_pid/sensor.py
raw-designs 453644816f Initiale Bereitstellung
Initiale Bereitstellung der aktuellen Version auf Gitea
2026-07-10 18:13:43 +02:00

103 lines
3.0 KiB
Python

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)