Irrigation controller for Home Assistant

Overview

Irrigation Unlimited

GitHub Release GitHub Activity License

hacs Project Maintenance BuyMeCoffee

Community Forum

This integration is for irrigation systems large and small. It can offer some complex arrangements without large and messy scripts. This integration will complement many other irrigation projects.

Home Assistant makes automating switches easy with the built in tools available. So why this project? You have a system in place but now you have extended it to have a number of zones. You don't want all the zones on at once because of water pressure issues. Maybe you would like each zone to have a number of schedules say a morning and evening watering. What about water restrictions that limit irrigation systems to certain days of the week or days in the month, odd or even for example. Perhaps you would like different schedules for winter and summer. Now you would like to adjust the times based on weather conditions, past, present or future. Let's turn a zone or even a controller off for system maintenance. Starting to sound more like your system? Finally what's going on now and what's up next.

Each controller has an associated (master) sensor which shows on/off status and other attributes. The master will be on when any of its zones are on. The master sensor can have a pre and post amble period to activate or warm up the system like charge up a pump, enable WiFi or turn on a master valve. The master sensor has a number of service calls available to enable/disable all the zones it controls.

Zones also have an associated sensor which, like the master, shows on/off status and various attributes. Zones sensors have service calls that can enable/disable and provide manual runs. Also adjust run times in automation scripts using information from integrations that collect weather data like OpenWeatherMap, BOM, weatherunderground and many others. Go crazy with projects like HAsmartirrigation.

Features

  1. Unlimited controllers.
  2. Unlimited zones.
  3. Unlimited schedules. Schedule by absolute time or sun events (sunrise/sunset). Select by days of the week (mon/tue/wed...). Select by days in the month (1/2/3.../odd/even). Select by months in the year (jan/feb/mar...). Overlapped schedules.
  4. Unlimited sequences. Operate zones one at a time in a particular order with a delay in between.
  5. Hardware independant. Use your own switches/valve controllers.
  6. Software independant. Pure play python.

*Practicle limitations will depend on your hardware.

Structure

Irrigation Unlimited is comprised of controllers, zones and schedules in a tree like formation. Each controller has one or more zones and each zone has one or more schedules. Controllers and zones will have a binary sensor associated with each one so they can be intregrated with Home Assistant.

└── Irrigation Unlimited
  └── Controller 1 -> binary_sensor.irrigation_unlimited_c1_m
    └── Zone 1 -> binary_sensor.irrigation_unlimited_c1_z1
      └── Schedule 1
      └── Schedule 2
          ...
      └── Schedule N
    └── Zone 2 -> binary_sensor.irrigation_unlimited_c1_z2
        ...
    └── Zone N -> binary_sensor.irrigation_unlimited_c1_zN
        ...
  └── Controller 2 -> binary_sensor.irrigation_unlimited_c2_m
      ...
  └── Controller N -> binary_sensor.irrigation_unlimited_cN_m
      ...

Controllers and zones can specify an entity such as a switch or light, basically anything that turns on or off the system can control it. This is the irrigation valve. If this does not go far enough for your purposes then track the state of the binary sensors in an automation and do your own thing like run a script or scene.

This component will set up the following platforms.

Platform Description
binary_sensor Show a valve On or Off

A binary sensor is associated with each controller and zone. Controller or master sensors are named binary_sensor.irrigation_unlimited_cN_m and zone sensors binary_sensor.irrigation_unlimited_cN_zN. These sensors show the state of the master or child zones. Attributes show additional information like current schedule and next run time and duration.

entities

Installation

Install from HACS

  1. Just search for Irrigation Unlimited integration in HACS and install it.
  2. Add Irrigation Unlimited to your configuration.yaml file. See configuration examples below.
  3. Restart Home Assistant.

Manual installation

  1. Using the tool of choice open the directory (folder) for your HA configuration (where you find configuration.yaml).
  2. If you do not have a custom_components directory (folder) there, you need to create it.
  3. In the custom_components directory (folder) create a new folder called irrigation_unlimited.
  4. Download all the files from the custom_components/irrigation_unlimited/ directory (folder) in this repository.
  5. Place the files you downloaded in the new directory (folder) you created.
  6. Restart Home Assistant
  7. In the HA UI go to "Configuration" -> "Integrations" click "+" and search for "Irrigation"

Using your HA configuration directory (folder) as a starting point you should now also have this:

custom_components/irrigation_unlimited/__init__.py
custom_components/irrigation_unlimited/binary_sensor.py
custom_components/irrigation_unlimited/const.py
custom_components/irrigation_unlimited/entity.py
custom_components/irrigation_unlilmited/irrigation_unlimited.py
custom_components/irrigation_unlimited/manifest.json
custom_components/irrigation_unlimited/service.py
custom_components/irrigation_unlimited/services.yaml

Configuration

Configuration is done by yaml.

The time type is a string in the format HH:MM. Time type must be a positive value. Seconds can be speicified but they will be rounded down to the system granularity. The default granularity is whole minutes (60 seconds). All times will be syncronised to these boundaries.

Name Type Default Description
controllers list Controller Objects Controller details (Must have at least one)
granularity number 60 System time boundaries in seconds
testing object Testing Object Used for testing setup

Controller Objects

This is the controller or master object and manages a collection of zones. There must be at least one controller in the system. The controller state reflects the state of its zones. The controller will be on if any of its zones are on and off when all zones are off.

Name Type Default Description
zones list Zone Objects Zone details (Must have at least one)
sequences list Sequence Objects Sequence details
name string Controller N Friendly name for the controller
enabled bool true Enable/disable the controller
preamble time '00:00' The time master turns on before any zone turns on
postamble time '00:00' The time master remains on after all zones are off
entity_id string Entity ID (switch.my_master_valve1)

Zone Objects

The zone object manages a collection of schedules. There must be at least one zone for each controller.

Name Type Default Description
schedules list Schedule Objects Schedule details (Must have at least one)
zone_id string N Zone reference. Used for sequencing.
name string Zone N Friendly name for the zone
enabled bool true Enable/disable the zone
minimum time '00:01' The minimum run time
maximum time The maximum run time
entity_id string Entity ID (switch.my_zone_valve1)

Schedule Objects

Schedules are future events, not dates for example Mondays. There must be at least one schedule for each zone.

The parameters weekday, day and month are date filters. If not specified then all dates qualify.

Name Type Default Description
time time/Sun Event Required The start time. Either a time (07:30) or sun event
duration time Required The length of time to run
name string Schedule N Friendly name for the schedule
weekday list The days of week to run [mon, tue...sun]
day list Days of month to run [1, 2...31]/odd/even
month list Months of year to run [jan, feb...dec]

Sun Event

Leave the time value in the Schedule Objects blank and add the following object. An optional before or after time can be specified.

Name Type Default Description
sun string Required sunrise or sunset
before time '00:00' Time before the event
after time '00:00' Time after the event

Sequence Objects

Sequences allow zones to run one at a time in a particular order with a delay in between.

Name Type Default Description
schedules list Schedule Objects Schedule details (Must have at least one). Note: duration is ignored
zones list Sequence Zone Objects Zone details (Must have at least one)
delay time Required Delay between zones
name string Run N Friendly name for the sequence

Sequence Zone Objects

The sequence zone is a reference to the actual zone defined in the Zone Objects. Ensure the zone_id's match between this object and the zone object. The zone may appear more than once in the case of a split run.

Name Type Default Description
zone_id string Required Zone reference. This must match the zone_id in the Zone Objects
duration time Required The length of time to run

Testing Object

The testing object is useful for running through a predetermined regime. Note: the speed value does not alter the system clock in any way. It is accomplished by an internal 'virtual clock'.

Name Type Default Description
enabled bool true Enable/disable testing
speed number 1.0 Test speed. A value less than 1 will slow down the system. Values above 1 will speed up tests. A value of 2 will double the speed, 60 will turn minutes to seconds and 3600 will turn hours to seconds. Upper limit will depend on individual systems.
times list Test Time Objects Test run times

Test Time Objects

This is the test time object. Test times do not alter the system clock so there is no danger of disruption to the Home Assistant system.

Name Type Default Description
name string Test N Friendly name for the test
start datetime The virtual start time (YYYY-mm-dd HH:MM)
end datetime The virtual end time (YYYY-mm-dd HH:MM)

Configuration examples

Minimal configuration

# Example configuration.yaml entry
irrigation_unlimited:
  controllers:
    zones:
      entity_id: 'switch.my_switch'
      schedules:
        - time: '06:00'
          duration: '00:20'

Sun event example

# Example configuration.yaml entry
# Run 20 minutes before sunrise for 30 minutes
irrigation_unlimited:
  controllers:
    zones:
      schedules:
        - name: 'Before sunrise'
          time:
            sun: 'sunrise'
            before: '00:20'
          duration: '00:30'

Sequence example

# Example configuration.yaml entry
irrigation_unlimited:
  controllers:
    zones:
      - name: "Front lawn"
        entity_id: "switch.my_switch_1"
      - name: "Vege patch"
        entity_id: "switch.my_switch_2"
      - name: "Flower bed"
        entity_id: "switch.my_switch_3"
    sequences:
      - delay: "00:01"
        schedules:
          - name: "Sunrise"
            time:
              sun: "sunrise"
          - name: "After sunset"
            time:
              sun: "sunset"
              after: "00:30"
        zones:
          - zone_id: 1
            duration: "00:10"
          - zone_id: 2
            duration: "00:02"
          - zone_id: 3
            duration: "00:01"

For a more comprehensive example refer to here.

Services

The binary sensor associated with each controller and zone provide several services. The sensors offer the following services:

  • enable
  • disable
  • toggle
  • manual_run
  • adjust_time

If a controller sensor is targetted then it will effect all its children zones.

Services enable, disable and toggle

Enables/disables/toggles the controller or zone respectively.

Service data attribute Optional Description
entity_id no Controller or zone to enable/disable/toggle.

Service manual_run

Turn on the controller or zone for a period of time.

Service data attribute Optional Description
entity_id no Controller or zone to run.
time no Controller or zone to run.

Service adjust_time

Adjust the run times. Calling this service will override any previous adjustment i.e. it will not make adjustments on adjustments. For example, if the scheduled duration is 30 minutes calling percent: 150 will make it 45 minutes then calling percent 200 will make it 60 minutes. Must have one and only one of actual, percentage, increase, descrease or reset.

Tip

Use forecast and observation data collected by weather integrations in automations to adjust the run times. See below for more information.

Service data attribute Optional Description
entity_id no Controller or zone to run.
actual yes Specify a new time time. This will replace the existing duration. A time value is required '00:30'.
percentage yes Adjust time by a percentage. A positive float value. Values less than 1 will decrease the run time while values greater than 1 will increase the run time.
increase yes Increase the run time by the specified time. A value of '00:10' will increase the duration by 10 minutes. Value will be capped by the maximum setting.
descrease yes Decrease the run time by the specified time. A value of '00:05' will decrease the run time by 5 minutes. Value will be limited by the minimum setting.
reset yes Reset adjustment back to the original schedule time (Does not effect minimum or maximum settings).
minimum yes Set the minimum run time. Minimum run time is 1 minute and will be limited to this. Use the disable service to turn off.
maximum yes Set the maximum run time. Note: The default is no limit.

Service reload

Reload the YAML configuration file. Do not add or delete controllers or zones, they will not work because of the associated entities which are created on startup. This may be addressed in a future release, however, suggested work around is to set enabled to false to effectively disable/delete. All other settings can be changed including schedules. You will find the control in Configuration -> Server Controls -> YAML configuration reloading.

Frontend

Because this is an integration there is no frontend. For an out-of-the-box vanilla solution, simply put the master and zone binary sensors onto an entity card to see what is going on. However, for some inspiration and a compact card try this.

Collapsed

and it expands to:

Expanded

Note: This card uses some custom cards multiple-entity-row, fold-entity-row, logbook-card and at the moment card-mod for styles.

For watering history information here is a sample card.

watering_history_card.

Note: At time of writing this requires a pre-released version of mini-graph-card.

Although not really part of the integration but to get you started quickly here is a temperature card.

temperature_card.

And a rainfall card. Note how the watering times reduced as rainfall started. More on this below in Automation.

rainfall_card.

Finally, a system event log.

system_history_card.

Putting it all together, here is the complete picture.

my_dashboard.png.

This configuration is three vertical stacks and works well on mobile devices.

Automation

Due to the many weather integrations available and their relevance to your situation, there is realistically no way to provide a built in 'auto-adjustment' feature. Therefore, no attempt has been made to include a solution and this also makes the integration more independant and flexible. Run time adjustment is achieved by setting up sensor(s) that consume weather information such as rainfall and temperature but could factor in wind speed, solar radiation etc. to determine if more or less watering time is required. You might also consider using forecast information... A service call is then made to irrigation unlimited to adjust the run times. This does mean some knowledge of creating automations is required.

On a personal note, I use the national weather service BOM for my forecast information but find their observation data not relevant due to the extreme regional variations in my situation. There are many micro climates (mountains) and a few kilometers in any direction makes a lot of difference, down pour to a few drops. To this end I have a Personal Weather Station (PWS) that feeds Weather Underground where I use the WUnderground integration to retrieve the data.

You will find my adjustment automation here which feeds off the temperature and rainfall observation data. There is a card here which displays this information (uses multiple-entity-row). Some ideas were gleaned from kloggy's work.

Troubleshooting

Please set your logging for the custom_component to debug:

logger:
  default: info
  logs:
    custom_components.irrigation_unlimited: debug

Notes

  1. All feature requests, issues and questions are welcome.

Buy Me A Coffee

Contributions are welcome

If you want to contribute to this please read the Contribution guidelines.

Credits

Code template was mainly taken from @Ludeeus's integration_blueprint template.

Some inspiration was taken from kloggy's work.


Comments
  • Zone's 2+ don't calculate new start time.

    Zone's 2+ don't calculate new start time.

    Zone's 2+ don't calculate new start time and not start after one sucefull complete run.

    Zone 1 is working fine, but zone's 2+ don't showing start times. After a manually deactivation of the zone, they show the start time.

    Home assistant version 2022.4.7 Irrigation Unlimited: 2022.4.0

    Screenshot_2022-05-10-21-54-40-018_io.homeassistant.companion.android.jpg

    opened by dAjaY85 18
  • Implement stable entity id's for controllers and zones

    Implement stable entity id's for controllers and zones

    Is your feature request related to a problem? Please describe.

    Yes. The current irrigation_unlimited implementation (v.2022.3.0) generates automatically the entity id's for controllers and zones, which are based on the position of the element in the yaml configuration file, e.g. binary_sensor.irrigation_unlimited_c1_z1. This has two drawbacks:

    (1) does not allow for user-friendly entity id's, and (2) implies that the entity id's will change every time a controller or zone is removed or relocated inside the config file.

    Both are very inconvenient and error-prone if you have multiple controllers and zones, because these id's are used in many other places like UI definition files and need to be changed accordingly.

    Describe the solution you'd like

    A solution for the problems above would be to allow for stable, user-defined id's for controllers and zones. One possible way would be as follows:

    1. Accept an optional configuration variable named controller_id in the controller definition with a default value of cN, where N is the controller index.

    2. Accept an optional configuration variable named zone_id in the zone definition with default value of zN, where N is the zone index. It is worth noting that this zone_id already exists as a config variable, but is currently not being loaded from the config file because the config.get instruction refers to CONF_ID ("id") instead of CONF_ZONE_ID ("zone_id"); this seems to be a bug.

    3. Generate the entity_id by combining the previous variables, e.t. binary_sensor.irrigation_unlimited_gardenctrl_northzone

    Describe alternatives you've considered

    No simple alternative was identified to solve the problems described above.

    Additional context

    I have implemented the solution described above on top of irrigation_unlimited 2022.3.0. It does not have a lot of changes and it works as expected with HA 2022.4.3. I will be happy to contribute the code changes to the project if it is deemed useful, but I am not familiar with the testing framework and therefore I cannot provide any tests. I also have not updated the usage documentation, but I am willing to do that if these changes are merged into the component.

    Additional suggestions

    Miscellaneous notes on collateral issues, that I took when researching this topic:

    1. As stated above at point 2 of the solution description, there seems to be a bug needing correction, related to zone_id configuration.

    2. The service_enable functions under IUZone and IUController would in my view be best renamed to service_call of something of the sort, to better reflect their true semantics (they are not only used to enable but also to disable and toggle).

    3. The domain name "irrigation_unlimited", when used in combination with meaningful (and therefore longer) controller and zone id's tends to generate very long names, which sometimes do not fit in HA screens; this can be quite annoying. I would suggest to change this domain name to something shorter and, by the way, maybe not referencing irrigation, considering that this component provides generic sequencing and timing functionality that goes far beyond watering applications; I myself intend to use it for controlling house lights too.

    opened by gufonero 18
  • How to variate time parameter of the manual_run

    How to variate time parameter of the manual_run

    Hi! Sorry for my rookie question! I would like to dynamically change the Time parameter of the manual_run service. For example via an helper. Could you send me any suggestions? Regards: Tamas

    opened by gerseit 13
  • Unable to toggle controller/zone after upgrade to HA 2022.6

    Unable to toggle controller/zone after upgrade to HA 2022.6

    I noticed I am no longer able to disable zone/controller (nor enable or toggle) after upgrading to HA 2022.6 when calling the service, or when taping on the icon in the irrigation card. Reverting back to 2022.5.5 - all is working as expected

    To Reproduce

    1. call appropriate service. Service seems to run OK (green check) yet no result. Zones are enabled (seem that way) yet don't show any active schedules

    Expected behavior Zone/controller should be disabled, or enabled and show next run time.

    Screenshots image

    Desktop (please complete the following information):

    • OS: 2022.6

    Additional context Following logs are observed in HA:

    Logger: homeassistant
    Source: util/async_.py:168
    First occurred: 2:37:09 PM (78 occurrences)
    Last logged: 2:43:19 PM
    
    Error doing job: Task exception was never retrieved
    Traceback (most recent call last):
      File "/config/custom_components/irrigation_unlimited/irrigation_unlimited.py", line 3986, in _async_timer
        self.timer(atime)
      File "/config/custom_components/irrigation_unlimited/irrigation_unlimited.py", line 3982, in timer
        self.poll_main(atime)
      File "/config/custom_components/irrigation_unlimited/irrigation_unlimited.py", line 3969, in poll_main
        self.poll(atime, force)
      File "/config/custom_components/irrigation_unlimited/irrigation_unlimited.py", line 3957, in poll
        if self.muster(wtime, force) != 0:
      File "/config/custom_components/irrigation_unlimited/irrigation_unlimited.py", line 3915, in muster
        self._history.muster(stime, entity_ids, force)
      File "/config/custom_components/irrigation_unlimited/history.py", line 142, in muster
        data = history.get_significant_states(
      File "/usr/src/homeassistant/homeassistant/components/recorder/history.py", line 171, in get_significant_states
        return get_significant_states_with_session(
      File "/usr/src/homeassistant/homeassistant/components/recorder/history.py", line 288, in get_significant_states_with_session
        states = execute_stmt_lambda_element(
      File "/usr/src/homeassistant/homeassistant/components/recorder/util.py", line 188, in execute_stmt_lambda_element
        executed = session.execute(stmt)
      File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 1711, in execute
        conn = self._connection_for_bind(bind)
      File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 1552, in _connection_for_bind
        return self._transaction._connection_for_bind(
      File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 747, in _connection_for_bind
        conn = bind.connect()
      File "/usr/local/lib/python3.9/site-packages/sqlalchemy/future/engine.py", line 406, in connect
        return super(Engine, self).connect()
      File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 3234, in connect
        return self._connection_cls(self, close_with_result=close_with_result)
      File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 96, in __init__
        else engine.raw_connection()
      File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 3313, in raw_connection
        return self._wrap_pool_connect(self.pool.connect, _connection)
      File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 3280, in _wrap_pool_connect
        return fn()
      File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/impl.py", line 382, in connect
        return _ConnectionFairy._checkout(self, self._fairy)
      File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 868, in _checkout
        fairy = _ConnectionRecord.checkout(pool)
      File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 476, in checkout
        rec = pool._do_get()
      File "/usr/src/homeassistant/homeassistant/components/recorder/pool.py", line 75, in _do_get
        check_loop(
      File "/usr/src/homeassistant/homeassistant/util/async_.py", line 168, in check_loop
        raise RuntimeError(
    RuntimeError: Blocking calls must be done in the executor or a separate thread; Use homeassistant.components.recorder.get_instance(hass).async_add_executor_job(); at homeassistant/components/recorder/pool.py, line 75: check_loop(
    
    opened by stomko11 12
  • Next cycle not working

    Next cycle not working

    I have deleted and reloaded the integration multiple times. I've tried to only use the bare minimum configuration and it will not calculate the next cycle. here is a link to pic showing the next cycle not being calculated. This all worked last year and worked up until 2 days ago.

    https://imgur.com/a/IkIITsK

    Version of the custom_component

    I have tried 2022.6 and the master -->

    Configuration

    irrigation_unlimited:
      controllers:
        entity_id: "input_boolean.garden_irrigation"
      #  enabled: true
        zones:
          - name: "Tomato Garden"
            entity_id: "switch.tasmota_garden_1"
          - name: "Bean Patch"
            entity_id: "switch.tasmota_garden_2"
          - name: "Lettuce Patch"
            entity_id: "switch.tasmota_garden_3"
          - name: "Zucchini Patch"
            entity_id: "switch.tasmota_garden_4" 
        sequences:
          - name: "Morning Spring and Autumn"
            duration: "00:10"
            delay: "00:00"
            repeat: 3
            schedules:
              - name: "Sunrise"
                time:
                  sun: "sunrise"
                  before: "01:30"
                month: [jun, jul, aug, sep, oct]
            zones:
              - zone_id: 1
              - zone_id: 2
                duration: "00:06"
              - zone_id: 3
                duration: "00:07"
              - zone_id: 4
                duration: "00:07"
        #  - name: "Mid Day Summer"
          #  duration: "00:10"
          #  delay: "00:05"
          #  repeat: 3
          #  schedules:
            #  - name: "Mid-day"
              #  time: "12:15"
              #  month: [jun, jul, aug]
          #  zones:
            #  - zone_id: 1
            #  - zone_id: 3
          - name: "Evening Spring and Autumn"
            duration: "00:10"
            delay: "00:00"
            repeat: 3
            schedules:
              - name: "Before sunset"
                time:
                  sun: "sunset"
                  before: "03:15"
                month: [jun, jul, aug, sep, oct]
            zones:
              - zone_id: 1
                # duration: "00:08"
              - zone_id: 2
                duration: "00:06"
              - zone_id: 3
                duration: "00:07"
              - zone_id: 4
                duration: "00:07"
    
    

    Add your logs here.

    
    ## Describe the bug
    The have deleted and reloaded the integration multiple times. I've tried to only use the bare minimum configuration and it will not calculated the next cycle. I see the logs say "does not match the unit of already compiled statistics (in)" but I have used all converted sensors in the configurations to metric. Should I switch the home assistant units to metric instead of imperial? This all worked last year on older version and worked up until 2 days ago. Now it will not calculate next cycle time.
    
    
    ## Debug log
    
    <!-- To enable debug logs check this https://www.home-assistant.io/components/logger/ -->
    
    ```{
      "trace": {
        "last_step": "action/0",
        "run_id": "050b411933a401563fd1112b1fc07a35",
        "state": "stopped",
        "script_execution": "finished",
        "timestamp": {
          "start": "2022-07-07T01:18:56.887509+00:00",
          "finish": "2022-07-07T01:18:56.918644+00:00"
        },
        "domain": "automation",
        "item_id": "IU1653340123453",
        "trigger": "state of sensor.rain_rate_median_over_last_8_hours",
        "trace": {
          "trigger/1": [
            {
              "path": "trigger/1",
              "timestamp": "2022-07-07T01:18:56.887640+00:00",
              "changed_variables": {
                "this": {
                  "entity_id": "automation.irrigation_unlimited_adjustment",
                  "state": "on",
                  "attributes": {
                    "last_triggered": "2022-07-07T01:18:15.620863+00:00",
                    "mode": "single",
                    "current": 0,
                    "id": "IU1653340123453",
                    "friendly_name": "Irrigation Unlimited Adjustment"
                  },
                  "last_changed": "2022-07-07T01:17:25.460223+00:00",
                  "last_updated": "2022-07-07T01:18:15.672375+00:00",
                  "context": {
                    "id": "01G7B3RXJ2VN55D97FW8KHTGGC",
                    "parent_id": "01G7B3RXHHAMGN0PWQTVPKWKF9",
                    "user_id": null
                  }
                },
                "trigger": {
                  "id": "1",
                  "idx": "1",
                  "platform": "state",
                  "entity_id": "sensor.rain_rate_median_over_last_8_hours",
                  "from_state": {
                    "entity_id": "sensor.rain_rate_median_over_last_8_hours",
                    "state": "6.86",
                    "attributes": {
                      "state_class": "measurement",
                      "age_coverage_ratio": 0.79,
                      "buffer_usage_ratio": 0.05,
                      "source_value_valid": true,
                      "unit_of_measurement": "mm/hr",
                      "icon": "mdi:calculator",
                      "friendly_name": "Rain Rate Median over last 8 hours"
                    },
                    "last_changed": "2022-07-07T01:18:12.898109+00:00",
                    "last_updated": "2022-07-07T01:18:12.898109+00:00",
                    "context": {
                      "id": "01G7B3RTX2YC5YT2721HV64WMS",
                      "parent_id": null,
                      "user_id": null
                    }
                  },
                  "to_state": {
                    "entity_id": "sensor.rain_rate_median_over_last_8_hours",
                    "state": "6.1",
                    "attributes": {
                      "state_class": "measurement",
                      "age_coverage_ratio": 0.79,
                      "buffer_usage_ratio": 0.05,
                      "source_value_valid": true,
                      "unit_of_measurement": "mm/hr",
                      "icon": "mdi:calculator",
                      "friendly_name": "Rain Rate Median over last 8 hours"
                    },
                    "last_changed": "2022-07-07T01:18:56.876500+00:00",
                    "last_updated": "2022-07-07T01:18:56.876500+00:00",
                    "context": {
                      "id": "01G7B3T5VCY223J9KVKHN1N7A7",
                      "parent_id": null,
                      "user_id": null
                    }
                  },
                  "for": null,
                  "attribute": null,
                  "description": "state of sensor.rain_rate_median_over_last_8_hours"
                }
              }
            }
          ],
          "condition/0": [
            {
              "path": "condition/0",
              "timestamp": "2022-07-07T01:18:56.887756+00:00",
              "result": {
                "result": true
              }
            }
          ],
          "condition/0/conditions/0": [
            {
              "path": "condition/0/conditions/0",
              "timestamp": "2022-07-07T01:18:56.887831+00:00",
              "result": {
                "result": true,
                "entities": [
                  "sensor.irrigation_unlimited_rain_weighted_total"
                ]
              }
            }
          ],
          "condition/0/conditions/1": [
            {
              "path": "condition/0/conditions/1",
              "timestamp": "2022-07-07T01:18:56.888557+00:00",
              "result": {
                "result": true,
                "entities": [
                  "sensor.rain_rate_median_over_last_8_hours"
                ]
              }
            }
          ],
          "condition/0/conditions/2": [
            {
              "path": "condition/0/conditions/2",
              "timestamp": "2022-07-07T01:18:56.889115+00:00",
              "result": {
                "result": true,
                "entities": [
                  "sensor.irrigation_unlimited_temperature_5_day_moving_average"
                ]
              }
            }
          ],
          "action/0": [
            {
              "path": "action/0",
              "timestamp": "2022-07-07T01:18:56.901213+00:00",
              "changed_variables": {
                "context": {
                  "id": "01G7B3T5VQPP36802ETTYY7GAV",
                  "parent_id": "01G7B3T5VCY223J9KVKHN1N7A7",
                  "user_id": null
                }
              },
              "result": {
                "params": {
                  "domain": "irrigation_unlimited",
                  "service": "adjust_time",
                  "service_data": {
                    "entity_id": "binary_sensor.irrigation_unlimited_c1_m",
                    "zones": 0,
                    "percentage": 0
                  },
                  "target": {}
                },
                "running_script": false,
                "limit": 10
              }
            }
          ]
        },
        "config": {
          "id": "IU1653340123453",
          "alias": "Irrigation Unlimited Adjustment",
          "trigger": [
            {
              "platform": "time",
              "at": "02:00"
            },
            {
              "platform": "state",
              "entity_id": [
                "sensor.irrigation_unlimited_rain_weighted_total",
                "sensor.irrigation_unlimited_temperature_5_day_moving_average",
                "sensor.rain_rate_median_over_last_8_hours"
              ]
            }
          ],
          "condition": {
            "condition": "and",
            "conditions": [
              "{{ states('sensor.irrigation_unlimited_rain_weighted_total') | float(-1) != -1 }}",
              "{{ states('sensor.rain_rate_median_over_last_8_hours') | float(-1) != -1 }}",
              "{{ states('sensor.irrigation_unlimited_temperature_5_day_moving_average') | float(-273) != -273 }}"
            ]
          },
          "action": {
            "service": "irrigation_unlimited.adjust_time",
            "data": {
              "entity_id": "binary_sensor.irrigation_unlimited_c1_m",
              "zones": 0,
              "percentage": "{
    
    

    Add your logs here.

    Logger: homeassistant.components.sensor.recorder
    Source: components/sensor/recorder.py:492
    Integration: Sensor (documentation, issues)
    First occurred: 9:20:10 PM (6 occurrences)
    Last logged: 9:20:10 PM
    
    The unit of sensor.irrigation_unlimited_rain_1 (mm) does not match the unit of already compiled statistics (in). Generation of long term statistics will be suppressed unless the unit changes back to in. Go to https://my.home-assistant.io/redirect/developer_statistics to fix this
    The unit of sensor.irrigation_unlimited_rain_2 (mm) does not match the unit of already compiled statistics (in). Generation of long term statistics will be suppressed unless the unit changes back to in. Go to https://my.home-assistant.io/redirect/developer_statistics to fix this
    The unit of sensor.irrigation_unlimited_rain_3 (mm) does not match the unit of already compiled statistics (in). Generation of long term statistics will be suppressed unless the unit changes back to in. Go to https://my.home-assistant.io/redirect/developer_statistics to fix this
    The unit of sensor.irrigation_unlimited_rain_4 (mm) does not match the unit of already compiled statistics (in). Generation of long term statistics will be suppressed unless the unit changes back to in. Go to https://my.home-assistant.io/redirect/developer_statistics to fix this
    
    
    opened by bsmith76s 11
  • How to open to valves/zone at the same time

    How to open to valves/zone at the same time

    Firstly, great component and thank you for sharing.

    I have quite a big garden with multiple lanes/valves in the system. I understand that a zone is equal to a switch. How would I go about opening two valves/switch at the same time, or add two switches to a zone?

    Thanks again.

    opened by CiViC321 11
  • HA unresponsive after irrigation_unlimited is loaded

    HA unresponsive after irrigation_unlimited is loaded

    Describe the bug Since I've upgraded to 2022.3.0, I started to have issues with HA. It started three weeks ago on Sunday. HA was not accessible anymore via the web interface. I tried a lot, but couldn't pinpoint the problem. So I reinstalled HA and restored a backup. Everything went well that week... until it was Sunday again. Same as the week before. HA was unreachable via the web interface.

    Long story short: when I disable irrigation_unlimited in configuration.yaml, HA works fine. If I enable it, it's unresponsive.

    To Reproduce For me it's reproducible by enabling irrigation_unlimited.

    Additional context

    Logs:

    2022-04-19 08:45:25 INFO (MainThread) [custom_components.irrigation_unlimited] 
    -------------------------------------------------------------------
    Irrigation Unlimited
    Version: 2022.3.0
    If you have any issues with this you need to open an issue here:
    https://github.com/rgc99/irrigation_unlimited/issues
    -------------------------------------------------------------------
    
    2022-04-19 08:45:25 DEBUG (MainThread) [custom_components.irrigation_unlimited] LOAD
    2022-04-19 08:45:27 DEBUG (MainThread) [custom_components.irrigation_unlimited] REGISTER [2022-04-19 08:45:20] controller: 0, zone: 0, entity: irrigation_unlimited.coordinator
    2022-04-19 08:45:27 DEBUG (MainThread) [custom_components.irrigation_unlimited] CALL [2022-04-19 08:45:20] service: adjust_time, controller: 1, zone: 0, data: {"actual": "2:54:10", "sequence_id": 1, "zones": [1]}
    2022-04-19 08:45:27 DEBUG (MainThread) [custom_components.irrigation_unlimited] CALL [2022-04-19 08:45:20] service: adjust_time, controller: 1, zone: 0, data: {"actual": "1:15:20", "sequence_id": 1, "zones": [2]}
    2022-04-19 08:45:27 DEBUG (MainThread) [custom_components.irrigation_unlimited] CALL [2022-04-19 08:45:20] service: adjust_time, controller: 1, zone: 0, data: {"actual": "6:04:00", "sequence_id": 2, "zones": [1]}
    2022-04-19 08:45:28 DEBUG (MainThread) [custom_components.irrigation_unlimited] START
    2022-04-19 08:45:28 DEBUG (MainThread) [custom_components.irrigation_unlimited] REGISTER [2022-04-19 08:45:20] controller: 1, zone: 0, entity: binary_sensor.irrigation_unlimited_c1_m
    2022-04-19 08:45:28 DEBUG (MainThread) [custom_components.irrigation_unlimited] REGISTER [2022-04-19 08:45:20] controller: 1, zone: 1, entity: binary_sensor.irrigation_unlimited_c1_z1
    2022-04-19 08:45:28 DEBUG (MainThread) [custom_components.irrigation_unlimited] REGISTER [2022-04-19 08:45:20] controller: 1, zone: 2, entity: binary_sensor.irrigation_unlimited_c1_z2
    2022-04-19 08:45:28 DEBUG (MainThread) [custom_components.irrigation_unlimited] REGISTER [2022-04-19 08:45:20] controller: 1, zone: 3, entity: binary_sensor.irrigation_unlimited_c1_z3
    2022-04-19 08:45:28 DEBUG (MainThread) [custom_components.irrigation_unlimited] REGISTER [2022-04-19 08:45:20] controller: 1, zone: 4, entity: binary_sensor.irrigation_unlimited_c1_z4
    2022-04-19 08:45:28 DEBUG (MainThread) [custom_components.irrigation_unlimited] REGISTER [2022-04-19 08:45:20] controller: 1, zone: 5, entity: binary_sensor.irrigation_unlimited_c1_z5
    2022-04-19 08:45:28 DEBUG (MainThread) [custom_components.irrigation_unlimited] REGISTER [2022-04-19 08:45:20] controller: 1, zone: 6, entity: binary_sensor.irrigation_unlimited_c1_z6
    2022-04-19 08:45:37 DEBUG (MainThread) [custom_components.irrigation_unlimited] INITIALISED
    2022-04-19 08:45:38 WARNING (MainThread) [homeassistant.helpers.frame] Detected integration that accesses the database without the database executor; Use homeassistant.components.recorder.get_instance(hass).async_add_executor_job() for faster database operations. Please report issue to the custom component author for irrigation_unlimited using this method at custom_components/irrigation_unlimited/history.py, line 142: data = history.get_significant_states(
    

    My config:

    granularity: 10
    refresh_interval: 20
    controllers:
      - name: 'Rain Bird'
        zones:
          # zone_id: 1
          - name: 'Lawn Front (zone 1)'
            entity_id: 'switch.rain_valve_1'
            maximum: '01:30'
          # zone_id: 2
          - name: 'Lawn Back (zone 2)'
            entity_id: 'switch.rain_valve_2'
            maximum: '06:00'
          # zone_id: 3
          - name: 'Lawn Side (zone 3)'
            entity_id: 'switch.rain_valve_3'
            maximum: '01:30'
          # zone_id: 4
          - name: 'Irrigation around house (zone 1)'
            entity_id: 'switch.irrigation_valve_1'
            maximum: '04:00'
          # zone_id: 5
          - name: 'Irrigation vegetable garden (zone 2)'
            entity_id: 'switch.irrigation_valve_2'
            maximum: '04:00'
          # zone_id: 6
          - name: 'Irrigation rhododendron (zone 3)'
            entity_id: 'switch.irrigation_valve_3'
            maximum: '04:00'
        sequences:
          - name: 'Lawn - Summer mornings zone 1 & 3'
            delay: '00:00:30'
            schedules:
              - time:
                  sun: 'sunrise'
                  before: '00:10'
                anchor: finish
                weekday: [mon]
                month: [mar, apr, may, jun, jul, aug, sep]
            zones:
              - zone_id: 1
                duration: '00:00'
              - zone_id: 3
                duration: '00:00'
          - name: 'Lawn - Summer mornings zone 2'
            delay: '00:00:30'
            schedules:
              - time:
                  sun: 'sunrise'
                  before: '01:10'
                anchor: finish
                weekday: [tue]
                month: [mar, apr, may, jun, jul, aug, sep]
            zones:
              - zone_id: 2
                duration: '00:00'
          - name: 'Borders - Summer mornings around house'
            delay: '00:00:20'
            schedules:
              - time:
                  sun: 'sunrise'
                  before: '00:10'
                anchor: finish
                weekday: [fri]
                month: [mar, apr, may, jun, jul, aug, sep]
            zones:
              - zone_id: 4
                duration: '04:00'
          - name: 'Vegetable garden - Summer mornings'
            delay: '00:00:20'
            schedules:
              - time:
                  sun: 'sunrise'
                  before: '00:10'
                anchor: finish
                weekday: [wed,sun]
                month: [may, jun, jul, aug, sep]
            zones:
              - zone_id: 5
                duration: '01:00'
          - name: 'Borders - Summer mornings rhododendron'
            delay: '00:00:20'
            schedules:
              - time:
                  sun: 'sunrise'
                  before: '00:10'
                anchor: finish
                weekday: [thu]
                month: [mar, apr, may, jun, jul, aug, sep]
            zones:
              - zone_id: 6
                duration: '04:00'
    
    opened by rmeekers 10
  • Invalid config after updating to version 2022.1.0

    Invalid config after updating to version 2022.1.0

    Describe the bug Errors after update to 2022.1.0

    To Reproduce

    1. Update Irrigation_unlimietd with HACS.
    2. Restart HA.

    Expected behavior No errors notification, as usually.

    Additional context

    The notification:

    The following integrations and platforms could not be set up:
    irrigation_unlimited
    Please check your config and logs.
    

    And the logs gives three errors with this information:

    Error adding entities for domain irrigation_unlimited with platform irrigation_unlimited
    11:46:09 – (ERROR) Irrigation Unlimited (custom integration)
    Logger: custom_components.irrigation_unlimited
    Source: custom_components/irrigation_unlimited/entity.py:111
    Integration: Irrigation Unlimited (documentation, issues)
    First occurred: 11:46:09 (1 occurrences)
    Last logged: 11:46:09
    Error adding entities for domain irrigation_unlimited with platform irrigation_unlimited
    Traceback (most recent call last):
    File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 382, in async_add_entities
    await asyncio.gather(*tasks)
    File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 613, in _async_add_entity
    await entity.add_to_platform_finish()
    File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 747, in add_to_platform_finish
    await self.async_added_to_hass()
    File "/config/custom_components/irrigation_unlimited/entity.py", line 111, in async_added_to_hass
    data = IUAdjustment(zne[ATTR_ADJUSTMENT]).to_dict()
    KeyError: 'adjustment'
    
    Error during setup of component irrigation_unlimited
    11:46:09 – (ERROR) Irrigation Unlimited (custom integration)
    Logger: homeassistant.setup
    Source: custom_components/irrigation_unlimited/entity.py:111
    Integration: Irrigation Unlimited (documentation, issues)
    First occurred: 11:46:09 (1 occurrences)
    Last logged: 11:46:09
    Error during setup of component irrigation_unlimited
    Traceback (most recent call last):
    File "/usr/src/homeassistant/homeassistant/setup.py", line 229, in _async_setup_component
    result = await task
    File "/config/custom_components/irrigation_unlimited/init.py", line 251, in async_setup
    await component.async_add_entities([IUComponent(coordinator)])
    File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 382, in async_add_entities
    await asyncio.gather(*tasks)
    File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 613, in _async_add_entity
    await entity.add_to_platform_finish()
    File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 747, in add_to_platform_finish
    await self.async_added_to_hass()
    File "/config/custom_components/irrigation_unlimited/entity.py", line 111, in async_added_to_hass
    data = IUAdjustment(zne[ATTR_ADJUSTMENT]).to_dict()
    KeyError: 'adjustment'
    
    Exception in <file.irrigation_unlimited_service_shim.irrigation_unlimited_list_config> line 39: data = json.loads(irrigation_unlimited.coordinator.configuration) ^ AttributeError: 'StateVal' object has no attribute 'configuration'
    11:46:51 – (ERROR) Pyscript Python scripting (custom integration) - message first occurred at 11:46:49 and shows up 2 times
    Logger: custom_components.pyscript.file.irrigation_unlimited_service_shim.irrigation_unlimited_list_config
    Source: custom_components/pyscript/eval.py:480
    Integration: Pyscript Python scripting (documentation, issues)
    First occurred: 11:46:49 (2 occurrences)
    Last logged: 11:46:51
    Exception in <file.irrigation_unlimited_service_shim.irrigation_unlimited_list_config> line 39: data = json.loads(irrigation_unlimited.coordinator.configuration) ^ AttributeError: 'StateVal' object has no attribute 'configuration'
    
    
    opened by miguelpucela 9
  • Sequencing and zones

    Sequencing and zones

    Hi i have an irrigation pump that i need enabled during the entire run. I'm not to sure where to insert the entity_id of the pump to have it switch on during the entire sequence

    opened by RTAeroHASS 9
  • Delay between Zones

    Delay between Zones

    Hi Robert, First of all congratulations and thank you for your great work, I was looking for a replacement system to a great system that I used (https://github.com/kloggy/HA-Irrigation-Version2), but it has been giving some problems and I ended up giving up . So, I started using your system and I'm really enjoying it, but I was left with a question if it is possible to create a delay of a few seconds between each zone, to prevent several of them from starting to irrigate at the same time. Thank you very much!

    granularity: 10
    controllers:
      - name: "Fundos"
        enabled: true
        zones:
          - name: "Gramado"
            entity_id: "switch.irrigacao_grama"
            enabled: true
            minimum: "00:00:10"
            maximum: "00:05:00"
            schedules:
              - name: "Alvorada"
                time:
                  sun: "sunrise"
                  before: "00:20"
                duration: "00:02"
              - name: "Por do Sol"
                time:
                  sun: "sunset"
                  after: "00:30"
                duration: "00:02"
          - name: "Lateral"
            entity_id: "switch.irrigacao_lateral"
            enabled: true
            minimum: "00:00:10"
            maximum: "00:05:00"
            schedules:
              - name: "Alvorada"
                time:
                  sun: "sunrise"
                  before: "00:20"
                duration: "00:02"
              - name: "Por do Sol"
                time:
                  sun: "sunset"
                  after: "00:30"
                duration: "00:02"
      - name: "Frente"
        enabled: true
        zones:
          - name: "Corredor"
            entity_id: "switch.irrigacao_corredor"
            enabled: true
            minimum: "00:00:10"
            maximum: "00:05:00"
            schedules:
              - name: "Alvorada"
                time:
                  sun: "sunrise"
                  before: "00:20"
                duration: "00:02"
              - name: "Por do Sol"
                time:
                  sun: "sunset"
                  after: "00:30"
                duration: "00:02"
          - name: "Horta"
            entity_id: "switch.irrigacao_horta"
            enabled: true
            minimum: "00:00:10"
    
    opened by ivanroberto 9
  • [Question] HAsmartirrigation Integration

    [Question] HAsmartirrigation Integration

    Since it was mentioned in the description of the project, how exactly would an integration of HAsmartirrigation to distinguish dynamic watering duration look like? How would the result value of the HAsmartirrigation sensor have to be integrated into the yaml file exactly? Thanks for creating this wonderful integration which really helps a lot.

    opened by Kurisutian 8
  • Schedule every n days

    Schedule every n days

    This PR add the ability to schedule a run every n days.

    Example Use Case

    I have a system with 16 irrigation 'zones' which I split up into 3 sequences (2 zones in each), which I want to run sequentially one day after the other (ie. Day 1 = Sequence A, ... , Day 3 = Sequence C, Day 5 = Sequence A, ect.). As the three sequences do not fit into the seven days of the week, I am unable to do this currently (as far as I can see). This can now be achieved using the following configuration which features:

    • The same number in the every_n_days option
    • Incremented start_n_days to stagger the alternation
        - name: 'Sequenced Controller'
          zones:
            - name: Station 1
            - name: Station 2
            - name: Station 3
            - name: Station 4
            - name: Station 5
            - name: Station 6
          sequences:
          - name: "Program A"
            schedules:
              - time: "19:15"
                day:
                  every_n_days: 3
                  start_n_days: 2022-01-01 # Starting date
            zones:
            - zone_id: 1
              duration: "00:10"
            - zone_id: 2
              duration: "00:10"
          - name: "Program B"
            schedules:
              - time: "19:15"
                day:
                  every_n_days: 3
                  start_n_days: 2022-01-02 # Starting date + 1
            zones:
            - zone_id: 3
              duration: "00:10"
            - zone_id: 4
              duration: "00:10"
          - name: "Program C"
            schedules:
              - time: "19:15"
                day:
                  every_n_days: 3
                  start_n_days: 2022-01-03 # Starting date + 2
            zones:
            - zone_id: 5
              duration: "00:10"
            - zone_id: 6
              duration: "00:10"
    
    

    FEEDBACK WANTED

    • Is this something you would consider?
    • Is inside the day option the best place for these options?
    • Are these the best choices for the option names?
      • every_n_days to alternate_n_days?
      • start_n_days to alternation_start?
    opened by aws404 1
  • error to restart hassio

    error to restart hassio

    when i restart hassio in log i receive this error

    ''' 2022-12-15 16:53:46.434 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/config/custom_components/irrigation_unlimited/history.py", line 103, in _async_handle_refresh_event await self._async_update_history(self._stime) File "/config/custom_components/irrigation_unlimited/history.py", line 196, in _async_update_history data = await get_instance(self._hass).async_add_executor_job( File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) File "/usr/src/homeassistant/homeassistant/components/recorder/history.py", line 167, in get_significant_states with session_scope(hass=hass) as session: File "/usr/local/lib/python3.10/contextlib.py", line 135, in enter return next(self.gen) File "/usr/src/homeassistant/homeassistant/components/recorder/util.py", line 93, in session_scope session = get_instance(hass).get_session() File "/usr/src/homeassistant/homeassistant/components/recorder/core.py", line 244, in get_session raise RuntimeError("The database connection has not been established") RuntimeError: The database connection has not been established 2022-12-15 16:53:46.459 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/components/history_stats/coordinator.py", line 87, in _async_update_from_event self.async_set_updated_data(await self._history_stats.async_update(event)) File "/usr/src/homeassistant/homeassistant/components/history_stats/data.py", line 125, in async_update await self._async_history_from_db(current_period_start, current_period_end) File "/usr/src/homeassistant/homeassistant/components/history_stats/data.py", line 143, in _async_history_from_db states = await instance.async_add_executor_job( File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) File "/usr/src/homeassistant/homeassistant/components/history_stats/data.py", line 156, in _state_changes_during_period return history.state_changes_during_period( File "/usr/src/homeassistant/homeassistant/components/recorder/history.py", line 380, in state_changes_during_period with session_scope(hass=hass) as session: File "/usr/local/lib/python3.10/contextlib.py", line 135, in enter return next(self.gen) File "/usr/src/homeassistant/homeassistant/components/recorder/util.py", line 93, in session_scope session = get_instance(hass).get_session() File "/usr/src/homeassistant/homeassistant/components/recorder/core.py", line 244, in get_session raise RuntimeError("The database connection has not been established") RuntimeError: The database connection has not been established '''

    opened by riddik14 1
  • No module named 'crontab'

    No module named 'crontab'

    Describe the bug I just updated the integration with the just released new version and now the component throws an error.

    Logger: homeassistant.setup
    Source: setup.py:210
    First occurred: 09:41:18 (1 occurrences)
    Last logged: 09:41:18
    
    Setup failed for custom integration irrigation_unlimited: Unable to import component: No module named 'crontab'
    

    Looks like maybe there are some missing crontab dependencies. Not sure where that module would come from.

    To Reproduce Steps to reproduce the behavior:

    Upgrade irrigation_unlimited and restart HA

    Irrigation Unlimited 2022.12.0

    HA version

    Home Assistant 2022.12.6 Supervisor 2022.11.2 Operating System 9.4 Frontend 20221213.0 - latest

    opened by tbaumann 3
  • After reboot: preamble entity switch state not in sync with real state

    After reboot: preamble entity switch state not in sync with real state

    Version

    v2022.11.0

    Configuration

    controllers:
      name: "Controleur 1"
      all_zones_config:
        show:
          timeline: true
        allow_manual: true
      preamble: "00:01"
      postamble: "00:05"
      entity_id: switch.alimentation_electrovannes
      zones:
        - name: Café François
          entity_id: switch.vanne_atelier_gui
        - name: Maison journalier
          entity_id: switch.vanne_maison_journalier_gui
        - name: Pelouse
          entity_id : switch.vanne_jardin_devant_gui
      sequences:
        - name: nuit
          delay: "00:01"
          schedules:
            - time: "20:30"
          zones:
            - zone_id: 1
              duration: "00:30"
            - zone_id: 2
              duration: "00:20"
        - name: jour
          duration: "00:05"
          delay: "00:55"
          repeat: 7
          schedules: 
            - time: "12:00"
          zones:
            - zone_id: 2
        - name: Pelouse seule
          schedules:
            - time: 02:30
          zones:
            - zone_id: 3
              duration: "00:01"
              delay: "00:01"
            - zone_id: 3
              duration: "00:20"
    

    Describe the bug

    I did not pay much attention until now, but since some time, each time HA is restarted the switch in the preamble section is set to On whereas it's physical state is Off.

    Debug log

    This error originated from a custom integration.
    
    Logger: custom_components.irrigation_unlimited
    Source: custom_components/irrigation_unlimited/irrigation_unlimited.py:4066
    Integration: Irrigation Unlimited (documentation, issues)
    First occurred: December 2, 2022 at 21:56:59 (1 occurrences)
    Last logged: December 2, 2022 at 21:56:59
    
    SYNCHRONISATION [2022-12-02 21:56:56] Switch does not match current state: switch: switch.alimentation_electrovannes
    
    
    opened by Kolia56 1
  • Using HAsmartirrigation but main valve is opening for 1 minute

    Using HAsmartirrigation but main valve is opening for 1 minute

    Hi,

    I'm using HAsmartirrigation for measuring the adjust_time per zone, but when there is no adjust_time because HAsmartirrigation isn't require to irrigate the main valve is still opening for 1 minute.

    Can this be disabled somehow?

    opened by rickroetenberg 3
  • Sequence not working(?)

    Sequence not working(?)

    Version of the custom_component

    2022.08

    Configuration

    irrigation_unlimited:
      controllers:
        - name: "Giardino"
          zones:
            - name: "Sud"
              entity_id: "switch.sprinkler_1"
            - name: "Ovest"
              entity_id: "switch.sprinkler_2"
            - name: "Nord"
              entity_id: "switch.sprinkler_3"
            - name: "Est"
              entity_id: "switch.sprinkler_4"
            - name: "Magnolia"
              entity_id: "switch.sprinkler_5"
            - name: "Aceri"
              entity_id: "switch.sprinkler_6"
          sequences:
              schedules:
                - time: "21:35"
    #            - time:
    #                sun: "sunset"
    #                after: "00:39"
                  anchor: start
              zones:
                - zone_id: 2
                - zone_id: 3
                - zone_id: 4
                - zone_id: 5
                - zone_id: 6
        - name: "Aiuole"
          zones:
            - name: "Aiuole"
              entity_id: "switch.sprinkler_7"
          sequences:
            - name: "Aiuole"
              schedules:
              - name: "Prima dell'alba"
                time:
                  sun: 'sunrise'
                  before: '00:20'
                duration: '00:07'
              - name: "Dopo il tramonto"
                time:
                  sun: 'sunset'
                  after: '00:30'
                duration: '00:07'
              zones:
                - zone_id: 1
    
    

    Describe the bug

    I'm sure I got something wrong somewhere. It's my first time trying implementing irrigation unlimited.

    I'm using SmartIrrigation to get irrigation timings for the controller named "Giardino". The controller "Aiuole" works fine. The controller "Giardino" has a sequence which should run the sprinklers in order from 1 to 6. For some reason it works correctly only for the first in the sequence (this is why in my config you can see only 2 to 6: it's a test. Before it was 1 to 6). After the first one, the run times from SmartIrrigation are not used, nor the sprinklers switched on.

    These are my automations:

    
    alias: Smart Irrigation Adjustment
    description: Adjust watering times based on smart irrigation calculations
    trigger:
      - platform: time_pattern
        minutes: /58
    condition: []
    action:
      - service: irrigation_unlimited.adjust_time
        data:
          actual: >-
            {{
            timedelta(seconds=states('sensor.smart_irrigation_sud_hourly_adjusted_run_time')
            | int(0))}}
          entity_id: binary_sensor.irrigation_unlimited_c1_z1
        enabled: true
      - service: irrigation_unlimited.adjust_time
        data:
          actual: >-
            {{
            timedelta(seconds=states('sensor.smart_irrigation_ovest_hourly_adjusted_run_time')
            | int(0))}}
          entity_id: binary_sensor.irrigation_unlimited_c1_z2
        enabled: true
      - service: irrigation_unlimited.adjust_time
        data:
          actual: >-
            {{
            timedelta(seconds=states('sensor.smart_irrigation_nord_hourly_adjusted_run_time')
            | int(0))}}
          entity_id: binary_sensor.irrigation_unlimited_c1_z3
        enabled: true
      - service: irrigation_unlimited.adjust_time
        data:
          actual: >-
            {{
            timedelta(seconds=states('sensor.smart_irrigation_est_hourly_adjusted_run_time')
            | int(0))}}
          entity_id: binary_sensor.irrigation_unlimited_c1_z4
        enabled: true
      - service: irrigation_unlimited.adjust_time
        data:
          actual: >-
            {{
            timedelta(seconds=states('sensor.smart_irrigation_magnolia_hourly_adjusted_run_time')
            | int(0))}}
          entity_id: binary_sensor.irrigation_unlimited_c1_z5
        enabled: true
      - service: irrigation_unlimited.adjust_time
        data:
          actual: >-
            {{
            timedelta(seconds=states('sensor.smart_irrigation_aceri_hourly_adjusted_run_time')
            | int(0))}}
          entity_id: binary_sensor.irrigation_unlimited_c1_z6
        enabled: true
    mode: single
    
    
    
    
    alias: Smart Irrigation Reset Bucket
    description: Resets the Smart Irrigation bucket after watering
    trigger:
      - platform: state
        entity_id:
          - binary_sensor.irrigation_unlimited_c1_z1
        from: "on"
        to: "off"
        id: Sud
      - platform: state
        entity_id:
          - binary_sensor.irrigation_unlimited_c1_z2
        from: "on"
        to: "off"
        id: Ovest
      - platform: state
        entity_id:
          - binary_sensor.irrigation_unlimited_c1_z3
        from: "on"
        to: "off"
        id: Nord
      - platform: state
        entity_id:
          - binary_sensor.irrigation_unlimited_c1_z4
        from: "on"
        to: "off"
        id: Est
      - platform: state
        entity_id:
          - binary_sensor.irrigation_unlimited_c1_z5
        from: "on"
        to: "off"
        id: Magnolia
      - platform: state
        entity_id:
          - binary_sensor.irrigation_unlimited_c1_z6
        from: "on"
        to: "off"
        id: Aceri
    action:
      - choose:
          - conditions:
              - condition: trigger
                id: Sud
            sequence:
              - service: smart_irrigation.smart_irrigation_sud_reset_bucket
                data: {}
          - conditions:
              - condition: trigger
                id: Ovest
            sequence:
              - service: smart_irrigation.smart_irrigation_ovest_reset_bucket
                data: {}
          - conditions:
              - condition: trigger
                id: Sud
            sequence:
              - service: smart_irrigation.smart_irrigation_nord_reset_bucket
                data: {}
          - conditions:
              - condition: trigger
                id: Ovest
            sequence:
              - service: smart_irrigation.smart_irrigation_est_reset_bucket
                data: {}
          - conditions:
              - condition: trigger
                id: Sud
            sequence:
              - service: smart_irrigation.smart_irrigation_magnolia_reset_bucket
                data: {}
          - conditions:
              - condition: trigger
                id: Ovest
            sequence:
              - service: smart_irrigation.smart_irrigation_aceri_reset_bucket
                data: {}
        default: []
    
    
    

    I post some pictures to make it a little more clear:

    image

    Actual sprinklers entities: image

    opened by AlessandroTischer 5
Releases(2022.12.1)
  • 2022.12.1(Dec 16, 2022)

    This is an update to the 2022.12.0 release which was missing a requirement. This omission caused the integration to not load properly.

    :star: New features

    • Cron style scheduling.
    • Schedule can be enabled/disable from the configuration.

    :zap: Enhancements

    • Allow schedule to pickup midstream on restart.
    • Service call logging now at info level.

    :book: Documentation

    • Update for new features.

    :bug: Bug Fixes

    • Fix delay calculation when last zone in sequence is disabled.
    • Minor corrections for stability and performance.

    Full Changelog: https://github.com/rgc99/irrigation_unlimited/compare/2022.12.0...2022.12.1

    Source code(tar.gz)
    Source code(zip)
  • 2022.11.0(Nov 7, 2022)

    :star: New features

    • Allow manual run to zones even when disabled.
    • Clock mode now defaults to seer mode.
    • Add packages for Plaid Systems Soil Moisture Sensor.

    :book: Documentation

    • Various updates to documentation.

    Full Changelog: https://github.com/rgc99/irrigation_unlimited/compare/2022.8.0...2022.11.0

    Source code(tar.gz)
    Source code(zip)
  • 2022.8.0(Aug 27, 2022)

    :loudspeaker: Announcement

    • Don't forget to get the new and updated Irrigation Unlimited companion card https://github.com/rgc99/irrigation-unlimited-card. A compact card where you can monitor and control your system (enabled/disable, manual run, adjustments).

    :star: New features

    • Revamped clock. Now offers two modes fixed (legacy) and seer (default). The seer mode deprecates the granularity setting and fixes it at 1. This will increase accuracy and improve responsiveness without any additional CPU resources. CPU resources in idle state are almost nil.

    :book: Documentation

    • Update readme with new clock settings.

    What's Changed

    • Correct unit of measurement by @rmeekers in https://github.com/rgc99/irrigation_unlimited/pull/86

    New Contributors

    • @rmeekers made their first contribution in https://github.com/rgc99/irrigation_unlimited/pull/86

    Full Changelog: https://github.com/rgc99/irrigation_unlimited/compare/2022.7.0...2022.8.0

    Source code(tar.gz)
    Source code(zip)
  • 2022.8.0-pre(Aug 18, 2022)

    :star: New features

    • Revamped clock. Now offers two modes fixed (legacy) and seer (default). The seer mode deprecates the granularity setting and fixes it at 1. This will increase accuracy and improve responsiveness without any additional CPU resources. CPU resources in idle state are almost nil.

    :book: Documentation

    • Update readme with new clock settings.
    Source code(tar.gz)
    Source code(zip)
  • 2022.7.0(Jul 12, 2022)

    :star: New features

    • #73 Anti hammering. Turn off the master valve before the zone. Pre and post able values can now be negative.

    :zap: Enhancements

    • #80 Add example for watering from sunset to sunrise - overnight.
    • #52 Add example for Long Term Statistics LTS.

    :book: Documentation

    • #61 How to control motorised valves instead of switches & lights.
    • #82, #83 A schedule that never runs, just manual only.
    • Update for new features.
    • Move testing object documentation to developer section.

    :bug: Bug Fixes

    • #75 Problem in history module.
    • #78 Notifications for sequences when repeat used.
    • Minor corrections for stability and performance.

    Full Changelog: https://github.com/rgc99/irrigation_unlimited/compare/2021.6.0...2022.7.0

    Source code(tar.gz)
    Source code(zip)
  • 2022.6.0(Jun 4, 2022)

    This release is an urgent update to support Home Assistant 2022.6. This release contains some new features but the readme is not yet complete so stay tuned for the update to follow.

    If you get a configuration error after upgrading then check any zone_id: in the config. The id must conform to 'snake_case' style with the exception the first character can be a number. This means only lower case, numbers and the underscore characters can be used. It cannot start or end with an underscore and no more than one together. Valid id's are my_garden, front_lawn, rose_bed, 1. Some invalid examples are Front_Lawn, front__lawn, _front_lawn. You should have been getting warning messages in the previous release but now it is enforced. There is a good reason for this to be explained later but I thank you for your understanding in the meantime.

    Source code(tar.gz)
    Source code(zip)
  • 2022.4.0(Apr 25, 2022)

    :star: New features

    • Check, report and sync external switches on start up.

    :zap: Enhancements

    • Preparations for upcoming companion card.
    • Improve service call response time.

    :bug: Bug Fixes

    Fix Issue #58. Fix wrong reference to CONF_ID. Fix repaint issue where display did not update after service call. Minor corrections for stability and performance.

    Full Changelog: https://github.com/rgc99/irrigation_unlimited/compare/2022.3.0...2022.4.0

    Source code(tar.gz)
    Source code(zip)
  • 2022.3.0(Mar 19, 2022)

    :star: New features

    • New attribute on controller provides sequence run information. Use this for frontend hooks like the status card below.

    :zap: Enhancements

    • New and improved status card shows what is happening. Updated layout, colours and supports themes. Find the card here. Requires HTML-Jinja2 card

    status_card

    :book: Documentation

    • Updated readme for testing units.

    :bug: Bug Fixes

    Minor corrections for stability and performance.

    Full Changelog: https://github.com/rgc99/irrigation_unlimited/compare/2021.2.0...2022.3.0

    Source code(tar.gz)
    Source code(zip)
  • 2022.2.0(Feb 7, 2022)

    This release focuses on notifications. Going on holidays and worried about your garden. Maybe you just like the satisfaction to know all has gone ok. When an irrigation sequence completes, receive a notification on your phone, an email, or many others methods that are available in Home Assistant. Read about it in the documentation.

    :star: New features

    • Fire an event when a sequence starts and finishes. Includes additional information about the controller, sequence, schedule and duration. Use this information in templating.

    persistent_notification

    :zap: Enhancements

    • Export sequence schedules in configuration.
    • Detect if irrigation was on and HA restarted (incomplete run). Log message.

    :book: Documentation

    • Add section on notifications.

    :bug: Bug Fixes

    • Create new class for restoring after restart. More consistent and robust.
    • Minor corrections for stability and performance.

    Full Changelog: https://github.com/rgc99/irrigation_unlimited/compare/2022.1.2...2022.2.0

    Source code(tar.gz)
    Source code(zip)
  • 2022.1.2(Jan 18, 2022)

    Update to 2022.1.0/2022.1.1. Fixes issue #49 (Invalid config after updating to version 2022.1.0)

    :star: New features

    • Status card shows what is happening. Please see frontend if there is only one thing you read.

    status_card

    :zap: Enhancements

    • Export timing points. Critical timing information is output in a JSON formatted string. This information can be used in templates throughout Home Assistant
    • Enable/disable sequences and sequence zones.
    • Restore adjustments on startup. Adjustments now persist across HA restarts.

    :book: Documentation

    • Updated for new features.
    • Further examples.

    :bug: Bug Fixes

    Fix #47 Fix #48 Fix #49 Minor corrections for stability and performance.

    Full Changelog: https://github.com/rgc99/irrigation_unlimited/compare/2021.12.0...2022.1.2

    Source code(tar.gz)
    Source code(zip)
  • 2022.1.1(Jan 17, 2022)

    Update to 2022.1.0. Fixes issue #49 (Invalid config after updating to version 2022.1.0)

    :star: New features

    • Status card shows what is happening. Please see frontend if there is only one thing you read.

    status_card

    :zap: Enhancements

    • Export timing points. Critical timing information is output in a JSON formatted string. This information can be used in templates throughout Home Assistant
    • Enable/disable sequences and sequence zones.
    • Restore adjustments on startup. Adjustments now persist across HA restarts.

    :book: Documentation

    • Updated for new features.
    • Further examples.

    :bug: Bug Fixes

    Fix #47 Fix #48 Fix #49 Minor corrections for stability and performance.

    Full Changelog: https://github.com/rgc99/irrigation_unlimited/compare/2021.12.0...2022.1.1

    Source code(tar.gz)
    Source code(zip)
  • 2022.1.0(Jan 15, 2022)

    :star: New features

    • Status card shows what is happening. Please see frontend if there is only one thing you read.

    status_card

    :zap: Enhancements

    • Export timing points. Critical timing information is output in a JSON formatted string. This information can be used in templates throughout Home Assistant
    • Enable/disable sequences and sequence zones.
    • Restore adjustments on startup. Adjustments now persist across HA restarts.

    :book: Documentation

    • Updated for new features.
    • Further examples.

    :bug: Bug Fixes

    Fix #47 Fix #48
    Minor corrections for stability and performance.

    Full Changelog: https://github.com/rgc99/irrigation_unlimited/compare/2021.12.0...2022.1.0

    Source code(tar.gz)
    Source code(zip)
  • 2021.12.0(Dec 5, 2021)

    :star: New features

    • Timelines for a complete overview of past and future irrigation schedules. Here are some new example cards.

    timeline_card timeline_card

    :zap: Enhancements

    • History cached to reduce load.
    • New shims to pyscript.
    • Updated manual run card.
    • New enable/disable card courtesy of Paul.
    • More test units to ensure stability.

    :book: Documentation

    • Updated for new features.
    • Timeline chart and card.

    :bug: Bug Fixes

    • Update for templating changes.
    • Lots of code fine tuning for linter.
    Source code(tar.gz)
    Source code(zip)
  • 2021.10.0(Oct 1, 2021)

    :star: New features

    • New logging module for better tracing. More points logged to enhance support.

    :zap: Enhancements

    • Reload everything now including the creation of new controllers and zones.

    :book: Documentation

    • Huge new section on making service calls. How to hit the right spot.

    :bug: Bug Fixes

    • scan_interval: 600 added to average sensor examples.
    • Fix multi controller update in same tick.
    • Annotations for python < 3.9.
    • Warn when sequence service call is made on zone entity.
    • Harmonise logging messages.
    • Attempt to shutdown cleanly.
    Source code(tar.gz)
    Source code(zip)
  • 2021.9.0(Sep 1, 2021)

    Some great new features and enhancements in this release along with many updates and fixes

    :star: New features

    • Anchor schedules to a start or finish time. Feature request https://github.com/rgc99/irrigation_unlimited/issues/32

    :zap: Enhancements

    • Adjustments can now be made on sequences. Proportionally adjust the run times for all the zones in a sequence. Feature request https://github.com/rgc99/irrigation_unlimited/issues/24

    :book: Documentation

    • Update documentation
      • Add TOC
      • Document new features
      • Spelling corrections, thanks to rscohn2
    • More configuration examples
      • Finish at sunrise. Uses the new anchor option in schedules
      • HAsmartirrigation integration example using sequences

    :bug: Bug Fixes

    • Fix today_total attribute on day rollover. Closes https://github.com/rgc99/irrigation_unlimited/issues/31
    • Fix exception when first zone in sequence is disabled
    • Compact sequence when zone is disabled
    • Factor in zone constraints in sequences

    Thank you all for :star:ing this project

    Source code(tar.gz)
    Source code(zip)
  • 2021.8.0(Aug 15, 2021)

    New features and more work under the hood creating additional tests ensuring things keep running as expected.

    :star: New features

    • Adjustments can now be made on sequences. Proportionally adjust the run times for all the zones in a sequence.

    :book: Documentation

    • Update documentation
      • Add TOC
      • Add new features
    Source code(tar.gz)
    Source code(zip)
  • 2021.7.0(Jul 26, 2021)

    Big thank you to the people that have made a contribution. Please feel free to share that automation you have created to integrate to a weather service, valves, moisture sensors and the like. Chances are someone else is doing something similar and we can all learn.

    This release is not so much focused on new features but reliability. Under the hood there is a built-in testing unit which has undergone a major renovation since the last release. Dozens, actually hundreds of checks are now made when a change is made to the repository. This keeps what is there working as it should. Already several potential own goals have been spotted and corrected. It also means development is faster because of the rapid and comprehensive testing.

    :star: New features

    • New testing unit. Warning: If you have played with the test feature previously then you will need to tweak the results parameter. Probably best to remove it altogether and read the docs.
    • All zones defaults. Provides default values for all zones rather than having to repeat the same setting over and over.

    :zap: Enhancements

    • New parameter future_span at zone to change the run queue look ahead. Previously this was hard-wired to 3 days.

    :book: Documentation

    • Updated readme

    :bug: Bug Fixes

    • Fix min/max option on zones. Closes https://github.com/rgc99/irrigation_unlimited/issues/21
    • Fix deprecated history message. Closes https://github.com/rgc99/irrigation_unlimited/issues/18
    • Controller would still turn on if all zones disabled. Internal.
    • Rounding time pivot position corrected. Internal.
    • Fix adjust_time service call while sequence playing.
    Source code(tar.gz)
    Source code(zip)
  • 2021.6.15(Jun 15, 2021)

    :star: New features

    • The unloved/unused duration parameter in schedules when used in sequences is back with a twist. It will now influence the entire sequence adjusting the time of each zone to fit the new duration. Great for seasonal watering. Warning: This will have an undesired effect if you have accidentally specified a duration in your schedules in sequences. If so remove the parameter from the configuration.
    • Open multiple valves at once in a sequence. The zone_id now accepts a string or a list, separate multiple values with commas and enclose in square brackets i.e [1,2,3]. Closes https://github.com/rgc99/irrigation_unlimited/issues/17

    :zap: Enhancements

    • Various optimisations and cleanup.

    :book: Documentation

    • Update readme
      • Update for multi-zone capability
      • Update for schedules in sequences when duration specified
      • Add seasonal watering example using sequences

    :bug: Bug Fixes

    • Fix state_changes_during_period deprecated function. Closes https://github.com/rgc99/irrigation_unlimited/issues/18
    Source code(tar.gz)
    Source code(zip)
  • 2021.6.3(Jun 2, 2021)

    :zap: Enhancements

    • Add sequence_id parameter to manual run service call
    • Controller and zone entity_id takes a csv list

    :book: Documentation

    • More adjustment examples
      • ESPHome. Real time soil moisture monitoring and run time adjustment

    :bug: Bug Fixes

    • Update HAsmartirrigation example
    Source code(tar.gz)
    Source code(zip)
  • 2021.5.7(May 7, 2021)

    :star: New features

    • The new repeat option on sequences provides a simple way to loop through a sequence multiple times. Build water and wait cycles to minimise run off and save water.

    :zap: Enhancements

    The following two options are now implemented on both the sequence and sequence zone objects. The sequence level provides a default for all the zones but can be overwritten at the zone level for fine tuning. This allows for simpler configuration files.

    • Set duration at sequence or zone level.
    • Set delay at sequence or zone level

    :book: Documentation

    • More configuration examples
      • Water saver. Uses the new repeat option
      • Seasonal schedules. Uses the month filter on schedules for month-to-month watering patterns.
      • Hourly run schedules using the new repeat option
    • HAsmartirrigation integration example

    :bug: Bug Fixes

    • Fix adjust_time service call reset option. Closes https://github.com/rgc99/irrigation_unlimited/issues/11
    • Fix sequence delay when adjustment in play
    • Fix adding same zone multiple times in sequence

    :heavy_plus_sign: Added

    • Add iot_class attribute to manifest
    Source code(tar.gz)
    Source code(zip)
  • 2021.4.13(Apr 13, 2021)

    1. Addresses issue https://github.com/rgc99/irrigation_unlimited/issues/4. A new parameter refresh_interval has been added to limit entity updates. When a zone is on, the count down timers "percent_complete" and "time_remaining" attributes update every second. HA records all these updates in the history which may or may not be a problem depending on your setup. The new default update time is 30 seconds. Please note that this does not affect any timings, only the screen updates, everything else is running as it should under the hood. If you are not interested in these attributes then increase this number further, perhaps to 60 to conserve resources. Set the value to 1 to have the same screen response time as previous releases. Nice values tend to be numbers evenly divisible into 60 (5, 10, 15, 20, 30).

    2. Addresses issue https://github.com/rgc99/irrigation_unlimited/issues/5. A status attribute has been added to the controller to better reflect the situation. Apart from on/off it also shows paused when between zones in a sequence.

    3. Addresses issue https://github.com/rgc99/irrigation_unlimited/issues/7. A new cancel service has been added to stop a currently running zone, manual or scheduled.

    Source code(tar.gz)
    Source code(zip)
  • 2021.4.1(Apr 1, 2021)

  • 2021.3.29(Mar 23, 2021)

    This release introduces sequencing. This allows zones to be run one-at-a-time in a particular order with a delay between each one. Great for low pressure systems. Create multiple sequences. Run a zone twice with a delay in between for split runs.

    Source code(tar.gz)
    Source code(zip)
  • 2021.3.21pre(Mar 20, 2021)

    Add sequencing feature. This allows zones to be run one at a time in a particular order with a delay between each one. Create multiple sequences. Run a zone twice with a delay in between.

    Source code(tar.gz)
    Source code(zip)
  • 2021.3.16(Mar 16, 2021)

  • 2021.3.12(Mar 11, 2021)

    This release is focused on history, what's happened and when. A today_total attribute was added to the zone entities to provide a daily time accumulation total in minutes. This information forms the basis for the watering history graph found in the examples. On that note there are many new card examples to explore and help you create your system. Examples include temperature and rainfall graphs and history data in the drop down zone details.

    1. The zone and controller icons are now dynamic showing different icons for on/off/disabled etc. This makes it easier to view the status.
    2. The zone and controller friendly names now reflect the configuration name to further enhance the display.
    3. The configuration file can be reloaded without restarting HA. See the reload button with all the other reloads in Configuration->Server Controls->YAML configuration reloading.
    4. New service to toggle enable/disable making it easier to create buttons.
    Source code(tar.gz)
    Source code(zip)
  • 2021.2.27(Feb 27, 2021)

  • 2021.2.13(Feb 13, 2021)

    Update to documentation (broken links, credits, examples) Include automation examples Include lovelace card examples Minor bug fixes to service calls

    Source code(tar.gz)
    Source code(zip)
  • v2021.2.9(Feb 8, 2021)

Owner
Robert Cook
A veteran bit warrior.
Robert Cook
AISTATS 2019: Confidence-based Graph Convolutional Networks for Semi-Supervised Learning

Confidence-based Graph Convolutional Networks for Semi-Supervised Learning Source code for AISTATS 2019 paper: Confidence-based Graph Convolutional Ne

MALL Lab (IISc) 56 Dec 03, 2022
Official code release for "Learned Spatial Representations for Few-shot Talking-Head Synthesis" ICCV 2021

Official code release for "Learned Spatial Representations for Few-shot Talking-Head Synthesis" ICCV 2021

Moustafa Meshry 16 Oct 05, 2022
Python3 Implementation of (Subspace Constrained) Mean Shift Algorithm in Euclidean and Directional Product Spaces

(Subspace Constrained) Mean Shift Algorithms in Euclidean and/or Directional Product Spaces This repository contains Python3 code for the mean shift a

Yikun Zhang 0 Oct 19, 2021
Autonomous Perception: 3D Object Detection with Complex-YOLO

Autonomous Perception: 3D Object Detection with Complex-YOLO LiDAR object detect

Thomas Dunlap 2 Feb 18, 2022
This repository contains the implementations related to the experiments of a set of publicly available datasets that are used in the time series forecasting research space.

TSForecasting This repository contains the implementations related to the experiments of a set of publicly available datasets that are used in the tim

Rakshitha Godahewa 80 Dec 30, 2022
Collection of in-progress libraries for entity neural networks.

ENN Incubator Collection of in-progress libraries for entity neural networks: Neural Network Architectures for Structured State Entity Gym: Abstractio

25 Dec 01, 2022
Contains source code for the winning solution of the xView3 challenge

Winning Solution for xView3 Challenge This repository contains source code and pretrained models for my (Eugene Khvedchenya) solution to xView 3 Chall

Eugene Khvedchenya 51 Dec 30, 2022
The PyTorch implementation of Directed Graph Contrastive Learning (DiGCL), NeurIPS-2021

Directed Graph Contrastive Learning Paper | Poster | Supplementary The PyTorch implementation of Directed Graph Contrastive Learning (DiGCL). In this

Tong Zekun 28 Jan 08, 2023
Complete the code of prefix-tuning in low data setting

Prefix Tuning Note: 作者在论文中提到使用真实的word去初始化prefix的操作(Initializing the prefix with activations of real words,significantly improves generation)。我在使用作者提供的

Andrew Zeng 4 Jul 11, 2022
A series of Python scripts to access measurements from Fluke 28X meters. Fluke IR Remote Interface required.

Fluke289_data_access A series of Python scripts to access measurements from Fluke 28X meters. Fluke IR Remote Interface required. Created from informa

3 Dec 08, 2022
Kaggle G2Net Gravitational Wave Detection : 2nd place solution

Kaggle G2Net Gravitational Wave Detection : 2nd place solution

Hiroshechka Y 33 Dec 26, 2022
Learning Pixel-level Semantic Affinity with Image-level Supervision for Weakly Supervised Semantic Segmentation, CVPR 2018

Learning Pixel-level Semantic Affinity with Image-level Supervision This code is deprecated. Please see https://github.com/jiwoon-ahn/irn instead. Int

Jiwoon Ahn 337 Dec 15, 2022
Recall Loss for Semantic Segmentation (This repo implements the paper: Recall Loss for Semantic Segmentation)

Recall Loss for Semantic Segmentation (This repo implements the paper: Recall Loss for Semantic Segmentation) Download Synthia dataset The model uses

32 Sep 21, 2022
PFFDTD is an open-source FDTD simulator for 3D room acoustics

PFFDTD is an open-source FDTD simulator for 3D room acoustics

Brian Hamilton 34 Nov 24, 2022
GLODISMO: Gradient-Based Learning of Discrete Structured Measurement Operators for Signal Recovery

GLODISMO: Gradient-Based Learning of Discrete Structured Measurement Operators for Signal Recovery This is the code to the paper: Gradient-Based Learn

3 Feb 15, 2022
A production-ready, scalable Indexer for the Jina neural search framework, based on HNSW and PSQL

🌟 HNSW + PostgreSQL Indexer HNSWPostgreSQLIndexer Jina is a production-ready, scalable Indexer for the Jina neural search framework. It combines the

Jina AI 25 Oct 14, 2022
A script written in Python that returns a consensus string and profile matrix of a given DNA string(s) in FASTA format.

A script written in Python that returns a consensus string and profile matrix of a given DNA string(s) in FASTA format.

Zain 1 Feb 01, 2022
This is an official implementation for "PlaneRecNet".

PlaneRecNet This is an official implementation for PlaneRecNet: A multi-task convolutional neural network provides instance segmentation for piece-wis

yaxu 50 Nov 17, 2022
In this project we predict the forest cover type using the cartographic variables in the training/test datasets.

Kaggle Competition: Forest Cover Type Prediction In this project we predict the forest cover type (the predominant kind of tree cover) using the carto

Marianne Joy Leano 1 Mar 15, 2022
FastyAPI is a Stack boilerplate optimised for heavy loads.

FastyAPI A FastAPI based Stack boilerplate for heavy loads. Explore the docs » View Demo · Report Bug · Request Feature Table of Contents About The Pr

Ali Chaayb 47 Dec 27, 2022