"""Provides triggers for lights.""" from typing import override from homeassistant.const import STATE_OFF, STATE_ON from homeassistant.core import HomeAssistant, State from homeassistant.helpers.automation import DomainSpec from homeassistant.helpers.trigger import ( EntityNumericalStateChangedTriggerBase, EntityNumericalStateCrossedThresholdTriggerBase, EntityNumericalStateTriggerBase, Trigger, make_entity_target_state_trigger, ) from .const import DOMAIN, LightEntityStateAttribute BRIGHTNESS_DOMAIN_SPECS: dict[str, DomainSpec] = { DOMAIN: DomainSpec(value_source=LightEntityStateAttribute.BRIGHTNESS), } class BrightnessTriggerMixin(EntityNumericalStateTriggerBase): """Mixin for brightness triggers.""" _domain_specs = BRIGHTNESS_DOMAIN_SPECS _valid_unit = "%" @override def _get_tracked_value(self, state: State) -> float | None: """Get tracked brightness as a percentage.""" value = super()._get_tracked_value(state) if value is None: return None # Convert uint8 value (0-255) to a percentage (0-100) return (value / 255.0) * 100.0 class BrightnessChangedTrigger( EntityNumericalStateChangedTriggerBase, BrightnessTriggerMixin ): """Trigger for light brightness changes.""" class BrightnessCrossedThresholdTrigger( EntityNumericalStateCrossedThresholdTriggerBase, BrightnessTriggerMixin ): """Trigger for light brightness crossing a threshold.""" TRIGGERS: dict[str, type[Trigger]] = { "brightness_changed": BrightnessChangedTrigger, "brightness_crossed_threshold": BrightnessCrossedThresholdTrigger, "turned_off": make_entity_target_state_trigger(DOMAIN, STATE_OFF), "turned_on": make_entity_target_state_trigger(DOMAIN, STATE_ON), } async def async_get_triggers(hass: HomeAssistant) -> dict[str, type[Trigger]]: """Return the triggers for lights.""" return TRIGGERS