Simplify screenlogic service actions (#146609)

This commit is contained in:
epenet 2025-06-12 14:02:06 +02:00 committed by GitHub
parent c34596e54d
commit 2991726d35
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 92 additions and 87 deletions

View File

@ -18,7 +18,7 @@ from homeassistant.util import slugify
from .const import DOMAIN from .const import DOMAIN
from .coordinator import ScreenlogicDataUpdateCoordinator, async_get_connect_info from .coordinator import ScreenlogicDataUpdateCoordinator, async_get_connect_info
from .data import ENTITY_MIGRATIONS from .data import ENTITY_MIGRATIONS
from .services import async_load_screenlogic_services from .services import async_setup_services
from .util import generate_unique_id from .util import generate_unique_id
type ScreenLogicConfigEntry = ConfigEntry[ScreenlogicDataUpdateCoordinator] type ScreenLogicConfigEntry = ConfigEntry[ScreenlogicDataUpdateCoordinator]
@ -48,7 +48,7 @@ CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
"""Set up Screenlogic.""" """Set up Screenlogic."""
async_load_screenlogic_services(hass) async_setup_services(hass)
return True return True

View File

@ -54,19 +54,15 @@ TURN_ON_SUPER_CHLOR_SCHEMA = BASE_SERVICE_SCHEMA.extend(
) )
@callback async def _get_coordinators(
def async_load_screenlogic_services(hass: HomeAssistant):
"""Set up services for the ScreenLogic integration."""
async def get_coordinators(
service_call: ServiceCall, service_call: ServiceCall,
) -> list[ScreenlogicDataUpdateCoordinator]: ) -> list[ScreenlogicDataUpdateCoordinator]:
entry_ids = {service_call.data[ATTR_CONFIG_ENTRY]} entry_ids = {service_call.data[ATTR_CONFIG_ENTRY]}
coordinators: list[ScreenlogicDataUpdateCoordinator] = [] coordinators: list[ScreenlogicDataUpdateCoordinator] = []
for entry_id in entry_ids: for entry_id in entry_ids:
config_entry = cast( config_entry = cast(
ScreenLogicConfigEntry | None, ScreenLogicConfigEntry | None,
hass.config_entries.async_get_entry(entry_id), service_call.hass.config_entries.async_get_entry(entry_id),
) )
if not config_entry: if not config_entry:
raise ServiceValidationError( raise ServiceValidationError(
@ -87,10 +83,11 @@ def async_load_screenlogic_services(hass: HomeAssistant):
return coordinators return coordinators
async def async_set_color_mode(service_call: ServiceCall) -> None:
async def _async_set_color_mode(service_call: ServiceCall) -> None:
color_num = SUPPORTED_COLOR_MODES[service_call.data[ATTR_COLOR_MODE]] color_num = SUPPORTED_COLOR_MODES[service_call.data[ATTR_COLOR_MODE]]
coordinator: ScreenlogicDataUpdateCoordinator coordinator: ScreenlogicDataUpdateCoordinator
for coordinator in await get_coordinators(service_call): for coordinator in await _get_coordinators(service_call):
_LOGGER.debug( _LOGGER.debug(
"Service %s called on %s with mode %s", "Service %s called on %s with mode %s",
SERVICE_SET_COLOR_MODE, SERVICE_SET_COLOR_MODE,
@ -104,13 +101,14 @@ def async_load_screenlogic_services(hass: HomeAssistant):
except ScreenLogicError as error: except ScreenLogicError as error:
raise HomeAssistantError(error) from error raise HomeAssistantError(error) from error
async def async_set_super_chlor(
async def _async_set_super_chlor(
service_call: ServiceCall, service_call: ServiceCall,
is_on: bool, is_on: bool,
runtime: int | None = None, runtime: int | None = None,
) -> None: ) -> None:
coordinator: ScreenlogicDataUpdateCoordinator coordinator: ScreenlogicDataUpdateCoordinator
for coordinator in await get_coordinators(service_call): for coordinator in await _get_coordinators(service_call):
if EQUIPMENT_FLAG.CHLORINATOR not in coordinator.gateway.equipment_flags: if EQUIPMENT_FLAG.CHLORINATOR not in coordinator.gateway.equipment_flags:
raise ServiceValidationError( raise ServiceValidationError(
f"Equipment configuration for {coordinator.gateway.name} does not" f"Equipment configuration for {coordinator.gateway.name} does not"
@ -132,27 +130,34 @@ def async_load_screenlogic_services(hass: HomeAssistant):
except ScreenLogicError as error: except ScreenLogicError as error:
raise HomeAssistantError(error) from error raise HomeAssistantError(error) from error
async def async_start_super_chlor(service_call: ServiceCall) -> None:
runtime = service_call.data[ATTR_RUNTIME]
await async_set_super_chlor(service_call, True, runtime)
async def async_stop_super_chlor(service_call: ServiceCall) -> None: async def _async_start_super_chlor(service_call: ServiceCall) -> None:
await async_set_super_chlor(service_call, False) runtime = service_call.data[ATTR_RUNTIME]
await _async_set_super_chlor(service_call, True, runtime)
async def _async_stop_super_chlor(service_call: ServiceCall) -> None:
await _async_set_super_chlor(service_call, False)
@callback
def async_setup_services(hass: HomeAssistant):
"""Set up services for the ScreenLogic integration."""
hass.services.async_register( hass.services.async_register(
DOMAIN, SERVICE_SET_COLOR_MODE, async_set_color_mode, SET_COLOR_MODE_SCHEMA DOMAIN, SERVICE_SET_COLOR_MODE, _async_set_color_mode, SET_COLOR_MODE_SCHEMA
) )
hass.services.async_register( hass.services.async_register(
DOMAIN, DOMAIN,
SERVICE_START_SUPER_CHLORINATION, SERVICE_START_SUPER_CHLORINATION,
async_start_super_chlor, _async_start_super_chlor,
TURN_ON_SUPER_CHLOR_SCHEMA, TURN_ON_SUPER_CHLOR_SCHEMA,
) )
hass.services.async_register( hass.services.async_register(
DOMAIN, DOMAIN,
SERVICE_STOP_SUPER_CHLORINATION, SERVICE_STOP_SUPER_CHLORINATION,
async_stop_super_chlor, _async_stop_super_chlor,
BASE_SERVICE_SCHEMA, BASE_SERVICE_SCHEMA,
) )