Domotica – Primi passi con Node RED – Guida in italiano all’installazione

V=IxR .it - L'HUB Italiano dove imparare a costruire l'elettronica e a programmare l'hardware

Domotica – Primi passi con Node RED – Guida in italiano all’installazione

Un impianto di domotica deve avere una unità centrale capace di far colloquiare i vari dispositivi hardware IOT, i vari software locali e le API dei servizi online più diffusi. Questa unità è un PLC “esteso”. Una delle piattaforme più interessanti e flessibili che abbia conosciuto è Node RED (link al sito ufficiale Node RED). Abbiamo scritto per voi un semplice tutorial in Italiano su come installare ed usare Node-RED.

Node RED, dove e come installarlo ?

Un possibile scenario reale potrebbe essere dotare il nostro impianto domotico di un Raspberry (io l’ho comprato su amazon )  che faccia da gateway per tutti gli altri dispositivi IOT. Installare Node RED su questo dispositivo, quindi, è una soluzione ideale.

Tuttavia, se siete curiosi di provare Node RED, oppure volete crearvi un ambiente di sviluppo, possiamo installarlo su Sito web di Docker.



Installiamo Node RED su Docker

Far “girare” Node RED su Docker è abbastanza semplice, anche se è necessario fare chiarezza sulle immagini disponibili:

  • latest – basata sulla immagine Node.JS v4
  • slim – basata su Alpine linux
  • rpi – basata su una immagine compatibile con Raspberry PI

Se state pensando di provare senza troppe pretese Node RED, potete provare con la slim, tuttavia essendo una versione “castrata”, vengono a meno tuttele dipendenze per compilare moduli aggiuntivi. Consiglio, se siete interessati a portare il software in futuro su Raspberry, la latest con salvataggio dei dati su host locale.

Avviamo il comando run per permettere a Docker di scaricare l’immagine e avviare il container mappando la porta locale 1880 con quella interna al container 1880, permettendo al container di accedere alla directory locale  nodered-data in cui saranno salvati i dati. Il container si chiamerá noderedvixrit.

docker run -it -p 1880:1880 -v ~/nodered-data:/data --name noderedvixrit nodered/node-red-docker

Sul terminale vedremo:

Comando docker run nodered

Accediamo all’interfaccia web di programmazione di node RED

A questo punto siamo pronti per usare node RED sulla porta 1880. Apriamo il browser e digitiamo l’indirizzo:

http://127.0.0.1:1880/

node red su docker, come appare l'interfaccia su http://127.0.0.1:1880

Per fermare il container o farlo ripartire, potete usare i comandi:

docker stop noderedvixrit
docker start noderedvixrit

Per verificare invece se il container é correttamente avviato:

docker ps

Se il container é avviato, dovrebbe comparire nella lista:

invio comando docker ps

Iniziamo a programmare il nostro flow in node RED

Node RED si programma concatenando degli oggetti, chiamati Node, ognuno dei quali ha un compito differente. I nodi, per poter colloquiare tra loro, utilizzano un datagram, un pacchetto dati prestabilito, chiamato message,  il cui contenuto puó variare a seconda delle esigenze (stringhe, numeri, booleani e via discorrendo).

Praticamente i nodi si scambiano messaggi, ognuno di loro applica un logica stabilita al messaggio dando vita in output ad un nuovo messaggio, rielaborato.

I messaggi hanno queste caratteristiche:

  • Topic
  • Payload

Il Topic identifica l’ambito, possiamo impostarlo usando una stringa e possiamo dargli qualsiasi valore noi vogliamo. Il Payload é il valore dell’informazione che noi vogliamo trasmettere.

Potete iniziare con un semplicissimo esempio: concatenate due nodi nodo di tipo “inject” ad altri due nodi, uno di tipo “function” e a catena uno di tipo “debug”. Lo schema é il seguente:

Flow di esempio, per iniziare con NodeRed

Flow di esempio, per iniziare con NodeRed

I due nodi inject servono a iniettare un messaggio nel momento in cui si preme il pulsante alla sinistra del nodo. Configuriamo, per capire il concetto di topic, i due nodi in modo che inviino informazioni di topics differenti, quindi:

  • inject 1: topic altroTopic
  • inject 2: topic testTopic

Per entrambe lasciamo il payload impostato su timestamp, praticamente facciamo generare un messaggio la cui informazione é il timestamp di quando viene generato.

Passiamo a myFunction: impostiamo all’interno del codice della funzione questo script:

if( msg.topic == 'testTopic'){
msg.payload = 'VIXR.IT-'+msg.payload;
}

return msg;

Come é facile intuire, la funzione aggiunge la stringa VIXR.IT-al timestamp se il topic di provenienza é testTopic.

Concludiamo aggiungendo il nodo debug e premiamo il tasto “Deploy” posizionato in alto a destra. Il comando deploy invia a regime il flow, dopo averne analizzato la sintassi. Se tutto é andato liscio, nella finestra di debug saranno riportate le informazioni elaborate dal nodo function ad ogni interazione con i nodi di inject:

finstra di debug di node red



Come utilizzo Node RED per la domotica ?

I metodi per fare domotica con node red sono pressoché infiniti, prima di farvi un esempio pratico, mi é necessario farvi una panoramica su MQTT e sul firmware per i dispositivi Wemos (leggi articolo dedicato) altrimenti richierei solo di creare confusione. Fatevi le ossa su Node RED e continuate a seguirmi, svilupperemo insieme un progetto di domotica basato su ESP8266, MQTT e NodeRED