Make default dim level configurable in Lutron (#137127)

This commit is contained in:
Cameron Ring 2025-02-25 06:07:42 -08:00 committed by GitHub
parent d4dd8fd902
commit b8b153b87f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 76 additions and 5 deletions

View File

@ -9,10 +9,21 @@ from urllib.error import HTTPError
from pylutron import Lutron from pylutron import Lutron
import voluptuous as vol import voluptuous as vol
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import (
ConfigEntry,
ConfigFlow,
ConfigFlowResult,
OptionsFlow,
)
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import callback
from homeassistant.helpers.selector import (
NumberSelector,
NumberSelectorConfig,
NumberSelectorMode,
)
from .const import DOMAIN from .const import CONF_DEFAULT_DIMMER_LEVEL, DEFAULT_DIMMER_LEVEL, DOMAIN
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -68,3 +79,36 @@ class LutronConfigFlow(ConfigFlow, domain=DOMAIN):
), ),
errors=errors, errors=errors,
) )
@staticmethod
@callback
def async_get_options_flow(
config_entry: ConfigEntry,
) -> OptionsFlowHandler:
"""Get the options flow for this handler."""
return OptionsFlowHandler()
class OptionsFlowHandler(OptionsFlow):
"""Handle option flow for lutron."""
async def async_step_init(
self, user_input: dict[str, Any] | None = None
) -> ConfigFlowResult:
"""Handle options flow."""
if user_input is not None:
return self.async_create_entry(title="", data=user_input)
data_schema = vol.Schema(
{
vol.Required(
CONF_DEFAULT_DIMMER_LEVEL,
default=self.config_entry.options.get(
CONF_DEFAULT_DIMMER_LEVEL, DEFAULT_DIMMER_LEVEL
),
): NumberSelector(
NumberSelectorConfig(min=1, max=255, mode=NumberSelectorMode.SLIDER)
)
}
)
return self.async_show_form(step_id="init", data_schema=data_schema)

View File

@ -1,3 +1,7 @@
"""Lutron constants.""" """Lutron constants."""
DOMAIN = "lutron" DOMAIN = "lutron"
CONF_DEFAULT_DIMMER_LEVEL = "default_dimmer_level"
DEFAULT_DIMMER_LEVEL = 255 / 2

View File

@ -5,7 +5,7 @@ from __future__ import annotations
from collections.abc import Mapping from collections.abc import Mapping
from typing import Any from typing import Any
from pylutron import Output from pylutron import Lutron, LutronEntity, Output
from homeassistant.components.light import ( from homeassistant.components.light import (
ATTR_BRIGHTNESS, ATTR_BRIGHTNESS,
@ -20,6 +20,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from . import DOMAIN, LutronData from . import DOMAIN, LutronData
from .const import CONF_DEFAULT_DIMMER_LEVEL, DEFAULT_DIMMER_LEVEL
from .entity import LutronDevice from .entity import LutronDevice
@ -37,7 +38,7 @@ async def async_setup_entry(
async_add_entities( async_add_entities(
( (
LutronLight(area_name, device, entry_data.client) LutronLight(area_name, device, entry_data.client, config_entry)
for area_name, device in entry_data.lights for area_name, device in entry_data.lights
), ),
True, True,
@ -64,6 +65,17 @@ class LutronLight(LutronDevice, LightEntity):
_prev_brightness: int | None = None _prev_brightness: int | None = None
_attr_name = None _attr_name = None
def __init__(
self,
area_name: str,
lutron_device: LutronEntity,
controller: Lutron,
config_entry: ConfigEntry,
) -> None:
"""Initialize the device."""
super().__init__(area_name, lutron_device, controller)
self._config_entry = config_entry
def turn_on(self, **kwargs: Any) -> None: def turn_on(self, **kwargs: Any) -> None:
"""Turn the light on.""" """Turn the light on."""
if flash := kwargs.get(ATTR_FLASH): if flash := kwargs.get(ATTR_FLASH):
@ -72,7 +84,9 @@ class LutronLight(LutronDevice, LightEntity):
if ATTR_BRIGHTNESS in kwargs and self._lutron_device.is_dimmable: if ATTR_BRIGHTNESS in kwargs and self._lutron_device.is_dimmable:
brightness = kwargs[ATTR_BRIGHTNESS] brightness = kwargs[ATTR_BRIGHTNESS]
elif self._prev_brightness == 0: elif self._prev_brightness == 0:
brightness = 255 / 2 brightness = self._config_entry.options.get(
CONF_DEFAULT_DIMMER_LEVEL, DEFAULT_DIMMER_LEVEL
)
else: else:
brightness = self._prev_brightness brightness = self._prev_brightness
self._prev_brightness = brightness self._prev_brightness = brightness

View File

@ -19,6 +19,15 @@
} }
} }
}, },
"options": {
"step": {
"init": {
"data": {
"default_dimmer_level": "Default light level when first turning on a light from Home Assistant"
}
}
}
},
"entity": { "entity": {
"event": { "event": {
"button": { "button": {