Move dynalite service definitions to separate module (#136446)

pull/136577/head
epenet 2025-01-24 15:55:53 +01:00 committed by GitHub
parent fc9ad40ac8
commit 728d381eb3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 83 additions and 56 deletions

View File

@ -2,27 +2,17 @@
from __future__ import annotations
import voluptuous as vol
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, ServiceCall
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.typing import ConfigType
from .bridge import DynaliteBridge
from .const import (
ATTR_AREA,
ATTR_CHANNEL,
ATTR_HOST,
DOMAIN,
LOGGER,
PLATFORMS,
SERVICE_REQUEST_AREA_PRESET,
SERVICE_REQUEST_CHANNEL_LEVEL,
)
from .const import DOMAIN, LOGGER, PLATFORMS
from .convert_config import convert_config
from .panel import async_register_dynalite_frontend
from .services import setup_services
CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
@ -31,49 +21,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
"""Set up the Dynalite platform."""
hass.data[DOMAIN] = {}
async def dynalite_service(service_call: ServiceCall) -> None:
data = service_call.data
host = data.get(ATTR_HOST, "")
bridges = [
bridge
for bridge in hass.data[DOMAIN].values()
if not host or bridge.host == host
]
LOGGER.debug("Selected bridged for service call: %s", bridges)
if service_call.service == SERVICE_REQUEST_AREA_PRESET:
bridge_attr = "request_area_preset"
elif service_call.service == SERVICE_REQUEST_CHANNEL_LEVEL:
bridge_attr = "request_channel_level"
for bridge in bridges:
getattr(bridge.dynalite_devices, bridge_attr)(
data[ATTR_AREA], data.get(ATTR_CHANNEL)
)
hass.services.async_register(
DOMAIN,
SERVICE_REQUEST_AREA_PRESET,
dynalite_service,
vol.Schema(
{
vol.Optional(ATTR_HOST): cv.string,
vol.Required(ATTR_AREA): int,
vol.Optional(ATTR_CHANNEL): int,
}
),
)
hass.services.async_register(
DOMAIN,
SERVICE_REQUEST_CHANNEL_LEVEL,
dynalite_service,
vol.Schema(
{
vol.Optional(ATTR_HOST): cv.string,
vol.Required(ATTR_AREA): int,
vol.Required(ATTR_CHANNEL): int,
}
),
)
setup_services(hass)
await async_register_dynalite_frontend(hass)

View File

@ -0,0 +1,79 @@
"""Support for the Dynalite networks."""
from __future__ import annotations
import voluptuous as vol
from homeassistant.core import HomeAssistant, ServiceCall, callback
from homeassistant.helpers import config_validation as cv
from .bridge import DynaliteBridge
from .const import (
ATTR_AREA,
ATTR_CHANNEL,
ATTR_HOST,
DOMAIN,
LOGGER,
SERVICE_REQUEST_AREA_PRESET,
SERVICE_REQUEST_CHANNEL_LEVEL,
)
@callback
def _get_bridges(service_call: ServiceCall) -> list[DynaliteBridge]:
host = service_call.data.get(ATTR_HOST, "")
bridges = [
bridge
for bridge in service_call.hass.data[DOMAIN].values()
if not host or bridge.host == host
]
LOGGER.debug("Selected bridges for service call: %s", bridges)
return bridges
async def _request_area_preset(service_call: ServiceCall) -> None:
bridges = _get_bridges(service_call)
data = service_call.data
for bridge in bridges:
bridge.dynalite_devices.request_area_preset(
data[ATTR_AREA], data.get(ATTR_CHANNEL)
)
async def _request_channel_level(service_call: ServiceCall) -> None:
bridges = _get_bridges(service_call)
data = service_call.data
for bridge in bridges:
bridge.dynalite_devices.request_channel_level(
data[ATTR_AREA], data[ATTR_CHANNEL]
)
@callback
def setup_services(hass: HomeAssistant) -> None:
"""Set up the Dynalite platform."""
hass.services.async_register(
DOMAIN,
SERVICE_REQUEST_AREA_PRESET,
_request_area_preset,
vol.Schema(
{
vol.Optional(ATTR_HOST): cv.string,
vol.Required(ATTR_AREA): int,
vol.Optional(ATTR_CHANNEL): int,
}
),
)
hass.services.async_register(
DOMAIN,
SERVICE_REQUEST_CHANNEL_LEVEL,
_request_channel_level,
vol.Schema(
{
vol.Optional(ATTR_HOST): cv.string,
vol.Required(ATTR_AREA): int,
vol.Required(ATTR_CHANNEL): int,
}
),
)