Sistem penyiraman taman otomatis untuk Home Assistant, ESP8266 dan MiFlora



Beberapa waktu yang lalu keluarga saya memiliki rumah dengan taman kecil di tempat yang sangat hangat dan gersang, dan kami menghadapi masalah penyiraman secara teratur.

Saya ingin sistem irigasi otomatis, sementara memilihnya saya harus mempertimbangkan kondisi berikut:

  • air yang sangat mahal yang harus dihemat dengan semua cara yang tersedia
  • berbagai tanaman di kebun untuk kebutuhan kelembaban, dari sukulen hingga yang menyukai kelembaban
  • kebutuhan untuk penyiraman sepenuhnya otonom selama tidak adanya orang di rumah, lebih disukai dengan kemungkinan remote control
  • iklim kering yang tidak memaafkan kesalahan irigasi

Setelah mengevaluasi solusi siap pakai yang ditemukan di jaringan DIY lokal dan di Amazon serta membaca ulasan tentang keandalannya (biasanya bukan yang tertinggi), kami memutuskan untuk mencoba melakukan sesuatu sendiri.

Penafian: Penulis bukan spesialis IT, dan tidak mengklaim sebagai pengetahuan profesional tentang topik tersebut. Tingkat pelaksanaan proyek adalah hobi. Penulis sangat menyadari tingkat pengetahuannya dalam pemrograman dan elektronik dan akan sangat menghargai saran untuk meningkatkan dan mengoptimalkan solusi yang digunakan.

Diagram sirkuit


Taman itu dibagi menjadi 4 zona irigasi, masing-masing dilengkapi dengan sensor kelembaban tanah individu dan dapat disiram sesuai dengan jadwal individu dan jumlah air yang berbeda.
Di tanah, pipa PND-irigasi tetes dengan perforasi diletakkan, yang terhubung ke pipa yang berkumpul di unit pengumpul air dan terhubung melalui katup elektromagnetik ke pasokan air. Katup dikendalikan oleh relay yang terhubung ke ESP8266 (Sonoff 4Ch).

Penyiraman dilakukan oleh timer, pada malam hari, untuk meningkatkan jumlah air yang diserap ke tanah dan tidak akan diuapkan oleh matahari.

Pada waktu penyiraman yang dijadwalkan, kepatuhan terhadap beberapa kondisi diperiksa:

  • kelembaban tanah di bawah nilai yang telah ditentukan
  • tidak ada perkiraan curah hujan dalam jumlah yang cukup besar untuk 2 hari ke depan
  • batas air untuk irigasi yang ditetapkan untuk saluran ini tidak terlampaui

Peralatan bekas


Pie Raspberry dengan HassIO terinstal (sudah memiliki)

ESP32 DevKit , sebuah firmware ESPHome, bertindak sebagai gateway bluetooth untuk MiFlora dan menerima data dari sensor kelembaban kabel. Terletak di taman

Sensor kabel berkabel Capacitive Soil Moisture Sensor v1.2 , yang mengukur kelembaban di zona penyiraman terdekat dengan lokasi instalasi ESP32.

Sensor MiFlora terhubung ke ESP32 melalui BLE, yang mengukur kelembaban di zona penyiraman jarak jauh.

SONOFF 4Ch , dijahit dengan ESPHome, terletak di unit pengambilan air, di mana pipa dari semua zona air datang

4 katup solenoid yang biasanya tertutup untuk 220Vterletak di tempat air dan terhubung ke Sonoff 4Ch. Buka pasokan air untuk irigasi. Model yang biasanya tertutup ditutup sehingga kemungkinan "banjir" jika terjadi kegagalan listrik dan elektronik minimal, dan untuk meminimalkan jumlah output relai yang diperlukan. Meteran

air berdenyut di pintu masuk ke sistem irigasi di unit pemasukan air dan terhubung ke Sonoff 4ch. Diizinkan untuk sepenuhnya mentransfer data aliran air ke Home Asssistant dan mengimplementasikan fungsi irigasi dengan jumlah tertentu. Ternyata menjadi sangat sukses bahwa pada versi sonoff ini kontak untuk firmware sudah disolder dan bahkan ada satu GPIO02 gratis - penghitung pulsa digantung di atasnya.


Sepertinya kolektor dengan katup yang dipasang dan meter air. Kontroler (sonoff 4Ch) tidak masuk ke dalam bingkai, itu dipasang pada jarak setengah meter di perisai IP65

ESPHome dan Pengaturan 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


Sensor Kelembaban Tanah Kapasitif 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 ,

Meteran Air pulsa
«», ( ). — , , ( — 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



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

Sensor curah hujan virtual
— . , .

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 ,


Setelah semua data dikumpulkan, Anda dapat melanjutkan ke penyiraman langsung.

Ini adalah bagaimana saya melihat sepotong antarmuka dari salah satu zona di Home Assistant:



Di sini Anda dapat mengatur jumlah air untuk irigasi (dengan slider) dan melihat nilai-nilai sensor utama dan penghitung. Saya memberikan antarmuka untuk salah satu jalur, untuk sisanya semuanya sama, hanya pada jalur dengan sensor data kabel itu sedikit kurang.

Di antarmuka, Anda dapat melihat satu detail "berlebihan" - sensor tambahan "Norma telah tercapai". Itu harus diperkenalkan, karena Saya tidak dapat memperoleh kondisi: templat berfungsi untuk menghentikan otomatisasi ketika norma untuk jumlah air tercapai, dan sebagai hasilnya, otomatisasi hanya memeriksa nilai sensor ini. Saya yakin bahwa bagian otomatisasi ini dapat dibuat lebih sederhana dan lebih elegan, tetapi level saya tidak cukup untuk ini.

Di bawah ini adalah kode untuk sensor templat "kruk" yang dihasilkan:

Sensor kecukupan penyiraman (di dalam konfigurasi. Yaml atau file terpisah)
  - 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 %}


Otomatisasi untuk mulai menyiram pada akhirnya terlihat seperti ini:

Mulai penyiraman (di dalam automations.yaml atau file terpisah)
- 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


Penyiraman dimulai sore hari, dengan setiap baris dimulai pada interval waktunya sendiri. Pemisahan dengan waktu mulai memungkinkan Anda untuk menggunakan satu meter air masuk untuk mendapatkan data pada 4 baris.

Saat startup, tiga kondisi diperiksa:

  • Apakah batas jumlah air untuk hari ini tidak terlampaui (jika, misalnya, penyiraman manual dihidupkan)
  • apakah kelembaban melebihi 50% (menurut pengamatan dalam kondisi kami, tanah yang baru saja tumpah memiliki kadar air tidak lebih dari 60%)
  • curah hujan lebih besar dari 5 mm tidak diharapkan dalam dua hari ke depan.

Otomatisasi berikutnya menonaktifkan penyiraman:

Menonaktifkan penyiraman (di dalam automations.yaml atau file terpisah)
- 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


Dalam otomasi, sebanyak 4 varian pemicu digunakan, tetapi dalam kebanyakan kasus ini berfungsi sesuai dengan yang pertama - sebuah sensor “penopang”, yang memantau kelebihan batas dengan jumlah air. Pemicu lainnya dibuat sebagian besar untuk alasan keamanan.

Nah, otomatisasi terakhir yang terkait dengan masalah ini adalah mengatur ulang penghitung harian

Menempatkan penghitung harian (di dalam automations.yaml atau file terpisah)

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


Ekonomi proyek


Biaya untuk bagian kontrol sistem irigasi adalah sebagai berikut:

(Raspberry PIE dengan HassIO on board dan router WiFi dengan pelapis di kebun sudah sebelum memulai proyek, saya tidak memperhitungkannya)

UNIPUMP BCX-15 1/2 "solenoid valve (biasanya ditutup) 4 * 20 euro
Sonoff 4CH 17 euro
Pulsa meter Pulsar 8 euro
ESP32 DevKitC 3,5 euro
Kapasitif Sensor Kelembaban Tanah v1.2 2 * 0,67 euro
MiFlora sensor 2 * 16 euro
Penjaga, kolektor, kabel, alat kelengkapan bersama-sama sekitar 50 euro

TOTAL: sekitar 190 euro

Waktu yang dihabiskan untuk menyiapkan sensor dan MK adalah sekitar 3-4 pm selama beberapa jam, tetapi sebagian besar waktu dihabiskan untuk "menciptakan sepeda" dan menciptakan "kruk", secara umum, tidak banyak pekerjaan. Perakitan fisik sistem memakan waktu sekitar 2 malam.
Secara umum, penghematan air sekitar 20-50% diharapkan dibandingkan dengan sistem pengatur waktu yang “konyol” dan dengan harga air setempat, sistem tersebut harus membayar dalam satu atau dua musim.

Kekurangan dan rencana revisi


Sebagai hasil dari proyek ini, beberapa nuansa dan peluang untuk perbaikan lebih lanjut terungkap.

Secara khusus, saya akan mengganti katup solenoid 220V dengan model 24V - tegangan ini standar untuk sistem irigasi. Dalam hal ini, Anda harus menambahkan transformator 24V ke sistem dan mengubah Sonoff 4Ch menjadi sesuatu dengan kontak kering (misalnya, Sonoff 4CH Pro atau sesuatu yang dirakit sendiri). Katup sendiri lebih murah (dari 8 euro) dan mengurangi kemungkinan sengatan listrik.

Ternyata untuk bekerja dengan pipa plastik, tekanan dari pasokan air terlalu tinggi, dan alat kelengkapannya bisa bocor selama siklus irigasi. Dalam kasus saya, ini tidak kritis, semua alat kelengkapan terletak di atas tanah penyiraman, tetapi dengan cara yang baik Anda perlu menambahkan peredam di saluran masuk untuk menurunkan tekanan.

Saya bahkan lebih kesal dengan ketidakmungkinan menghitung jumlah air untuk irigasi dalam volume kurang dari 10 liter - volume ini adalah jumlah minimum yang dapat diukur untuk meteran seperti itu. Masalah ini dapat diselesaikan dengan membongkar konter dan menukar roda, tetapi sampai saat itu tangan belum mencapainya.

All Articles