"""This module handles the HA service call interface""" from homeassistant.core import ServiceCall, callback from homeassistant.util import dt from homeassistant.helpers import entity_platform from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.service import async_register_admin_service from homeassistant.const import ( SERVICE_RELOAD, ) from .irrigation_unlimited import IUCoordinator from .entity import IUEntity from .schema import ( ENTITY_SCHEMA, ENABLE_DISABLE_SCHEMA, TIME_ADJUST_SCHEMA, MANUAL_RUN_SCHEMA, RELOAD_SERVICE_SCHEMA, LOAD_SCHEDULE_SCHEMA, SUSPEND_SCHEMA, CANCEL_SCHEMA, PAUSE_RESUME_SCHEMA, ) from .const import ( DOMAIN, SERVICE_CANCEL, SERVICE_DISABLE, SERVICE_ENABLE, SERVICE_MANUAL_RUN, SERVICE_TIME_ADJUST, SERVICE_TOGGLE, SERVICE_LOAD_SCHEDULE, SERVICE_SUSPEND, SERVICE_SKIP, SERVICE_PAUSE, SERVICE_RESUME, ) @callback async def async_entity_service_handler(entity: IUEntity, call: ServiceCall) -> None: """Dispatch the service call""" entity.dispatch(call.service, call) def register_platform_services(platform: entity_platform.EntityPlatform) -> None: """Register all the available service calls for the entities""" platform.async_register_entity_service( SERVICE_ENABLE, ENABLE_DISABLE_SCHEMA, async_entity_service_handler ) platform.async_register_entity_service( SERVICE_DISABLE, ENABLE_DISABLE_SCHEMA, async_entity_service_handler ) platform.async_register_entity_service( SERVICE_TOGGLE, ENABLE_DISABLE_SCHEMA, async_entity_service_handler ) platform.async_register_entity_service( SERVICE_CANCEL, CANCEL_SCHEMA, async_entity_service_handler ) platform.async_register_entity_service( SERVICE_TIME_ADJUST, TIME_ADJUST_SCHEMA, async_entity_service_handler ) platform.async_register_entity_service( SERVICE_MANUAL_RUN, MANUAL_RUN_SCHEMA, async_entity_service_handler ) platform.async_register_entity_service( SERVICE_SUSPEND, SUSPEND_SCHEMA, async_entity_service_handler ) platform.async_register_entity_service( SERVICE_SKIP, ENTITY_SCHEMA, async_entity_service_handler ) platform.async_register_entity_service( SERVICE_PAUSE, PAUSE_RESUME_SCHEMA, async_entity_service_handler ) platform.async_register_entity_service( SERVICE_RESUME, PAUSE_RESUME_SCHEMA, async_entity_service_handler ) def register_component_services( component: EntityComponent, coordinator: IUCoordinator ) -> None: """Register the component""" @callback async def reload_service_handler(call: ServiceCall) -> None: """Reload yaml entities.""" # pylint: disable=unused-argument # pylint: disable=import-outside-toplevel from .binary_sensor import async_reload_platform conf = await component.async_prepare_reload(skip_reset=True) if conf is None or conf == {}: conf = {DOMAIN: {}} coordinator.load(conf[DOMAIN]) await async_reload_platform(component, coordinator) coordinator.timer(dt.utcnow()) coordinator.clock.start() async_register_admin_service( component.hass, DOMAIN, SERVICE_RELOAD, reload_service_handler, schema=RELOAD_SERVICE_SCHEMA, ) @callback async def load_schedule_service_handler(call: ServiceCall) -> None: """Reload schedule.""" coordinator.service_call(call.service, None, None, None, call.data) component.hass.services.async_register( DOMAIN, SERVICE_LOAD_SCHEDULE, load_schedule_service_handler, LOAD_SCHEDULE_SCHEMA, )