Dacă ești în căutarea unui mini-PC ieftin, low-power și capabil pentru homelab, Lenovo M715q Tiny e probabil pe lista ta scurtă. E mic, consumă puțin, se găsește second-hand la prețuri rezonabile și suportă suficient RAM și stocare pentru un lab serios. Dar înainte să instalezi ceva pe el, trebuie să răspunzi la o întrebare: ce OS de virtualizare/stocare pui pe el?

Am testat mai multe opțiuni pe propriul hardware — un cluster de trei noduri Lenovo Tiny (un M710q și doi M715q) — și am ajuns la o concluzie care poate părea neașteptată. Iată povestea completă.

De ce Lenovo M715q (și M710q)?

Înainte de orice comparație de software, hardware-ul contează. M715q și M710q sunt în esență același șasiu — diferența e procesorul: M710q vine cu Intel (Core i5/i7 gen 6-7), M715q cu AMD (Ryzen Pro sau A-Series). Ambele sunt extrem de eficiente energetic.

Cu câteva VM-uri pornite în idle — un Ubuntu cu LAMP stack, un HomeAssistant OS, două Windows Server 2022 — consumul unui nod e undeva la 7W. Întregul cluster de trei noduri stă între 28–32W în idle. E genul de cifră care zici ca putea fi mai mare daca ai curent de la hidrolectrica dar oricum idle-ul e cel mai scump din europa…

Limitări reale de care trebuie să ții cont:

  • Slot PCIe ocupat de placa de rețea integrată — extinderea e limitată
  • Stocare internă: un slot M.2 NVMe + un 2.5″ SATA — nu e un NAS
  • RAM maxim: 32GB (suficient.. ish)
  • M710q e ceva mai performant pe single-thread, dar am doar un exemplar — celelalte două noduri sunt M715q

Concluzia hardware: M715q e ideal ca nod de compute, nu ca nod de stocare. Asta a influențat direct alegerile de software.

Ce am testat

Proxmox VE — hypervisorul care a câștigat

Proxmox a fost prima instalare și a rămas. De ce? Pentru că face exact ce trebuie fără să ceară nimic în schimb.

Backup-uri automate cu politici configurabile — out of the box, fără plugin-uri, fără licență. ESXi nu avea asta. High Availability funcționează similar cu VMware, dar fără să plătești. Live migration merge cu sau fără shared storage (cu un ping sau două pierdute dacă disk-ul nu e pe shared). Hotplug pe CPU, RAM, disk, USB, rețea — cam tot ce ai nevoie pentru un lab.

Singurul regret: Ceph ar fi fost interesant pentru storage distribuit, dar ai nevoie de mai multe discuri decât am eu disponibile pe noduri. Nu e o problemă a Proxmox, e o limitare de hardware.

Verdict: Proxmox rămâne hypervisorul de bază. Rulează pe toți cei trei noduri și nu am niciun motiv să îl înlocuiesc.

TrueNAS — excelent, dar nu pentru virtualizat

TrueNAS e un NAS OS de calitate serioasă. ZFS, iSCSI, file-level sharing, snapshots, deduplicare — are tot ce vrei de la un sistem de stocare. Mi-ar plăcea să îl văd pe hardware dedicat și, de altfel, exact acolo a ajuns în setup-ul meu final (mai jos).

Problema e cu virtualizarea pe Proxmox. TrueNAS vrea acces direct la fier. ZFS are nevoie de disk-urile fără strat intermediar, altfel performanța și stabilitatea suferă. Am dat peste o problemă concretă: un disk extern USB de 3TB pasat prin passthrough către VM-ul TrueNAS pur și simplu nu a vrut să fie formatat. Direct pe fier — fără probleme. Deal-breaker.

Soluția corectă pentru TrueNAS e PCI passthrough complet pentru controller-ul de disk — dar asta înseamnă că sacrifici acel controller pentru restul nodului. Pe un M715q cu resurse limitate, nu e un compromis acceptabil.

Verdict: TrueNAS e excelent, dar pe hardware dedicat. Nu ca VM pe Proxmox.

Unraid — flexibil, dar pe bani

Unraid are un avantaj real față de TrueNAS: poate folosi discuri de dimensiuni diferite fără să impună RAID clasic. Poți adăuga un disk de 4TB lângă unul de 8TB și el se descurcă. Rulează și VM-uri, și containere Docker, are o interfață prietenoasă.

Dezavantajele pentru use case-ul meu: licența costă (între 49–129 USD în funcție de numărul de discuri) și nu oferă protecția ZFS pe care o dă TrueNAS. Dacă ești începător și vrei ceva simplu de gestionat, Unraid e o alegere bună. Dacă ai deja Proxmox și știi ce faci, avantajele nu justifică costul suplimentar.

Verdict: Bun pentru cei care pornesc de la zero și vor simplitate si nu este necesar dacă ai deja Proxmox.

OpenMediaVault — câștigătorul pentru shared storage

OMV e open-source, rulează pe Debian, consumă 2 vCPU și 4GB RAM ca VM pe Proxmox și face ce trebuie: shared storage prin NFS și SMB. Nu are iSCSI nativ, nu are ZFS out-of-the-box, nu are deduplicare. Dar e stabil si ușor de configurat și nu se plânge.

L-am folosit ca VM pe pve00 (nodul witness din cluster) pentru shared storage NFS. Viteze între 78–110 MB/s pe gigabit — OMV e ceva mai lent decât TrueNAS cu aceleași disk-uri (TrueNAS depășea constant 110 MB/s), dar pentru Plex, backup-uri de VM și proiecte de lab, e mai mult decât suficient.

Verdict: Alegerea câștigătoare pentru shared storage în cadrul cluster-ului Proxmox. Simplu, gratuit, funcțional.

Elefantii din cameră: ce faci cu 4 discuri de 10TB și 2 NVMe-uri de 2TB?

Acesta e motivul pentru care toată comparația de mai sus are un final neașteptat.

La un moment dat mi-am dat seama că am nevoie de stocare serioasă: 4 HDD-uri de 10TB și 2 NVMe-uri de 2TB. Să bagi astea într-un M715q nu e posibil — are un slot M.2 și un bay de 2.5″. Iar să construiești un server tower sau rack pentru asta transformă biroul într-un experiment Frankenstein: zgomot, cabluri, consum, căldură.

Răspunsul corect a fost un NAS comercial: QNAP TS-464. Patru bay-uri de 3.5″, două slot-uri M.2 NVMe, toate într-o cutie silenţioasă proiectată exact pentru asta. TS-464 rulează QTS, QNAP’s own OS, care acoperă tot ce am nevoie pentru storage: RAID, snapshots, Plex Media Server nativ, backup-uri.

Și dacă vreodată vreau TrueNAS pe hardware dedicat — TS-464 e un candidat interesant, chiar dacă QNAP nu îl susține oficial. Dar asta e o altă poveste.

M715q-urile au rămas ce sunt cel mai bine: noduri de compute low-power în cluster-ul Proxmox.

Rezumat: ce să alegi pe un Lenovo M715q

OSPreț licențăZFSVM supportIdeal pentru
Proxmox VEGratuitDaDa (KVM + LXC)Hypervisor principal
TrueNAS SCALEGratuitDaDaNAS dedicat, bare-metal
Unraid49–129 USDNu nativDaNAS simplu, discuri mixte
OpenMediaVaultGratuitPluginNuShared storage ca VM

Dacă ai un singur M715q și vrei să faci totul — compute și stocare — Proxmox cu OMV ca VM e combinația care funcționează fără bătăi de cap. Dacă ai discuri mari și multe, adaugă un NAS dedicat în ecuație și lasă mini-PC-urile să facă ce știu mai bine.

Posturi din aceeași serie:

Când vine vorba de adblocking la nivel de rețea, Pi-hole e prima recomandare pe care o găsești peste tot. E matur, are comunitate mare, funcționează bine dar are o limitare care pentru un homelab serios devine rapid o problemă: nu poate gestiona zone DNS private.

Voiam un domeniu .local pentru homelab — să pot accesa serviciile prin nume în loc de IP-uri. proxmox.local, nas.local, vaultwarden.local. Plus forwarding condiționat și split DNS pentru ill.ro — să rezolve intern altfel decât extern. În Pi-hole n-am găsit cum să fac asta în mod curat. În Technitium DNS, toate astea sunt funcții de bază.

Ce e Technitium DNS

Technitium DNS Server e un resolver DNS open-source scris în .NET, cu interfață web completă. Gândește-te la el ca la un DNS din Windows Server — zone forward, zone reverse, forwarderi condiționali, DNSSEC, DoH, DoT — dar gratuit, pe Linux, într-un container de 512MB RAM.

Nu e un proiect obscur: are versiuni regulate, documentație bună și e recomandat frecvent în comunitatea homelab ca alternativă serioasă la Pi-hole pentru cei care au nevoie de mai mult decât adblocking simplu.

Instalare — 2 minute cu Proxmox Helper Scripts

Rulează ca LXC pe Proxmox, instalat cu Proxmox Helper Scripts:

bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/technitium-dns.sh)"

Scriptul creează un LXC Debian minimal, instalează Technitium DNS și îl pornește automat. La final îți dă IP-ul și portul interfeței web. Resursele consumate sunt neglijabile — 1 vCPU, 512MB RAM, câțiva GB disk.

După instalare, accesezi interfața la http://<ip-lxc>:5380, setezi parola de admin și ești gata. Cred ca daca nu era proxmox helper scripts nu descopeream multe proiecte misto care imi plac azi.

Adblocking — blocklist-urile folosite

Technitium are suport nativ pentru blocklist-uri în format hosts și wildcard. Configurezi din Settings → Blocking și adaugi URL-urile listelor. Eu folosesc trei:

  • Steven Black hosts — lista clasică, consolidată din mai multe surse:
    https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
  • OISD Big — una din cele mai complete liste de adblocking, actualizată frecvent:
    https://big.oisd.nl/
  • Hagezi Multi — blocklist agresiv cu wildcard pentru domenii de tracking și malware:
    https://raw.githubusercontent.com/hagezi/dns-blocklists/main/wildcard/multi-onlydomains.txt

Technitium actualizează listele automat la intervalul configurat. Poți vedea câte domenii sunt blocate per listă și poți adăuga excepții (allowlist) pentru domenii blocate greșit.

Față de Pi-hole, diferența e că Technitium suportă wildcard blocking nativ — *.tracker.com blochează toate subdomeniile fără să le enumerezi individual. Hagezi Multi profită exact de asta.

Zone DNS private — domeniul .local pentru homelab

Acesta e motivul principal pentru care am ales Technitium în loc de Pi-hole. Din Zones → Add Zone, creezi o zonă autoritativă pentru orice domeniu vrei:

Am două zone private:

  • homelab.local — toate serviciile din cluster: proxmox.homelab.local, nas.homelab.local, vaultwarden.homelab.local etc.
  • O a doua zonă pentru alte resurse interne

Adaugi recorduri A, CNAME, PTR exact ca într-un DNS autoritativ clasic. Dacă adaugi un serviciu nou în homelab, adaugi un record în zonă și imediat e rezolvabil prin nume în toată rețeaua — fără să modifici fișiere /etc/hosts pe fiecare dispozitiv.

Split DNS pentru ill.ro

Split DNS înseamnă că același domeniu se rezolvă diferit în funcție de unde vine cererea. Pentru ill.ro: intern vreau să ajung la IP-ul intern al serverului, extern la IP-ul public.

În Technitium, creezi o zonă locală pentru ill.ro cu recordul A spre IP-ul intern. Cererile din rețeaua de acasă rezolvă ill.ro la IP-ul intern — traficul nu mai iese pe internet și se întoarce înapoi. Cererile de pe internet merg la DNS-ul public normal.

Pi-hole nu are această funcționalitate nativ. Technitium o rezolvă cu 3 click-uri.

Forwarderi și configurare generală

Din Settings → Forwarders, configurezi unde se duc cererile care nu sunt rezolvate local. Eu folosesc Cloudflare DoH (https://cloudflare-dns.com/dns-query) ca forwarder primar cu DNS over HTTPS — cererile DNS sunt criptate între LXC și Cloudflare.

Poți configura și forwarderi condiționali — dacă cineva întreabă de *.homelab.local, rezolvă local; altfel trimite la Cloudflare. Util dacă ai mai multe zone sau rețele.

Integrare în rețea

Pe ER605 (Omada), setezi IP-ul LXC-ului cu Technitium ca DNS server primar în DHCP settings. Toate dispozitivele din rețea primesc automat Technitium ca resolver — fără configurare manuală per dispozitiv.

Recomand să setezi un DNS secundar public (ex: 1.1.1.1) ca fallback, în caz că LXC-ul e down în timpul unui update sau restart Proxmox.

Concluzie

Dacă vrei doar adblocking simplu, Pi-hole e suficient și are o interfață mai prietenoasă pentru începători. Dacă ai nevoie de zone DNS private, split DNS, forwarderi condiționali sau orice seamănă cu un DNS server real — Technitium e alegerea corectă.

Pentru un homelab cu Proxmox, servicii multiple și un domeniu intern, Technitium face treaba unui Windows DNS Server fără licență, fără Active Directory și fără un VM de 4GB RAM. Un LXC de 512MB care rulează de luni fără să dea semne de oboseală si ai si backup, restore, te notifica cand e momentul sa faci update… very nice!

Posturi din aceeași serie:

Există un moment în orice proiect de homelab când îți zici: de ce să plătesc pentru Claude sau ChatGPT când pot rula modele local, gratis, pe hardware-ul meu? Răspunsul scurt: poți. Răspunsul lung e mai nuanțat și implică sârmă si lipici de hartie, Dacii și consum de curent. Am construit stack-ul si îl folosesc (rar), are limite si parca pe termen lung mai bine cumperi ceva “pe bani”.

Arhitectura stack-ului

Setup-ul are două straturi de inference:

  • LXC 117 pe Proxmox — Ollama + Open WebUI pentru chat de zi cu zi. Modele mici, răspunsuri rapide, consum neglijabil.
  • Workstation Windows (.56) — Ollama cu RTX 5070 12GB VRAM pentru modele mari. Accesat din Open WebUI ca backend secundar când ai nevoie de putere de calcul serioasă, au factura de curent!

Peste inference, stack-ul mai are:

  • Qdrant (.114:6333) — vector database pentru RAG, cu colecții active pentru fișiere, knowledge base și web search
  • SearXNG (.149:8888) — motor de căutare privat, integrat în Open WebUI pentru web search fără Google
  • nomic-embed-text via Ollama local — modelul de embeddings pentru RAG pipeline

Instalare — Proxmox Helper Scripts

LXC-ul cu Ollama se instalează în două minute cu Proxmox Helper Scripts:

bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/ollama.sh)"

Scriptul creează un LXC Debian, instalează Ollama și îl pornește ca serviciu. Open WebUI se instalează separat sau în același LXC, tot prin helper scripts.

După instalare, tragi primul model:

# Modele de coding
ollama pull deepseek-coder-v2 #sau
ollama pull qwen2.5-coder:7b

# Model de embeddings pentru RAG
ollama pull nomic-embed-text

GPU inference de pe workstation

RTX 5070 cu 12GB VRAM rulează modele de până la ~8B parametri confortabil în 4-bit quantization, și modele de 14B cu compromisuri. Workstation-ul e accesibil din Open WebUI ca Ollama endpoint adițional — adaugi URL-ul în Settings → Connections.

Diferența față de CPU inference e dramatică: un model de 7B pe CPU ia 15-30 secunde per răspuns, pe GPU ia 1-3 secunde. Pentru coding cu DeepSeek sau Qwen, latența contează.

RAG cu Qdrant și SearXNG

Open WebUI are RAG integrat nativ. Configurezi Qdrant ca vector store, nomic-embed-text ca model de embeddings și SearXNG pentru web search — totul din interfață, fără cod.

Fluxul: încarci un document sau adaugi o pagină web în knowledge base → Open WebUI îl indexează în Qdrant → la conversație, modelul primește context relevant automat. Funcționează surprinzător de bine pentru documentație tehnică și note personale.

Modelele folosite

DeepSeek Coder V2 — cel mai bun model open-source pentru coding pe care l-am testat. Înțelege context larg, generează cod funcțional, explică decent. Pe 12GB VRAM rulează versiunea de 16B în 4-bit.

Qwen2.5 Coder — alternativă solidă, ceva mai rapid la inferență. Bun pentru refactoring și explicații de cod.

Pentru chat general, Llama 3.1 8B e modelul de zi cu zi pe LXC — rapid, decent, consum minim.

Unde e sârmă și unde e șurub

Să fim sinceri. Față de un model comercial serios — Claude Sonnet, GPT, Gemini — diferența e semnificativă. Nu e o chestie de configurație sau de hardware insuficient. E o chestie de scară: modelele comerciale au miliarde de parametri antrenate pe resurse pe care un homelab nu le poate replica.

RTX 5070 cu 12GB VRAM e o placă excelentă pentru gaming și pentru modele medii. Dar adevărata valoare în AI local stă în VRAM — mult VRAM. Un Mac cu M4 Pro și 48GB RAM unificat rulează modele de 30-40B parametri complet în memorie. RTX 5070 rulează 14-16B cu compromisuri. Diferența se simte în calitatea răspunsurilor, mai ales la reasoning complex.

Consumul de curent e real. Workstation-ul cu RTX 5070 în inference trage pana in 300W. Pentru sesiuni scurte de coding e acceptabil. Ca backend permanent de AI, costul electric începe să bată abonamentul lunar la un serviciu comercial deci nu face sens… Cand te joci daca tragi totul la ultra un 500W nu e deranjant 🙂

Unde merită fără discuție: confidențialitate. Parolele, codul intern, documentele sensibile — rămân local. Nu pleacă în niciun API extern. Pentru use case-uri unde asta contează, nicio comparație de calitate nu schimbă ecuația.

Concluzie

Stack-ul funcționează și îl folosesc (aproape) zilnic. DeepSeek și Qwen pentru coding, RAG pentru documentație, SearXNG pentru web search privat. E util, e al tău, nu plătești per token.

Dar dacă vrei să înlocuiești complet un model comercial de top — ai nevoie de mai mult VRAM decât are o placă de gaming medie, sau de un Mac cu chip Apple Silicon și RAM unificat mare.
Altfel repari Dacia cu sârmă: merge, dar știi că merge cu sârmă si nu stii pana unde te duce.

Posturi din aceeași serie:

Unul din lucrurile pe care le neglijezi când construiești un homelab e rețeaua. Cumperi hardware, instalezi Proxmox, ridici VM-uri — și între timp totul merge pe un switch de 1Gbps și pe router-ul de la ISP. La un moment dat realizezi că transferurile între noduri sunt limitate de rețea, nu de disk sau CPU, și că ar fi cazul să faci lucrurile cum trebuie.

Iată cum arată rețeaua de acasă după câteva iterații.

Hardware-ul de rețea

Întregul stack e TP-Link Omada — un ecosistem gestionat centralizat printr-un controller hardware dedicat:

  • ER605 v2.0 — router/gateway
  • OC200 — Omada Hardware Controller, gestionează întregul stack
  • SG2008P v3.20 — switch managed PoE 8 porturi – 4 alimenteaza AP-urile, 1 alimenteaza OC200
  • EAP653 x2 — AP-uri Wi-Fi 6 (etaj 2 și parter 2)
  • EAP265 HD x2 — AP-uri Wi-Fi 5 (etaj 1 și parter 1)

OC200 e un controller hardware dedicat — un dispozitiv mic cât o cutie de chibrituri mai mare care rulează Omada Controller fără să consume resurse din Proxmox sau să depindă de el. Avantajul față de varianta software: e întotdeauna activ independent de starea cluster-ului, ceea ce contează dacă faci modificări de rețea exact când un nod Proxmox e down.

Avantajul unui stack integrat: configurezi un VLAN o dată în controller și se propagă automat pe switch și pe toate AP-urile. Roaming-ul Wi-Fi între cele 4 AP-uri funcționează transparent — nu simți trecerea de la un AP la altul. Față de soluția de a cumpăra echipamente de la producători diferiți și a le gestiona separat, diferența de confort e semnificativă.

2.5Gbps — unde contează

Nu toată rețeaua are 2.5Gbps — nu are sens. Telefoanele, laptopurile și dispozitivele IoT se descurcă perfect pe 1Gbps. Dar între nodurile Proxmox și QNAP, lățimea de bandă contează direct în performanța homelab-ului:

  • Live migration între nodurile Proxmox — copierea memoriei RAM a unui VM în câteva secunde, nu zeci
  • Backup-uri VM pe NFS spre QNAP — un backup de 50GB în 3 minute, nu 7
  • Plex direct play de pe QNAP spre clienți cu cerințe mari de bandwidth (4K remux, Dolby Atmos)
  • Transferuri de fișiere mari spre/dinspre NAS

Switch-urile de 2.5Gbps sunt luate de pe AliExpress — mă zgârcesc intenționat aici. Un switch unmanaged de 2.5Gbps cu 5-8 porturi costă 80–150 RON pe AliExpress față de 400–600 RON pentru echivalentul de brand. Pentru traficul intern de homelab, diferența de calitate nu justifică diferența de preț.

Topologia: nodurile Proxmox (pve00, pve01, pve02) și QNAP-ul sunt conectate la switch-urile de 2.5Gbps. Switch-urile de 2.5Gbps sunt conectate uplink la SG2008P-ul Omada care face managementul VLAN-urilor. Am mai incercat sa folosesc adaptoare de retea (tot de pe aliexpress) pentru nodurile proxmox dar rezultatele au fost dezamagitoare, asa ca am abandonat si le tin in cutia cu maimute.

3 VLAN-uri — separare clară

Rețeaua e împărțită în trei zone cu politici de trafic diferite:

VLAN Default — uz general

Laptopuri, telefoane, televizoare, calculatoare. Trafic standard spre internet, fără restricții interne.

VLAN IoT

Becuri smart, prize inteligente, camere, termostate, orice dispozitiv care “sună acasă” în mod dubios. Izolat de rețeaua principală — un dispozitiv IoT compromis nu are acces la laptopuri sau la NAS. Poate ieși pe internet dar nu poate comunica cu celelalte VLAN-uri.

Aceasta e poate cea mai importantă decizie de securitate dintr-un homelab. Dispozitivele IoT au firmware actualizat rar, vulnerabilități cunoscute și producători care dispar sau abandonează suportul. Le dai acces la internet pentru că au nevoie să funcționeze, dar le izolezi de restul rețelei.

VLAN Sandbox/HomeLab

Nodurile Proxmox, QNAP, VM-urile și LXC-urile din cluster. Acces la internet controlat, comunicare liberă între componente. Separat de rețeaua de uz general pentru că un experiment care merge prost (un container care consumă tot bandwidth-ul, un VM care face broadcast storms) nu afectează restul casei.

ER605 face routing între VLAN-uri cu reguli explicite — ce poate vorbi cu ce e definit clar, nu implicit.

Diagrama rețelei

Internet
    │
  ER605
    │
  SG2008P Switch Omada
    ├── VLAN Default  ──► Laptopuri, telefoane, TV
    ├── VLAN IoT      ──► Becuri, camere, smart home
    └── VLAN HomeLab  ──► Proxmox + QNAP
              │
    ┌─────────┴──────────┐
    │                    │
Switch 2.5G         Switch 2.5G
(AliExpress)        (AliExpress)
    │                    │
pve00  pve01         pve02  QNAP
                           TS-464

OC200 — Omada Hardware Controller (independent)

AP-uri Omada (4x) — toate VLAN-urile propagate wireless
  EAP653 Etaj 2
  EAP653 Parter 2
  EAP265 Etaj 1
  EAP265 Parter 1

Ce funcționează bine

OC200 ca controller hardware dedicat — independent de cluster-ul Proxmox, mereu activ, consum neglijabil. Îți dă vizibilitate completă pe tot stack-ul: câți clienți sunt pe fiecare AP, ce bandwidth consumă, uptime per dispozitiv.

VLAN-urile prin controller — configuri o dată, se propagă pe switch și pe toate AP-urile automat. Dacă adaugi un AP nou, preia automat configurația VLAN existentă.

2.5Gbps intern — transferurile între Proxmox și QNAP sunt limitate acum de QNAP, nu de rețea. Switch-urile ieftine de pe AliExpress nu au dat nicio problemă în utilizare reală.

Ce aș schimba

Switch-urile de 2.5Gbps de pe AliExpress sunt unmanaged — nu pot face trunking VLAN pe ele. Asta înseamnă că traficul de homelab și traficul de management merg pe același cablu fizic spre SG2008P, unde se separă. Funcționează, dar nu e elegant. La o viitoare iterație aș lua un switch managed de 2.5Gbps — există opțiuni TP-Link TL-SG105-M2 la ~200 RON care fac trunking VLAN și s-ar integra mai curat în stack-ul Omada.

Altfel — rețeaua funcționează exact cum ar trebui. Izolarea IoT dă liniște, 2.5Gbps intern face homelab-ul considerabil mai rapid, și gestionarea centralizată prin OC200 elimină nevoia de a accesa fiecare dispozitiv separat.

Posturi din aceeași serie:

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