mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Use runtime_data in rachio (#144896)
This commit is contained in:
parent
11644d48ee
commit
4bc5987f36
@ -7,13 +7,12 @@ from rachiopy import Rachio
|
||||
from requests.exceptions import ConnectTimeout
|
||||
|
||||
from homeassistant.components import cloud
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_API_KEY, CONF_WEBHOOK_ID, Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
|
||||
|
||||
from .const import CONF_CLOUDHOOK_URL, CONF_MANUAL_RUN_MINS, DOMAIN
|
||||
from .device import RachioPerson
|
||||
from .const import CONF_CLOUDHOOK_URL, CONF_MANUAL_RUN_MINS
|
||||
from .device import RachioConfigEntry, RachioPerson
|
||||
from .webhooks import (
|
||||
async_get_or_create_registered_webhook_id_and_url,
|
||||
async_register_webhook,
|
||||
@ -25,21 +24,20 @@ _LOGGER = logging.getLogger(__name__)
|
||||
PLATFORMS = [Platform.BINARY_SENSOR, Platform.CALENDAR, Platform.SWITCH]
|
||||
|
||||
|
||||
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
async def async_unload_entry(hass: HomeAssistant, entry: RachioConfigEntry) -> bool:
|
||||
"""Unload a config entry."""
|
||||
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
|
||||
async_unregister_webhook(hass, entry)
|
||||
hass.data[DOMAIN].pop(entry.entry_id)
|
||||
return unload_ok
|
||||
|
||||
|
||||
async def async_remove_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||
async def async_remove_entry(hass: HomeAssistant, entry: RachioConfigEntry) -> None:
|
||||
"""Remove a rachio config entry."""
|
||||
if CONF_CLOUDHOOK_URL in entry.data:
|
||||
await cloud.async_delete_cloudhook(hass, entry.data[CONF_WEBHOOK_ID])
|
||||
|
||||
|
||||
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
async def async_setup_entry(hass: HomeAssistant, entry: RachioConfigEntry) -> bool:
|
||||
"""Set up the Rachio config entry."""
|
||||
|
||||
config = entry.data
|
||||
@ -97,7 +95,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
await base.schedule_coordinator.async_config_entry_first_refresh()
|
||||
|
||||
# Enable platform
|
||||
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = person
|
||||
entry.runtime_data = person
|
||||
async_register_webhook(hass, entry)
|
||||
|
||||
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
||||
|
@ -10,7 +10,6 @@ from homeassistant.components.binary_sensor import (
|
||||
BinarySensorEntity,
|
||||
BinarySensorEntityDescription,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import EntityCategory
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
@ -18,7 +17,6 @@ from homeassistant.helpers.entity import Entity
|
||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||
|
||||
from .const import (
|
||||
DOMAIN as DOMAIN_RACHIO,
|
||||
KEY_BATTERY,
|
||||
KEY_DETECT_FLOW,
|
||||
KEY_DEVICE_ID,
|
||||
@ -33,7 +31,7 @@ from .const import (
|
||||
STATUS_ONLINE,
|
||||
)
|
||||
from .coordinator import RachioUpdateCoordinator
|
||||
from .device import RachioIro, RachioPerson
|
||||
from .device import RachioConfigEntry, RachioIro
|
||||
from .entity import RachioDevice, RachioHoseTimerEntity
|
||||
from .webhooks import (
|
||||
SUBTYPE_COLD_REBOOT,
|
||||
@ -109,7 +107,7 @@ HOSE_TIMER_BINARY_SENSOR_TYPES: tuple[RachioHoseTimerBinarySensorDescription, ..
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
config_entry: ConfigEntry,
|
||||
config_entry: RachioConfigEntry,
|
||||
async_add_entities: AddConfigEntryEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up the Rachio binary sensors."""
|
||||
@ -117,9 +115,11 @@ async def async_setup_entry(
|
||||
async_add_entities(entities)
|
||||
|
||||
|
||||
def _create_entities(hass: HomeAssistant, config_entry: ConfigEntry) -> list[Entity]:
|
||||
def _create_entities(
|
||||
hass: HomeAssistant, config_entry: RachioConfigEntry
|
||||
) -> list[Entity]:
|
||||
entities: list[Entity] = []
|
||||
person: RachioPerson = hass.data[DOMAIN_RACHIO][config_entry.entry_id]
|
||||
person = config_entry.runtime_data
|
||||
entities.extend(
|
||||
RachioControllerBinarySensor(controller, description)
|
||||
for controller in person.controllers
|
||||
|
@ -9,7 +9,6 @@ from homeassistant.components.calendar import (
|
||||
CalendarEntityFeature,
|
||||
CalendarEvent,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||
@ -17,7 +16,6 @@ from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||
from homeassistant.util import dt as dt_util
|
||||
|
||||
from .const import (
|
||||
DOMAIN,
|
||||
KEY_ADDRESS,
|
||||
KEY_DURATION_SECONDS,
|
||||
KEY_ID,
|
||||
@ -33,18 +31,18 @@ from .const import (
|
||||
KEY_VALVE_NAME,
|
||||
)
|
||||
from .coordinator import RachioScheduleUpdateCoordinator
|
||||
from .device import RachioPerson
|
||||
from .device import RachioConfigEntry
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
config_entry: ConfigEntry,
|
||||
config_entry: RachioConfigEntry,
|
||||
async_add_entities: AddConfigEntryEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up entry for Rachio smart hose timer calendar."""
|
||||
person: RachioPerson = hass.data[DOMAIN][config_entry.entry_id]
|
||||
person = config_entry.runtime_data
|
||||
async_add_entities(
|
||||
RachioCalendarEntity(base_station.schedule_coordinator, base_station)
|
||||
for base_station in person.base_stations
|
||||
|
@ -57,11 +57,13 @@ RESUME_SERVICE_SCHEMA = vol.Schema({vol.Optional(ATTR_DEVICES): cv.string})
|
||||
|
||||
STOP_SERVICE_SCHEMA = vol.Schema({vol.Optional(ATTR_DEVICES): cv.string})
|
||||
|
||||
type RachioConfigEntry = ConfigEntry[RachioPerson]
|
||||
|
||||
|
||||
class RachioPerson:
|
||||
"""Represent a Rachio user."""
|
||||
|
||||
def __init__(self, rachio: Rachio, config_entry: ConfigEntry) -> None:
|
||||
def __init__(self, rachio: Rachio, config_entry: RachioConfigEntry) -> None:
|
||||
"""Create an object from the provided API instance."""
|
||||
# Use API token to get user ID
|
||||
self.rachio = rachio
|
||||
|
@ -9,7 +9,6 @@ from typing import Any
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.switch import SwitchEntity
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import ATTR_ENTITY_ID, ATTR_ID
|
||||
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, ServiceCall, callback
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
@ -57,7 +56,7 @@ from .const import (
|
||||
SLOPE_SLIGHT,
|
||||
SLOPE_STEEP,
|
||||
)
|
||||
from .device import RachioPerson
|
||||
from .device import RachioConfigEntry
|
||||
from .entity import RachioDevice, RachioHoseTimerEntity
|
||||
from .webhooks import (
|
||||
SUBTYPE_RAIN_DELAY_OFF,
|
||||
@ -99,7 +98,7 @@ START_MULTIPLE_ZONES_SCHEMA = vol.Schema(
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
config_entry: ConfigEntry,
|
||||
config_entry: RachioConfigEntry,
|
||||
async_add_entities: AddConfigEntryEntitiesCallback,
|
||||
) -> None:
|
||||
"""Set up the Rachio switches."""
|
||||
@ -117,7 +116,7 @@ async def async_setup_entry(
|
||||
def start_multiple(service: ServiceCall) -> None:
|
||||
"""Service to start multiple zones in sequence."""
|
||||
zones_list = []
|
||||
person = hass.data[DOMAIN][config_entry.entry_id]
|
||||
person = config_entry.runtime_data
|
||||
entity_id = service.data[ATTR_ENTITY_ID]
|
||||
duration = iter(service.data[ATTR_DURATION])
|
||||
default_time = service.data[ATTR_DURATION][0]
|
||||
@ -173,9 +172,11 @@ async def async_setup_entry(
|
||||
)
|
||||
|
||||
|
||||
def _create_entities(hass: HomeAssistant, config_entry: ConfigEntry) -> list[Entity]:
|
||||
def _create_entities(
|
||||
hass: HomeAssistant, config_entry: RachioConfigEntry
|
||||
) -> list[Entity]:
|
||||
entities: list[Entity] = []
|
||||
person: RachioPerson = hass.data[DOMAIN][config_entry.entry_id]
|
||||
person = config_entry.runtime_data
|
||||
# Fetch the schedule once at startup
|
||||
# in order to avoid every zone doing it
|
||||
for controller in person.controllers:
|
||||
|
@ -5,7 +5,6 @@ from __future__ import annotations
|
||||
from aiohttp import web
|
||||
|
||||
from homeassistant.components import cloud, webhook
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_WEBHOOK_ID, URL_API
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_send
|
||||
@ -21,7 +20,7 @@ from .const import (
|
||||
SIGNAL_RACHIO_SCHEDULE_UPDATE,
|
||||
SIGNAL_RACHIO_ZONE_UPDATE,
|
||||
)
|
||||
from .device import RachioPerson
|
||||
from .device import RachioConfigEntry
|
||||
|
||||
# Device webhook values
|
||||
TYPE_CONTROLLER_STATUS = "DEVICE_STATUS"
|
||||
@ -83,7 +82,7 @@ SIGNAL_MAP = {
|
||||
|
||||
|
||||
@callback
|
||||
def async_register_webhook(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||
def async_register_webhook(hass: HomeAssistant, entry: RachioConfigEntry) -> None:
|
||||
"""Register a webhook."""
|
||||
webhook_id: str = entry.data[CONF_WEBHOOK_ID]
|
||||
|
||||
@ -91,7 +90,7 @@ def async_register_webhook(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||
hass: HomeAssistant, webhook_id: str, request: web.Request
|
||||
) -> web.Response:
|
||||
"""Handle webhook calls from the server."""
|
||||
person: RachioPerson = hass.data[DOMAIN][entry.entry_id]
|
||||
person = entry.runtime_data
|
||||
data = await request.json()
|
||||
|
||||
try:
|
||||
@ -114,14 +113,14 @@ def async_register_webhook(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||
|
||||
|
||||
@callback
|
||||
def async_unregister_webhook(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||
def async_unregister_webhook(hass: HomeAssistant, entry: RachioConfigEntry) -> None:
|
||||
"""Unregister a webhook."""
|
||||
webhook_id: str = entry.data[CONF_WEBHOOK_ID]
|
||||
webhook.async_unregister(hass, webhook_id)
|
||||
|
||||
|
||||
async def async_get_or_create_registered_webhook_id_and_url(
|
||||
hass: HomeAssistant, entry: ConfigEntry
|
||||
hass: HomeAssistant, entry: RachioConfigEntry
|
||||
) -> str:
|
||||
"""Generate webhook url."""
|
||||
config = entry.data.copy()
|
||||
|
Loading…
x
Reference in New Issue
Block a user