Totul a pornit de la un programator Hunter cu 2 zone care funcționa de ani buni. Simplu, not smart, fiabil — dar limitat. Când am avut nevoie de încă două zone (picuratoare) și de control pe WiFi, l-am înlocuit cu un switch Tuya de 4 canale cumpărat cu sub 100 RON de pe aliexpress. A mers excelent.

Între timp a apărut nevoia de o a cincea zonă — inca un un picurator pe grădină — rezolvată cu un Sonoff SWV-BSP, o electrovalvă inteligentă pentru apă cu Zigbee 3.0 integrată în HA prin Zigbee. Tocmai când credeam că e gata, s-a stricat un Iritrol Life DC de la aspersoarele din fata casei: consuma bateria în 1-2 săptămâni, indiferent ce faceam. Soluția: am tras fir, am schimbat solenoidul și l-am conectat la o priză smart. Zona 6 e pregătită în cod, așteptând switch-ul fizic definitiv.

Trei lumi diferite — Tuya WiFi, Zigbee 3.0 și o priză smart — fără nicio legătură între ele la nivel de protocol. Exact genul de situație în care Home Assistant strălucește: le unești pe toate într-un singur sistem, cu logică comună.

Dar automatizarea de bază — pornește zona X la ora Y — e banală. Ceea ce m-a interesat a fost să adaug valoare reală: știam din măsurători că apersoarele mele dau 0.4 L/m²/minut. De acolo a venit ideea: dacă știu debitul și știu temperatura prognozată, pot calcula exact cât trebuie să ud și pot ajusta duratele automat la începutul fiecărei săptămâni sau luni.

Hardware folosit

Setup-ul fizic e deliberat ieftin și simplu:

  • Tuya TYWB 4ch-RF — controlează zonele 1–4: Gazon Paul, Gazon Anca, Lateral Grădina, Copacii. Input AC/DC 7-32V/USB 5V, 10A per canal, 16A total, WiFi 2.4GHz + Bluetooth + 433MHz RF. Integrat în HA prin integrarea Tuya nativă.
  • Sonoff SWV-BSP — Electrovalvă inteligentă pentru apă, Zigbee 3.0 — zona 5, picuratorul din grădiniță. Controlează direct fluxul de apă, integrată în HA prin Zigbee.
  • Priză smart (zona 6, placeholder) — pentru Iritrol-ul stricat: solenoid nou pe 24vAC, fir tras, priză smart până la o soluție mai elegantă.

Total hardware pentru 5 zone active: sub 200 RON. Programatorul Hunter original costa mai mult și nu putea face jumătate din ce face sistemul actual. Cel iritrol life dc… 2 zone… doar 900 lei.

Arhitectura în Home Assistant

Sistemul folosește Irrigation Unlimited (HACS) ca motor de control al zonelor — nu pentru schedule-urile lui native, ci pentru comenzile manual_run și cancel pe care le apelează automatizările HA.

De ce această abordare și nu schedule-urile native IU? Pentru că avem nevoie de durate dinamice — calculate în funcție de temperatură și debit — care se schimbă săptămânal. Schedule-urile IU sunt statice prin natură. Automatizările HA cu manual_run permit transmiterea duratei calculate la momentul rulării.

ha-irigatii/
├── packages/
│   └── irigatie.yaml        # Entități, automatizări, senzori
└── lovelace/
    └── irigatie_dashboard.yaml  # Dashboard cu 3 pagini

Zonele de irigații

NrZonăHardwareStatus
1Gazon PaulTYWB 4ch-RF canal 1Activ
2Gazon AncaTYWB 4ch-RF canal 2Activ
3Lateral GrădinaTYWB 4ch-RF canal 3Activ
4CopaciiTYWB 4ch-RF canal 4Activ
5Picurator GrădinaSonoff SWV-BSP Zigbee 3.0Activ
6Irigații Față CasăPriză smart (Iritrol reparat)Pregătit, dezactivat

Zona 1 are două durate configurabile: normală și caniculă — mai lungă, activată automat când prognoza indică ≥3 zile cu maxime de peste 30°C în săptămâna următoare.

Planificarea automată

Fiecare zonă are o automatizare de schedule zilnic cu mai multe moduri selectabile din interfață:

  • Zile fixe — Lun+Joi, Mar+Joi+Sâm, Lun+Mie+Vin sau zilnic
  • Interval — o dată la X zile, bazat pe data ultimei irigări stocate în input_datetime
  • Dezactivat — oprire completă a schedule-ului pentru zona respectivă

Modul Interval e util pentru zone ca picuratorul sau copacii — nu au nevoie de ritmicitate fixă, ci de un interval minim între udări.

Bilanțul hidric — de unde vine valoarea reală

Acesta e miezul sistemului. Știind că gazonul consumă 0.4 L/m²/minut (măsurat cu testul casoletei — pui o cutie pe gazon în timpul irigării și măsori câți mm s-au acumulat în X minute), poți calcula exact cât udă sistemul per săptămână și cât ar trebui să ude în funcție de temperatură.

Formula necesarului e deliberat simplă:

necesar_saptamanal [L/m²] = temperatura_medie_maxime_7_zile [°C]

Calibrare: la 30°C medii → 30 L/m²/săptămână. E o aproximare, dar una care funcționează în practică — temperatura maximă e cel mai bun proxy simplu pentru evapotranspirație fără senzori de umiditate sol.

Zilnic la 07:00, o automatizare apelează weather.get_forecasts (Met.no, integrat nativ în HA) și calculează media maximelor zilnice pe 7 zile. Duminică seara la 21:00, verifică dacă săptămâna viitoare are caniculă (≥3 zile cu maxime ≥30°C).

Procentul acoperit — câte procente din necesarul calculat e acoperit de programul curent — e afișat în dashboard cu un gauge 0–150% per zonă de gazon.

Auto-ajustarea duratelor

Pasul următor față de simpla afișare a bilanțului: sistemul recalculează automat duratele de irigare la frecvența configurată (săptămânal, la 2 săptămâni sau lunar) pentru a menține bilanțul la ~100%.

durata [min/sesiune] = temperatura_medie_maxime / sesiuni_pe_sapt / debit_L_mp_min

Exemplu — Gazon Paul la 28°C, Lun+Joi, debit 0.4:
  → 28 / 2 / 0.4 = 35 min/sesiune

La 20°C:
  → 20 / 2 / 0.4 = 25 min/sesiune

Duratele au clamping per zonă (gazonul între 1–59 min, copacii între 5–120 min, picuratorul între 5–180 min) și pot fi activate/dezactivate individual per zonă. Zona 1 calculează și durata de caniculă cu un factor ×1.3.

Rezultat practic: vara, când temperaturile cresc, duratele cresc automat luni dimineața fără nicio intervenție manuală. Toamna, scad.

Dashboard-ul — 3 pagini responsive

Construit cu custom:layout-card și custom:button-card (HACS), responsive pe desktop, tabletă și telefon:

  • Pagina 1 — Control: butoane Start/Stop per zonă, timp total azi, toggle caniculă, grafic activitate ultimele 48h
  • Pagina 2 — Bilanț Hidric: gauge per zonă de gazon, deficit sau exces față de necesar
  • Pagina 3 — Configurare: ore start, durate, program, interval, debit măsurat, toggle auto-ajustare per zonă

O notă tehnică: today_duration din Irrigation Unlimited trackează doar sesiunile din schedule-urile native IU. Deoarece sistemul folosește manual_run din automatizări HA, today_duration rămâne 0. Soluția: senzori history_stats care citesc direct din istoricul HA, indiferent de modul de pornire al zonei.

Instalare rapidă

  1. Instalează din HACS: Irrigation Unlimited, button-card, layout-card
  2. Copiază packages/irigatie.yaml în <config>/packages/
  3. Activează packages în configuration.yaml: homeassistant: packages: !include_dir_named packages
  4. Înlocuiește entity ID-urile switch-urilor cu ale tale în secțiunea irrigation_unlimited:
  5. Restart complet HA (nu doar reload — input_number cu mode: box necesită restart)
  6. Calibrează debitul cu testul casoletei și setează input_number.zona_N_litri_mp_minut

Ce urmează

Compensare precipitații — datele sunt disponibile din același weather.get_forecasts (atributul precipitation per zi). Formula ar deveni necesar_ajustat = max(0, necesar - precipitatii_prognozate_mm). Dacă plouă marți, sistemul scade automat durata de joi.

Notificări push — când bilanțul hidric scade sub 70%, când caniculă se activează automat sau când auto-ajustarea modifică o durată cu mai mult de 10 minute.

Zona 6 (Gazon Față Casă) e deja pregătită în cod — entități, automatizări, bilanț hidric — dar dezactivată (enabled: false) până când switch-ul fizic e instalat.

Asta e primul meu proiect / repo pe Github aici: ha-irigatii