"""NINA sensor platform.""" from __future__ import annotations from typing import Any from homeassistant.components.binary_sensor import ( BinarySensorDeviceClass, BinarySensorEntity, ) from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from .const import ( ATTR_AFFECTED_AREAS, ATTR_DESCRIPTION, ATTR_EXPIRES, ATTR_HEADLINE, ATTR_ID, ATTR_RECOMMENDED_ACTIONS, ATTR_SENDER, ATTR_SENT, ATTR_SEVERITY, ATTR_START, ATTR_WEB, CONF_MESSAGE_SLOTS, CONF_REGIONS, ) from .coordinator import NinaConfigEntry, NINADataUpdateCoordinator from .entity import NinaEntity async def async_setup_entry( _: HomeAssistant, config_entry: NinaConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up entries.""" coordinator = config_entry.runtime_data regions: dict[str, str] = config_entry.data[CONF_REGIONS] message_slots: int = config_entry.data[CONF_MESSAGE_SLOTS] async_add_entities( NINAMessage(coordinator, ent, regions[ent], i + 1) for ent in coordinator.data for i in range(message_slots) ) PARALLEL_UPDATES = 0 class NINAMessage(NinaEntity, BinarySensorEntity): """Representation of an NINA warning.""" _attr_device_class = BinarySensorDeviceClass.SAFETY _attr_has_entity_name = True def __init__( self, coordinator: NINADataUpdateCoordinator, region: str, region_name: str, slot_id: int, ) -> None: """Initialize.""" super().__init__(coordinator, region, region_name, slot_id) self._attr_translation_key = "warning" self._attr_unique_id = f"{region}-{slot_id}" @property def is_on(self) -> bool: """Return the state of the sensor.""" if self._get_active_warnings_count() <= self._warning_index: return False return self._get_warning_data().is_valid @property def extra_state_attributes(self) -> dict[str, Any]: """Return extra attributes of the sensor.""" if not self.is_on: return {} data = self._get_warning_data() return { ATTR_HEADLINE: data.headline, ATTR_DESCRIPTION: data.description, ATTR_SENDER: data.sender, ATTR_SEVERITY: data.severity, ATTR_RECOMMENDED_ACTIONS: data.recommended_actions, ATTR_AFFECTED_AREAS: data.affected_areas, ATTR_WEB: data.web, ATTR_ID: data.id, ATTR_SENT: data.sent, ATTR_START: data.start, ATTR_EXPIRES: data.expires, }