Make default dim level configurable in Lutron (#137127)

pull/139254/head
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
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.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__)
@ -68,3 +79,36 @@ class LutronConfigFlow(ConfigFlow, domain=DOMAIN):
),
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."""
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 typing import Any
from pylutron import Output
from pylutron import Lutron, LutronEntity, Output
from homeassistant.components.light import (
ATTR_BRIGHTNESS,
@ -20,6 +20,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from . import DOMAIN, LutronData
from .const import CONF_DEFAULT_DIMMER_LEVEL, DEFAULT_DIMMER_LEVEL
from .entity import LutronDevice
@ -37,7 +38,7 @@ async def async_setup_entry(
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
),
True,
@ -64,6 +65,17 @@ class LutronLight(LutronDevice, LightEntity):
_prev_brightness: int | None = 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:
"""Turn the light on."""
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:
brightness = kwargs[ATTR_BRIGHTNESS]
elif self._prev_brightness == 0:
brightness = 255 / 2
brightness = self._config_entry.options.get(
CONF_DEFAULT_DIMMER_LEVEL, DEFAULT_DIMMER_LEVEL
)
else:
brightness = self._prev_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": {
"event": {
"button": {