Système d'arrosage automatique du jardin pour Home Assistant, ESP8266 et MiFlora



Il y a quelque temps, ma famille avait une maison avec un petit jardin dans un endroit très chaud et aride, et nous avons été confrontés au problème d'un arrosage régulier.

Je souhaitais que le système d'irrigation soit automatique, en le choisissant j'ai dû prendre en compte les conditions suivantes:

  • eau très chère qui doit être économisée de toutes les manières disponibles
  • différentes plantes dans le jardin pour les besoins en humidité, des plantes succulentes aux amoureux de l'humidité
  • la nécessité d'un arrosage totalement autonome en l'absence de personnes dans la maison, de préférence avec possibilité de télécommande
  • climat aride qui ne pardonne pas les erreurs d'irrigation

Après avoir évalué les solutions toutes faites trouvées sur les réseaux de bricolage locaux et sur Amazon et lu des critiques sur leur fiabilité (généralement pas la plus élevée), nous avons décidé d'essayer de faire quelque chose par nous-mêmes.

Avertissement: L'auteur n'est pas un spécialiste en informatique et ne prétend pas être une connaissance professionnelle du sujet. Le niveau d'exécution du projet est un hobby. L'auteur connaît bien le niveau de ses connaissances en programmation et en électronique et appréciera grandement les suggestions d'amélioration et d'optimisation des solutions utilisées.

Schéma


Le jardin était divisé en 4 zones d'irrigation, chacune d'entre elles est équipée d'un capteur d'humidité du sol individuel et peut être arrosée selon un horaire individuel et une quantité d'eau différente.
Au sol, des tuyaux PND d'irrigation goutte à goutte avec perforation sont posés, qui sont connectés à des tuyaux convergeant dans l'unité de collecte d'eau et reliés par les vannes électromagnétiques à l'alimentation en eau. Les vannes sont contrôlées par des relais connectés à l'ESP8266 (Sonoff 4Ch).

L'arrosage est effectué par des minuteries, la nuit, pour augmenter la quantité d'eau qui est absorbée dans le sol et ne sera pas évaporée par le soleil.

A l'heure d'arrosage programmée, le respect de plusieurs conditions est vérifié:

  • humidité du sol inférieure à une valeur prédéterminée
  • il n'y a pas de précipitations prévues en quantité suffisante pour les 2 prochains jours
  • la limite d'eau pour l'arrosage définie pour cette ligne n'est pas dépassée

Matériel usagé


Raspberry Pie avec HassIO installé (avait déjà)

ESP32 DevKit , un firmware ESPHome, agissant comme une passerelle Bluetooth pour MiFlora et recevant des données de capteurs d'humidité filaires. Situé dans le jardin.

Capteurs d'humidité câblés Capteur d'humidité du sol capacitif v1.2 , qui mesure l'humidité dans les zones d'arrosage les plus proches du site d'installation de l'ESP32. Les

capteurs MiFlora sont connectés à l'ESP32 via BLE, qui mesure l'humidité dans les zones d'arrosage à distance.

SONOFF 4Ch , cousu avec ESPHome, est situé dans l'unité de prise d'eau, où les tuyaux de toutes les zones d'arrosage viennent

4 électrovannes normalement fermées pour 220Vsitué dans le réservoir d'eau et connecté au Sonoff 4Ch. Ouvrez l'arrivée d'eau pour l'irrigation. Un modèle normalement fermé a été choisi de manière à minimiser la probabilité d '«inondation» en cas de panne des circuits électriques et électroniques, et afin de minimiser le nombre de sorties relais nécessaires.

Un compteur d' eau pulsé à l'entrée du système d'irrigation dans l'unité de prise d'eau et connecté au Sonoff 4ch. Autorisé à transférer entièrement les données de débit d'eau à Home Asssistant et à mettre en œuvre la fonctionnalité d'irrigation avec une quantité donnée. Il s'est avéré très réussi que sur cette version de sonoff les contacts pour le firmware étaient déjà soudés et même il y avait un GPIO02 gratuit - un compteur d'impulsions était accroché dessus.


Il ressemble à un collecteur avec des vannes installées et un compteur d'eau. Le contrôleur (sonoff 4Ch) n'est pas entré dans le cadre, il est installé à une distance d'un demi-mètre dans le blindage IP65

ESP Paramètres Home et Home Assistant


Sonoff 4ch
ESPHome , :

switch:
  - platform: gpio
    name: "   1"
    pin: GPIO12
    id: sw1
    icon: mdi:water
  - platform: gpio
    name: "   2"
    pin: GPIO5
    id: sw2
    icon: mdi:water
  - platform: gpio
    name: "   3"
    pin: GPIO4
    id: sw3
    icon: mdi:water
  - platform: gpio
    name: "   4"
    pin: GPIO15
    id: sw4
    icon: mdi:water
binary_sensor:
  - platform: gpio
    name: "WaterCounter"
    id: button
    pin:
      number: GPIO2
      mode: INPUT_PULLUP


Capteur capacitif d'humidité du sol v1.2
ESPHome:

sensor:
  - platform: adc
    pin: GPIO34
    filters:
      - lambda: |-
          if (x > 3.22) {
            return 0;
          } else if (x < 1.65) {
            return 100;
          } else {
            return (3.22-x) / (3.22-1.65) * 100.0;
          }
    name: "   1  "
    update_interval: 60s
    attenuation: 11db
    unit_of_measurement: "%"
    accuracy_decimals: 0
    icon: mdi:water-percent

(ADC)
, ( 3.22 ) (1,65 ). log' ESPHome HassIO .



ESP32 Home Assistant ,

Compteur d'eau à impulsions
«», ( ). — , , ( — 3 10 ).
, GND GPIO .

ESPHome :

binary_sensor:
  - platform: gpio
    name: "WaterCounter"
    id: counter
    pin:
      number: GPIO2
      mode: INPUT_PULLUP

Home Assistant :

(counter),
(, «» ). — counter, ESPHome, sensor, counter ( ).

2 — , «». , , .

( automations.yaml )
- alias:     
  trigger:
  - entity_id: binary_sensor.watercounter
    platform: state
    from: 'on'
    to: 'off'
  action:
  - data:
      entity_id:
      - counter.my_water_counter
    service: counter.increment
- alias:    1 
  trigger:
  - entity_id: binary_sensor.watercounter
    platform: state
    from: 'on'
    to: 'off'
  condition:
    - condition: state
      entity_id: switch.sistema_poliva_liniia_1
      state: 'on'
  action:
  - data:
      entity_id:
      - counter.my_water_line1, counter.my_water_line1t
    service: counter.increment    


configuration.yaml +

sensor:
  - platform: template
    sensors:
      water_counter:    
        unit_of_measurement: 'M3'
        value_template: "{{ (states('counter.my_water_counter')| float)/1000 }}"    
counter:
  my_water_counter:
    initial: 2.667
    step: 10
  my_water_line1:
    name: " 1     ()"
    initial: 0
    step: 10
  my_water_line1t:
    name: " 1   ()"
    initial: 0
    step: 10



Capteur MiFlora
MiFlora ESPHome , esphome.io
Home Assistant — , , «» . — , .

Capteur de pluie virtuel
— . , .

darksky. , Apple « ». API , , , , HA . darksky, , .

2 :

configuration.yaml sensors.yaml

sensor:
  - platform: darksky
    api_key: xxxx_your_API_key_xxxx
    forecast:
      - 1
      - 2
    monitored_conditions:
      - precip_intensity

HA : sensor.dark_sky_precip_intensity_1d sensor.dark_sky_precip_intensity_2d, .

template-sensor:

configuration.yaml sensors.yaml

sensor:
  - platform: template
    sensors:
       rain2days:    
        unit_of_measurement: 'mm'
        value_template: "{{ (((states('sensor.dark_sky_precip_intensity_2d')| float)+(states('sensor.dark_sky_precip_intensity_1d')| float))*24)| round(3) }}"    

HA sensor.rain2days 2 .
, Darksky ,


Une fois toutes les données collectées, vous pouvez procéder directement à l'arrosage.

Voici comment je regarde un morceau de l'interface de l'une des zones du Home Assistant:



ici, vous pouvez définir la quantité d'eau pour l'irrigation (avec un curseur) et voir les valeurs des principaux capteurs et compteurs. J'ai donné l'interface pour l'une des lignes, pour le reste tout est pareil, seulement sur les lignes avec des capteurs de données câblés c'est un peu moins.

Dans l'interface, vous pouvez remarquer un détail «superflu» - le capteur auxiliaire «La norme a été atteinte». Il fallait l'introduire, car Je n'ai pas pu obtenir la condition: le modèle fonctionne pour arrêter l'automatisation lorsque la norme pour la quantité d'eau a été atteinte, et en conséquence, l'automatisation vérifie simplement la valeur de ce capteur. Je suis sûr que cette partie de l'automatisation peut être rendue plus simple et plus élégante, mais mon niveau n'était pas suffisant pour cela.

Vous trouverez ci-dessous le code du capteur de modèle de «béquille» résultant:

Capteur de suffisance d'arrosage (à l'intérieur de configuration.yaml ou un fichier séparé)
  - platform: template
    sensors:
      line4_status:
        friendly_name: " 4 -  "
        value_template: >-
          {% if states('counter.my_water_line4t')|float > states('input_number.slider4')|float %}
            yes
          {% elif states('counter.my_water_line4t')|float == states('input_number.slider4')|float  %}
            yes
          {% else %}
            no
          {% endif %}


L'automatisation pour commencer l'arrosage ressemble finalement à ceci:

Commencez l'arrosage (dans automations.yaml ou dans un fichier séparé)
- alias:   4   23.01
  trigger:
    platform: time
    at: "23:01:00"
  condition:
   condition: and
   conditions:
#    
    - condition: numeric_state
      entity_id: sensor.rainfor2days
      below: 5
#      
    - condition: numeric_state
      entity_id: sensor.miflora_1_moisture
      below: 50
# ,       
    - condition: state
      entity_id: 'sensor.line4_status'
      state: 'no'
  action:
   - service: switch.turn_on
     entity_id: switch.sistema_poliva_liniia_4


L'arrosage commence tard dans la soirée, chaque ligne commençant à son propre intervalle de temps. La séparation par heure de début vous permet d'utiliser un compteur d'eau d'entrée pour obtenir des données sur 4 lignes.

Au démarrage, trois conditions sont vérifiées:

  • La limite de la quantité d'eau pour aujourd'hui n'est-elle pas dépassée (si, par exemple, l'arrosage manuel a été activé)
  • l'humidité dépasse-t-elle 50% (selon les observations dans nos conditions, le sol fraîchement renversé a une teneur en humidité ne dépassant pas 60%)
  • des précipitations supérieures à 5 mm ne sont pas attendues dans les deux prochains jours.

L'automatisation suivante désactive l'arrosage:

Désactiver l'arrosage (dans automations.yaml ou un fichier séparé)
- alias:   4 
  trigger:
#      
  - entity_id: sensor.line4_status
    platform: state
    to: 'yes'
    for: 
      seconds: 5    
#   
  - platform: time
    at: "23:59:00"
#     
  - platform: numeric_state
    entity_id: sensor.miflora_1_moisture
    above: 65
#       
  - platform: state
    entity_id: switch.sistema_poliva_liniia_4
    to: 'on'
    for: 
      minutes: 60
  action:
   - service: switch.turn_off
     entity_id: switch.sistema_poliva_liniia_4


Dans l'automatisation, jusqu'à 4 variantes de déclencheurs ont été utilisées, mais dans la plupart des cas, cela fonctionne selon le premier - un capteur «béquille», qui surveille le dépassement de la limite par la quantité d'eau. Les autres déclencheurs sont effectués dans une large mesure pour des raisons de sécurité.

Eh bien, la dernière automatisation liée au problème remet à zéro le compteur journalier

Remise à zéro du compteur journalier (dans automations.yaml ou un fichier séparé)

- alias:    4 
  trigger:
  - platform: time
    at: "00:00:01"
  action:
  - service: counter.reset
    entity_id: counter.my_water_line4t


Economie du projet


Les coûts pour la partie contrôle du système d'irrigation étaient les suivants:

(Raspberry PIE avec HassIO à bord et un routeur WiFi avec un revêtement dans le jardin étaient déjà avant le début du projet, je ne les prends pas en compte)

Électrovanne UNIPUMP BCX-15 1/2 "(normalement fermée) 4 * 20 euros
Sonoff 4CH 17 euros
Compteur d'impulsions Pulsar 8 euros
ESP32 DevKitC 3,5 euros
Capteur capacitif d'humidité du sol v1.2 2 * 0,67 euros
Capteurs MiFlora 2 * 16 euros Protecteurs
, collecteur, fils, raccords tous ensemble environ 50 euros

TOTAL: environ 190 euros

Le temps consacré à la configuration des capteurs et du MK est d'environ 15 à 16 heures pendant plusieurs heures, mais la plupart du temps a été consacré à «inventer des vélos» et à inventer des «béquilles», en général, il n'y a pas beaucoup de travail. L'assemblage physique du système a pris environ 2 soirées.
En général, des économies d'eau d'environ 20 à 50% sont attendues par rapport au système de minuterie «idiot» et aux prix locaux de l'eau, le système devrait être rentable en une ou deux saisons.

Lacunes et plans de révision


À la suite du projet, certaines nuances et possibilités d'amélioration ont été révélées.

En particulier, je remplacerais les électrovannes 220V par un modèle 24V - cette tension est standard pour les systèmes d'irrigation. Dans ce cas, vous devrez ajouter un transformateur 24 V au système et changer le Sonoff 4Ch en quelque chose avec un contact sec (par exemple, Sonoff 4CH Pro ou quelque chose d'auto-assemblé). Les valves elles-mêmes sont moins chères (à partir de 8 euros) et réduisent la probabilité de choc électrique.

Il s'est également avéré que pour travailler avec des canalisations en plastique, la pression de l'alimentation en eau est trop élevée et les raccords peuvent fuir pendant le cycle d'irrigation. Dans mon cas, ce n'est pas critique, tous les raccords sont situés au-dessus du plan d'eau, mais dans le bon sens, vous devez ajouter un réducteur à l'entrée pour abaisser la pression.

J'ai été encore plus bouleversé par l'impossibilité de tenir compte de la quantité d'eau pour l'irrigation dans des volumes inférieurs à 10 litres - ce volume est la quantité minimale mesurable pour un tel compteur. Ce problème peut être résolu en démontant le comptoir et en échangeant les roues, mais jusque-là les mains ne l'ont pas atteint.

All Articles