"""Support for Lutron Caseta lights.""" from datetime import timedelta from homeassistant.components.light import ( ATTR_BRIGHTNESS, ATTR_TRANSITION, DOMAIN, ColorMode, LightEntity, LightEntityFeature, ) from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from . import LutronCasetaDeviceUpdatableEntity from .const import DOMAIN as CASETA_DOMAIN from .models import LutronCasetaData def to_lutron_level(level): """Convert the given Home Assistant light level (0-255) to Lutron (0-100).""" return int(round((level * 100) / 255)) def to_hass_level(level): """Convert the given Lutron (0-100) light level to Home Assistant (0-255).""" return int((level * 255) // 100) async def async_setup_entry( hass: HomeAssistant, config_entry: ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up the Lutron Caseta light platform. Adds dimmers from the Caseta bridge associated with the config_entry as light entities. """ data: LutronCasetaData = hass.data[CASETA_DOMAIN][config_entry.entry_id] bridge = data.bridge bridge_device = data.bridge_device light_devices = bridge.get_devices_by_domain(DOMAIN) async_add_entities( LutronCasetaLight(light_device, bridge, bridge_device) for light_device in light_devices ) class LutronCasetaLight(LutronCasetaDeviceUpdatableEntity, LightEntity): """Representation of a Lutron Light, including dimmable.""" _attr_color_mode = ColorMode.BRIGHTNESS _attr_supported_color_modes = {ColorMode.BRIGHTNESS} _attr_supported_features = LightEntityFeature.TRANSITION @property def brightness(self): """Return the brightness of the light.""" return to_hass_level(self._device["current_state"]) async def _set_brightness(self, brightness, **kwargs): args = {} if ATTR_TRANSITION in kwargs: args["fade_time"] = timedelta(seconds=kwargs[ATTR_TRANSITION]) await self._smartbridge.set_value( self.device_id, to_lutron_level(brightness), **args ) async def async_turn_on(self, **kwargs): """Turn the light on.""" brightness = kwargs.pop(ATTR_BRIGHTNESS, 255) await self._set_brightness(brightness, **kwargs) async def async_turn_off(self, **kwargs): """Turn the light off.""" await self._set_brightness(0, **kwargs) @property def is_on(self): """Return true if device is on.""" return self._device["current_state"] > 0