Blog › Aperto per scelta

Node-RED per il riscaldamento: un flusso per gestire le zone

Home Assistant mostra le stanze e raccoglie i dati. La logica che decide quando aprire una zona sta meglio in Node-RED, dove si vede, si prova e si copia da una zona all’altra. Ecco un flusso completo, nodo per nodo.

21 gennaio 20266 minuti di letturaRead in English

In un impianto con Brick lavorano insieme due strumenti open source. Home Assistant è l’interfaccia: mostra le stanze, raccoglie i dati dei dispositivi, offre l’app. Node-RED è il posto dove vive la logica: decide quando una zona deve scaldare, come si coordina con le altre, cosa fare se qualcosa non va.

Usare Node-RED con Home Assistant non è obbligatorio, perché anche Home Assistant ha le sue automazioni. Per la termoregolazione però conviene, e in questo articolo vediamo perché e come, costruendo il flusso di una zona.

Schema di un flusso Node-RED con i nodi sonda, programma orario, regime, setpoint attivo, isteresi, testina, Grafana e avviso
Il flusso di una zona: la sonda, il programma orario e il regime decidono il setpoint attivo; l’isteresi comanda la testina, manda i dati a Grafana e genera un avviso se la zona non arriva in temperatura.

Perché Node-RED accanto a Home Assistant

Node-RED è un ambiente di programmazione visuale nato in IBM e oggi gestito dalla OpenJS Foundation. Le logiche si costruiscono collegando nodi: un nodo legge un valore, un altro lo elabora, un altro manda un comando.

Per chi regola impianti ha tre vantaggi rispetto alle automazioni scritte in Home Assistant.

  • La logica si vede. Il flusso di una zona è un disegno che si legge da sinistra a destra. Un collega, o tu fra due anni, capisce cosa fa senza leggere centinaia di righe.
  • Si prova un pezzo alla volta. Si può iniettare una temperatura finta, guardare cosa esce da ogni nodo, correggere.
  • Si copia. Una volta che la zona 1 funziona, le altre sette sono copie con un nome diverso.

Chi viene dalla supervisione professionale ritrova un modo di lavorare familiare: blocchi funzionali collegati tra loro.

Il flusso, nodo per nodo

Il flusso di una zona ha tre ingressi, un nucleo e tre uscite.

Gli ingressi.

  1. La sonda della zona. Un nodo che ascolta i cambi di stato dell’entità di Home Assistant che rappresenta la sonda, per esempio sensor.temperatura_camera. Ogni nuova lettura entra nel flusso.
  2. Il programma orario. Un nodo che a orari prestabiliti cambia la fascia della zona: comfort dalle 6 alle 9 e dalle 18 alle 23, attenuazione nel resto della giornata.
  3. Il regime. Un selettore che il cliente cambia dall’app: Comfort, Eco o Automatico. In Automatico vale il programma; negli altri due casi il setpoint è fisso.

Il nucleo.

  1. Il setpoint attivo. Un nodo che combina programma e regime e decide la temperatura obiettivo del momento, per esempio 20,5 °C in comfort e 18 °C in attenuazione. Il valore si salva nel contesto del flusso, dove gli altri nodi lo leggono.
  2. L’isteresi. Il nodo che decide se la zona deve scaldare. Accende quando la temperatura scende sotto il setpoint meno 0,3 °C, spegne quando sale sopra il setpoint più 0,3 °C. In mezzo mantiene lo stato precedente: così la testina non apre e chiude di continuo.

Le uscite.

  1. La testina. Un nodo che chiama il servizio di Home Assistant per accendere o spegnere l’uscita della zona.
  2. Grafana. Temperatura, setpoint e stato della testina vanno nel database, per i grafici e per capire nel tempo come si comporta la zona.
  3. L’avviso. Se la zona chiede calore da tre ore e non è ancora arrivata in temperatura, parte una notifica. Di solito vuol dire una testina bloccata, un circuito chiuso sul collettore o un generatore che non risponde.

Il cuore: l’isteresi in un nodo function

L’isteresi si può fare con nodi già pronti, ma un nodo function di poche righe è più chiaro:

// Ingresso: msg.payload = temperatura della zona in °C
const sp = flow.get("setpoint_zona1") ?? 20;
const ist = 0.3;
let stato = context.get("stato") ?? false;
const t = Number(msg.payload);
if (isNaN(t)) return null;          // lettura non valida: non cambia niente
if (t <= sp - ist) stato = true;    // sotto soglia: scalda
else if (t >= sp + ist) stato = false; // sopra soglia: ferma
context.set("stato", stato);
msg.payload = stato;
return msg;

Due dettagli contano. Una lettura non valida, per esempio quando la sonda senza fili ha la batteria scarica, non deve cambiare lo stato. E il valore di isteresi va scelto sull’impianto: 0,3 °C va bene per un pavimento radiante, che è lento; un fan coil, più rapido, può richiedere valori diversi e tempi minimi di accensione.

Programmi orari e regimi

Il programma orario è la parte che il cliente vede e cambia più spesso. Per questo conviene che i valori stiano in Home Assistant, come entità modificabili dall’app, e che Node-RED li legga. Il cliente sposta l’orario di risveglio dall’app e il flusso si adegua, senza che nessuno debba aprire Node-RED.

Un consiglio pratico per il pavimento radiante: invece di accendere la zona all’orario di comfort, si anticipa l’accensione di un tempo che dipende dalla temperatura esterna e da quanto la zona è lontana dal setpoint. Si può partire con un anticipo fisso, per esempio due ore, e affinarlo guardando i grafici delle prime settimane.

Dalla zona all’impianto

Il flusso di una zona è il mattone. L’impianto si costruisce sopra, con un flusso che guarda tutte le zone insieme:

  • se almeno una zona chiede calore, si attiva la pompa del circuito e si manda la richiesta al generatore;
  • se nessuna zona chiede calore, si fermano pompa e generatore dopo un ritardo, per non spegnere e riaccendere troppo spesso;
  • la temperatura di mandata segue la curva climatica, con la piccola correzione in base a quante zone sono in temperatura.

È il punto in cui Node-RED mostra la sua forza: ogni livello è un flusso separato, leggibile e provabile da solo. Come abbiamo scritto parlando di Home Assistant in un impianto professionale, la differenza con il fai da te non sta nel software ma nel modo di usarlo: documentato, provato, ripetibile.

Gli errori più frequenti

Chi comincia a usare Node-RED per la termoregolazione tende a inciampare negli stessi punti.

  • Logiche sparse tra Home Assistant e Node-RED. Metà delle regole in un’automazione di Home Assistant, metà in un flusso: dopo un mese nessuno sa più cosa comanda cosa. Meglio una regola chiara: la logica in Node-RED, i valori modificabili in Home Assistant.
  • Nessuna gestione dei dati mancanti. Una sonda senza fili che smette di trasmettere lascia l’ultimo valore letto. Se quel valore era basso, la zona scalda all’infinito. Conviene controllare l’età dell’ultima lettura e, oltre un certo tempo, mettere la zona in uno stato sicuro e mandare un avviso.
  • Tempi minimi ignorati. Testine, pompe e generatori non amano accendersi e spegnersi ogni pochi minuti. Un ritardo minimo tra un cambio di stato e il successivo protegge i componenti.
  • Flussi senza nome. Nodi chiamati “function 12” e “switch 3” rendono il flusso illeggibile. Il nome di ogni nodo dovrebbe dire cosa fa.

Prima di metterlo in funzione

Prima di collegare il flusso alle testine vere, conviene provarlo con valori iniettati a mano: temperature sotto e sopra la soglia, letture non valide, cambio di regime. E conviene esportare il flusso e conservarlo insieme allo schema dell’impianto. Il flusso è parte della documentazione, esattamente come lo schema elettrico.

Scarica il flusso

Il flusso descritto in questo articolo, da importare in Node-RED. Cambia i nomi delle entità con quelli del tuo impianto e provalo prima su una zona.