Hunter Hydrawise Sprinkler System Integration

I opened an issue without any reaction :frowning:

1 Like

@sipossz
I see there is a fix, but it just needs to be merged?

No. It was removed ages ago due to a limitation in the Hydrawise API I believe.

No. There is no local access to your Hydrawise controller. Cloud only.

Home Assistant Core 2022.5.3

Home Assistant Supervisor 2022.05.1

Home Assistant OS 8.0.rc2

Please help me with adding the Hydrawise controllers.
On a fresh new install I have added:

Hydrawise

hydrawise:
access_token: 0DCB-4016-XXXX-XXXX

binary_sensor:

  • platform: hydrawise

sensor:

  • platform: hydrawise

switch:

  • platform: hydrawise

=======
Looking in dev tools I see the binary_sensor as connected and getting the friendly name of the zones (controller 1)
I made a card that is also showing as connected.

It doesn’t seem to create the sensors or switches or I am looking at the wrong places.
I’ve tried also with the monitoring conditions but that gave some errors so went back to basics to get that working first.

Just moved from 20 years homeseer so still getting the hang of it :slight_smile: Advise welcome!

Could you tell me if you could solve this problem ?
I accidentally suspended it too, now I can’t start automatic watering back. I have to water with my hands

The problem is solved, I connected to hydrawase from my computer, clicked on the zone on the home page and there is a cancel suspension button. Voila. No problem

Hi @ptcryan
Any chance we get this merged?

Many thanks :wink:

Hi @sipossz, @ptcryan
I’ve made a new issue on the HA core.

let’s hope someone can just merge it.

Good will be if we can also from HA edited time and other option like as in APP on Android from Hunter,.

Inspiration if anyone needs it. Happy to share config. It’s using node-red to bridge some gaps but the integration works really well!

2 Likes

Really nice … looking good. Would be great if you could share the config :slight_smile:

Absolutely, now that I’m unwinding it, it’s a bit specific to my naming convention in Hydrawise but it should be easily adaptable to you’re setup. Let me know if you have any questions or suggestions.

My namining in Hydrawise:

Lovelace YAML

type: vertical-stack
cards:
  - type: conditional
    conditions:
      - entity: sensor.active_sprinkler_zone_number
        state: '0'
    card:
      type: entities
      title: Sprinklers
      entities:
        - entity: input_select.sprinkler_zones
        - entity: button.nodered_dd3a8a3b671d15c4
          name: ' '
          icon: none
        - type: custom:collapsable-cards
          title: Schedule
          buttonStyle: 'background-color: black; font-weight: bold; color: white'
          cards:
            - type: custom:template-entity-row
              entity: sensor.zone_1_next_cycle
              name: Zone 1
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.zone_1_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
            - type: custom:template-entity-row
              entity: sensor.zone_2_next_cycle
              name: Zone 2
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.zone_2_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
            - type: custom:template-entity-row
              entity: sensor.zone_3_next_cycle
              name: Zone 3
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.zone_3_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
            - type: custom:template-entity-row
              entity: sensor.zone_4_next_cycle
              name: Zone 4
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.zone_4_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
            - type: custom:template-entity-row
              entity: sensor.zone_6_next_cycle
              name: Zone 6
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.zone_6_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
            - type: custom:template-entity-row
              entity: sensor.zone_7_next_cycle
              name: Zone 7
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.zone_7_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
            - type: custom:template-entity-row
              entity: sensor.blakes_veggies_next_cycle
              name: Blake's Veggies
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.blakes_veggies_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
      show_header_toggle: false
      state_color: true
      theme: synthwave
  - type: conditional
    conditions:
      - entity: sensor.active_sprinkler_zone_number
        state_not: '0'
    card:
      type: entities
      title: Sprinklers
      entities:
        - entity: sensor.active_sprinkler_zone
          name: Active Zone
          secondary_info: last-changed
        - type: custom:template-entity-row
          name: >
            {% set zone = states('sensor.active_sprinkler_zone_number') %}

            {% if is_number(zone) and zone | float > 0 or zone ==
            'Blakes_Veggies' %}
              Turn Off {{ states('sensor.active_sprinkler_zone_name') }}
            {% endif %}
          entity: |
            {% if is_state('switch.zone_1_manual_watering','on') %}
              switch.zone_1_manual_watering
            {% elif is_state('switch.zone_2_manual_watering','on') %}
              switch.zone_2_manual_watering
            {% elif is_state('switch.zone_3_manual_watering','on') %}
              switch.zone_3_manual_watering
            {% elif is_state('switch.zone_4_manual_watering','on') %}
              switch.zone_4_manual_watering
            {% elif is_state('switch.zone_6_manual_watering','on') %}
              switch.zone_6_manual_watering
            {% elif is_state('switch.zone_7_manual_watering','on') %}
              switch.zone_7_manual_watering
            {% elif is_state('switch.blakes_veggies_manual_watering','on') %}
              switch.blakes_veggies_manual_watering       
            {% endif %}
          toggle: true
        - entity: input_select.sprinkler_zones
        - entity: button.nodered_dd3a8a3b671d15c4
          name: ' '
          icon: none
        - type: custom:collapsable-cards
          title: Schedule
          buttonStyle: 'background-color: black; font-weight: bold; color: white'
          cards:
            - type: custom:template-entity-row
              entity: sensor.zone_1_next_cycle
              name: Zone 1
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.zone_1_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
            - type: custom:template-entity-row
              entity: sensor.zone_2_next_cycle
              name: Zone 2
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.zone_2_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
            - type: custom:template-entity-row
              entity: sensor.zone_3_next_cycle
              name: Zone 3
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.zone_3_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
            - type: custom:template-entity-row
              entity: sensor.zone_4_next_cycle
              name: Zone 4
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.zone_4_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
            - type: custom:template-entity-row
              entity: sensor.zone_6_next_cycle
              name: Zone 6
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.zone_6_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
            - type: custom:template-entity-row
              entity: sensor.zone_7_next_cycle
              name: Zone 7
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.zone_7_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
            - type: custom:template-entity-row
              entity: sensor.blakes_veggies_next_cycle
              name: Blake's Veggies
              icon: mdi:sprinkler-variant
              state: >-
                {{ as_timestamp(states('sensor.blakes_veggies_next_cycle')) |
                timestamp_custom('%A at %-I:%M %p') }}
      show_header_toggle: false
      state_color: true
      theme: synthwave

The "Sprinkler Zones: dropdown is just an input select helper configured with each of the zone names:

Node Red

  1. Creates 3 HA sensor variables that hold the current zone name, time remaining and zone number when a zone is runnign
[{"id":"05b97b830822e82b","type":"group","z":"b6d74f614b757177","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["3b021b1c81d5e096","77752996eca24b1e","27e71cf822f789af","b9543dcb5d1aad44","b8b0c4a87360f8c9","fdb2ce8d79e20972"],"x":134,"y":139,"w":772,"h":222},{"id":"3b021b1c81d5e096","type":"ha-entity","z":"b6d74f614b757177","g":"05b97b830822e82b","name":"Active Sprinkler Zone Time","server":"4bbca37b.1700ec","version":2,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Active Sprinkler Zone Time"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"payload","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":740,"y":200,"wires":[[]]},{"id":"77752996eca24b1e","type":"function","z":"b6d74f614b757177","g":"05b97b830822e82b","name":"Parse Zone","func":"const ha = global.get('homeassistant').homeAssistant.states;\n\n/**\n* @param {string} str\n*/\nfunction trim(str) {\n    return str.substring(12,13)\n}\n\nvar newmsg = {}\n\nif (msg.state > 0)\n{\n    var zone = trim(msg.payload)\n    if (zone == \"s\") {\n        newmsg.payload = \"Blake's Veggies: \" + msg.state + \" Min\" \n        newmsg.state = \"Blakes_Veggies\"\n        newmsg.name = \"Blakes Veggies\"\n    } else {\n        newmsg.payload = \"Zone \" + zone + \": \" + msg.state + \" Min\" \n        newmsg.state = zone\n        newmsg.name = \"Zone \" + zone\n    }\n} else {\n    newmsg.payload = \"None\"\n    newmsg.state = 0\n    newmsg.name = null\n}\n\nreturn newmsg\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":220,"wires":[["3b021b1c81d5e096","b8b0c4a87360f8c9","fdb2ce8d79e20972"]]},{"id":"27e71cf822f789af","type":"comment","z":"b6d74f614b757177","g":"05b97b830822e82b","name":"Publish Zone being Watered to HA","info":"","x":300,"y":180,"wires":[]},{"id":"b9543dcb5d1aad44","type":"server-state-changed","z":"b6d74f614b757177","g":"05b97b830822e82b","name":"Watering Minutes Changed","server":"e056fc93.5eff4","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":"Current Watering Zone"},{"property":"icon","value":""}],"entityidfilter":"(sensor.zone_[1-7]_watering_time|sensor.blakes_veggies_watering_time)","entityidfiltertype":"regex","outputinitially":false,"state_type":"str","haltifstate":"0","halt_if_type":"num","halt_if_compare":"gt","outputs":2,"output_only_on_state_change":true,"for":"","forType":"num","forUnits":"seconds","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"triggerId"},{"property":"state","propertyType":"msg","value":"","valueType":"entityState"}],"x":270,"y":220,"wires":[["77752996eca24b1e"],["77752996eca24b1e"]]},{"id":"b8b0c4a87360f8c9","type":"ha-entity","z":"b6d74f614b757177","g":"05b97b830822e82b","name":"Active Sprinkler Zone Number","server":"4bbca37b.1700ec","version":2,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Active Sprinkler Zone Number"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"state":"state","stateType":"msg","attributes":[],"resend":true,"outputLocation":"payload","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":750,"y":260,"wires":[[]]},{"id":"fdb2ce8d79e20972","type":"ha-entity","z":"b6d74f614b757177","g":"05b97b830822e82b","name":"Active Sprinkler Zone Name","server":"4bbca37b.1700ec","version":2,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Active Sprinkler Zone Name"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"state":"name","stateType":"msg","attributes":[],"resend":true,"outputLocation":"payload","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":740,"y":320,"wires":[[]]},{"id":"4bbca37b.1700ec","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"},{"id":"e056fc93.5eff4","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"}]

  1. The below flow will start a zone, duration is based on the value set within the hydrawise intagration.
[{"id":"0a4ccef788c6e983","type":"group","z":"b6d74f614b757177","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["9ef630844a709d38","f382a6f4b1d65a7f","9945227d9eaaad18","6861aa7f77544f5c"],"x":154,"y":379,"w":552,"h":122},{"id":"9ef630844a709d38","type":"function","z":"b6d74f614b757177","g":"0a4ccef788c6e983","name":"Parse Zone","func":"const ha = global.get('homeassistant').homeAssistant.states;\n\nvar selectedZone = ha[\"input_select.sprinkler_zones\"].state;\n\n\n/**\n* @param {string} str\n*/\nfunction trim(str) {\n    var findZone = str.search(\"[0-9]{1}|Blake's Garden\")\n    return str.substring(findZone,findZone + 1)\n}\n\nvar newmsg = {}\nvar zone = trim(selectedZone)\nif (zone == \"B\") {\n    zone = \"switch.blakes_veggies_manual_watering\"\n} else {\n    zone = \"switch.zone_\"+zone+\"_manual_watering\"\n}\n\nnewmsg.payload = zone\nreturn newmsg\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":460,"wires":[["9945227d9eaaad18"]]},{"id":"f382a6f4b1d65a7f","type":"ha-button","z":"b6d74f614b757177","g":"0a4ccef788c6e983","name":"Start Sprinkler","version":0,"debugenabled":false,"outputs":1,"entityConfig":"dd3a8a3b671d15c4","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":250,"y":460,"wires":[["9ef630844a709d38"]]},{"id":"9945227d9eaaad18","type":"api-call-service","z":"b6d74f614b757177","g":"0a4ccef788c6e983","name":"Turn on Zone","server":"e056fc93.5eff4","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{\t    \"entity_id\": msg.payload\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":610,"y":460,"wires":[[]]},{"id":"6861aa7f77544f5c","type":"comment","z":"b6d74f614b757177","g":"0a4ccef788c6e983","name":"Start Sprinkler - 10 Min","info":"","x":280,"y":420,"wires":[]},{"id":"dd3a8a3b671d15c4","type":"ha-entity-config","server":"e056fc93.5eff4","name":"","version":4,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""},{"property":"device_class","value":""}],"entityType":"button"},{"id":"e056fc93.5eff4","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"}]

1 Like

Awesome thanks

Looks very efficient way to handle zone controls. I am getting the following error with the Lovelace YAML. Can you please advise if you know how to resolve this?

‘custom element doesn’t exist: template-entity-row. type: custom:template-entity-row’

installed as described, altough cannot find the sensor.node_red_irrigation_program
what went wrong?

Just set up the integration. I have 2 12-zone expansion modules on my Hydrawise controller giving me a total of 36 available zones on one controller. The HA integration is only pulling the first 12 zones and nothing else. Any idea on how to make HA see the zones on the expansion modules? Any help would be greatly appreciated. I will pay for someone’s time to make this happen for me!!

It uses, template-entity-row which is a lovelace custom card. Do you have it installed?

This is also using node-red, do you have the node-red add-on installed and setup with the config from above? GitHub - hassio-addons/addon-node-red: Node-RED - Home Assistant Community Add-ons

Thank you. This worked.

1 Like

i need help with node red. As you see it gives an error and what do i need to change to get it running. Please advise:

1 Like