Home Assistant Git Exporter
This commit is contained in:
123
config/custom_components/irrigation_unlimited/service.py
Normal file
123
config/custom_components/irrigation_unlimited/service.py
Normal file
@@ -0,0 +1,123 @@
|
||||
"""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,
|
||||
)
|
||||
Reference in New Issue
Block a user