I have a vacation property located in a microclimate area that frequently trips up Rachio’s Weather Intelligence feature. I see frequent schedule skips based on predicted and observed rainfall in my surrounding area but while it might be (or have been) raining nearby, the rain frequently misses my immediate area. If this happens sporadically, the effects are negligible. But last summer it happened often enough that when I returned after being away for 6 weeks my lawn was baked to a crisp. Shortly thereafter I purchased a WeatherFlow Tempest weather station and used the Rachio integration to connect the two. While this has mostly fixed the “observed” rainfall part of the problem, the “predicted” rainfall issue is a harder one to solve.
So after that long winded problem statement here’s what I’m trying to do and the hurdles I’ve run into:
I created a Windows service that runs on an always on Window 10 PC. The service uses the WeatherFlow Tempest API to open websocket that listens for observation data from the Tempest. Messages are received every minute and shortly after midnight each day, I receive the previous day’s final adjusted rainfall values for my unit which I save to a database. My Rachio schedule runs on Tuesday, Thursday, and Saturday. My intention/hope is to calculate the total rainfall inches and estimated irrigation inches for the week on Saturday afternoon of each week. And if the total is under a certain threshold of say 1.5-2.0 inches for the week, use the Rachio API to initiate another schedule run.
I’m using the Rachio API to poll for events every minute and I’m saving the event data to a database. The problem is that event data returned by the API when polling is missing lots of information compared to what’s received by a webhook. For example: A “SCHEDULE_STATUS” event type with a subtype of SCHEDULE_COMPLETED includes a “durationInMinutes” property in the webhook event data but not in the event data returned when calling the https://api.rach.io/1/public/device/ID/event endpoint. This makes it very difficult to get the actual schedule run time particularly if the scheduled stopped part way through or (worse) was manually paused.
So I tried using zone status events to calculate zone run time. But using the event “ZONE_STATUS” type and “ZONE_STARTED” and “ZONE_COMPLETED” subtypes present similar issues; the data received by the webhook includes “zoneNumber”, “zoneId”, “zoneName”, “durationInMinutes”, and “executionType” which are all invaluable but surprisingly missing in the data returned when using the API. So the end result is that I have to parse the “summary” property to determine which zone the event belongs and then calculate the elapsed time between the “ZONE_COMPLETED” and “ZONE_STARTED” event times to determine run time for each zone.
This should be a fairly trivial programming exercise but the poor API documentation and differences in the data provided using the webhook compared to the API have made it an extremely frustrating exercise. Are there any plans to align the scant data returned by the API with that received by a webhook?
Next, I tried to explore the webhook receiver route. I created an AWS account and have a lambda function receiving webhook event data from Rachio. But getting that data to my Windows service has proved daunting. I considered running my own webserver to handle receiving the webhook data but is seems like such a useless expense and hassle (not to mention potential security implications) when the API really should be sufficient for my needs.
To put some context on this I have over 20 years of application development experience and this has been a painfully convoluted, frustrating, and time consuming task.
I love my Rachio but the API and documentation seem like such a half-hearted effort that it takes away from an otherwise brilliant user experience. Please consider fixing this.
Thanks – Steve