Move remaining lifx actions to services module (#182172)

This commit is contained in:
epenet
2026-09-14 12:24:46 +02:00
committed by GitHub
parent 42ed09d58b
commit 0349bfc8bc
3 changed files with 45 additions and 37 deletions
+2
View File
@@ -80,6 +80,8 @@ SERVICE_EFFECT_PULSE = "effect_pulse"
SERVICE_EFFECT_SKY = "effect_sky"
SERVICE_EFFECT_STOP = "effect_stop"
SERVICE_PAINT_THEME = "paint_theme"
SERVICE_SET_HEV_CYCLE_STATE = "set_hev_cycle_state"
SERVICE_SET_STATE = "set_state"
HEV_CYCLE_STATE = "hev_cycle_state"
INFRARED_BRIGHTNESS = "infrared_brightness"
-35
View File
@@ -5,7 +5,6 @@ from datetime import datetime, timedelta
from typing import Any, override
import aiolifx_effects as aiolifx_effects_module
import probatio
from homeassistant.components.light import (
ATTR_BRIGHTNESS,
@@ -13,7 +12,6 @@ from homeassistant.components.light import (
ATTR_BRIGHTNESS_STEP_PCT,
ATTR_EFFECT,
ATTR_TRANSITION,
LIGHT_TURN_ON_SCHEMA,
ColorMode,
LightEntity,
LightEntityFeature,
@@ -21,13 +19,10 @@ from homeassistant.components.light import (
from homeassistant.const import ATTR_ENTITY_ID, Platform
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import config_validation as cv, entity_platform
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from homeassistant.helpers.event import async_call_later
from homeassistant.helpers.typing import VolDictType
from .const import (
ATTR_DURATION,
ATTR_INFRARED,
ATTR_POWER,
ATTR_ZONES,
@@ -51,25 +46,6 @@ from .util import convert_8_to_16, convert_16_to_8, find_hsbk, lifx_features, me
LIFX_STATE_SETTLE_DELAY = 0.3
SERVICE_LIFX_SET_STATE = "set_state"
LIFX_SET_STATE_SCHEMA: VolDictType = {
**LIGHT_TURN_ON_SCHEMA,
ATTR_INFRARED: probatio.All(probatio.Coerce(int), probatio.Clamp(min=0, max=255)),
ATTR_ZONES: probatio.All(cv.ensure_list, [cv.positive_int]),
ATTR_POWER: cv.boolean,
}
SERVICE_LIFX_SET_HEV_CYCLE_STATE = "set_hev_cycle_state"
LIFX_SET_HEV_CYCLE_STATE_SCHEMA: VolDictType = {
probatio.Required(ATTR_POWER): cv.boolean,
ATTR_DURATION: probatio.All(
probatio.Coerce(float), probatio.Clamp(min=0, max=86400)
),
}
HSBK_HUE = 0
HSBK_SATURATION = 1
HSBK_BRIGHTNESS = 2
@@ -85,17 +61,6 @@ async def async_setup_entry(
coordinator = entry.runtime_data
manager = hass.data[DATA_LIFX_MANAGER]
device = coordinator.device
platform = entity_platform.async_get_current_platform()
platform.async_register_entity_service(
SERVICE_LIFX_SET_STATE,
LIFX_SET_STATE_SCHEMA,
"set_state",
)
platform.async_register_entity_service(
SERVICE_LIFX_SET_HEV_CYCLE_STATE,
LIFX_SET_HEV_CYCLE_STATE_SCHEMA,
"set_hev_cycle_state",
)
if lifx_features(device)["matrix"]:
if device.product in LIFX_CEILING_PRODUCT_IDS:
entity: LIFXLight = LIFXCeiling(coordinator, manager, entry)
+43 -2
View File
@@ -15,17 +15,20 @@ from homeassistant.components.light import (
ATTR_TRANSITION,
ATTR_XY_COLOR,
COLOR_GROUP,
LIGHT_TURN_ON_SCHEMA,
VALID_BRIGHTNESS,
VALID_BRIGHTNESS_PCT,
)
from homeassistant.const import ATTR_MODE
from homeassistant.const import ATTR_MODE, Platform
from homeassistant.core import HomeAssistant, ServiceCall, callback
from homeassistant.exceptions import ServiceValidationError
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.service import async_register_platform_entity_service
from homeassistant.helpers.target import (
TargetSelection,
async_extract_referenced_entity_ids,
)
from homeassistant.helpers.typing import VolDictType
from .const import (
ATTR_CHANGE,
@@ -33,8 +36,11 @@ from .const import (
ATTR_CLOUD_SATURATION_MIN,
ATTR_CYCLES,
ATTR_DIRECTION,
ATTR_DURATION,
ATTR_INFRARED,
ATTR_PALETTE,
ATTR_PERIOD,
ATTR_POWER,
ATTR_POWER_ON,
ATTR_SATURATION_MAX,
ATTR_SATURATION_MIN,
@@ -42,6 +48,7 @@ from .const import (
ATTR_SPEED,
ATTR_SPREAD,
ATTR_THEME,
ATTR_ZONES,
DATA_LIFX_MANAGER,
DOMAIN,
SERVICE_EFFECT_COLORLOOP,
@@ -52,6 +59,8 @@ from .const import (
SERVICE_EFFECT_SKY,
SERVICE_EFFECT_STOP,
SERVICE_PAINT_THEME,
SERVICE_SET_HEV_CYCLE_STATE,
SERVICE_SET_STATE,
)
from .util import async_entry_is_legacy
@@ -225,6 +234,21 @@ SERVICES_SCHEMA = {
}
LIFX_SET_STATE_SCHEMA: VolDictType = {
**LIGHT_TURN_ON_SCHEMA,
ATTR_INFRARED: probatio.All(probatio.Coerce(int), probatio.Clamp(min=0, max=255)),
ATTR_ZONES: probatio.All(cv.ensure_list, [cv.positive_int]),
ATTR_POWER: cv.boolean,
}
LIFX_SET_HEV_CYCLE_STATE_SCHEMA: VolDictType = {
probatio.Required(ATTR_POWER): cv.boolean,
ATTR_DURATION: probatio.All(
probatio.Coerce(float), probatio.Clamp(min=0, max=86400)
),
}
def _get_manager(service: ServiceCall) -> LIFXManager:
"""Return the LIFX manager, raising a user-facing error if unavailable."""
hass = service.hass
@@ -255,8 +279,25 @@ async def _async_start_effect(service: ServiceCall) -> None:
@callback
def async_setup_services(hass: HomeAssistant) -> None:
"""Register the LIFX effect services."""
"""Register the LIFX services."""
for service, schema in SERVICES_SCHEMA.items():
hass.services.async_register(
DOMAIN, service, _async_start_effect, schema=schema
)
async_register_platform_entity_service(
hass,
DOMAIN,
SERVICE_SET_STATE,
entity_domain=Platform.LIGHT,
schema=LIFX_SET_STATE_SCHEMA,
func="set_state",
)
async_register_platform_entity_service(
hass,
DOMAIN,
SERVICE_SET_HEV_CYCLE_STATE,
entity_domain=Platform.LIGHT,
schema=LIFX_SET_HEV_CYCLE_STATE_SCHEMA,
func="set_hev_cycle_state",
)