Automatizei rega com o chatGPT

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:

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?

2 Curtiram

Já agora coloca o teor da conversação com o chatGPT

Não consigo ir buscar o histórico da coisa, só me vai buscar outra tentativa. Mas resumindo, foi algo do género:

Cria uma automação para home assistant onde “switch.rega” liga 1h após pôr-do-sol, mas apenas se o seu estado não foi “on” nas últimas 25h (não pode dizer que esteve “off” durante 25h porque por vezes o switch fica indisponível durante uns segundos, o que inviabiliza os resultados), não inicia nas sexta-feiras, não inicia se choveu nas últimas 24h e se a previsão para as próximas 24h incluir precipitação.

Ele deu-me a automação com as condições: “switch “off” nas últimas 25h”, “value_template funcional para “has_rained””, "value_template não funcional para “precipitation_probability”, dava erro no editor de templates, faltava-lhe a parte de set ns = namespace e tudo o que incluia o ns ",e “condição time weekday” a funcionar bem.

Reclamei com a condição “switch off” porque queria algo tipo “switch not “on” for the last 25h”, ao que ele me mandou criar um ‘input_datetime.bomba_de_rega_off’ nos helpers, e deu-me o value_template descrito acima.
Reclamei com o tal value_template para “precipitation_probability”, e ele deu-me a resposta que já referi acima.

Outro problema que tive foi ao tentar utilizar a previsão do IPMA para obter o “precipitation_probability”, porque o IPMA dá probabilidade de -99% (99% negativos) quando a probabilidade é 0% (penso eu), o que tramava os cálculos. O chat deu-me a possibilidade de eliminar esses resultados com um value_template funcional, mas depois optei por usar o openweathermap.

Basicamente, o chat deu-me value_templates que eu testei no editor de templates e, quando me senti satisfeito com o resultado, fui passando à frente e concluí a automação.

Mais alguma questão?

1 Curtiu

E já agora, tenho 3 sensores de humidade do solo Soil Moisture

que me estão a dar as seguintes leituras:


O da temperatura marada rebentou-me as 2 pilhas no dia seguinte à montagem. Abri-o, limpei-o, deixei-o 15 dias parado, e dá nisto. Os outros têm estas leituras. Estão os 3 lado a lado e dista 25cm do primeiro ao último, e não fazem leituras sequer em tempos semelhantes. Não me posso fiar neles, ou pelo menos em 2 deles.
Alguma recomendação de leitor de humidade do solo?

Sou mesmo antigo … nunca utilizei o chatGPT para alem de fazer meia duzia de perguntas basicas.
Tenho de explorar mais isso.
Obrigado

Eu já estou para entrar nos 40’s (malvados ou abençoados “entas”, logo verei!) mas no entanto gosto de brincar com algumas destas coisas! Prefiro brincar com isto a andar em instas e tiktoks (um tenho por ter, o outro nem isso).
Mas para conseguir uma resposta fiável é preciso insistir e testar bastante!

E então dei por um erro. O gajo estava-me a dar “false” como resposta a “choveu nas últimas 24h” na minha condição. O que está correto. Mas com a resposta “false”, a automação não arranca…
A conversa foi a seguinte:

tenho este value_template como condição em home assistant. Qual o resultado esperado?
{% 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 }}

Chat:

Este é um template de condição no Home Assistant que verifica se choveu nas últimas 24 horas. Aqui está o que cada parte faz:
{% set has_rained = false %}: Esta linha define uma variável chamada has_rained e inicialmente a define como false, o que significa que não choveu.
{% for hour in state_attr('weather.coelhoclara', 'forecast') %}: Este é um loop que percorre cada hora na previsão do tempo para ‘coelhoclara’.
{% if as_timestamp(hour.datetime) >= as_timestamp(now()) - 86400 %}: Esta linha verifica se a hora da previsão é nas últimas 24 horas (86400 segundos).
{% if hour.precipitation | float > 0 %}: Se a hora da previsão é nas últimas 24 horas, esta linha verifica se a precipitação para essa hora é maior que 0.
{% set has_rained = true %}: Se a precipitação para essa hora é maior que 0, então a variável has_rained é definida como true, o que significa que choveu.
{% endfor %}: Este é o fim do loop.
{{ has_rained }}: Finalmente, o valor de has_rained é retornado. Se choveu nas últimas 24 horas, o resultado será true. Caso contrário, será false.
Portanto, este template irá retornar true se tiver chovido em ‘coelhoclara’ nas últimas 24 horas, e false caso contrário.

Eu:

mas eu quero que me dê “true” como resposta caso não tenha chovido

Chat:

Para obter “true” como resposta caso não tenha chovido, você pode modificar o template da seguinte maneira:
{% set has_not_rained = true %} {% for hour in state_attr('weather.coelhoclara', 'forecast') %} {% if as_timestamp(hour.datetime) >= as_timestamp(now()) - 86400 %} {% if hour.precipitation | float > 0 %} {% set has_not_rained = false %} {% endif %} {% endif %} {% endfor %} {{ has_not_rained }}
Este template é semelhante ao anterior, mas define a variável has_not_rained como true inicialmente e a define como false se houver precipitação nas últimas 24 horas. Portanto, o resultado será “true” se não tiver chovido e “false” caso contrário.

2 Curtiram

Obrigado pelas partilhas.

Tenho mesmo que “perder” mais tempo com o ChatGPT. Já fui lendo vários artigos sobre o ele e as suas capacidades… mas por vezes nem nos passa pela cabeça que o podemos usar para casos práticos e úteis.

Este é um bom exemplo! Nunca me passaria pela cabeça ir lá perguntar… talvez andasse uma hora no google a pesquisar exemplos…

1 Curtiu

Bem pensado em partilhar o que se faz por casa :slight_smile: obrigado pela partilha.

Deixo os meus 50 centimos em relação à minha experiência com o ChatGPT no que toca a HA, sistemas e networking: tenho como fizeste, utilizado-o para melhorias e implementações que dão bons resultados, porém a versão gratuita (v3.5) teve a sua última atualização em Setembro de 2021, pelo que tudo o que tenha ocorrido após esta data ele não sabe. Por exemplo o HA é atualizado e modificado com muita frequência.

ver abaixo a pergunta que acabei de lhe fazer:

Fiz a mesma pergunta ao GPT 4 do Bing. Resposta:

Olá, este é o Bing. Eu sou um chatbot que pode conversar com você sobre vários tópicos e gerar conteúdo criativo. :blush:
A minha base de conhecimento é atualizada regularmente pela equipa responsável pelo gerenciamento da Base de Dados do Microsoft Knowledge Base¹. No entanto, a minha base de conhecimento interna só foi atualizada até algum ponto no ano de 2021 e pode estar desatualizada ou imprecisa. Por isso, eu uso ferramentas internas para pesquisar na web e obter as informações mais recentes.
Uma das ferramentas que eu uso é a pesquisa web do Bing², que me permite encontrar resultados da web, imagens, notícias e muito mais. Por exemplo, eu encontrei um artigo que fala sobre as atualizações do chat no novo Bing³. Segundo esse artigo, a experiência do chat será limitada a 50 conversas por dia e 5 conversas por sessão.
Espero que tenha respondido à sua pergunta. Se quiser saber mais sobre mim ou sobre o que eu posso fazer, pode perguntar-me. :blush:
Origem: conversação com o Bing, 07/09/2023

1 Curtiu

:rofl: é uma resposta tipica: confusa. em suma: está atualizado (desatualizado também) até algures no ano 2021, porém utiliza o motor de busca para apresentar resultados atualizados… :slight_smile:

quer isto dizer que (não linearmente): é autonomo até 2021 a partir dai tem de alguém já ter partilhado na net para o Bing apresentar os resultados.

Ora deixa ver … proporcionalmete … és um adoloscente :rofl:
Apesar de bem “mais antigo” tb me interesso por estas materias, para alem de falta de tempo , tb já não tenho tanta paciencia e capacidade, talvez o chatGPT possa ajudar.

1 Curtiu

Pronto… mas mesmo sendo pouco mais que um “adolescente”, esta não é a minha área de trabalho! Mas é um passatempo do qual gosto bastante e vou aprendendo!

há também o Bard da Google que aparentemente está mais atual que os restantes ChatGPT e Bing.

Em vez de criares uma automação com base nos dias da semana e com base na chuva, não seria mais interessante regar com base na humidade da terra?

Como referi anteriormente, não confio nos sensores de humidade do solo, pelo menos para já.

Bom dia. bem pela minha experiencia de sensores de rega ,e como moro no Algarve ,onde se nao rega um dia de calor seca tudo,conclui que os sensores de humidade ou sao profissionais ou não prestam para nada. oxidam rapidamente devido a eletrolise,deixam de funcionar.,medem mal ou aleatoriamente… enfim. È preferivel usar um sensor de “chuva” . se chuver não rega. terá de ser um sensor que apanhe a agua diretamente no ar tipo funil ou assim.
Basedo na metereologia…tabmem não funciona. hojer da aguaceiros o dia todo.tem tempestades e inundaçoes em parte do pais ,mas aqui no Algarve nem uma gota…ao fim do dia estaria a relva murcha.

O que fiz foi :.rega sempre agora no verão :laughing:… lá está ,se tiver um “sensor de chuva” que até possa ter capaciade de medir a quantidade de chuva, ja ajuda a poupar agua .
assim por pesquisa rapida sem chat gpt encontrei este

Podias explicar como fizeste as ligações entre a fonte, relés e eletroválvulas?
Obrigado

As ligações são simples:

Neutro ligado às eletroválvulas (eu usei um conector Wago para ligar todas), a Fase vai para os Relés (no Comum) e o normalmente aberto (NO) de cada relé, liga no outro fio das eletroválvulas. Aqui podes usar também um conector wago ou uns pequenos fios em U entre relés (que foi o que eu fiz), …

Podia estar mais bonito:

1 Curtiu

Gosto do tupperware :+1: :upside_down_face:

1 Curtiu

Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade