Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 34 additions & 38 deletions homeassistant/components/homematicip_cloud/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
from homeassistant.const import ATTR_ENTITY_ID
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.config_validation import comp_entity_ids
from homeassistant.helpers.service import (
async_register_admin_service,
verify_domain_control,
)
from homeassistant.helpers.typing import HomeAssistantType, ServiceCallType

from .const import DOMAIN as HMIPC_DOMAIN
Expand All @@ -38,17 +42,6 @@
SERVICE_RESET_ENERGY_COUNTER = "reset_energy_counter"
SERVICE_SET_ACTIVE_CLIMATE_PROFILE = "set_active_climate_profile"

HMIPC_SERVICES2 = {
SERVICE_ACTIVATE_ECO_MODE_WITH_DURATION: "_async_activate_eco_mode_with_duration",
SERVICE_ACTIVATE_ECO_MODE_WITH_PERIOD: "_async_activate_eco_mode_with_period",
SERVICE_ACTIVATE_VACATION: "_async_activate_vacation",
SERVICE_DEACTIVATE_ECO_MODE: "SERVICE_DEACTIVATE_ECO_MODE",
SERVICE_DEACTIVATE_VACATION: "_async_deactivate_vacation",
SERVICE_DUMP_HAP_CONFIG: "_async_dump_hap_config",
SERVICE_RESET_ENERGY_COUNTER: "_async_reset_energy_counter",
SERVICE_SET_ACTIVE_CLIMATE_PROFILE: "_set_active_climate_profile",
}

HMIPC_SERVICES = [
SERVICE_ACTIVATE_ECO_MODE_WITH_DURATION,
SERVICE_ACTIVATE_ECO_MODE_WITH_PERIOD,
Expand Down Expand Up @@ -120,6 +113,7 @@ async def async_setup_services(hass: HomeAssistantType) -> None:
if hass.services.async_services().get(HMIPC_DOMAIN):
return

@verify_domain_control(hass, HMIPC_DOMAIN)
async def async_call_hmipc_service(service: ServiceCallType):
"""Call correct HomematicIP Cloud service."""
service_name = service.service
Expand All @@ -142,58 +136,60 @@ async def async_call_hmipc_service(service: ServiceCallType):
await _set_active_climate_profile(hass, service)

hass.services.async_register(
HMIPC_DOMAIN,
SERVICE_ACTIVATE_ECO_MODE_WITH_DURATION,
async_call_hmipc_service,
domain=HMIPC_DOMAIN,
service=SERVICE_ACTIVATE_ECO_MODE_WITH_DURATION,
service_func=async_call_hmipc_service,
schema=SCHEMA_ACTIVATE_ECO_MODE_WITH_DURATION,
)

hass.services.async_register(
HMIPC_DOMAIN,
SERVICE_ACTIVATE_ECO_MODE_WITH_PERIOD,
async_call_hmipc_service,
domain=HMIPC_DOMAIN,
service=SERVICE_ACTIVATE_ECO_MODE_WITH_PERIOD,
service_func=async_call_hmipc_service,
schema=SCHEMA_ACTIVATE_ECO_MODE_WITH_PERIOD,
)

hass.services.async_register(
HMIPC_DOMAIN,
SERVICE_ACTIVATE_VACATION,
async_call_hmipc_service,
domain=HMIPC_DOMAIN,
service=SERVICE_ACTIVATE_VACATION,
service_func=async_call_hmipc_service,
schema=SCHEMA_ACTIVATE_VACATION,
)

hass.services.async_register(
HMIPC_DOMAIN,
SERVICE_DEACTIVATE_ECO_MODE,
async_call_hmipc_service,
domain=HMIPC_DOMAIN,
service=SERVICE_DEACTIVATE_ECO_MODE,
service_func=async_call_hmipc_service,
schema=SCHEMA_DEACTIVATE_ECO_MODE,
)

hass.services.async_register(
HMIPC_DOMAIN,
SERVICE_DEACTIVATE_VACATION,
async_call_hmipc_service,
domain=HMIPC_DOMAIN,
service=SERVICE_DEACTIVATE_VACATION,
service_func=async_call_hmipc_service,
schema=SCHEMA_DEACTIVATE_VACATION,
)

hass.services.async_register(
HMIPC_DOMAIN,
SERVICE_SET_ACTIVE_CLIMATE_PROFILE,
async_call_hmipc_service,
domain=HMIPC_DOMAIN,
service=SERVICE_SET_ACTIVE_CLIMATE_PROFILE,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(note: I'm not familiar with homematic)

Isn't this something like a climate preset ? Should this be an admin service or should it use the service helper verify_domain_control where they can call this service if they can control any homematic device?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. I'll add verify_domain_control and make this service user accessible.

service_func=async_call_hmipc_service,
schema=SCHEMA_SET_ACTIVE_CLIMATE_PROFILE,
)

hass.services.async_register(
HMIPC_DOMAIN,
SERVICE_DUMP_HAP_CONFIG,
async_call_hmipc_service,
async_register_admin_service(
hass=hass,
domain=HMIPC_DOMAIN,
service=SERVICE_DUMP_HAP_CONFIG,
service_func=async_call_hmipc_service,
schema=SCHEMA_DUMP_HAP_CONFIG,
)

hass.helpers.service.async_register_admin_service(
HMIPC_DOMAIN,
SERVICE_RESET_ENERGY_COUNTER,
async_call_hmipc_service,
async_register_admin_service(
hass=hass,
domain=HMIPC_DOMAIN,
service=SERVICE_RESET_ENERGY_COUNTER,
service_func=async_call_hmipc_service,
schema=SCHEMA_RESET_ENERGY_COUNTER,
)

Expand All @@ -204,7 +200,7 @@ async def async_unload_services(hass: HomeAssistantType):
return

for hmipc_service in HMIPC_SERVICES:
hass.services.async_remove(HMIPC_DOMAIN, hmipc_service)
hass.services.async_remove(domain=HMIPC_DOMAIN, service=hmipc_service)


async def _async_activate_eco_mode_with_duration(
Expand Down