[hydrawise] Migrate to new GraphQL based API (#10947)

* [hydrawise] Migrated to new GraphQL based API

Fixes #7261

Signed-off-by: Dan Cunningham <dan@digitaldan.com>

* Addressed PR comments.

Signed-off-by: Dan Cunningham <dan@digitaldan.com>

* Address PR review comments.

Signed-off-by: Dan Cunningham <dan@digitaldan.com>
This commit is contained in:
Dan Cunningham
2021-08-01 11:03:37 -07:00
committed by GitHub
parent f25cc8d14a
commit e465155d84
65 changed files with 2369 additions and 947 deletions

View File

@@ -6,20 +6,32 @@ The Hydrawise binding allows monitoring and control of [Hunter Industries's](htt
## Supported Things
### Cloud Thing
### Account Bridge Thing
The Cloud Thing type is the primary way most users will control and monitor their irrigation system.
The Account Bridge Thing type represents the user's account on the Hydrawise cloud service. The bridge can have one or more child [Controllers](#Controller-Thing) linked.
An account must be manually added and configured.
### Controller Thing
Controller Things are automatically discovered once an [Account Bridge](#Account-Bridge-Thing) has be properly configured.
The Controller Thing type is the primary way most users will control and monitor their irrigation system.
This allows full control over zones, sensors and weather forecasts.
Changes made through this Thing type will be reflected in the Hydrawise mobile and web applications as well as in their reporting modules.
#### Cloud Thing Supported Channel Groups
Controller Things require a parent [Account Bridge](#Account-Bridge-Thing)
| channel group ID |
|---------------------------------------|
| [Zones](#Zone-Channel-Group) |
| [All Zones](#All-Zones-Channel-Group) |
| [Sensor](#Sensor-Channel-Group) |
| [Forecast](#Sensor-Channel-Group) |
#### Controller Thing Supported Channel Groups
| channel group ID |
|-----------------------------------------------|
| [Controller](#Cloud-Controller-Channel-Group) |
| [Zones](#Zone-Channel-Group) |
| [All Zones](#All-Zones-Channel-Group) |
| [Sensor](#Sensor-Channel-Group) |
| [Forecast](#Sensor-Channel-Group) |
### Local Thing
@@ -27,6 +39,8 @@ The Local Thing type uses an undocumented API that allows direct HTTP access to
This provides a subset of features compared to the Cloud Thing type limited to basic zone control.
Controlling zones through the local API will not be reported back to the cloud service or the Hydrawise mobile/web applications, and reporting functionality will not reflect the locally controlled state.
Local control may not be available on later Hydrawise controller firmware versions.
Use Cases
* The Local thing can be useful when testing zones, as there is no delay when starting/stopping zones as compared to the cloud API which can take anywhere between 5-15 seconds.
@@ -41,28 +55,29 @@ Use Cases
## Thing Configuration
### Cloud Thing
### Account Thing
| Configuration Name | type | required | Comments |
|--------------------|---------|----------|------------------------------------------------------------------------------------|
| apiKey | String | True | |
| refresh | Integer | True | Defaults to a 30 seconds polling rate |
| controllerId | Integer | False | Optional id of the controller if you have more then one registered to your account |
| Configuration Name | type | required | Comments |
|--------------------|---------|----------|--------------------------------------------------------------------------------------------------------------------------|
| userName | String | False | The Hydrawise account user name |
| password | String | False | The Hydrawise account password |
| savePassword | Boolean | False | By default the password will be not be persisted after the first login attempt unless this is true, defaults to false |
| refresh | Integer | False | Defaults to a 60 second polling rate, more frequent polling may cause the service to deny requests |
| refreshToken | Boolean | False | A oAuth refresh token, this will be automatically configured after the first login and updated as the token is refreshed |
To obtain your API key, log into your [Hydrawsie Account](https://app.hydrawise.com/config/login) and click on your account icon, then account details:
### Controller Thing
![Account](doc/settings.png)
| Configuration Name | type | required | Comments |
|--------------------|---------|----------|----------------------|
| controllerId | Integer | True | ID of the controller |
Then copy the API key shown here:
![API Key](doc/apikey.png)
### Local Thing
| Configuration Name | type | required | Comments |
|--------------------|---------|----------|-----------------------------------------------------------------------------------------------------------------|
| host | String | True | IP or host name of the controller on your network |
| username | String | True | User name (usually admin) set on the touch panel of the controller |
| username | String | True | User name (usually admin) set on the touch panel of the controller |
| password | String | True | Password set on the touch panel of the controller. This can be found under the setting menu on the controller. |
| refresh | Integer | True | Defaults to a 30 seconds polling rate |
@@ -70,6 +85,12 @@ Then copy the API key shown here:
### Channel Groups
#### System Channel Group
| channel group ID | Description |
|------------------|---------------------------------|
| system | System status of the controller |
#### Zone Channel Group
Up to 36 total zones are supported per Local or Cloud thing
@@ -94,14 +115,13 @@ Up to 4 total sensors are supported per Cloud Thing
#### Forecast Channel Group
Up to 4 total weather forecasts are supported per Cloud Thing
Up to 3 total weather forecasts are supported per Cloud Thing
| channel group ID | Description |
|------------------|-----------------|
| forecast1 | Todays Forecast |
| forecast2 | Day 2 Forecast |
| forecast3 | Day 3 Forecast |
| forecast4 | Day 4 Forecast |
#### All Zones Channel Group
@@ -114,58 +134,81 @@ A single all zone group are supported per Cloud or Local Thing
### Channels
| channel ID | type | Groups | description | Read Write |
|-----------------|--------------------|----------------|---------------------------------------------|------------|
| name | String | zone, sensor | Descriptive name | R |
| icon | String | zone | Icon URL | R |
| time | Number | zone | Zone start time in seconds | R |
| type | Number | zone | Zone type | R |
| runcustom | Number | zone, allzones | Run zone for custom number of seconds | W |
| run | Switch | zone, allzones | Run/Start zone | RW |
| nextrun | DateTime | zone | Next date and time this zone will run | R |
| timeleft | Number | zone | Amount of seconds left for the running zone | R |
| input | Number | sensor | Sensor input type | R |
| mode | Number | sensor | Sensor mode | R |
| timer | Number | sensor | Sensor timer | R |
| offtimer | Number | sensor | Sensor off time | R |
| offlevel | Number | sensor | Sensor off level | R |
| active | Switch | sensor | Is sensor active / triggered | R |
| temperaturehigh | Number:Temperature | forecast | Daily high temperature | R |
| temperaturelow | Number:Temperature | forecast | Daily low temperature | R |
| conditions | String | forecast | Daily conditions description | R |
| day | String | forecast | Day of week of forecast (Mon-Sun) | R |
| humidity | Number | forecast | Daily humidity percentage | R |
| wind | Number:Speed | forecast | Daily wind speed | R |
Channels uses across zones, sensors and forecasts
| channel ID | type | Groups | description | Read Write |
|----------------------------|--------------------|----------------|-----------------------------------------------|------------|
| name | String | zone, sensor | Descriptive name | R |
| icon | String | zone | Icon URL | R |
| type | Number | zone | Zone type | R |
| run | Switch | zone, allzones | Run/Start zone | RW |
| runcustom | Number:Time | zone, allzones | Run zone for custom length | W |
| suspend | Switch | zone, allzones | Suspend zone | RW |
| suspenduntil | DateTime | zone, allzones | Suspend zone unitl specified date | RW |
| nextrun | DateTime | zone | Next date and time this zone will run | R |
| timeleft | Number:Time | zone | Amount of time left for the running zone | R |
| input | Number | sensor | Sensor input type | R |
| timer | Number | sensor | Sensor timer | R |
| offtimer | Number:Time | sensor | Sensor off timer | R |
| offlevel | Number | sensor | Sensor off level | R |
| active | Switch | sensor | Is sensor active / triggered | R |
| temperaturehigh | Number:Temperature | forecast | Daily high temperature | R |
| temperaturelow | Number:Temperature | forecast | Daily low temperature | R |
| conditions | String | forecast | Daily conditions description | R |
| day | DateTime | forecast | Day of week of forecast (Mon-Sun) | R |
| humidity | Number | forecast | Daily humidity percentage | R |
| wind | Number:Speed | forecast | Daily wind speed | R |
| evapotranspiration | Number | forecast | Daily evapotranspiration amount | R |
| precipitation | Number | forecast | Daily precipitation amount | R |
| probabilityofprecipitation | Number | forecast | Daily probability of precipitation percentage | R |
## Full Example
```
Group SprinklerZones
Group Sprinkler "Sprinkler"
Group SprinklerController "Controller" (Sprinkler)
Group SprinklerZones "Zones" (Sprinkler)
Group SprinklerSensors "Sensors" (Sprinkler)
Group SprinkerForecast "Forecast" (Sprinkler)
String SprinkerControllerStatus "Status [%s]" (SprinklerController) {channel="hydrawise:controller:myaccount:123456:controller#status"}
Number SprinkerControllerLastContact "Last Contact [%d]" (SprinklerController) {channel="hydrawise:controller:myaccount:123456:controller#lastContact"}
Switch SprinklerSensor1 "Sprinler Sensor" (SprinklerSensors) {channel="hydrawise:controller:myaccount:123456:sensor1#active"}
Group SprinkerForecastDay1 "Todays Forecast" (SprinkerForecast)
Number:Temperature SprinkerForecastDay1HiTemp "High Temp [%d]" (SprinkerForecastDay1) {channel="hydrawise:controller:myaccount:123456:forecast1#temperaturehigh"}
Number:Temperature SprinkerForecastDay1LowTemp "Low Temp [%d]" (SprinkerForecastDay1) {channel="hydrawise:controller:myaccount:123456:forecast1#temperaturelow"}
String SprinkerForecastDay1Conditions "Conditions [%s]" (SprinkerForecastDay1) {channel="hydrawise:controller:myaccount:123456:forecast1#conditions"}
String SprinkerForecastDay1Day "Day [%s]" (SprinkerForecastDay1) {channel="hydrawise:controller:myaccount:123456:forecast1#day"}
Number SprinkerForecastDay1Humidity "Humidity [%d%%]" (SprinkerForecastDay1) {channel="hydrawise:controller:myaccount:123456:forecast1#humidity"}
Number:Speed SprinkerForecastDay1Wind "Wind [%s]" (SprinkerForecastDay1) {channel="hydrawise:controller:myaccount:123456:forecast1#wind"}
Group SprinklerZone1 "1 Front Office Yard" (SprinklerZones)
String SprinklerZone1Name "1 Front Office Yard name" (SprinklerZone1) {channel="hydrawise:cloud:home:zone1#name"}
Switch SprinklerZone1Run "1 Front Office Yard Run" (SprinklerZone1) {channel="hydrawise:cloud:home:zone1#run"}
String SprinklerZone1Name "1 Front Office Yard name" (SprinklerZone1) {channel="hydrawise:controller:myaccount:123456:zone1#name"}
Switch SprinklerZone1Run "1 Front Office Yard Run" (SprinklerZone1) {channel="hydrawise:controller:myaccount:123456:zone1#run"}
Switch SprinklerZone1RunLocal "1 Front Office Yard Run (local)" (SprinklerZone1) {channel="hydrawise:local:home:zone1#run"}
Number SprinklerZone1RunCustom "1 Front Office Yard Run Custom" (SprinklerZone1) {channel="hydrawise:cloud:home:zone1#runcustom"}
DateTime SprinklerZone1StartTime "1 Front Office Yard Start Time [%s]" (SprinklerZone1) {channel="hydrawise:cloud:home:zone1#nextruntime"}
Number SprinklerZone1TimeLeft "1 Front Office Yard Time Left" (SprinklerZone1) {channel="hydrawise:cloud:home:zone1#timeleft"}
String SprinklerZone1Icon "1 Front Office Yard Icon" (SprinklerZone1) {channel="hydrawise:cloud:home:zone1#icon"}
Number SprinklerZone1RunCustom "1 Front Office Yard Run Custom" (SprinklerZone1) {channel="hydrawise:controller:myaccount:123456:zone1#runcustom"}
DateTime SprinklerZone1StartTime "1 Front Office Yard Start Time [%s]" (SprinklerZone1) {channel="hydrawise:controller:myaccount:123456:zone1#nextruntime"}
Number SprinklerZone1TimeLeft "1 Front Office Yard Time Left" (SprinklerZone1) {channel="hydrawise:controller:myaccount:123456:zone1#timeleft"}
String SprinklerZone1Icon "1 Front Office Yard Icon" (SprinklerZone1) {channel="hydrawise:controller:myaccount:123456:zone1#icon"}
Group SprinklerZone2 "2 Back Circle Lawn" (SprinklerZones)
String SprinklerZone2Name "2 Back Circle Lawn name" (SprinklerZone2) {channel="hydrawise:cloud:home:zone2#name"}
Switch SprinklerZone2Run "2 Back Circle Lawn Run" (SprinklerZone2) {channel="hydrawise:cloud:home:zone2#run"}
String SprinklerZone2Name "2 Back Circle Lawn name" (SprinklerZone2) {channel="hydrawise:controller:myaccount:123456:zone2#name"}
Switch SprinklerZone2Run "2 Back Circle Lawn Run" (SprinklerZone2) {channel="hydrawise:controller:myaccount:123456:zone2#run"}
Switch SprinklerZone2RunLocal "2 Back Circle Lawn Run (local)" (SprinklerZone2) {channel="hydrawise:local:home:zone2#run"}
Number SprinklerZone2RunCustom "2 Back Circle Lawn Run Custom" (SprinklerZone2) {channel="hydrawise:cloud:home:zone2#runcustom"}
DateTime SprinklerZone2StartTime "2 Back Circle Lawn Start Time" (SprinklerZone2) {channel="hydrawise:cloud:home:zone2#nextruntime"}
Number SprinklerZone2TimeLeft "2 Back Circle Lawn Time Left" (SprinklerZone2) {channel="hydrawise:cloud:home:zone2#timeleft"}
String SprinklerZone2Icon "2 Back Circle Lawn Icon" (SprinklerZone2) {channel="hydrawise:cloud:home:zone2#icon"}
Number SprinklerZone2RunCustom "2 Back Circle Lawn Run Custom" (SprinklerZone2) {channel="hydrawise:controller:myaccount:123456:zone2#runcustom"}
DateTime SprinklerZone2StartTime "2 Back Circle Lawn Start Time" (SprinklerZone2) {channel="hydrawise:controller:myaccount:123456:zone2#nextruntime"}
Number SprinklerZone2TimeLeft "2 Back Circle Lawn Time Left" (SprinklerZone2) {channel="hydrawise:controller:myaccount:123456:zone2#timeleft"}
String SprinklerZone2Icon "2 Back Circle Lawn Icon" (SprinklerZone2) {channel="hydrawise:controller:myaccount:123456:zone2#icon"}
Group SprinklerZone3 "3 Left of Drive Lawn" (SprinklerZones)
String SprinklerZone3Name "3 Left of Drive Lawn name" (SprinklerZone3) {channel="hydrawise:cloud:home:zone3#name"}
Switch SprinklerZone3Run "3 Left of Drive Lawn Run" (SprinklerZone3) {channel="hydrawise:cloud:home:zone3#run"}
String SprinklerZone3Name "3 Left of Drive Lawn name" (SprinklerZone3) {channel="hydrawise:controller:myaccount:123456:zone3#name"}
Switch SprinklerZone3Run "3 Left of Drive Lawn Run" (SprinklerZone3) {channel="hydrawise:controller:myaccount:123456:zone3#run"}
Switch SprinklerZone3RunLocal "3 Left of Drive Lawn Run (local)" (SprinklerZone3) {channel="hydrawise:local:home:zone3#run"}
Number SprinklerZone3RunCustom "3 Left of Drive Lawn Run Custom" (SprinklerZone3) {channel="hydrawise:cloud:home:zone3#runcustom"}
DateTime SprinklerZone3StartTime "3 Left of Drive Lawn Start Time" (SprinklerZone3) {channel="hydrawise:cloud:home:zone3#nextruntime"}
Number SprinklerZone3TimeLeft "3 Left of Drive Lawn Time Left" (SprinklerZone3) {channel="hydrawise:cloud:home:zone3#timeleft"}
String SprinklerZone3Icon "3 Left of Drive Lawn Icon" (SprinklerZone3) {channel="hydrawise:cloud:home:zone3#icon"}
Number SprinklerZone3RunCustom "3 Left of Drive Lawn Run Custom" (SprinklerZone3) {channel="hydrawise:controller:myaccount:123456:zone3#runcustom"}
DateTime SprinklerZone3StartTime "3 Left of Drive Lawn Start Time" (SprinklerZone3) {channel="hydrawise:controller:myaccount:123456:zone3#nextruntime"}
Number SprinklerZone3TimeLeft "3 Left of Drive Lawn Time Left" (SprinklerZone3) {channel="hydrawise:controller:myaccount:123456:zone3#timeleft"}
String SprinklerZone3Icon "3 Left of Drive Lawn Icon" (SprinklerZone3) {channel="hydrawise:controller:myaccount:123456:zone3#icon"}
```