"""Number platform for LED Screen Controller (device brightness).""" from __future__ import annotations import logging from typing import Any from homeassistant.components.number import NumberEntity, NumberMode from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.update_coordinator import CoordinatorEntity from .const import DOMAIN, DATA_COORDINATOR, TARGET_TYPE_KEY_COLORS from .coordinator import WLEDScreenControllerCoordinator _LOGGER = logging.getLogger(__name__) async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up LED Screen Controller brightness numbers.""" data = hass.data[DOMAIN][entry.entry_id] coordinator: WLEDScreenControllerCoordinator = data[DATA_COORDINATOR] entities = [] if coordinator.data and "targets" in coordinator.data: devices = coordinator.data.get("devices") or {} for target_id, target_data in coordinator.data["targets"].items(): info = target_data["info"] # Only LED targets have a device_id if info.get("target_type") == TARGET_TYPE_KEY_COLORS: continue device_id = info.get("device_id", "") if not device_id: continue # Check if the device supports brightness control device_data = devices.get(device_id) if not device_data: continue capabilities = device_data.get("info", {}).get("capabilities") or [] if "brightness_control" not in capabilities: continue entities.append( WLEDScreenControllerBrightness( coordinator, target_id, device_id, entry.entry_id, ) ) async_add_entities(entities) class WLEDScreenControllerBrightness(CoordinatorEntity, NumberEntity): """Brightness control for an LED device associated with a target.""" _attr_has_entity_name = True _attr_native_min_value = 0 _attr_native_max_value = 255 _attr_native_step = 1 _attr_mode = NumberMode.SLIDER _attr_icon = "mdi:brightness-6" def __init__( self, coordinator: WLEDScreenControllerCoordinator, target_id: str, device_id: str, entry_id: str, ) -> None: """Initialize the brightness number.""" super().__init__(coordinator) self._target_id = target_id self._device_id = device_id self._entry_id = entry_id self._attr_unique_id = f"{target_id}_brightness" self._attr_translation_key = "brightness" @property def device_info(self) -> dict[str, Any]: """Return device information.""" return {"identifiers": {(DOMAIN, self._target_id)}} @property def native_value(self) -> float | None: """Return the current brightness value.""" if not self.coordinator.data: return None device_data = self.coordinator.data.get("devices", {}).get(self._device_id) if not device_data: return None return device_data.get("brightness") @property def available(self) -> bool: """Return if entity is available.""" if not self.coordinator.data: return False targets = self.coordinator.data.get("targets", {}) devices = self.coordinator.data.get("devices", {}) return self._target_id in targets and self._device_id in devices async def async_set_native_value(self, value: float) -> None: """Set brightness value.""" await self.coordinator.set_brightness(self._device_id, int(value))