mirror of
				https://github.com/home-assistant/core.git
				synced 2025-10-26 12:09:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Definition of air-Q number platform used to control the LED strips."""
 | |
| 
 | |
| from __future__ import annotations
 | |
| 
 | |
| from collections.abc import Awaitable, Callable
 | |
| from dataclasses import dataclass
 | |
| import logging
 | |
| 
 | |
| from aioairq.core import AirQ
 | |
| 
 | |
| from homeassistant.components.number import NumberEntity, NumberEntityDescription
 | |
| from homeassistant.const import PERCENTAGE
 | |
| from homeassistant.core import HomeAssistant
 | |
| from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
 | |
| from homeassistant.helpers.update_coordinator import CoordinatorEntity
 | |
| 
 | |
| from . import AirQConfigEntry, AirQCoordinator
 | |
| 
 | |
| _LOGGER = logging.getLogger(__name__)
 | |
| 
 | |
| 
 | |
| @dataclass(frozen=True, kw_only=True)
 | |
| class AirQBrightnessDescription(NumberEntityDescription):
 | |
|     """Describes AirQ number entity responsible for brightness control."""
 | |
| 
 | |
|     value: Callable[[dict], float]
 | |
|     set_value: Callable[[AirQ, float], Awaitable[None]]
 | |
| 
 | |
| 
 | |
| AIRQ_LED_BRIGHTNESS = AirQBrightnessDescription(
 | |
|     key="airq_led_brightness",
 | |
|     translation_key="airq_led_brightness",
 | |
|     native_min_value=0.0,
 | |
|     native_max_value=100.0,
 | |
|     native_step=1.0,
 | |
|     native_unit_of_measurement=PERCENTAGE,
 | |
|     value=lambda data: data["brightness"],
 | |
|     set_value=lambda device, value: device.set_current_brightness(value),
 | |
| )
 | |
| 
 | |
| 
 | |
| async def async_setup_entry(
 | |
|     hass: HomeAssistant,
 | |
|     entry: AirQConfigEntry,
 | |
|     async_add_entities: AddConfigEntryEntitiesCallback,
 | |
| ) -> None:
 | |
|     """Set up number entities: a single entity for the LEDs."""
 | |
| 
 | |
|     coordinator = entry.runtime_data
 | |
|     entities = [AirQLEDBrightness(coordinator, AIRQ_LED_BRIGHTNESS)]
 | |
| 
 | |
|     async_add_entities(entities)
 | |
| 
 | |
| 
 | |
| class AirQLEDBrightness(CoordinatorEntity[AirQCoordinator], NumberEntity):
 | |
|     """Representation of the LEDs from a single AirQ."""
 | |
| 
 | |
|     _attr_has_entity_name = True
 | |
| 
 | |
|     def __init__(
 | |
|         self,
 | |
|         coordinator: AirQCoordinator,
 | |
|         description: AirQBrightnessDescription,
 | |
|     ) -> None:
 | |
|         """Initialize a single sensor."""
 | |
|         super().__init__(coordinator)
 | |
|         self.entity_description: AirQBrightnessDescription = description
 | |
| 
 | |
|         self._attr_device_info = coordinator.device_info
 | |
|         self._attr_unique_id = f"{coordinator.device_id}_{description.key}"
 | |
| 
 | |
|     @property
 | |
|     def native_value(self) -> float:
 | |
|         """Return the brightness of the LEDs in %."""
 | |
|         return self.entity_description.value(self.coordinator.data)
 | |
| 
 | |
|     async def async_set_native_value(self, value: float) -> None:
 | |
|         """Set the brightness of the LEDs to the value in %."""
 | |
|         _LOGGER.debug(
 | |
|             "Changing LED brighntess from %.0f%% to %.0f%%",
 | |
|             self.coordinator.data["brightness"],
 | |
|             value,
 | |
|         )
 | |
|         await self.entity_description.set_value(self.coordinator.airq, value)
 | |
|         await self.coordinator.async_request_refresh()
 | 
