Add Rachio Scheudles

This commit is contained in:
brg468 2020-03-29 15:30:09 -04:00
parent dd3cd95954
commit a015ec4a19
3 changed files with 22 additions and 1 deletions

View file

@ -35,6 +35,7 @@ from .const import (
KEY_TYPE,
KEY_USERNAME,
KEY_ZONES,
KEY_SCHEDULES,
RACHIO_API_EXCEPTIONS,
)
@ -94,7 +95,7 @@ SUBTYPE_ZONE_CYCLING = "ZONE_CYCLING"
SUBTYPE_ZONE_CYCLING_COMPLETED = "ZONE_CYCLING_COMPLETED"
# Webhook callbacks
LISTEN_EVENT_TYPES = ["DEVICE_STATUS_EVENT", "ZONE_STATUS_EVENT"]
LISTEN_EVENT_TYPES = ["DEVICE_STATUS_EVENT", "ZONE_STATUS_EVENT", "SCHEDULE_STATUS_EVENT"]
WEBHOOK_CONST_ID = "homeassistant.rachio:"
WEBHOOK_PATH = URL_API + DOMAIN
SIGNAL_RACHIO_UPDATE = DOMAIN + "_update"
@ -258,6 +259,7 @@ class RachioIro:
self.mac_address = data[KEY_MAC_ADDRESS]
self.model = data[KEY_MODEL]
self._zones = data[KEY_ZONES]
self._schedules = data[KEY_SCHEDULES]
self._init_data = data
self._webhooks = webhooks
_LOGGER.debug('%s has ID "%s"', str(self), self.controller_id)
@ -295,6 +297,7 @@ class RachioIro:
for event_type in self.rachio.notification.getWebhookEventType()[1]:
if event_type[KEY_NAME] in LISTEN_EVENT_TYPES:
event_types.append({"id": event_type[KEY_ID]})
# Register to listen to these events from the device
url = self.rachio.webhook_url
@ -341,6 +344,10 @@ class RachioIro:
return zone
return None
def list_schedules(self) -> list:
"""Return a list of schedules."""
return self._schedules
def stop_watering(self) -> None:
"""Stop watering all zones connected to this controller."""

View file

@ -22,6 +22,7 @@ KEY_ID = "id"
KEY_NAME = "name"
KEY_MODEL = "model"
KEY_ON = "on"
KEY_DURATION = "totalDuration"
KEY_STATUS = "status"
KEY_SUBTYPE = "subType"
KEY_SUMMARY = "summary"
@ -33,6 +34,8 @@ KEY_USERNAME = "username"
KEY_ZONE_ID = "zoneId"
KEY_ZONE_NUMBER = "zoneNumber"
KEY_ZONES = "zones"
KEY_SCHEDULES = "scheduleRules"
KEY_SCHEDULE_ID = "scheduleId"
# Yes we really do get all these exceptions (hopefully rachiopy switches to requests)
RACHIO_API_EXCEPTIONS = (

View file

@ -9,11 +9,15 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect
from . import (
SIGNAL_RACHIO_CONTROLLER_UPDATE,
SIGNAL_RACHIO_ZONE_UPDATE,
SIGNAL_RACHIO_SCHEDULE_UPDATE,
SUBTYPE_SLEEP_MODE_OFF,
SUBTYPE_SLEEP_MODE_ON,
SUBTYPE_ZONE_COMPLETED,
SUBTYPE_ZONE_STARTED,
SUBTYPE_ZONE_STOPPED,
SUBTYPE_SCHEDULE_COMPLETED,
SUBTYPE_SCHEDULE_STOPPED,
SUBTYPE_SCHEDULE_STARTED,
RachioDeviceInfoProvider,
)
from .const import (
@ -25,17 +29,23 @@ from .const import (
KEY_ID,
KEY_IMAGE_URL,
KEY_NAME,
KEY_DURATION,
KEY_ON,
KEY_SUBTYPE,
KEY_SUMMARY,
KEY_ZONE_ID,
KEY_ZONE_NUMBER,
KEY_SCHEDULES,
KEY_SCHEDULE_ID,
)
_LOGGER = logging.getLogger(__name__)
ATTR_ZONE_SUMMARY = "Summary"
ATTR_ZONE_NUMBER = "Zone number"
ATTR_SCHEDULE_SUMMARY = "Summary"
ATTR_SCHEDULE_ENABLED = "Enabled"
ATTR_SCHEDULE_DURATION = "Duration"
async def async_setup_entry(hass, config_entry, async_add_entities):
@ -54,6 +64,7 @@ def _create_entities(hass, config_entry):
for controller in person.controllers:
entities.append(RachioStandbySwitch(controller))
zones = controller.list_zones()
schedules = controller.list_schedules()
current_schedule = controller.current_schedule
_LOGGER.debug("Rachio setting up zones: %s", zones)
for zone in zones: