Hunter Hydrawise Sprinkler System Integration

Ok i see. It works in 2023.9.2 because before i dont see status controller and now i see correct status controller.
Better will be implement this integration to GUI to configure from GUI no by yaml.

Love the new GUI integration! Good job guys!

Any idea how to set the manual watering time now? Is it still in the config file? If so, what all needs to be there now that it’s a GUI integration?

New integration by GUI no share sensor with status controller.

the integration documentation has been updated but it refers to the manual time to run as being set by

watering_minutes

I have no idea where that is… not in the Hydrawise app as I have a completely different value there… so it must be somewhere still in HA… mystery… and of course I still get the API limit and sensors becoming unavailable. BUT good to see GUI and thank you for update!

Hi all,

thanks a lot for this integration, works well (at least partly).
My problem: I have to sites with two controllers, but the integration outputs only information of the first controller. The online management tool of Hydrawise (and the app aswell) provide access to both controllers. There is only one API key.
Any ideas? Many thanks!

Anyone know where to find watering_minutes in the standard integration? I am new to HA so go easy…

From integration page:

SWITCH OPERATION

When manual_watering is on the zone will run for the amount of time set by watering_minutes.

Any assistance would be appreciated!

Cheers

Hi all… it looks as good news… yesterday i see that now integration hudrawise show in home assistant status of rain sensor… and it works.

image

@dknowles2 not sure if you check this thread but any way to have this functionality native to the integration? For example, a sensor that shows the currently running zone and the remaining water time left?

You can theoretically have more than one zone running at once, so I’m not sure having a sensor showing the current running zone makes sense.

Each zone already has a sensor showing the remaining watering time.

Interesting, I didn’t realize you could run multiple at once…fair enough.

After the recent updates with the integration I updated the node-red flows and card I posted above.

I noticed the node the above flow relied upon has been replaced with more granular nodes. This updated version now has node create 1 HA entity which contains all the details needed to populate the card (sensor.active_sprinkler).

Node:

[{"id":"05b97b830822e82b","type":"group","z":"af12b1b7fe411454","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["77752996eca24b1e","27e71cf822f789af","b9543dcb5d1aad44","7bfbb22ef5881001"],"x":94,"y":119,"w":692,"h":122},{"id":"77752996eca24b1e","type":"function","z":"af12b1b7fe411454","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":470,"y":200,"wires":[["7bfbb22ef5881001"]]},{"id":"27e71cf822f789af","type":"comment","z":"af12b1b7fe411454","g":"05b97b830822e82b","name":"Publish Zone being Watered to HA","info":"","x":260,"y":160,"wires":[]},{"id":"b9543dcb5d1aad44","type":"server-state-changed","z":"af12b1b7fe411454","g":"05b97b830822e82b","name":"Watering Minutes Changed","server":"e056fc93.5eff4","version":5,"outputs":2,"exposeAsEntityConfig":"","entityId":"(sensor.zone_[1-7]_watering_time|sensor.blakes_veggies_watering_time)","entityIdType":"regex","outputInitially":false,"stateType":"str","ifState":"0","ifStateType":"num","ifStateOperator":"gt","outputOnlyOnStateChange":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":230,"y":200,"wires":[["77752996eca24b1e"],["77752996eca24b1e"]]},{"id":"7bfbb22ef5881001","type":"ha-sensor","z":"af12b1b7fe411454","g":"05b97b830822e82b","name":"Active Sprinkler","entityConfig":"385ff42753799595","version":0,"state":"payload","stateType":"msg","attributes":[{"property":"friendly","value":"name","valueType":"msg"},{"property":"zone","value":"state","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":680,"y":200,"wires":[[]]},{"id":"e056fc93.5eff4","type":"server","name":"Home Assistant","version":5,"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","enableGlobalContextStore":true},{"id":"385ff42753799595","type":"ha-entity-config","server":"e056fc93.5eff4","deviceConfig":"","name":"Active Sprinkler","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Active Sprinkler"},{"property":"icon","value":"mdi:water"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false}]
[{"id":"0a4ccef788c6e983","type":"group","z":"af12b1b7fe411454","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["9ef630844a709d38","f382a6f4b1d65a7f","9945227d9eaaad18","6861aa7f77544f5c"],"x":134,"y":299,"w":552,"h":122},{"id":"9ef630844a709d38","type":"function","z":"af12b1b7fe411454","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":410,"y":380,"wires":[["9945227d9eaaad18"]]},{"id":"f382a6f4b1d65a7f","type":"ha-button","z":"af12b1b7fe411454","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":230,"y":380,"wires":[["9ef630844a709d38"]]},{"id":"9945227d9eaaad18","type":"api-call-service","z":"af12b1b7fe411454","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":590,"y":380,"wires":[[]]},{"id":"6861aa7f77544f5c","type":"comment","z":"af12b1b7fe411454","g":"0a4ccef788c6e983","name":"Start Sprinkler - 10 Min","info":"","x":260,"y":340,"wires":[]},{"id":"dd3a8a3b671d15c4","type":"ha-entity-config","server":"e056fc93.5eff4","deviceConfig":"","name":"Start Sprinkler Zone","version":"6","entityType":"button","haConfig":[{"property":"name","value":"Start Sprinkler Zone"},{"property":"icon","value":"mdi:sprinkler"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""}],"resend":false,"debugEnabled":false},{"id":"e056fc93.5eff4","type":"server","name":"Home Assistant","version":5,"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","enableGlobalContextStore":true}]

YAML - Be mindful of the custom cards being used

type: custom:expander-card
title: Irrigation
clear: false
expanded: false
cards:
  - type: custom:mushroom-select-card
    entity: input_select.sprinkler_zones
    name: Run Zone
    icon: mdi:sprinkler
    icon_color: deep-orange
    layout: horizontal
    tap_action:
      action: call-service
      service: button.press
      data:
        entity_id: button.start_sprinkler
  - type: custom:mushroom-template-card
    primary: |
      {% if states('sensor.active_sprinkler') == 'None' %}
        
      {% else %}
        {{ state_attr('sensor.active_sprinkler', 'friendly') }}
      {% endif %}
    secondary: |
      {% if states('sensor.active_sprinkler') != 'None' %}
        active
      {% else %}
      All Zones Off
      {% endif %}
    icon: |
      {% set zone = state_attr('sensor.active_sprinkler', 'zone') %}
      {% if zone == 'Blakes_Veggies' %}
        mdi:carrot
      {% elif zone | int > 0 %}
        mdi:numeric-{{ zone | int }}-circle
      {% else %}
      {% endif %}
    icon_color: |
      {% if states('sensor.active_sprinkler') != 'None' %}
        {% if state_attr('sensor.active_sprinkler', 'zone') == 'Blakes_Veggies' %}
          green
        {% else %}
          pink
        {% endif %}
      {% else %}
        gray
      {% endif %}
    tap_action:
      action: none
    fill_container: true
    layout: horizontal
  - type: custom:mushroom-entity-card
    entity: sensor.24_high_acre_daily_active_watering_time
    name: Watering Time
    primary_info: state
    secondary_info: name
    icon: mdi:clock-time-three
    icon_color: blue
    layout: horizontal
    fill_container: true
    card_mod:
      style: |
        ha-card {
          padding-right: 150px !important;
          padding-left: 150px !important;
          padding-bottom: 0 !important;
          padding-top: 0 !important;
        }
  - type: logbook
    entities:
      - binary_sensor.zone_1_watering
      - binary_sensor.zone_2_watering
      - binary_sensor.zone_3_watering
      - binary_sensor.zone_4_watering
      - binary_sensor.zone_5_watering
      - binary_sensor.zone_6_watering
      - binary_sensor.zone_7_watering
      - binary_sensor.blakes_veggies_watering
    hours_to_show: 12
gap: '0'
padding: '0'
content:
  type: custom:vertical-stack-in-card
  cards:
    - type: custom:mushroom-title-card
      title: House Water
      subtitle: Status and Usage
      alignment: center
      card_mod:
        style: |
          ha-card {
            border-radius: 10px;
            box-shadow: 0px 2px 4px rgba(0,0,0,0.1);
            background: linear-gradient(to right, #74ebd5, #ACB6E5);
          }
          mushroom-title-card {
            padding: 12px;
          }
    - type: custom:layout-card
      layout_type: custom:horizontal-layout
      layout:
        width: 100%
      cards:
        - type: custom:mushroom-template-card
          primary: |
            [[[
              var usage = states['sensor.high_acre_shutoff_today_s_water_usage'].state;
              return `${usage} <span class="unit">gal</span>`;
            ]]]
          secondary: Usage Today
          icon: mdi:water
          icon_color: '#0b5394'
          card_mod:
            style: |
              mushroom-template-card {
                box-shadow: inset 0px 0px 6px rgba(0,0,0,0.2);
                background: rgba(255,255,255,0.3);
                border-radius: 10px;
                padding: 12px;
                margin: 6px;
              }
              .unit {
                font-size: 0.8em;
                color: #666;
                margin-left: 2px;
              }
        - type: custom:mushroom-template-card
          primary: |
            [[[ 
              var state = states['switch.high_acre_shutoff_shutoff_valve'].state;
              return `<span class="state-${state}">${state}</span>`;
            ]]]
          secondary: Water Main
          icon: |
            [[[
              var state = states['switch.high_acre_shutoff_shutoff_valve'].state;
              return (state === 'on') ? 'mdi:valve-open' : 'mdi:valve'; 
            ]]]
          icon_color: |
            [[[
              var state = states['switch.high_acre_shutoff_shutoff_valve'].state;
              return (state === 'on') ? '#43A047' : '#E53935';
            ]]]
          tap_action:
            action: more-info
          hold_action:
            action: toggle
          card_mod:
            style: |
              mushroom-template-card {
                box-shadow: inset 0px 0px 6px rgba(0,0,0,0.2);
                background: rgba(255,255,255,0.3);  
                border-radius: 10px;
                padding: 12px;
                margin: 6px;
              }
              .state-on {
                color: #43A047;
                font-weight: bold;
              }
              .state-off {
                color: #E53935;
                font-weight: bold;  
              }
    - type: custom:layout-card
      layout_type: custom:horizontal-layout
      layout:
        width: 100%
      cards:
        - type: custom:mushroom-template-card
          primary: |
            [[[
              var pressure = states['sensor.high_acre_shutoff_water_pressure'].state;
              return `${pressure} <span class="unit">psi</span>`;
            ]]]  
          secondary: Pressure
          icon: mdi:gauge
          icon_color: '#FB8C00'
          card_mod:
            style: |
              mushroom-template-card {
                box-shadow: inset 0px 0px 6px rgba(0,0,0,0.2);
                background: rgba(255,255,255,0.3);
                border-radius: 10px;
                padding: 12px;
                margin: 6px; 
              }
              .unit {
                font-size: 0.8em;
                color: #666;
                margin-left: 2px;
              }
        - type: custom:mushroom-template-card
          primary: |
            [[[
              var flow = states['sensor.high_acre_shutoff_water_flow_rate'].state;
              return `${flow} <span class="unit">gpm</span>`;
            ]]]
          secondary: Flow Rate
          icon: mdi:water-pump
          icon_color: '#039BE5'
          card_mod:
            style: |
              mushroom-template-card {
                box-shadow: inset 0px 0px 6px rgba(0,0,0,0.2);
                background: rgba(255,255,255,0.3);
                border-radius: 10px;
                padding: 12px;
                margin: 6px;
              }
              .unit { 
                font-size: 0.8em;
                color: #666;
                margin-left: 2px;  
              }
child-padding: '0'

Hello All,

I’m new very new in HA and saw that the Hydrawise integration was updated with the function of setting the watering time by Manuel.

Can someone help me to understand how I can that this? Maybe someone give me an example so that I can understand it.

Thanks in advance!

Ha all
Is more people’s Hydrawise intergration broken? I’m having problems that I can’t fix or do you guys have any advice ?

logger:%20homeassistant.components.hydrawise%0ABron%3A%20helpers/update_coordinator.py:382%0Aintegratie:%20Hunter%20Hydrawise%20(documentatie,%20problemen)%0AEerst%20voorgekomen:%2006:52:15%20(112%20gebeurtenissen)%0ALaatst%20gelogd:%2009:22:25%0A%0AUnexpected%20error%20fetching%20hydrawise%20data%0ATraceback%20(most%20recent%20call%20last):%0A%20%20File%20%22/usr/local/lib/python3.12/site-packages/gql/transport/aiohttp.py%22,%20line%20319,%20in%20raise_response_error%0A%20%20%20%20resp.raise_for_status()%0A%20%20File%20%22/usr/local/lib/python3.12/site-packages/aiohttp/client_reqrep.py%22,%20line%201158,%20in%20raise_for_status%0A%20%20%20%20raise%20ClientResponseError(%0Aaiohttp.client_exceptions.ClientResponseError:%20429,%20message=‘Too%20Many%20Requests’,%20url=‘https://app.hydrawise.com/api/v2/graph’ The%20above%20exception%20was%20the%20direct%20cause%20of%20the%20following%20exception: Traceback%20(most%20recent%20call%20last): %20%20File%20"/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py",%20line%20382,%20in%20_async_refresh %20%20%20%20self.data%20=%20await%20self._async_update_data() %20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %20%20File%20"/usr/src/homeassistant/homeassistant/components/hydrawise/coordinator.py",%20line%2062,%20in%20_async_update_data %20%20%20%20data%20=%20HydrawiseData(user=await%20self.api.get_user(fetch_zones=False)) %20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %20%20File%20"/usr/local/lib/python3.12/site-packages/pydrawise/client.py",%20line%20109,%20in%20get_user %20%20%20%20result%20=%20await%20self._query( %20%20%20%20%20%20%20%20%20%20%20%20%20^^^^^^^^^^^^^^^^^^ %20%20File%20"/usr/local/lib/python3.12/site-packages/pydrawise/client.py",%20line%2088,%20in%20_query %20%20%20%20return%20await%20session.execute(dsl_gql(DSLQuery(selector))) %20%20%20%20%20%20%20%20%20%20%20^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %20%20File%20"/usr/local/lib/python3.12/site-packages/gql/client.py",%20line%201628,%20in%20execute %20%20%20%20result%20=%20await%20self._execute( %20%20%20%20%20%20%20%20%20%20%20%20%20^^^^^^^^^^^^^^^^^^^^ %20%20File%20"/usr/local/lib/python3.12/site-packages/gql/client.py",%20line%201537,%20in%20_execute %20%20%20%20result%20=%20await%20self.transport.execute( %20%20%20%20%20%20%20%20%20%20%20%20%20^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %20%20File%20"/usr/local/lib/python3.12/site-packages/gql/transport/aiohttp.py",%20line%20341,%20in%20execute %20%20%20%20await%20raise_response_error(resp,%20"Not%20a%20JSON%20answer") %20%20File%20"/usr/local/lib/python3.12/site-packages/gql/transport/aiohttp.py",%20line%20321,%20in%20raise_response_error %20%20%20%20raise%20TransportServerError(str(e),%20e.status)%20from%20e gql.transport.exceptions.TransportServerError:%20429,%20message=‘Too%20Many%20Requests’,%20url='https://app.hydrawise.com/api/v2/graph’%0A

1 Like

Yes - there is an issue with polling causing 429 HTTP errors; basically Hunter is ratelimiting Home Assistant. There is an active issue in GitHub about it. For now, the best fix is to go to Devices and Services, access Hydrawise, then click the 3 dots beside your main integration, open System options and disable polling for updates.

Wait about a day or so if you’ve received errors, and then from the same 3 dots menu, manually reload the integration to force an update - it should work without error. You can then do this once in a while as needed, or set up an automation to manually reload the integration about once an hour or so (or more if you’re not actively watering at this time of year).

Upcoming updates are going to increase the regular polling interval, but they are also engaging with Hunter to see if the integration can get some official support (and not end up in a MyQ situation).

Follow the GitHub issue for the latest on the issue (no need to comment “me too”): Hydrawise still polls too often and causes HTTP 429 errors · Issue #130131 · home-assistant/core

2 Likes

thank you for reaction