Move roborock service registration (#162090)

This commit is contained in:
epenet
2026-02-02 17:07:44 +01:00
committed by GitHub
parent b7db8684db
commit ba4a163e24
5 changed files with 67 additions and 41 deletions
+10 -1
View File
@@ -23,8 +23,9 @@ from roborock.mqtt.session import MqttSessionUnauthorized
from homeassistant.const import CONF_USERNAME, EVENT_HOMEASSISTANT_STOP
from homeassistant.core import Event, HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers import config_validation as cv, device_registry as dr
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.typing import ConfigType
from .const import (
CONF_BASE_URL,
@@ -47,12 +48,20 @@ from .coordinator import (
RoborockWetDryVacUpdateCoordinator,
)
from .roborock_storage import CacheStore, async_cleanup_map_storage
from .services import async_setup_services
CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
SCAN_INTERVAL = timedelta(seconds=30)
_LOGGER = logging.getLogger(__name__)
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: RoborockConfigEntry) -> bool:
"""Set up roborock from a config entry."""
await async_cleanup_map_storage(hass, entry.entry_id)
+1 -3
View File
@@ -52,12 +52,10 @@ IMAGE_CACHE_INTERVAL = timedelta(seconds=30)
MAP_SLEEP = 3
GET_MAPS_SERVICE_NAME = "get_maps"
MAP_SCALE = 4
MAP_FILE_FORMAT = "PNG"
MAP_FILENAME_SUFFIX = ".png"
SET_VACUUM_GOTO_POSITION_SERVICE_NAME = "set_vacuum_goto_position"
GET_VACUUM_CURRENT_POSITION_SERVICE_NAME = "get_vacuum_current_position"
A01_UPDATE_INTERVAL = timedelta(minutes=1)
@@ -0,0 +1,53 @@
"""Roborock services."""
import voluptuous as vol
from homeassistant.components.vacuum import DOMAIN as VACUUM_DOMAIN
from homeassistant.core import HomeAssistant, SupportsResponse, callback
from homeassistant.helpers import config_validation as cv, service
from .const import DOMAIN
GET_MAPS_SERVICE_NAME = "get_maps"
SET_VACUUM_GOTO_POSITION_SERVICE_NAME = "set_vacuum_goto_position"
GET_VACUUM_CURRENT_POSITION_SERVICE_NAME = "get_vacuum_current_position"
@callback
def async_setup_services(hass: HomeAssistant) -> None:
"""Set up services."""
service.async_register_platform_entity_service(
hass,
DOMAIN,
GET_MAPS_SERVICE_NAME,
entity_domain=VACUUM_DOMAIN,
schema=None,
func="get_maps",
supports_response=SupportsResponse.ONLY,
)
service.async_register_platform_entity_service(
hass,
DOMAIN,
GET_VACUUM_CURRENT_POSITION_SERVICE_NAME,
entity_domain=VACUUM_DOMAIN,
schema=None,
func="get_vacuum_current_position",
supports_response=SupportsResponse.ONLY,
)
service.async_register_platform_entity_service(
hass,
DOMAIN,
SET_VACUUM_GOTO_POSITION_SERVICE_NAME,
entity_domain=VACUUM_DOMAIN,
schema=cv.make_entity_service_schema(
{
vol.Required("x"): vol.Coerce(int),
vol.Required("y"): vol.Coerce(int),
},
),
func="async_set_vacuum_goto_position",
supports_response=SupportsResponse.NONE,
)
+2 -36
View File
@@ -6,24 +6,17 @@ from typing import Any
from roborock.data import RoborockStateCode, SCWindMapping, WorkStatusMapping
from roborock.exceptions import RoborockException
from roborock.roborock_typing import RoborockCommand
import voluptuous as vol
from homeassistant.components.vacuum import (
StateVacuumEntity,
VacuumActivity,
VacuumEntityFeature,
)
from homeassistant.core import HomeAssistant, ServiceResponse, SupportsResponse
from homeassistant.core import HomeAssistant, ServiceResponse
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import config_validation as cv, entity_platform
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .const import (
DOMAIN,
GET_MAPS_SERVICE_NAME,
GET_VACUUM_CURRENT_POSITION_SERVICE_NAME,
SET_VACUUM_GOTO_POSITION_SERVICE_NAME,
)
from .const import DOMAIN
from .coordinator import (
RoborockB01Q7UpdateCoordinator,
RoborockConfigEntry,
@@ -92,33 +85,6 @@ async def async_setup_entry(
for coordinator in config_entry.runtime_data.b01
if isinstance(coordinator, RoborockB01Q7UpdateCoordinator)
)
platform = entity_platform.async_get_current_platform()
platform.async_register_entity_service(
GET_MAPS_SERVICE_NAME,
None,
RoborockVacuum.get_maps.__name__,
supports_response=SupportsResponse.ONLY,
)
platform.async_register_entity_service(
GET_VACUUM_CURRENT_POSITION_SERVICE_NAME,
None,
RoborockVacuum.get_vacuum_current_position.__name__,
supports_response=SupportsResponse.ONLY,
)
platform.async_register_entity_service(
SET_VACUUM_GOTO_POSITION_SERVICE_NAME,
cv.make_entity_service_schema(
{
vol.Required("x"): vol.Coerce(int),
vol.Required("y"): vol.Coerce(int),
},
),
RoborockVacuum.async_set_vacuum_goto_position.__name__,
supports_response=SupportsResponse.NONE,
)
class RoborockVacuum(RoborockCoordinatedEntityV1, StateVacuumEntity):
+1 -1
View File
@@ -10,7 +10,7 @@ from syrupy.assertion import SnapshotAssertion
from vacuum_map_parser_base.map_data import Point
from homeassistant.components.roborock import DOMAIN
from homeassistant.components.roborock.const import (
from homeassistant.components.roborock.services import (
GET_MAPS_SERVICE_NAME,
GET_VACUUM_CURRENT_POSITION_SERVICE_NAME,
SET_VACUUM_GOTO_POSITION_SERVICE_NAME,