core/homeassistant/components/tado/services.py

54 lines
1.4 KiB
Python

"""Services for the Tado integration."""
import logging
import voluptuous as vol
from homeassistant.core import HomeAssistant, ServiceCall, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import selector
from .const import (
ATTR_MESSAGE,
CONF_CONFIG_ENTRY,
CONF_READING,
DATA,
DOMAIN,
SERVICE_ADD_METER_READING,
)
_LOGGER = logging.getLogger(__name__)
SCHEMA_ADD_METER_READING = vol.Schema(
{
vol.Required(CONF_CONFIG_ENTRY): selector.ConfigEntrySelector(
{
"integration": DOMAIN,
}
),
vol.Required(CONF_READING): vol.Coerce(int),
}
)
@callback
def setup_services(hass: HomeAssistant) -> None:
"""Set up the services for the Tado integration."""
async def add_meter_reading(call: ServiceCall) -> None:
"""Send meter reading to Tado."""
entry_id: str = call.data[CONF_CONFIG_ENTRY]
reading: int = call.data[CONF_READING]
_LOGGER.debug("Add meter reading %s", reading)
tadoconnector = hass.data[DOMAIN][entry_id][DATA]
response: dict = await hass.async_add_executor_job(
tadoconnector.set_meter_reading, call.data[CONF_READING]
)
if ATTR_MESSAGE in response:
raise HomeAssistantError(response[ATTR_MESSAGE])
hass.services.async_register(
DOMAIN, SERVICE_ADD_METER_READING, add_meter_reading, SCHEMA_ADD_METER_READING
)