
Node-RED è un tool di sviluppo basato su un'interfaccia grafica che permette di collegare tra loro dispositivi hardware, API e servizi online attraverso flussi visuali. Creato inizialmente da IBM per semplificare l'Internet of Things (IoT), oggi è uno strumento open-source molto utilizzato anche per l'automazione domestica, il monitoraggio di dati in tempo reale e l'integrazione di applicazioni.
L'ambiente di sviluppo di Node-RED si basa su un editor visuale accessibile da un browser web, dove i vari componenti, chiamati "nodi", vengono trascinati e collegati tra loro per creare flussi di dati. Ogni nodo rappresenta una funzione specifica: ad esempio, un input da un sensore, un'operazione logica o una richiesta HTTP verso un servizio esterno. I flussi possono essere eseguiti in tempo reale, permettendo di vedere immediatamente i risultati delle proprie configurazioni.
Uno degli aspetti più interessanti di Node-RED è la sua capacità di integrarsi con una vasta gamma di dispositivi e protocolli, come MQTT, HTTP, WebSocket e Modbus, rendendolo uno strumento potente per chi vuole automatizzare processi o raccogliere dati da sensori e sistemi distribuiti.
Node-RED è estremamente flessibile: può essere eseguito su dispositivi molto piccoli come il Raspberry Pi, ma anche su server cloud per gestire applicazioni su larga scala. Grazie alla comunità attiva, esistono migliaia di nodi aggiuntivi che permettono di estendere le sue funzionalità, integrando facilmente servizi come Telegram, Alexa, database SQL e molto altro.
In sintesi, Node-RED è una piattaforma visuale che semplifica l'integrazione e l'automazione di dispositivi e servizi, riducendo la necessità di scrivere codice complesso e accelerando lo sviluppo di applicazioni IoT e automazione.
Node-RED è una piattaforma di sviluppo visuale che permette di creare applicazioni di automazione e integrazione utilizzando un'interfaccia grafica. È particolarmente utile per l'integrazione di dispositivi IoT, il controllo dei flussi di dati e la gestione di processi. In questa guida vedremo come installare Node-RED su diverse piattaforme.
Requisiti
Prima di iniziare, assicurati di avere i seguenti prerequisiti:
Node.js: Node-RED è costruito su Node.js, quindi è necessario installarlo prima di procedere.
npm: Node-RED utilizza npm (Node Package Manager) per gestire i pacchetti, che viene installato automaticamente con Node.js.
1. Installazione su Windows
Installa Node.js:
Vai al sito ufficiale di Node.js e scarica l'ultima versione LTS (Long Term Support) per Windows. Segui le istruzioni per completare l'installazione.
Verifica l'installazione:
Dopo aver completato l'installazione, apri il terminale (Prompt dei comandi o PowerShell) e digita i seguenti comandi per verificare che Node.js e npm siano installati correttamente:
node -v
npm -v
Installa Node-RED:
Una volta installato Node.js, puoi installare Node-RED globalmente usando npm. Esegui il comando seguente nel terminale:
npm install -g --unsafe-perm node-red
Avvia Node-RED:
Una volta completata l'installazione, avvia Node-RED con il comando:
node-red
Questo avvierà il server Node-RED e lo renderà accessibile tramite il browser all'indirizzo http://localhost:1880.
2. Installazione su macOS
Installa Node.js:
Su macOS, puoi installare Node.js utilizzando il gestore di pacchetti Homebrew. Se non hai già Homebrew installato, esegui il comando:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Dopo aver installato Homebrew, installa Node.js con:
brew install node
Verifica l'installazione:
Controlla che Node.js e npm siano stati installati correttamente con i seguenti comandi:
node -v
npm -v
Installa Node-RED:
Usa npm per installare Node-RED globalmente:
sudo npm install -g --unsafe-perm node-red
Avvia Node-RED:
Avvia Node-RED con il comando:
node-red
Accedi a Node-RED nel browser all'indirizzo http://localhost:1880.
3. Installazione su Linux
Installa Node.js:
Su Linux, puoi installare Node.js tramite il gestore di pacchetti della tua distribuzione. Ad esempio, su Ubuntu puoi eseguire:
sudo apt update
sudo apt install nodejs npm
Verifica l'installazione:
Controlla che Node.js e npm siano installati correttamente con:
node -v
npm -v
Installa Node-RED:
Usa npm per installare Node-RED globalmente:
sudo npm install -g --unsafe-perm node-red
Avvia Node-RED:
Esegui Node-RED con:
node-red
Accedi a Node-RED nel browser all'indirizzo http://localhost:1880.
Una volta completata l'installazione, puoi iniziare a esplorare l'interfaccia di Node-RED e a creare i tuoi flussi.
In Node-RED, i nodi Inject e Debug sono fondamentali per testare e monitorare i flussi.
Nodo Inject
Il nodo Inject permette di generare manualmente un messaggio (msg) che viene inviato attraverso il flusso. È utile per testare porzioni di flusso senza dover aspettare un evento esterno, come un input da un sensore o una richiesta HTTP.
Può inviare vari tipi di dati, come stringhe, numeri, booleani, timestamp o oggetti JSON.
Può essere attivato manualmente (cliccando sull'icona accanto al nodo) oppure in modo automatico a intervalli di tempo prestabiliti.
Supporta configurazioni di tempo ripetute, ad esempio ogni secondo, ogni minuto o in orari specifici.
Nodo Debug
Il nodo Debug viene utilizzato per visualizzare il contenuto dei messaggi che attraversano il flusso. È uno strumento di monitoraggio molto potente per capire cosa sta succedendo internamente.
Mostra il contenuto di msg.payload nella finestra di debug laterale.
Può essere configurato per visualizzare non solo il payload, ma anche l'intero oggetto msg, inclusi msg.topic, msg.payload, msg.headers, ecc.
Può essere impostato per visualizzare i dati come stringa, numero o oggetto JSON.
Una panoramica su Node Red:
- come è organizzato l'ambiente di lavoro
- come collegare i nodi
- come modificare le proprietà dei nodi
Impariamo a importare ed esportare i flussi con Node Red. I flussi sono in formato JSON ed è semplice salvarli su file o importarli con un copia-e-incolla
JavaScript è un linguaggio di programmazione ad alto livello, interpretato e orientato agli oggetti, utilizzato principalmente nello sviluppo di pagine web interattive. Nato nel 1995, è diventato uno degli elementi fondamentali del web insieme a HTML e CSS. Mentre HTML definisce la struttura di una pagina e CSS ne gestisce lo stile, JavaScript permette di aggiungere interattività e dinamismo.
Grazie a JavaScript, un sito web può reagire alle azioni dell'utente senza dover ricaricare completamente la pagina. Esempi comuni di JavaScript in azione sono i menu a tendina interattivi, le gallerie di immagini scorrevoli, i form che validano i dati inseriti in tempo reale e le notifiche dinamiche.
Uno dei principali vantaggi di JavaScript è la sua esecuzione lato client, ovvero direttamente nel browser dell'utente, riducendo così il carico sul server e migliorando la velocità di risposta dell'applicazione. Tuttavia, con l'introduzione di tecnologie come Node.js, JavaScript può essere eseguito anche lato server, permettendo lo sviluppo di applicazioni complete, dal front-end al back-end.
JavaScript supporta vari paradigmi di programmazione, come l'orientamento agli oggetti e la programmazione funzionale, ed è compatibile con la maggior parte dei browser moderni. Inoltre, grazie a librerie e framework come React, Angular e Vue, permette di costruire interfacce utente complesse e applicazioni single-page altamente reattive.
In sintesi, JavaScript è uno strumento essenziale per creare esperienze web moderne, interattive e performanti, rendendo le pagine web più vive e coinvolgenti per l'utente.
In questo video vedremo come scrivere del codice in JavaScript usando un browser oppure node.js con Visual Studio Code
In JavaScript, le variabili sono contenitori utilizzati per memorizzare dati che possono variare nel tempo. A partire da ECMAScript 6 (ES6), esistono tre modi principali per dichiarare una variabile: var, let e const.
var è la forma tradizionale di dichiarazione, con ambito di funzione, ma può portare a comportamenti imprevisti.
let consente di dichiarare variabili riducendo il rischio di errori.
const viene utilizzato per dichiarare costanti.
In JavaScript, i tipi di dato rappresentano le diverse categorie di valori che il linguaggio può gestire. Comprendere questi tipi è fondamentale per scrivere codice efficace e prevenire errori.
Tipi di dato primitivi:
I tipi primitivi sono immutabili e rappresentano valori semplici:
Number: per numeri interi e decimali.
BigInt: per numeri interi di grandi dimensioni.
String: per sequenze di caratteri.
Boolean: per valori logici true o false.
Undefined: indica una variabile dichiarata ma non inizializzata.
Null: rappresenta l'assenza intenzionale di un valore.
Symbol: per identificatori unici.
Tipi di dato complessi:
I tipi complessi, o di riferimento, includono:
Object: collezioni di coppie chiave-valore.
Array: liste ordinate di elementi.
Function: blocchi di codice riutilizzabili.(Wikipedia)
Questi tipi sono mutabili e possono contenere altri valori, inclusi tipi primitivi e altri oggetti.
In questa lezione esploreremo le conversioni di tipo in JavaScript, un aspetto fondamentale per comprendere come il linguaggio gestisce i dati durante l'esecuzione del codice.
JavaScript può convertire automaticamente i valori da un tipo di dato a un altro quando necessario. Questo processo può avvenire in due modi:
Conversione implicita: avviene automaticamente quando JavaScript interpreta un'espressione e converte i tipi di dato per eseguire l'operazione. Ad esempio, aggiungendo un numero a una stringa, il numero viene convertito in stringa per effettuare la concatenazione.
Conversione esplicita: è quando il programmatore converte manualmente un valore da un tipo a un altro utilizzando funzioni come Number(), String() o Boolean().
Durante la lezione, analizzeremo esempi pratici di entrambe le conversioni, evidenziando situazioni comuni e potenziali insidie.
In questa lezione esploreremo gli operatori di JavaScript, i simboli e le parole chiave che eseguono calcoli, confronti e altre operazioni sui valori. Vedremo le categorie principali per capire come manipolare dati e controllare il flusso di un programma.
In questa lezione vedremo come creare delle espressioni logiche in Javascript
In questa lezione esploreremo gli operatori condizionali in JavaScript: if, else, else if. Imparerai come controllare il flusso del tuo programma in base a condizioni logiche, ottimizzando il codice e rendendolo più efficiente.
In questa video lezione esploreremo in dettaglio i loop in JavaScript, strumenti essenziali per automatizzare operazioni ripetitive e gestire l'iterazione su strutture di dati.
Vedremo nel dettaglio:
While: come funziona il ciclo basato su una condizione che viene valutata prima di ogni iterazione, ideale per situazioni in cui non si conosce a priori il numero di ripetizioni.
For il ciclo più utilizzato in JavaScript, perfetto per iterare su array o eseguire blocchi di codice per un numero definito di volte, grazie al controllo diretto su variabile, condizione e incremento.
Do-While simile al while, ma con una caratteristica unica: il blocco di codice viene eseguito almeno una volta, indipendentemente dalla condizione.
In questa lezione esploreremo le funzioni. Vedremo cosa sono, a cosa servono e come possono semplificare ed organizzare il codice, evitando ripetizioni e migliorando la leggibilità dei programmi.
Vedremo nel dettaglio:
Dichiarazione di una funzione: come definire una funzione
Parametri e argomenti: come passare informazioni a una funzione e come ricevere un risultato tramite il valore di ritorno (return).
Scope e visibilità: la differenza tra variabili locali e globali all'interno di una funzione.
Un array in JavaScript è una struttura dati che permette di memorizzare più valori in un'unica variabile. Puoi immaginarlo come una lista o un contenitore ordinato, in cui ogni valore è identificato da un indice numerico che parte da zero.
Esempio di un array:
Dichiarazione di un array di colori:
const colori = ["rosso", "verde", "blu"]
Caratteristiche principali:
Indice numerico: gli elementi sono accessibili tramite un numero che rappresenta la loro posizione (indice).
colori[0] restituisce "rosso".
colori[1] restituisce "verde".
Ordinato: l'ordine in cui inserisci gli elementi è mantenuto.
Dinamico: puoi aggiungere o rimuovere elementi in qualsiasi momento.
colori.push("giallo") aggiunge "giallo" alla fine
colori.pop() rimuove l'ultimo elemento
Può contenere tipi diversi: in un array puoi mettere numeri, stringhe, oggetti, o addirittura altri array.
const misto = [42, "ciao", true, [1, 2, 3]]
Lunghezza dinamica: puoi conoscere il numero di elementi con il metodo length.
console.log(colori.length) restituisce 3
Un oggetto in JavaScript è una struttura dati che permette di raggruppare variabili e funzioni in un'unica entità. Ogni oggetto è composto da proprietà (spesso chiamate anche chiavi) e valori. Le proprietà possono essere di qualsiasi tipo di dato, mentre i valori possono essere variabili, stringhe, numeri, funzioni, array o anche altri oggetti.
In questo video tratto il tema delle variabili in Node-Red e di come possono essere create a livello di flusso, globalmente o nel contesto di un nodo
Il nodo Function permette di scrivere codice JavaScript personalizzato per manipolare i dati all'interno di un flusso. È estremamente utile quando devi applicare logica complessa o trasformare i dati prima di inviarli ad altri nodi.
Puoi scrivere qualsiasi logica JavaScript per modificare il messaggio msg.
Il nodo accetta un input, esegue il codice specificato e restituisce l'output.
Puoi accedere e modificare qualsiasi proprietà dell'oggetto msg, come msg.payload, msg.topic, ecc.
Può restituire un singolo messaggio, più messaggi (array) o addirittura nessun messaggio (null).
In questo video lo tratteremo brevemente. Nella sezione degli approfondimenti troverai maggiori informazioni ed esempi.
Il nodo Change consente di modificare facilmente il contenuto dei messaggi (msg) nel flusso, senza dover scrivere codice JavaScript. È utile per aggiornare, spostare, copiare o eliminare valori all'interno di un oggetto msg.
Funzionalità principali:
Set: imposta un valore specifico a una proprietà.
Change: trova e sostituisce un valore in una proprietà.
Move: sposta una proprietà da un punto all'altro dell'oggetto.
Copy: duplica una proprietà mantenendola anche nell'originale.
Delete: rimuove una proprietà dall'oggetto.
Questi tre nodi sono utili per monitorare lo stato e il comportamento degli altri nodi nel flusso di Node-RED.
Il nodo Complete viene attivato quando un nodo specifico nel flusso ha terminato completamente la sua esecuzione. È particolarmente utile per nodi asincroni, come i nodi HTTP o quelli che eseguono operazioni complesse.
Può essere configurato per "ascoltare" un nodo specifico.
Invia un messaggio quando il nodo monitorato ha concluso tutte le sue operazioni.
Può restituire informazioni sul risultato, come l'output o eventuali errori.
Il nodo Status permette di monitorare i cambiamenti di stato di un nodo. Può rilevare stati come "connesso", "disconnesso", "in attesa", "errore", ecc.
Può essere collegato a qualsiasi nodo per catturare i suoi cambiamenti di stato.
Restituisce un oggetto msg con informazioni sullo stato corrente.
Utile per capire se un dispositivo è attivo, se un servizio è disponibile o se un processo è in esecuzione.
Il nodo Error viene attivato quando un nodo specifico genera un errore. Questo permette di catturare e gestire errori in modo centralizzato.
Ascolta errori provenienti da un nodo specifico.
Può catturare informazioni sull'errore e permettere di eseguire azioni di recupero o notifica.
Utile per diagnosticare problemi senza interrompere l'intero flusso.
I nodi Link sono utilizzati per collegare diverse parti di un flusso in Node-RED, anche se sono fisicamente distanti nell'interfaccia grafica. Questo permette di mantenere i flussi puliti e organizzati, evitando di creare collegamenti lunghi e complessi.
Possiamo usare questi nodi anche per creare delle strutture simili a "funzioni".
Il nodo Switch permette di instradare i messaggi verso diverse uscite in base a condizioni specifiche. È simile a un'istruzione if...else o switch in programmazione, ma rappresentata in modo grafico.
Consente di verificare il contenuto di una proprietà (tipicamente msg.payload).
Supporta condizioni come uguale a, maggiore di, minore di, contiene, regex, esiste/non esiste, ecc.
Può avere più uscite, ognuna associata a una condizione diversa.
Se nessuna condizione viene soddisfatta, il messaggio non passa ad alcuna uscita (a meno che non sia configurata un'opzione di default).
Il nodo Range viene utilizzato per ridimensionare (scalare) un valore numerico da un intervallo di partenza a un intervallo di destinazione. È particolarmente utile per normalizzare valori di sensori, mappare dati di ingresso su scale diverse o regolare misure per un output specifico.
Il nodo Template consente di generare contenuti dinamici utilizzando un template HTML, testo semplice o JSON. È particolarmente utile quando si vuole creare un output personalizzato, come pagine HTML, email formattate o strutture JSON complesse.
Supporta l'uso di variabili tramite sintassi Mustache ({{ }}).
Può inserire dinamicamente i valori di msg.payload o di altre proprietà di msg.
Consente di costruire intere pagine HTML o semplici blocchi di testo.
Può essere utilizzato anche per formattare dati JSON
Il nodo Delay consente di ritardare o regolare il flusso di messaggi che passano attraverso di esso. È utile per temporizzare azioni, limitare la velocità di invio dei messaggi o introdurre pause controllate nel flusso.
Il nodo Trigger consente di generare o modificare un messaggio in risposta a un evento. Può essere configurato per:
Inviare un messaggio iniziale.
Attendere un intervallo di tempo specificato.
Inviare un altro messaggio o interrompere l'invio se riceve un nuovo evento.
Il nodo Exec consente di eseguire comandi di sistema o script esterni direttamente da Node-RED. Può eseguire comandi della shell (ad esempio, comandi Linux, script batch o script Python) e restituire i risultati come messaggi nel flusso. È utile per integrare script personalizzati o comandi di sistema nel flusso di lavoro di Node-RED.
Il nodo Filter consente di filtrare i messaggi in base a una condizione specificata, permettendo di consentire solo i messaggi che soddisfano determinati criteri. Può essere configurato per selezionare o escludere i messaggi in base al valore di msg.payload o altre proprietà, come msg.topic.
Il nodo Split è utilizzato per dividere un array o una stringa in singoli elementi, creando un messaggio per ciascun elemento. È particolarmente utile quando si desidera elaborare ogni parte di un dato (come una lista di valori) separatamente nel flusso di lavoro.
Il nodo Join permette di combinare più messaggi in un singolo messaggio. È utile per aggregare dati provenienti da più flussi o per creare una struttura complessa, come un array o un oggetto, unendo i dati ricevuti in vari momenti.
Il nodo Sort viene utilizzato per ordinare i messaggi in ingresso in base a un criterio specificato, come valori numerici, alfabeto o altri attributi. È particolarmente utile quando hai bisogno di organizzare i dati in un ordine crescente o decrescente prima di ulteriori elaborazioni.
Il nodo Batch consente di raggruppare i messaggi che arrivano in un intervallo di tempo definito o quando viene raggiunto un numero specifico di messaggi. È utile per elaborare i messaggi in blocchi, ad esempio quando desideri raccogliere dati in batch per un'elaborazione successiva.
In questo esercizio realizziamo un contatore combinando vari nodi.
Nodo Read File
Legge il contenuto di un file e lo restituisce come msg.payload. Può essere configurato per leggere l'intero file come stringa, buffer o per emettere un messaggio per ogni riga. Supporta la lettura di file di testo e binari, con la possibilità di specificare l'encoding.
Nodo Write File
Scrive il contenuto di msg.payload in un file. Può aggiungere i dati alla fine del file esistente o sovrascrivere il contenuto. Supporta anche la creazione di directory se non esistono e la gestione dell'encoding. È utile per il logging, la registrazione dei dati o la generazione di report.
Nodo Watch
Monitora file o directory per rilevare modifiche. Quando un file viene creato, modificato o eliminato, emette un messaggio con dettagli come il tipo di cambiamento, il nome del file e la sua dimensione. È utile per attivare flussi in risposta a cambiamenti nei file, come l'elaborazione di nuovi dati o il backup automatico.
Il nodo CSV consente di convertire i dati tra il formato CSV (Comma-Separated Values) e oggetti JavaScript. Può funzionare in entrambe le direzioni:
Da CSV a JSON: trasforma il contenuto di un file CSV in un array di oggetti JSON.
Da JSON a CSV: trasforma un array di oggetti JSON in una stringa CSV.
Il nodo HTML consente di estrarre dati da un documento HTML utilizzando selettori CSS. Può essere utilizzato per fare il "parsing" di pagine web o per analizzare documenti HTML locali, recuperando informazioni specifiche come testi, link, immagini e altri elementi.
Il nodo JSON in Node-RED permette di convertire i dati tra il formato JSON (JavaScript Object Notation) e una stringa. Può funzionare in entrambe le direzioni:
Parse (da stringa JSON a oggetto JavaScript): trasforma una stringa JSON in un oggetto utilizzabile nei flussi di Node-RED.
Stringify (da oggetto JavaScript a stringa JSON): converte un oggetto JavaScript in una stringa JSON.
Il nodo XML permette di convertire i dati tra il formato XML e oggetti JavaScript (JSON) in Node-RED. Può funzionare in entrambe le direzioni:
Da XML a JSON: trasforma un documento XML in un oggetto JSON navigabile.
Da JSON a XML: converte un oggetto JavaScript in una struttura XML valida.
Il nodo YAML consente di convertire i dati tra il formato YAML (YAML Ain't Markup Language) e oggetti JavaScript (JSON). Può funzionare in entrambe le direzioni:
Da YAML a JSON: trasforma un documento YAML in un oggetto JSON navigabile.
Da JSON a YAML: converte un oggetto JavaScript in una struttura YAML leggibile.
I nodi HTTP In e HTTP Response sono utilizzati in Node-RED per creare endpoint HTTP, permettendo di ricevere richieste (GET, POST, PUT, DELETE) ed inviare risposte al client. Sono fondamentali per realizzare API REST, server web e servizi che rispondono a chiamate HTTP.
Nodo HTTP In
Riceve una richiesta HTTP e avvia un flusso in Node-RED. Può usare i metodi: GET, POST, PUT, DELETE e definire URL di ascolto. I parametri della query string e del corpo della richiesta sono accessibili tramite msg.req.query e msg.req.body.
Nodo HTTP Response
Invia una risposta al client che ha effettuato la richiesta HTTP.
In questa lezione vedremo come:
- ricevere e visualizzare le informazioni inviate nell'header di una richiesta HTTP
- salvare i dati ricevuti con una GET su un file locale
In questa lezione utilizzeremo un primo flusso per salvare in una variabile di flusso un'informazione che poi leggeremo e visualizzeremo con una pagina web.
Vediamo come ricevere una richiesta a cui far seguire una risposta in JSON configurando il MIME Type corretto.
Realizziamo un semplice web server che riceve una richiesta e risponde con un file HTML o con un'immagine PNG
Riceviamo dati inviati con il metodo POST. Per l'invio utilizzeremo il tool, gratuito, Postman
Qualche esperimento con i cookie: impariamo a leggerli, ripulirli e impostarli lavorando con i nodi di NodeRed
Il nodo HTTP Request permette di inviare richieste HTTP a servizi esterni o API direttamente dai flussi di Node-RED. Può essere utilizzato per recuperare dati da server remoti, inviare informazioni, interagire con servizi REST e molto altro.
Configuriamo il nodo HTTP Request così da utilizzare un URL dinamico
Configuriamo il nodo HTTP Request in modo da passare dei parametri alla richiesta
Modifichiamo i parametri dell'header della richiesta
I WebSocket sono un protocollo di comunicazione che consente una comunicazione bidirezionale, in tempo reale, tra il client (tipicamente un browser) e un server attraverso una singola connessione TCP persistente. A differenza dei tradizionali protocolli HTTP, che sono basati su richieste e risposte (cioè il client invia una richiesta e il server risponde), i WebSocket permettono di stabilire una connessione "aperta" che rimane attiva per tutta la durata della sessione, consentendo scambi di dati tra client e server senza dover riaprire una connessione ogni volta.
In questa lezione, esploreremo come utilizzare i WebSocket con Node-RED per creare applicazioni in tempo reale che possono scambiare dati in modo bidirezionale tra il client (ad esempio un browser). In particolare realizzeremo una pagina web che aprirà un web socket e invierà dati a Node Red
Utilizziamo un servizio esterno per creare un flusso completo con i WebSocket.
Il TCP è un protocollo di livello di trasporto che si occupa di gestire come i dati vengono inviati e ricevuti da un dispositivo all'altro. Il protocollo TCP è orientato alla connessione, il che significa che stabilisce una connessione tra il mittente e il destinatario prima di inviare i dati e garantisce che tutti i dati arrivino correttamente.
Il nodo TCP In di Node-RED serve per ricevere dati da una connessione TCP in ingresso. Questo nodo consente di configurare un server che ascolta su una determinata porta TCP e accetta le connessioni da altri dispositivi o applicazioni che inviano dati tramite il protocollo TCP.
Cosa può fare:
Ricevere dati da dispositivi remoti: Il nodo TCP In è utile per ricevere messaggi da altre applicazioni o dispositivi che comunicano tramite TCP, come sensori IoT, server esterni o sistemi di controllo.
Creare server TCP in Node-RED: Può essere utilizzato per configurare un server TCP che ascolta su una porta specifica. Quando i dati vengono inviati a questa porta, il nodo li riceve e li invia al flusso per ulteriori elaborazioni.
Interazione con altre applicazioni: È utile quando bisogna integrare Node-RED con altri sistemi che inviano dati via TCP, come sistemi di automazione industriale, software di monitoraggio o applicazioni di terze parti.
Il nodo TCP Out di Node-RED viene utilizzato per inviare dati a un server remoto tramite una connessione TCP. A differenza del nodo TCP In, che riceve dati, il nodo TCP Out permette a Node-RED di stabilire una connessione con un server TCP e inviare messaggi o dati a quel server.
Il nodo TCP Request di Node-RED è utilizzato per inviare una richiesta a un server tramite una connessione TCP e ricevere una risposta da quel server. Funziona in modo simile a un "client TCP", inviando un messaggio al server e attendendo una risposta.
UDP (User Datagram Protocol) è un protocollo di comunicazione di rete che fa parte della suite di protocolli TCP/IP. A differenza del TCP, che garantisce la consegna affidabile dei dati, UDP è un protocollo senza connessione, che non garantisce l'ordine o l'affidabilità dei pacchetti di dati.
UDP è utilizzato in situazioni in cui è più importante la velocità di trasmissione rispetto alla sicurezza della consegna, come nelle applicazioni di streaming video, giochi online, e comunicazioni in tempo reale, dove piccole perdite di dati sono tollerabili ma la latenza deve essere minima.
Il nodo UDP di Node-RED è utilizzato per ricevere e inviare messaggi tramite il protocollo UDP (User Datagram Protocol). Questo nodo è utile per applicazioni che richiedono comunicazioni veloci e senza connessione, come il monitoraggio in tempo reale o la comunicazione con dispositivi che utilizzano UDP.
MQTT (Message Queuing Telemetry Transport) è un protocollo di comunicazione leggero e semplice, progettato per la trasmissione di messaggi tra dispositivi, particolarmente adatto per le applicazioni IoT (Internet of Things). È un protocollo basato su pub/sub (publish/subscribe), che permette di inviare dati tra dispositivi in modo efficace e scalabile.
MQTT è utilizzato per:
Comunicazione tra dispositivi IoT: Permette di inviare e ricevere messaggi tra dispositivi, sensori, attuatori e server, in modo efficiente.
Trasmissione dati in tempo reale: È ideale per applicazioni in cui i dati devono essere trasmessi in tempo reale, come nel monitoraggio remoto di sensori.
Applicazioni a bassa larghezza di banda e alta latenza: Grazie alla sua leggerezza, MQTT è adatto per reti con limitata capacità di banda o connessioni intermittenti, come nelle reti mobili o su dispositivi con risorse limitate.
Caratteristiche principali:
Protocollo publish/subscribe:
Publish: Un dispositivo pubblica un messaggio su un topic (tema o argomento).
Subscribe: Un altro dispositivo si iscrive a quel topic per ricevere i messaggi pubblicati. Non c'è bisogno di una connessione diretta tra i dispositivi; il messaggio passa attraverso un broker.
Broker MQTT: Il cuore di MQTT è il broker, che è un server centrale che riceve e distribuisce i messaggi tra i dispositivi. I dispositivi non comunicano direttamente tra loro, ma attraverso il broker.
Leggerezza e efficienza: MQTT è progettato per essere semplice e a bassa latenza, permettendo di comunicare con un minimo overhead.
Il nodo MQTT in Node-RED è utilizzato per interagire con un broker MQTT, permettendo di inviare e ricevere messaggi in tempo reale tramite il protocollo MQTT. È uno degli strumenti principali per le applicazioni IoT in Node-RED, consentendo una comunicazione semplice e scalabile tra dispositivi o tra dispositivi e server.
Il nodo MQTT permette di:
Pubblicare messaggi su un topic MQTT: Inviare dati da Node-RED a un broker MQTT, che poi li distribuirà ai dispositivi o alle applicazioni che si sono iscritti al topic.
Iscriversi a un topic MQTT: Ricevere messaggi pubblicati su un determinato topic da un broker MQTT, permettendo a Node-RED di elaborare i dati in tempo reale.
Aggiungiamo un nodo per poter interagire con un database relazionale. Utilizzeremo Sqlite, creando una tabella e provando ad eseguire delle interrogazioni, degli inserimenti e delle modifiche tramite linguaggio SQL
Aggiungiamo una pagina web per presentare i dati salvati in una tabella di sqlite
Node Red può comunicare anche via Seriale. Installiamo il nodo Serial e proviamo a scambiare dati con Arduino.
In questo video vediamo come modificare le parti di un messaggio e le conseguenze di queste azioni. Per modificare i messaggi useremo il nodo change.
Usiamo il nodo range per ricalcolare un numero dall'intervallo 0-1023 a 0-5. Il nodo range può essere usato per calcolare delle proporzioni tra numeri.
Il nodo inject può avviare un'azione alla partenza di un flusso. In alternativa possiamo usare inject per attivare delle operazioni in un tempo definito o anche ripetutamente
Il campo topic di un messaggio può essere usato per smistarlo su più percorsi tramite un nodo switch con più uscite
Creiamo una variabile di stato per modificare il comportamento dei flussi a seconda del suo valore.
Generiamo una sequenza di messaggi a partire da una lista, elaboriamoli uno a uno e poi ricombiniamoli di nuovo usando split e join.
creiamo un meccanismo con timeout che ci avvisi se una sequenza di messaggi si interrompe
Creiamo un meccanismo che mantenga costante un flusso di messaggi anche quando questi vengono a mancare. Nel caso i messaggi non arrivino, saranno generati dei "segnaposto" con valori neutri.
Vediamo come regolare un flusso di messaggi mantenendo costante la sua velocità (messaggi al secondo)
Se il flusso di messaggi all'ingresso è troppo elevato, potrebbe essere necessario eliminare i messaggi di troppo, pur garantendo un certo "rate".
intercettiamo la modifica di un valore e lasciamo passare i messaggi in corrispondenza dei cambi. Avremo una sequenza di messaggi con i valori 0 o 1. Il meccanismo che creeremo eliminerà tutti i messaggi uguali o ripetuti.
Spesso riceviamo delle informazioni numeriche in formato testo. Usiamo due nodi Change per convertire il payload in formato numerico.
Vediamo alcune strategie per la gestione e il trattamento degli errori nei flussi
In questa lezione approfondiamo il nodo function:
messaggi nulli
generare messagggi nuovi con JS
attivare più linee di uscita
usare le variabili di contesto
funzione con stato interno
Node_Red utilizza un file di configurazione che possiamo modificare per adattare il suo funzionamento alle nostre esigenze. Vediamo un esempio pratico in cui modifichiamo il file per attivare una login.
Node Red mantiene le informazioni in memoria. Al suo spegnimento ogni dato è perso a meno di attivare lo storage permanente su file. Vediamo come fare.
In questa lezione vediamo come organizzare e ordinare meglio flussi e nodi con:
gruppi
subflow
allineamento
uso di link
Realizziamo un server REST completo che possa ricevere varie chiamate in GET, PUT e POST. Il server presenterà un elenco di prodotti (mantenuti in memoria) e potremo modificare o aggiungere elementi usando il client PostMan
Installiamo i nodi per creare una dashboard. La dashboard sarà accessibile all'indirizzo /ui e riporterà componenti grafici per controllare i dati. Utilizzeremo un Arduino per inviare dei dati "simulati" di temperatura a Node Red tramite la porta seriale.
Lezione finale
Node-RED è una piattaforma open-source sviluppata da IBM, progettata per la programmazione visuale di flussi dati, ideale per l’automazione, l’integrazione di sistemi e la realizzazione di progetti Internet of Things (IoT) e Big Data. Questo corso è pensato per chi desidera imparare a creare applicazioni intelligenti e connesse senza dover necessariamente scrivere grandi quantità di codice, grazie a un’interfaccia intuitiva basata su blocchi.
Durante il corso, partiremo dai concetti fondamentali: cos'è Node-RED, come si installa e come funziona il suo ambiente grafico. Verranno illustrati i nodi principali, come quelli per l’ingresso (input), l’elaborazione (function, switch, template) e l’uscita (debug, file, HTTP, MQTT). I partecipanti impareranno a creare flussi per leggere dati da sensori, controllare dispositivi, inviare notifiche e automatizzare azioni in base a condizioni specifiche.
Ampio spazio sarà dedicato all’integrazione con protocolli e servizi esterni come MQTT, HTTP, API REST e servizi cloud, oltre all’interfacciamento con schede come Arduino ed ESP32. Attraverso esempi pratici, svilupperemo progetti concreti che potranno evolvere in dashboard interattive o essere utilizzati per sistemi di monitoraggio remoto e automazioni domestiche o industriali.
Il corso è adatto a studenti, maker, insegnanti e professionisti del settore tecnologico. Non sono richieste competenze avanzate di programmazione: bastano conoscenze base di informatica e tanta curiosità.
Alla fine del corso, i partecipanti saranno in grado di progettare, sviluppare e distribuire soluzioni di automazione flessibili e scalabili, portando le proprie idee dall’ideazione alla realizzazione concreta.