mirror of
https://github.com/basnijholt/adaptive-lighting.git
synced 2026-09-11 22:34:04 +02:00
convert strings to timedeltas and datetimes
This commit is contained in:
parent
b37e006ba8
commit
f8c1a50107
3 changed files with 27 additions and 74 deletions
|
|
@ -128,8 +128,8 @@ class OptionsFlowHandler(config_entries.OptionsFlow):
|
|||
# vol.Optional(CONF_DISABLE_STATE, default=disable_state): str,
|
||||
vol.Optional(
|
||||
CONF_INITIAL_TRANSITION, default=initial_transition
|
||||
): cv.positive_int,
|
||||
# vol.Optional(CONF_INTERVAL, default=interval): cv.positive_int,
|
||||
): VALID_TRANSITION,
|
||||
vol.Optional(CONF_INTERVAL, default=interval): cv.positive_int,
|
||||
vol.Optional(CONF_MAX_BRIGHTNESS, default=max_brightness): vol.All(
|
||||
vol.Coerce(int), vol.Range(min=1, max=100)
|
||||
),
|
||||
|
|
@ -151,16 +151,10 @@ class OptionsFlowHandler(config_entries.OptionsFlow):
|
|||
),
|
||||
# vol.Optional(CONF_SLEEP_ENTITY, default=sleep_entity): str,
|
||||
# vol.Optional(CONF_SLEEP_STATE, default=sleep_state): str,
|
||||
# vol.Optional(CONF_SUNRISE_OFFSET, default=sunrise_offset): int,
|
||||
vol.Optional(
|
||||
CONF_SUNRISE_TIME
|
||||
# , default=sunrise_time
|
||||
): cv.positive_time_period_dict,
|
||||
# vol.Optional(CONF_SUNSET_OFFSET, default=sunset_offset): int,
|
||||
vol.Optional(
|
||||
CONF_SUNSET_TIME
|
||||
# , default=sunset_time
|
||||
): cv.positive_time_period_dict,
|
||||
vol.Optional(CONF_SUNRISE_OFFSET, default=sunrise_offset): int,
|
||||
vol.Optional(CONF_SUNRISE_TIME, default=sunrise_time): str,
|
||||
vol.Optional(CONF_SUNSET_OFFSET, default=sunset_offset): int,
|
||||
vol.Optional(CONF_SUNSET_TIME, default=sunset_time): str,
|
||||
vol.Optional(CONF_TRANSITION, default=transition): VALID_TRANSITION,
|
||||
}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
import voluptuous as vol
|
||||
|
||||
from datetime import timedelta
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.components.light import VALID_TRANSITION
|
||||
|
||||
|
|
@ -19,7 +18,7 @@ CONF_DISABLE_BRIGHTNESS_ADJUST, DEFAULT_DISABLE_BRIGHTNESS_ADJUST = (
|
|||
CONF_DISABLE_ENTITY = "disable_entity"
|
||||
CONF_DISABLE_STATE = "disable_state"
|
||||
CONF_INITIAL_TRANSITION, DEFAULT_INITIAL_TRANSITION = "initial_transition", 1
|
||||
CONF_INTERVAL, DEFAULT_INTERVAL = "interval", timedelta(seconds=90)
|
||||
CONF_INTERVAL, DEFAULT_INTERVAL = "interval", 90
|
||||
CONF_MAX_BRIGHTNESS, DEFAULT_MAX_BRIGHTNESS = "max_brightness", 100
|
||||
CONF_MAX_COLOR_TEMP, DEFAULT_MAX_COLOR_TEMP = "max_color_temp", 5500
|
||||
CONF_MIN_BRIGHTNESS, DEFAULT_MIN_BRIGHTNESS = "min_brightness", 1
|
||||
|
|
@ -29,54 +28,18 @@ CONF_SLEEP_BRIGHTNESS, DEFAULT_SLEEP_BRIGHTNESS = "sleep_brightness", 1
|
|||
CONF_SLEEP_COLOR_TEMP, DEFAULT_SLEEP_COLOR_TEMP = "sleep_color_temp", 1000
|
||||
CONF_SLEEP_ENTITY = "sleep_entity"
|
||||
CONF_SLEEP_STATE = "sleep_state"
|
||||
CONF_SUNRISE_OFFSET, DEFAULT_SUNRISE_OFFSET = "sunrise_offset", timedelta(seconds=0)
|
||||
CONF_SUNRISE_OFFSET, DEFAULT_SUNRISE_OFFSET = "sunrise_offset", 0
|
||||
CONF_SUNRISE_TIME = "sunrise_time"
|
||||
CONF_SUNSET_OFFSET, DEFAULT_SUNSET_OFFSET = "sunset_offset", timedelta(seconds=0)
|
||||
CONF_SUNSET_OFFSET, DEFAULT_SUNSET_OFFSET = "sunset_offset", 0
|
||||
CONF_SUNSET_TIME = "sunset_time"
|
||||
CONF_TRANSITION, DEFAULT_TRANSITION = "transition", 60
|
||||
|
||||
UNDO_UPDATE_LISTENER = "undo_update_listener"
|
||||
|
||||
_COMMON_SCHEMA = {
|
||||
vol.Optional(CONF_LIGHTS, default=DEFAULT_LIGHTS): cv.entity_ids,
|
||||
vol.Optional(CONF_DISABLE_BRIGHTNESS_ADJUST, default=DEFAULT_DISABLE_BRIGHTNESS_ADJUST): cv.boolean,
|
||||
vol.Optional(CONF_DISABLE_ENTITY): cv.entity_id,
|
||||
vol.Optional(CONF_DISABLE_STATE): vol.All(cv.ensure_list, [cv.string]),
|
||||
vol.Optional(CONF_INITIAL_TRANSITION, default=DEFAULT_INITIAL_TRANSITION): VALID_TRANSITION,
|
||||
vol.Optional(CONF_INTERVAL, default=DEFAULT_INTERVAL): cv.time_period,
|
||||
vol.Optional(CONF_MAX_BRIGHTNESS, default=DEFAULT_MAX_BRIGHTNESS): vol.All(vol.Coerce(int), vol.Range(min=1, max=100)),
|
||||
vol.Optional(CONF_MAX_COLOR_TEMP, default=DEFAULT_MAX_COLOR_TEMP): vol.All(vol.Coerce(int), vol.Range(min=1000, max=10000)),
|
||||
vol.Optional(CONF_MIN_BRIGHTNESS, default=DEFAULT_MIN_BRIGHTNESS): vol.All(vol.Coerce(int), vol.Range(min=1, max=100)),
|
||||
vol.Optional(CONF_MIN_COLOR_TEMP, default=DEFAULT_MIN_COLOR_TEMP): vol.All(vol.Coerce(int), vol.Range(min=1000, max=10000)),
|
||||
vol.Optional(CONF_ONLY_ONCE, default=DEFAULT_ONLY_ONCE): cv.boolean,
|
||||
vol.Optional(CONF_SLEEP_BRIGHTNESS, default=DEFAULT_SLEEP_BRIGHTNESS): vol.All(vol.Coerce(int), vol.Range(min=1, max=100)),
|
||||
vol.Optional(CONF_SLEEP_COLOR_TEMP, default=DEFAULT_SLEEP_COLOR_TEMP): vol.All(vol.Coerce(int), vol.Range(min=1000, max=10000)),
|
||||
vol.Optional(CONF_SLEEP_ENTITY): cv.entity_id,
|
||||
vol.Optional(CONF_SLEEP_STATE): vol.All(cv.ensure_list, [cv.string]),
|
||||
vol.Optional(CONF_SUNRISE_OFFSET, default=DEFAULT_SUNRISE_OFFSET): cv.time_period,
|
||||
vol.Optional(CONF_SUNRISE_TIME): cv.time,
|
||||
vol.Optional(CONF_SUNSET_OFFSET, default=DEFAULT_SUNSET_OFFSET): cv.time_period,
|
||||
vol.Optional(CONF_SUNSET_TIME): cv.time,
|
||||
vol.Optional(CONF_TRANSITION, default=DEFAULT_TRANSITION): VALID_TRANSITION,
|
||||
}
|
||||
|
||||
|
||||
def _convert_to_options_schema(hass, options):
|
||||
schema = {}
|
||||
for key, value in _COMMON_SCHEMA.items():
|
||||
if key.schema == CONF_LIGHTS:
|
||||
all_lights = hass.states.async_entity_ids("light")
|
||||
to_type = cv.multi_select(all_lights)
|
||||
elif value == cv.boolean:
|
||||
to_type = bool
|
||||
elif (isinstance(value, vol.All) and hasattr(value.validators, "type") and value.validators[0].type == int) or value == VALID_TRANSITION:
|
||||
to_type = value
|
||||
elif value == cv.time_period:
|
||||
to_type = cv.time_period_dict
|
||||
else:
|
||||
to_type = str
|
||||
|
||||
default = key.default() if not isinstance(key.default, vol.Undefined) else vol.UNDEFINED
|
||||
default = options.get(key.schema, default)
|
||||
schema[vol.Optional(key.schema, default=default)] = to_type
|
||||
return vol.Schema(schema)
|
||||
# _COMMON_SCHEMA = {
|
||||
# vol.Optional(CONF_DISABLE_ENTITY): cv.entity_id,
|
||||
# vol.Optional(CONF_DISABLE_STATE): vol.All(cv.ensure_list, [cv.string]),
|
||||
# vol.Optional(CONF_INTERVAL, default=DEFAULT_INTERVAL): cv.time_period,
|
||||
# vol.Optional(CONF_SLEEP_ENTITY): cv.entity_id,
|
||||
# vol.Optional(CONF_SLEEP_STATE): vol.All(cv.ensure_list, [cv.string]),
|
||||
# }
|
||||
|
|
|
|||
|
|
@ -192,21 +192,17 @@ class AdaptiveSwitch(SwitchEntity, RestoreEntity):
|
|||
self._sunset_time = opts.get(CONF_SUNSET_TIME)
|
||||
self._transition = opts.get(CONF_TRANSITION, DEFAULT_TRANSITION)
|
||||
|
||||
for which in ["_sunrise_time", "_sunset_time"]:
|
||||
# I use a hack to be able to use cv.positive_time_period_dict in
|
||||
# the options flow, which is the only serializable time setter,
|
||||
# however, I need a time, so I convert the timedelta to a datetime.
|
||||
sun_time = getattr(self, which)
|
||||
if sun_time is not None:
|
||||
dt = cv.time(
|
||||
{
|
||||
"hours": sun_time.hours,
|
||||
"minutes": sun_time.minutes,
|
||||
"seconds": sun_time.seconds,
|
||||
"milliseconds": sun_time.milliseconds,
|
||||
}
|
||||
)
|
||||
setattr(self, which, dt)
|
||||
for name, validate in [
|
||||
("_sunrise_time", cv.time),
|
||||
("_sunset_time", cv.time),
|
||||
("_sunrise_offset", cv.time_period),
|
||||
("_sunset_offset", cv.time_period),
|
||||
("_interval", cv.time_period),
|
||||
]:
|
||||
attr = getattr(self, name)
|
||||
if attr is not None:
|
||||
dt = validate(attr)
|
||||
setattr(self, name, dt)
|
||||
|
||||
# Initialize attributes that will be set in self._update_attrs
|
||||
self._percent = None
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue