Hi thanks for the suggest… I’d like to reuse it… Actually it was dismissed after dismount my Hunter eco-logic 4 irrigation system. Do you have some pics about your modify? Thank you
Yes it is a simple on off device. When too much rain drop, the cork circles inside it expands… And close (or open… I don’t remember) a phisical switch connected to the hunter irrigation system… The system stay off untill the sun heat the corks… That shrink and release the switch.
There is no way to know when it was rain in the old NON SMART way… but thanks to @thoky suggest it can be implemented only by reading the change state of the sensor
@itajackass @klogg Thats right. Its a simple device and I found it useful because it reacts quickly.
In HA I have it like binary sensor with moisture class.
Here are some pictures of my ready made product.
Summary
This text will be hidden
Thanks for the pics. I think i’ll use a xiaomi magnetic door sensor cause i’ve already the usb sniffer zigbee2mqtt compatible with xiaomi ecosystem.
Just a little update on my config because @Mikkaat was asking. There is some code commented out because I’m still not 100% happy that it’s complete, but it all works well. Here you go mate:-
ESPhome code on NodeMCU:
esphome:
name: ha_retic_controller_1
platform: ESP8266
board: nodemcuv2
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.0.61
gateway: 192.168.0.1
subnet: 255.255.255.0
api:
logger:
web_server:
port: 80
ota:
password: !secret ota_password
switch:
- platform: gpio
name: "Retic Station 1 Valve"
id: s1
icon: mdi:water-pump
pin:
number: D1
inverted: true
- platform: gpio
name: "Retic Station 2 Valve"
id: s2
icon: mdi:water-pump
pin:
number: D2
inverted: true
# - platform: gpio
# name: "Retic Station 3 Valve"
# id: s3
# icon: mdi:water-pump
# pin:
# number: D5
# inverted: true
# - platform: gpio
# name: "Retic Station 4 Valve"
# id: s4
# icon: mdi:water-pump
# pin:
# number: D6
# inverted: true
- platform: gpio
name: "Retic Bore Control"
id: p1
icon: mdi:water-pump
pin:
number: D7
inverted: true
restore_mode: RESTORE_DEFAULT_OFF
binary_sensor:
- platform: gpio
name: "Retic Bore Running"
pin:
number: D8
inverted: false
mode: INPUT_PULLUP
- platform: status
name: "Retic Controller Status"
reticulation.yaml (package)
########################################
#
# This is a full reticulation
# control package using ESPHOMEYAML
# as the soleniod control via a NodeMCU
#
########################################
homeassistant:
customize:
switch.retic_station_1_valve:
icon: mdi:water-pump
switch.retic_station_2_valve:
icon: mdi:water-pump
input_boolean.retic_program1_enable:
icon: mdi:traffic-light
input_boolean.retic_program2_enable:
icon: mdi:traffic-light
sensor:
- platform: template # determine if today is selected as a watering day for program 1
sensors:
retic_program1_watering_day:
entity_id: input_boolean.retic_program1_monday, input_boolean.retic_program1_tuesday, input_boolean.retic_program1_wednesday, input_boolean.retic_program1_thursday, input_boolean.retic_program1_friday, input_boolean.retic_program1_saturday, input_boolean.retic_program1_sunday, sensor.time
value_template: >
{% set sensor_names = [ 'monday', 'tuesday', 'wednesday','thursday','friday','saturday','sunday'] %}
{% set today_name = sensor_names[now().weekday()] %}
{% set entity_id = 'input_boolean.retic_program1_'+today_name %}
{{ is_state(entity_id, 'on') }}
retic_program2_watering_day:
entity_id: input_boolean.retic_program2_monday, input_boolean.retic_program2_tuesday, input_boolean.retic_program2_wednesday, input_boolean.retic_program2_thursday, input_boolean.retic_program2_friday, input_boolean.retic_program2_saturday, input_boolean.retic_program2_sunday, sensor.time
value_template: >
{% set sensor_names = [ 'monday', 'tuesday', 'wednesday','thursday','friday','saturday','sunday'] %}
{% set today_name = sensor_names[now().weekday()] %}
{% set entity_id = 'input_boolean.retic_program2_'+today_name %}
{{ is_state(entity_id, 'on') }}
# Rain sensors from BOM forecast of today
# possible_rainfall_today:
# entity_id: sensor.bom_forecast_perth_weather_forecast_0
# friendly_name: "Possible Rainfall Today"
# value_template: >
# {{ state_attr('sensor.bom_forecast_perth_weather_forecast_0', 'Possible Rainfall') | replace("mm", "") | float }}
# chance_of_rain_today:
# entity_id: sensor.bom_forecast_perth_weather_forecast_0
# friendly_name: "Chance Of Rain Today"
# value_template: >
# {{ state_attr('sensor.bom_forecast_perth_weather_forecast_0', 'Chance of Rain') | replace("%", "") | float }}
input_datetime:
retic_program1_start_time_1: # program start time control
name: Program 1 Start Time 1
has_date: false
has_time: true
retic_program1_start_time_2:
name: Program 1 Start Time 2
has_date: false
has_time: true
retic_program2_start_time_1:
name: Program 2 Start Time 1
has_date: false
has_time: true
retic_program2_start_time_2:
name: Program 2 Start Time 2
has_date: false
has_time: true
input_number:
retic_program1_station1_run_time: # station run time control
name: Station 1 Run Time
min: 0
max: 30
step: 1
icon: mdi:camera-timer
retic_program1_station2_run_time:
name: Station 2 Run Time
min: 0
max: 30
step: 1
icon: mdi:camera-timer
retic_program2_station1_run_time:
name: Station 1 Run Time
min: 0
max: 30
step: 1
icon: mdi:camera-timer
retic_program2_station2_run_time:
name: Station 2 Run Time
min: 0
max: 30
step: 1
icon: mdi:camera-timer
allowable_rain_quantity:
name: 'Allowed Rain (mm)'
min: 0
max: 5
step: 0.1
icon: mdi:cup-water
allowable_rain_percentage:
name: 'Allowed Rain (%)'
min: 0
max: 100
step: 1
icon: mdi:water-percent
input_boolean:
retic_program1_monday: # watering day selections for program 1
name: Monday
retic_program1_tuesday:
name: Tuesday
retic_program1_wednesday:
name: Wednesday
retic_program1_thursday:
name: Thursday
retic_program1_friday:
name: Friday
retic_program1_saturday:
name: Saturday
retic_program1_sunday:
name: Sunday
retic_program2_monday: # watering day selections for program 2
name: Monday
retic_program2_tuesday:
name: Tuesday
retic_program2_wednesday:
name: Wednesday
retic_program2_thursday:
name: Thursday
retic_program2_friday:
name: Friday
retic_program2_saturday:
name: Saturday
retic_program2_sunday:
name: Sunday
retic_program1_enable: # enable program to run
name: Enable
retic_program1_start_time1_enable:
name: Prog 1 Start 1 Enable
retic_program1_start_time2_enable:
name: Prog 1 Start 2 Enable
retic_program2_enable:
name: Enable
retic_program2_start_time1_enable:
name: Prog 2 Start 1 Enable
retic_program2_start_time2_enable:
name: Prog 2 Start 2 Enable
retic_station_1_run:
name: Station 1 Run
retic_station_2_run:
name: Station 2 Run
retic_rain_parameters_met: # set to ON if rain today values are below levels set in input_numbers
name: Rain Parameters Met
icon: mdi:water
retic_rain_override: # set to ON to run retic even if rain parameters are not met
name: Rain Override
icon: mdi:water
group: # frontend interface setup
retic_manual:
control: hidden
name: 'Manual Control'
entities:
- switch.retic_station_1_valve
- switch.retic_station_2_valve
retic_program1:
control: hidden
name: 'Program 1'
entities:
- input_boolean.retic_program1_enable
- script.retic_program1_run
- input_datetime.retic_program1_start_time_1
- group.retic_program1_watering_days
- group.retic_program1_run_times
retic_program2:
control: hidden
name: 'Program 2'
entities:
- input_boolean.retic_program2_enable
- script.retic_program2_run
- input_datetime.retic_program2_start_time_1
- group.retic_program2_watering_days
- group.retic_program2_run_times
retic_program1_watering_days:
control: hidden
name: 'Watering days'
icon: mdi:calendar-multiple-check
entities:
- input_boolean.retic_program1_monday
- input_boolean.retic_program1_tuesday
- input_boolean.retic_program1_wednesday
- input_boolean.retic_program1_thursday
- input_boolean.retic_program1_friday
- input_boolean.retic_program1_saturday
- input_boolean.retic_program1_sunday
retic_program2_watering_days:
control: hidden
name: 'Watering days'
icon: mdi:calendar-multiple-check
entities:
- input_boolean.retic_program2_monday
- input_boolean.retic_program2_tuesday
- input_boolean.retic_program2_wednesday
- input_boolean.retic_program2_thursday
- input_boolean.retic_program2_friday
- input_boolean.retic_program2_saturday
- input_boolean.retic_program2_sunday
retic_program1_run_times:
control: hidden
name: 'Run times'
icon: mdi:camera-timer
entities:
- input_number.retic_program1_station1_run_time
- input_number.retic_program1_station2_run_time
retic_program2_run_times:
control: hidden
name: 'Run times'
icon: mdi:camera-timer
entities:
- input_number.retic_program2_station1_run_time
- input_number.retic_program2_station2_run_time
automation:
- alias: Check rain parameters # check that todays rain doesnt need to disable the retic from running ### LOOK AT CHANGING THIS TO A BINARY_SENSOR TEMPLATE
initial_state: 'on'
trigger:
- platform: template
value_template: "{{ states('sensor.time') == ((states.input_datetime.retic_program1_start_time_1.attributes.timestamp - 600) | int | timestamp_custom('%H:%M', False)) }}"
- platform: template
value_template: "{{ states('sensor.time') == ((states.input_datetime.retic_program1_start_time_2.attributes.timestamp - 600) | int | timestamp_custom('%H:%M', False)) }}"
- platform: template
value_template: "{{ states('sensor.time') == ((states.input_datetime.retic_program2_start_time_1.attributes.timestamp - 600) | int | timestamp_custom('%H:%M', False)) }}"
- platform: template
value_template: "{{ states('sensor.time') == ((states.input_datetime.retic_program2_start_time_2.attributes.timestamp - 600) | int | timestamp_custom('%H:%M', False)) }}"
- platform: state
entity_id: input_number.allowable_rain_quantity
- platform: state
entity_id: input_number.allowable_rain_percentage
action:
# - service_template: >
# {% if states('sensor.bom_perth_rain_today') <= states('input_number.allowable_rain_quantity') and states('sensor.possible_rainfall_today') <= states('input_number.allowable_rain_percentage') %}
# input_boolean.turn_on
# {% else %}
# input_boolean.turn_off
# {% endif %}
# entity_id: input_boolean.retic_rain_parameters_met
- service_template: >
input_boolean.turn_{{'on' if states('sensor.bom_perth_rain_today') <= states('input_number.allowable_rain_quantity') and
states('sensor.bom_perth_forecast_chance_of_rain_0') <= states('input_number.allowable_rain_percentage') else 'off'}}
entity_id: input_boolean.retic_rain_parameters_met
# - service_template: >
# input_boolean.turn_{{'on' if states('sensor.bom_perth_rain_today') <= states('input_number.allowable_rain_quantity') or
# states('sensor.possible_rainfall_today') <= states('input_number.allowable_rain_percentage') else 'off'}}
# entity_id: input_boolean.retic_rain_parameters_met
- alias: Reticulation Run Program 1 # start program 1 at designated time if it is enabled and today is selected as a watering day
initial_state: 'on'
trigger:
- platform: template
value_template: "{{ states('sensor.time') == (states.input_datetime.retic_program1_start_time_1.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}"
- platform: template
value_template: "{{ states('sensor.time') == (states.input_datetime.retic_program1_start_time_2.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}"
condition:
condition: and
conditions:
- condition: state
entity_id: input_boolean.retic_program1_enable
state: 'on'
- condition: state
entity_id: sensor.retic_program1_watering_day
state: 'True'
- condition: or
conditions:
- condition: state
entity_id: input_boolean.retic_rain_parameters_met
state: 'on'
- condition: state
entity_id: input_boolean.retic_rain_override
state: 'on'
action:
- service: script.turn_on
entity_id: script.retic_program1_run
- alias: Reticulation Run Program 2 # start program 2 at designated time if it is enabled and today is selected as a watering day
initial_state: 'on'
trigger:
- platform: template
value_template: "{{ states('sensor.time') == (states.input_datetime.retic_program2_start_time_1.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}"
- platform: template
value_template: "{{ states('sensor.time') == (states.input_datetime.retic_program2_start_time_2.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}"
condition:
condition: and
conditions:
- condition: state
entity_id: input_boolean.retic_program2_enable
state: 'on'
- condition: state
entity_id: sensor.retic_program2_watering_day
state: 'True'
- condition: or
conditions:
- condition: state
entity_id: input_boolean.retic_rain_parameters_met
state: 'on'
- condition: state
entity_id: input_boolean.retic_rain_override
state: 'on'
action:
- service: script.turn_on
entity_id: script.retic_program2_run
- alias: Reticulation Station 1 Run
initial_state: 'on'
trigger:
platform: state
entity_id: input_boolean.retic_station_1_run
action:
- service_template: >
{% if is_state('input_boolean.retic_station_1_run', 'on') %}
script.retic_station_1_run
{% else %}
script.retic_station_1_stop
{% endif %}
- alias: Reticulation Station 2 Run
initial_state: 'on'
trigger:
platform: state
entity_id: input_boolean.retic_station_2_run
action:
- service_template: >
{% if is_state('input_boolean.retic_station_2_run', 'on') %}
script.retic_station_2_run
{% else %}
script.retic_station_2_stop
{% endif %}
- alias: Reticulation Controller Offline Alert
initial_state: 'on'
trigger:
platform: state
entity_id: binary_sensor.retic_controller_status
to: 'off'
for:
minutes: 5
action:
- service: notify.pushbullet
data:
message: 'Retic Controller Offline!'
script:
retic_program1_run: #run retic program 1 through each station for selected time
alias: Program 1 Run
sequence:
- service: switch.turn_on
data:
entity_id: switch.retic_station_1_valve
- delay: "00:00:01"
- service: switch.turn_on
data:
entity_id: switch.retic_bore_control
- delay: "00:{{ states('input_number.retic_program1_station1_run_time')|int }}:00"
- service: switch.turn_off
data:
entity_id: switch.retic_station_1_valve
- service: switch.turn_on
data:
entity_id: switch.retic_station_2_valve
- delay: "00:{{ states('input_number.retic_program1_station2_run_time')|int }}:00"
- service: switch.turn_off
data:
entity_id: switch.retic_bore_control
- delay: "00:00:01"
- service: switch.turn_off
data:
entity_id: switch.retic_station_2_valve
retic_program2_run: #run retic program 2 through each station for selected time
alias: Program 2 Run
sequence:
- service: switch.turn_on
data:
entity_id: switch.retic_station_1_valve
- delay: "00:00:01"
- service: switch.turn_on
data:
entity_id: switch.retic_bore_control
- delay: "00:{{ states('input_number.retic_program2_station1_run_time')|int }}:00"
- service: switch.turn_off
data:
entity_id: switch.retic_station_1_valve
- service: switch.turn_on
data:
entity_id: switch.retic_station_2_valve
- delay: "00:{{ states('input_number.retic_program2_station2_run_time')|int }}:00"
- service: switch.turn_off
data:
entity_id: switch.retic_bore_control
- delay: "00:00:01"
- service: switch.turn_off
data:
entity_id: switch.retic_station_2_valve
retic_station_1_run:
alias: Station 1 Run
sequence:
- service: switch.turn_on
data:
entity_id: switch.retic_station_1_valve
- delay: "00:00:01"
- condition: state
entity_id: switch.retic_station_1_valve
state: 'on'
- service: switch.turn_on
data:
entity_id: switch.retic_bore_control
retic_station_1_stop:
alias: Station 1 Stop
sequence:
- service: switch.turn_off
data:
entity_id: switch.retic_bore_control
- delay: "00:00:01"
- condition: state
entity_id: switch.retic_bore_control
state: 'off'
- service: switch.turn_off
data:
entity_id: switch.retic_station_1_valve
retic_station_2_run:
alias: Station 2 Run
sequence:
- service: switch.turn_on
data:
entity_id: switch.retic_station_2_valve
- delay: "00:00:01"
- condition: state
entity_id: switch.retic_station_2_valve
state: 'on'
- service: switch.turn_on
data:
entity_id: switch.retic_bore_control
retic_station_2_stop:
alias: Station 2 Stop
sequence:
- service: switch.turn_off
data:
entity_id: switch.retic_bore_control
- delay: "00:00:01"
- condition: state
entity_id: switch.retic_bore_control
state: 'off'
- service: switch.turn_off
data:
entity_id: switch.retic_station_2_valve
##################
# use a timer instead of the delay for the station runtime
# - service: timer.start
# data_template:
# entity_id: timer.cooking_timer
# duration: '00:{{ states.input_number.timer_minutes.state | int }}:{{ states.input_number.timer_seconds.state | int }}'
lovelace:
- title: Retic
icon: 'mdi:fountain'
background: center / cover no-repeat url("/local/images/back_garden_1.jpg") fixed
cards:
- type: entities
show_header_toggle: false
title: Program 1
entities:
- input_boolean.retic_program1_enable
- script.retic_program1_run
- input_datetime.retic_program1_start_time_1
- input_datetime.retic_program1_start_time_2
- group.retic_program1_watering_days
- group.retic_program1_run_times
- type: entities
show_header_toggle: false
title: Program 2
entities:
- input_boolean.retic_program2_enable
- script.retic_program2_run
- input_datetime.retic_program2_start_time_1
- input_datetime.retic_program2_start_time_2
- group.retic_program2_watering_days
- group.retic_program2_run_times
- type: entities
show_header_toggle: false
title: Manual Control
entities:
- input_boolean.retic_station_1_run
- input_boolean.retic_station_2_run
- type: entities
title: Rain Settings
entities:
- input_number.allowable_rain_percentage
- input_number.allowable_rain_quantity
- input_boolean.retic_rain_parameters_met
- input_boolean.retic_rain_override
show_header_toggle: false
- type: entities
show_header_toggle: false
title: Status
entities:
- entity: binary_sensor.retic_controller_status
secondary_info: last-changed
- entity: switch.retic_station_1_valve
secondary_info: last-changed
- entity: switch.retic_station_2_valve
secondary_info: last-changed
- entity: switch.retic_bore_control
secondary_info: last-changed
- binary_sensor.retic_bore_running
EDIT: I only have 2 stations because it’s running on a bore which has enough pressure and flow to do all the front of the house on one station and all the back on another.
Thanks to the inspiration of this thread, I started working on my own version back in November. It has been up and running since May. What I’ve done:
- Turn valves on and off using a schedule in AppDaemon and MQTT over WiFi
- Can also control locally with one button (off, pump on, start a manual cycle, or Auto)
- Turn the pump on/off and monitor water flow with a flow meter
- Small LCD display to show program mode, valve running and time running
- Remote monitor/control with DuckDNS
- Basic graphs on HA
- 3D Printed custom boxes
Not bad for my first project! (had never used Arduino, HA, or 3D printing before )
Thanks to all for the many ideas. I’m going to scroll through this (now very long) thread to see about upgrade suggestions.
cheers,
Sean
@sparkydave. First, thanks for the great work you have done with this card and code… I have managed to install it and understand almost all of how it works. I’d just like to ask a couple of things of you if you have the time to answer…
I guess the first Q is also for anyone who may have had the same issue and has worked out how to resolve it… I am getting an error in my notifications as soon as i add all the code… Error is:
with the error log stating ‘2019-07-15 19:47:25 ERROR (MainThread) [homeassistant.config] Invalid config for [automation]: required key not provided @ data[‘action’]. Got None
required key not provided @ data[‘trigger’]. Got None. (See ?, line ?). Please check the docs at https://home-assistant.io/components/automation/’. Within my configuration.yaml file i have specified an ‘!include automations.yaml’ setting. Is anyone else having this issue??
The second Q is with regard to one of the settings Should ‘Run times’ have a value? or is this always ‘unknown’?
Thanks in advance,
Michael
Q1- what I posted is a ‘package’, it doesn’t go in your automations.yaml file. Check out the docs for adding packages.
Q2- the run times show unknown because there are multiple entries (at least thats what I think is why it happens), when you click on it, the UI should open a popup where you can use sliders to alter the individual run times
@sparkydave thanks for the prompt reply, and apologies for the constant questions due to my limited coding knowledge.
I can confirm that i read all of the documentation on Packages previous to attempting the install/config. I added the following line to my configuration.yaml file and then created the packages folder under the config folder, and then created a reticulation.yaml (with your code) file within the packages folder, which resulted in all cards displaying correctly.
homeassistant:
packages: !include_dir_named packages
As for the Automation entry in my configuration.yaml file, i mentioned this as i have the line as below, which is just a file where my other automations live, not the automation section from your code (i have not brocken out your code at all, it is still all in original state and im pretty sure, appropriate place.
automation: !include automations.yaml
On that, i am going to try to revert to an earlier verion of my HASSio instance to see if this still spits out the same error, and if it does, will go back to a base install and try that…
I will keep this topic up to date with what i find.
Apologies again for my lack of knowledge. The next time your in Sydney, i’ll buy you a drink.
Thanks
Michael
Are you sure there isn’t an indentation issue that’s been caused when editing the automations in my package? The error you are getting would suggest so. Copy / paste the automation section here, being sure to format it correctly. Hopefully I can see where the issue is for you
Hi @sparkydave, apologies for the delayed response, I have been working on a new Hassio build so i can test my theory… On that, i reverted to various backups and tried your code, and also built a brand new instance of HASSio with just your retic setup on there and i still get the same automation error… I then commented out the automation line (as below) in my configuration.yaml file, which removed the error…
#automation: !include automations.yaml
With regard to your earlier comment about pasting the automation section, it is exactly the same as what you have pasted above and tagged me into, i copy pasted a number of times to make sure i had not done anything wrong
Do you have an automation.yaml file or and automation: !include automations.yaml line in your configuration.yaml file?
Thanks
Oh, I just realised what the issue is… I think. I’ll post my config.yaml when I get to a PC
@Mikkaat I just had a look at my config.yaml and I don’t think that is the issue. You really need to post your version of the package so I see what is happening here
@sparkydave and all others who have the same issue… After posting the above, i finally got it working thanks to @Cripplin who provided the solution over at [SOLVED]Automation in package not working… basically just need to have something in the automations.yaml file, ie it cannot be empy…
@sparkydave Thanks for all your help and sorry to put you through that…
@Cripplin great find… thanks
Hi @sparkydave, quick question(s) for you about the package…
I have been working on it slowly over the last few weeks and (honestly only just go around to) setting some of the variables to test it out, just last night…
Can i just clarify, if i add times into the ‘Program 1 Start Time 1’ and ‘Program 1 Start Time 2’, select days in the Watering days (i have selected all days) and added 5 mins to Station 1 and Station 2 in Run times, should that be enough to run the system? As you can see from the screenshot, i have added values to the Available Rain % and mm as well, but the only way i can trigger the system to run, is to either use the Station 1 Run switch, or the Program 1 Run switch, ie the system will not trigger at the specified times i have added (as can be seen by the 19:39 current time and the Retic Station 1 valve run time 22 hours ago…)
I have updated your code to refeerence my location (in BOM and DarkSky) and also added Time component.
EDIT—
@sparkydave I think i have narrowed the issue down to one of two things… (i am not as gifted with code as yourself or others, so hoping this could be it)…
Is there a reason why the Check rain parameters value_template has a value
states.input_datetime.retic_program1_start_time_1.attributes.timestamp - 600
, where the Reticulation Run Program 1 (and 2) does include the -600
states.input_datetime.retic_program1_start_time_1.attributes.timestamp
Is this correct?
The other thing which could be the issue is the way input_datetime.retic_program1_start_time_1. attribute.timestamp is captured in devtools states… Is the below screenshot the way yours shows as well? Should i update the code to reference input_datetime.retic_program1_start_time_1. attribute.state instead
Thanks in advance for your advice and assitance…
@one-love I thank you in advance for all your efforts regarding the irrigation code. It’s brutal. But some time ago it stopped working. Would you have a look? Thank you so much for your attention.
Hello, I would like to know if it is possible to match the value of an input.date_time with the time of sunset. For example today the sun sets at 9:00 pm and at that time I want to do the last irrigation of the day, next week the sun sets at 9:10 p.m. and I need change the input.date_time value automatically to do the last irrigation at that time. someone could help me with that.
Greetings and thank you
Lots of great ideas in here. I’ve just finally started down the road of a DIY irrigation system for my back yard. I’ve just worked out how to wire up an ESP32, 4 channel relay, solenoids, and a 12v power supply. I’ve never done anything like this before.
Anyway, just starting to get it up and running on my desk, but I’ll need an outdoor enclosure. What are people using (especially interested in what Aussies are using)? 90% chance of where I end up putting it will be exposed to the weather.
I bought a cheap weather proof enclosure from AliExpress. It’s pretty good. I bought a thin galv sheet and cut out a back panel to mount everything o and then mounted that into the box. I have been meaning to knock up a post about the hardware install but haven’t had time. I may have a couple of photos on my phone I can upload later
Thanks for that @sparkydave. That box (or one similar) is something I’ve been looking at.
I wouldn’t mind seeing some photos of your setup when you get a chance.