"""Diagnose-Binaersensoren eines ninstrip-Geraets: Zustand des sACN-Empfangs.""" from __future__ import annotations from homeassistant.components.binary_sensor import BinarySensorEntity from homeassistant.const import EntityCategory from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from .coordinator import NinstripConfigEntry, NinstripCoordinator from .entity import NinstripEntity PARALLEL_UPDATES = 0 async def async_setup_entry( hass: HomeAssistant, entry: NinstripConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: coordinator = entry.runtime_data async_add_entities([NinstripSacnActive(coordinator), NinstripSacnMulticast(coordinator)]) class _NinstripSacnInfo(NinstripEntity, BinarySensorEntity): """Basis fuer die beiden Merker unter system/info -> sacn.""" _attr_entity_category = EntityCategory.DIAGNOSTIC _field: str @property def available(self) -> bool: return super().available and self.coordinator.data.sacn_info is not None @property def is_on(self) -> bool: return bool((self.coordinator.data.sacn_info or {}).get(self._field)) class NinstripSacnActive(_NinstripSacnInfo): """An, solange ein Sender das Bild bestimmt - auch in der Haltephase.""" _attr_translation_key = "sacn_active" _field = "active" def __init__(self, coordinator: NinstripCoordinator) -> None: super().__init__(coordinator, "sacn_active") class NinstripSacnMulticast(_NinstripSacnInfo): """An, wenn der Beitritt zu allen Multicast-Gruppen gelang. Standardmaessig aus, wie bei ha-ninlight: im Normalbetrieb steht er auf "an" und verdient seinen Platz erst, wenn Multicast nicht ankommt. Bei ninlight hat eine falsche Gruppenadresse zwei Abende Suche gekostet - hier zeigt es sich. Achtung: "an" heisst nur, dass das GERAET beigetreten ist. Ob das Netz die Gruppe weiterreicht, steht auf einem anderen Blatt - ueber eine VLAN-Grenze kommt Multicast ohne Multicast-Router nie an. """ _attr_translation_key = "sacn_multicast" _attr_entity_registry_enabled_default = False _field = "multicast" def __init__(self, coordinator: NinstripCoordinator) -> None: super().__init__(coordinator, "sacn_multicast")