Boas.
Partilho aqui a minha automação da rega de jardim, feita em conjunto com o chatGPT.
Tenho quatro zonas de jardim/horta, actualmente com apenas duas activas (as duas restantes ainda não têm relva, mas já têm o sistema de rega).
Tenho:
- Bomba de rega do Leroy, ligada a um disjuntor zigbee:
Disjuntor Zigbee - 4 Eletroválvulas Rainbird ligadas a um bloco de relés zigbee:
4ch zigbee relay - Disjuntor geral + fonte de alimentação campainha (5v, 12v, 24v) para alimentar eletroválvulas:
Alimentação eletroválvulas - Sensores zigbee de humidade do solo e temperatura:
Sensores humidade
Tudo o que é zigbee está ligado ao Z2M. Os sensores de humidade do solo estão a reportar valores, mas não consigo confiar neles o suficiente para os usar nas automações, tenho que estudar o caso melhor.
A ideia era criar uma automação que ligasse a bomba de rega “dia sim”, “dia não”, 1h depois do pôr-do-sol, nunca regasse à sexta-feira, para poder cortar a relva ao sábado de manhã, não regasse caso tivesse chovido (nem que fosse pouco, mas qualquer borrifo faz a relva aguentar mais um dia), e não regasse caso houvesse previsão de chuva para as próximas 24h, dados estes retirados do openweathermap. Futuramente, se os sensores de humidade do solo se mostrarem confiáveis, elimino as permissas de rega “dia sim dia não” e rega caso o owm diga que não choveu, e passo a basear-me na humidade do solo, tanto para quantidade de tempo a regar, como para dias de rega, tendo o pressuposto que deve regar abaixo de X humidade do solo e que deve parar a rega acima de Y humidade.
Como sou da área da saúde e percebo quase nada de criar templates e afins, pedi ao chatGPT para me criar value templates para as condições. No final deu isto:
alias: Rega do Jardim
description: ""
trigger:
- platform: sun
event: sunset
offset: "01:00:00"
condition:
- condition: numeric_state
entity_id: sensor.humidade_jardim_lateral_soil_moisture
attribute: soil_moisture
below: 85
enabled: false
- condition: template
value_template: >-
{{ as_timestamp(now()) -
as_timestamp(states('input_datetime.bomba_de_rega_off')) > (25 * 60 * 60)
}}
alias: Bomba de Rega Off 25h
- condition: template
value_template: |
{% set has_rained = false %}
{% for hour in state_attr('weather.coelhoclara', 'forecast') %}
{% if as_timestamp(hour.datetime) >= as_timestamp(now()) - 86400 %}
{% if hour.precipitation | float > 0 %}
{% set has_rained = true %}
{% endif %}
{% endif %}
{% endfor %}
{{ has_rained }}
alias: Choveu?
- condition: template
value_template: |-
{% set ns = namespace(next_24h_precipitation_probability=0) %}
{% for hour in state_attr('weather.coelhoclara', 'forecast') %}
{% if as_timestamp(hour.datetime) <= as_timestamp(now()) + 86400 %}
{% set ns.next_24h_precipitation_probability = ns.next_24h_precipitation_probability + hour.precipitation_probability %}
{% endif %}
{% endfor %}
{{ ns.next_24h_precipitation_probability == 0 }}
alias: Prevê-se chuva?
- condition: time
weekday:
- sat
- thu
- mon
- sun
- tue
- wed
action:
- service: switch.turn_on
data: {}
target:
entity_id: switch.eletrovalvulas_l1
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- service: switch.turn_on
data: {}
target:
entity_id: switch.bomba_de_rega
- delay:
hours: 0
minutes: 8
seconds: 0
milliseconds: 0
- service: switch.turn_on
data: {}
target:
entity_id: switch.eletrovalvulas_l2
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- service: switch.turn_off
data: {}
target:
entity_id: switch.eletrovalvulas_l1
- delay:
hours: 0
minutes: 10
seconds: 0
milliseconds: 0
- service: switch.turn_off
data: {}
target:
entity_id: switch.bomba_de_rega
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- service: switch.turn_off
data: {}
target:
entity_id: switch.eletrovalvulas_l2
mode: single
Até agora tem funcionado bem! Mas também só tenho 3 dias disto a funcionar… O que acham?