feat: Strom, Leistung und Strombudget

Zeigt strip.current_ma und strip.power_w aus system/info als Sensoren
und macht max_milliamps aus system/settings ueber ein Zahlenfeld
einstellbar. Schreiben liest wie bei sACN zurueck statt den
geschriebenen Wert anzunehmen.
This commit is contained in:
Michael Sauer
2026-09-23 14:35:50 +02:00
parent ffcbbdfe4a
commit 616515ef77
10 changed files with 179 additions and 1 deletions
+27 -1
View File
@@ -10,7 +10,7 @@ from homeassistant.components.number import (
NumberEntityDescription,
NumberMode,
)
from homeassistant.const import EntityCategory, UnitOfTime
from homeassistant.const import EntityCategory, UnitOfElectricCurrent, UnitOfTime
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
@@ -60,6 +60,7 @@ async def async_setup_entry(
entitaeten: list[NumberEntity] = [NinstripZeit(coordinator, d) for d in ZEITEN]
entitaeten.append(NinstripSacnUniverse(coordinator))
entitaeten.append(NinstripSacnStartSlot(coordinator))
entitaeten.append(NinstripStrombudget(coordinator))
async_add_entities(entitaeten)
@@ -141,3 +142,28 @@ class NinstripSacnStartSlot(NinstripSacnEntity, NumberEntity):
async def async_set_native_value(self, value: float) -> None:
await self.coordinator.async_set_sacn(start_slot=int(value))
class NinstripStrombudget(NinstripEntity, NumberEntity):
"""Was das Netzteil hergibt. Die Firmware regelt daran."""
_attr_entity_category = EntityCategory.CONFIG
_attr_translation_key = "max_milliamps"
_attr_native_min_value = 100
# Die Firmware nimmt fuer das Budget hoechstens 65535 mA an (uint16).
_attr_native_max_value = 65535
_attr_native_step = 100
_attr_mode = NumberMode.BOX
_attr_native_unit_of_measurement = UnitOfElectricCurrent.MILLIAMPERE
def __init__(self, coordinator: NinstripCoordinator) -> None:
super().__init__(coordinator, "max_milliamps")
@property
def native_value(self) -> float | None:
strip = self.coordinator.data.settings.get("strip")
wert = strip.get("max_milliamps") if isinstance(strip, dict) else None
return float(wert) if isinstance(wert, (int, float)) else None
async def async_set_native_value(self, value: float) -> None:
await self.coordinator.async_set_strip(max_milliamps=int(value))