From 2076700dc4290d46075a408615457fe5d1f0dc44 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Mon, 2 Feb 2026 21:02:57 +0100 Subject: [PATCH] Move rainbird service registration (#162089) --- homeassistant/components/rainbird/__init__.py | 20 +++++++++--- homeassistant/components/rainbird/services.py | 32 +++++++++++++++++++ homeassistant/components/rainbird/switch.py | 16 ---------- 3 files changed, 47 insertions(+), 21 deletions(-) create mode 100644 homeassistant/components/rainbird/services.py diff --git a/homeassistant/components/rainbird/__init__.py b/homeassistant/components/rainbird/__init__.py index e986cc302ae..a6a5ffc65d9 100644 --- a/homeassistant/components/rainbird/__init__.py +++ b/homeassistant/components/rainbird/__init__.py @@ -18,19 +18,26 @@ from homeassistant.const import ( ) from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady -from homeassistant.helpers import device_registry as dr, entity_registry as er +from homeassistant.helpers import ( + config_validation as cv, + device_registry as dr, + entity_registry as er, +) from homeassistant.helpers.device_registry import format_mac +from homeassistant.helpers.typing import ConfigType -from .const import CONF_SERIAL_NUMBER +from .const import CONF_SERIAL_NUMBER, DOMAIN from .coordinator import ( RainbirdScheduleUpdateCoordinator, RainbirdUpdateCoordinator, async_create_clientsession, ) +from .services import async_setup_services from .types import RainbirdConfigEntry, RainbirdData _LOGGER = logging.getLogger(__name__) +CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN) PLATFORMS = [ Platform.BINARY_SENSOR, Platform.CALENDAR, @@ -40,9 +47,6 @@ PLATFORMS = [ ] -DOMAIN = "rainbird" - - def _async_register_clientsession_shutdown( hass: HomeAssistant, entry: RainbirdConfigEntry, @@ -61,6 +65,12 @@ def _async_register_clientsession_shutdown( entry.async_on_unload(_async_close_websession) +async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: + """Set up the component.""" + async_setup_services(hass) + return True + + async def async_setup_entry(hass: HomeAssistant, entry: RainbirdConfigEntry) -> bool: """Set up the config entry for Rain Bird.""" diff --git a/homeassistant/components/rainbird/services.py b/homeassistant/components/rainbird/services.py new file mode 100644 index 00000000000..d889c4cb49d --- /dev/null +++ b/homeassistant/components/rainbird/services.py @@ -0,0 +1,32 @@ +"""Rain Bird Irrigation system services.""" + +from __future__ import annotations + +import voluptuous as vol + +from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN +from homeassistant.core import HomeAssistant, callback +from homeassistant.helpers import config_validation as cv, service +from homeassistant.helpers.typing import VolDictType + +from .const import ATTR_DURATION, DOMAIN + +SERVICE_START_IRRIGATION = "start_irrigation" + +SERVICE_SCHEMA_IRRIGATION: VolDictType = { + vol.Required(ATTR_DURATION): cv.positive_float, +} + + +@callback +def async_setup_services(hass: HomeAssistant) -> None: + """Set up services.""" + + service.async_register_platform_entity_service( + hass, + DOMAIN, + SERVICE_START_IRRIGATION, + entity_domain=SWITCH_DOMAIN, + schema=SERVICE_SCHEMA_IRRIGATION, + func="async_turn_on", + ) diff --git a/homeassistant/components/rainbird/switch.py b/homeassistant/components/rainbird/switch.py index 5ba30d5803b..687de2a6d97 100644 --- a/homeassistant/components/rainbird/switch.py +++ b/homeassistant/components/rainbird/switch.py @@ -6,15 +6,12 @@ import logging from typing import Any from pyrainbird.exceptions import RainbirdApiException, RainbirdDeviceBusyException -import voluptuous as vol from homeassistant.components.switch import SwitchEntity from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError -from homeassistant.helpers import config_validation as cv, entity_platform from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from homeassistant.helpers.typing import VolDictType from homeassistant.helpers.update_coordinator import CoordinatorEntity from .const import ATTR_DURATION, CONF_IMPORTED_NAMES, DOMAIN, MANUFACTURER @@ -23,12 +20,6 @@ from .types import RainbirdConfigEntry _LOGGER = logging.getLogger(__name__) -SERVICE_START_IRRIGATION = "start_irrigation" - -SERVICE_SCHEMA_IRRIGATION: VolDictType = { - vol.Required(ATTR_DURATION): cv.positive_float, -} - async def async_setup_entry( hass: HomeAssistant, @@ -47,13 +38,6 @@ async def async_setup_entry( for zone in coordinator.data.zones ) - platform = entity_platform.async_get_current_platform() - platform.async_register_entity_service( - SERVICE_START_IRRIGATION, - SERVICE_SCHEMA_IRRIGATION, - "async_turn_on", - ) - class RainBirdSwitch(CoordinatorEntity[RainbirdUpdateCoordinator], SwitchEntity): """Representation of a Rain Bird switch."""