Jump to content
IGNORED

[ATS] Installazione e configurazione di ATS (Sezione 2)


Recommended Posts

In questo topic analizzeremo come  installare 3 configurare i 3 software FONDAMENTALI per l'architettura di ATS.

Nello specifico, vedremo come installare i seguenti applicativi:
- Mosquitto broker: è il software che farà da centro di smistamento dei messaggi MQTT. Benché non vi servirà conoscere nel dettaglio cos'è un broker MQTT penso vi possa comunque far comodo conoscerne i principi base di funzionamento, soprattutto se vorrete espandere ATS in futuro.
Per tale motivo, prima di illustrare i passaggi per l'installazione vera e propria, vi suggerisco di leggere l'articolo MQTT, il protocollo dell’IoT e guardare la parte introduttiva del video Come e per cosa utilizzare MQTT via Mosquitto e Paho su Raspberry Pi per comprendere qual'è il compito di Mosquitto.
Sappiate, giusto per cultura personale, che il protocollo MQTT è largamente utilizzato nella domotica e che anche Facebook Messenger si basa su questo protocollo (giusto per citare una App tra le più note);
(Nota: Mosquitto si può installare anche su Windows)

- Node.js: è il runtime JavaScript sul quale si baseranno molte delle librerie/applicative che useremo per ATS. E' diventato uno dei framework di sviluppo più noti in ambiente web (ma non solo). Per utilizzarlo in ATS non vi servirà conoscere nulla di più se non come installarlo su Raspbian... ma se volete approfondire, anche solo superficialmente, leggete la descrizione di Node.js su Wikipedia;
(Nota: Node.js si può installare anche su Windows)

- Node Red: è il "pannello di controllo" di ATS, ovvero lo strumento che utilizzeremo per creare le automazioni o, nei casi più semplici, per pilotare i nostri treni dallo smartphone. Dal nome si evince che è fortemente legato a Node.js e, in effetti, si può definire come un ambiente di sviluppo grafico per Node.js, senza la necessità di conoscere i dettagli della programmazione JavaScript (benché, nei workflow più avanzati per controllare i nostri treni, useremo anche piccole porzioni di codice che vi spiegherò nei minimi dettagli al momento opportuno).
Node Red è uno strumento molto potente, facile da utilizzare e che può essere impiegato a 360° per realizzare un po' di tutto... vedrete che, una volta compreso il funzionamento, vi verrà naturale adattarlo anche ad esigenze ben diverse da quelle per le quali lo utilizzeremo in ATS.
Vi invito a leggere l'articolo Scopriamo insieme Node-RED. Grandi progetti IOT in pochi minuti! per capire meglio come funziona Node Red.
(Nota: Node Red si può installare anche su Windows)

ATTENZIONE: non lascetevi spaventare da sigle, acronimi, protocolli, e bla-bla-bla... vedrete che implementare ATS sarà molto più semplice di quanto possiate credere e, una volta messo in piedi il sistema, vi potrete divertire ad automatizzare i vostri diorami con pochi e semplici passaggi.

Link to comment
Share on other sites

Step 1: installazione Mosquitto Broker
Lanciate il terminale (LXTerminal) e digitate il seguente comando e seguire le istruzioni a video:

sudo apt-get install mosquitto

Al termine dell'istallazione del broker, installiamo anche il client a riga di comando (potrà essere utile, in futuro)

sudo apt-get install mosquitto-clients

Completata l'installazione, procediamo a configurare Mosquitto lanciando l'editor di testo (sempre da LXTerminal) con questi parametri:

sudo geany /etc/mosquitto/mosquitto.conf

Nell'editor di testo, che già presenterà una configurazione 'standard', sostituiamo il contenuto del file mosquitto.conf con questi parametri:

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

pid_file /var/run/mosquitto.pid

allow_anonymous false
password_file /etc/mosquitto/pwfile

persistence true
persistence_location /var/lib/mosquitto/

log_dest topic
log_type error
log_type warning
log_type notice
log_type information

connection_messages true
log_timestamp true

include_dir /etc/mosquitto/conf.d

Chiudiamo il file e generiamo ora l'utente e la password per connettersi al broker MQTT.
Sempre da LXTerminal, digitiamo:

sudo mosquitto_passwd -c /etc/mosquitto/pwfile MQTT-User

Vi verrà chiesto di specificare due volte la password per l'utente MQTT-User: inserite MQTT-Password (attenzione: quando digiterete la password non la vedrete a video).

A questo punto riavviate il Raspy con il comando:

sudo reboot

Una volta che il sistema è ripartito, possiamo fare un veloce test di funzionamento del broker MQTT.
Aprite due finestre separate di LXTerminal e mettetele affiancate tra loro.
Nella prima finestra digitate questo comando e premete invio:

mosquitto_sub -d -t itlug/ats/test -u MQTT-User -P MQTT-Password 

Passate alla seconda finestra e digitate questo comando, premendo nuovamente invio:

mosquitto_pub -d -t itlug/ats/test -m "Benvenuto in ATS" -u MQTT-User -P MQTT-Password 

Se tutto funziona come dovrebbe, nella prima schermata dovrebbe apparire la frase 'Benvenuto in ATS'.
Il test si basa banalmente su due client MQTT a riga di comando (mosquitto_sub, il subscriber e mosquitto_pub, il publisher).
Il primo, con funzoni di 'subscriber', si registra/sottoscrive per ricevere i messaggi (chiamati anche 'payload') che verranno inviati al topic itlug/ats/test.
Il secondo, con funzioni di 'publisher' invia/pubblica il messaggio Benvenuto in ATS nel topic itlug/ats/test
Mosquitto farà da intermediario e passerà il payload (ovvero, il testo del messaggio) al subscriber di quello specifico topic che, a sua volta, lo visualizzerà a video.

Dato che abbiamo configurato Mosquitto per non accettare connessione anonime (vedi parametro 'allow_anonymous false' nel file di configurazione) i client devono autenticarsi fornendo nome utente e password (opzioni -u MQTT-User -P MQTT-Password sulla riga di comando).

A questo punto Mosquitto è installato, configurato e pronto a partire automaticamente ad ogni riavvio del sistema.

Link to comment
Share on other sites

Step 2: Installazione Node.js (e npm Node Package Manager)

L'installazione di Node.js è molto semplice.
Aprite la solita finestra di LXTerminal e digitate:

sudo apt-get install -y nodejs npm

Al temine dell'installazione, l'ultima versione di Node.js (la 10.15.1 al momento in cui scrivo questa guida) sarà presente sul nostro sistema e, parallelamente, sarà installato anche npm, il gestore di pacchetti Node.js che useremo successivamente per installare le varie librerie di supporto.

Link to comment
Share on other sites

Step 3: Installazione Node Red e configurazione per l'autostart al boot del Raspberry

Per installare Node Red, digitiamo questo comando nella solita finestra del terminale:

bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)

Terminata l'installazione, facciamo in modo che Node Red parta automaticamente al boot del sistema digitando questo comando:

sudo systemctl enable nodered.service

Al termine riavviamo il tutto con il solito sudo reboot e testiamo il funzionamento di Node Red aprendo il browser e digitando il seguente url nella barra degli indirizzi:
http://192.168.1.200:1880

Se tutto è andato per il verso giusto, vedrete l'interfaccia di Node Red 😉

A questo punto non ci resta che 'testare' il tutto, creando un semplicissimo workflow, usando come client in vostro smartphone...
Vedremo come fare nel prossimo post!

Link to comment
Share on other sites

Step 4: Test dei componenti di base

Per testare il funzionamento di Mosquitto+Node Red realizzeremo un piccolo workflow per inviare e ricevere messaggi MQTT sul nostro smartphone, connesso via WiFi alla rete del Raspberry.

Partiamo dal creare il nostro primo Workflow in Node Red, e poi vedremo come configurare lo smartphone.

(Nota: i numeri in rosso li ho aggiunti io per far meglio identificare i componenti/menù descritti nel testo)
blob.png

Il workflow denominato 'Flow 1' è composto da due distinti 'processi', ognuno dei quali utilizza due "nodi".
Il primo usa un nodo inject (1), seguito da un nodo mqtt-sender (2) per trasmettere un messaggio MQTT nel topic ats/test-out.
Il secondo usa un nodo mqtt-receiver (3), seguito da un nodo debug (4).

Non entrerò nel dettaglio di come questi nodi sono configurati, dato che più avanti vi copierò il codice completo del workflow e potrete vederli direttamente nel vostro Node Red in tutti i loro dettagli: una delle cose interessati di Node Red è la possibilità di importare/esportare i workflow in formato testo puro.

Come funziona questo Workflow?

Il primo processo invia un messaggio MQTT:
Cliccando sul quadratino colore sand blue (quello a sx) del node inject (1), verrà generato un messaggio il cui contenuto (payload) è un valore di tipo timestamp (il numero di millisecondi da quando è stato acceso il Raspberry) che viene passato al nodo mqtt-sender che, a sua volta, si occuperà di pubblicarlo nel broker MQTT ovvero il nostro Mosquitto: sarà poi lui a distribuirlo ai vari 'subscriber' in ascolto (il nostro smartphone, in questo esempio che stiamo realizzando).

Il secondo processo è in attesa di un messaggio MQTT:
Il nodo mqtt-receiver (3) è connesso al broker MQTT ed ha sottoscritto il topic ats/test-in. Appena riceverà dal broker un messaggio in quello specifico topic, passerà il messaggio al successivo nodo debug (4) che ne visualizzerà il contenuto nella finestra di debug (7) attivabile cliccando sull'icona dell'insetto (5).

Ricordate: ogni volta che creiamo o modifichiamo un workflow è necessario metterlo in 'esecuzione' cliccando sul pulsante 'Deploy' per essere sicuri che venga 'eseguito'. Una volta che il workflow è messo in deploy esso girerà in backgroud finché non saremo noi a decidere il contrario. Anche riavviando il raspberry, il worlflow riprenderà funzionare in background.

Per importare questo workflow nel vostro Node Red copiate il testo dello script che troverete più avanti usando il menù Import > Clipboard (il menù compare cliccando sulle 3 linee in alto a dx):
blob.png

In testo andrà copiato dentro questa finestra:

blob.png

Codice del Workflow (l'ho copiato su pastebin, per comodità)
https://pastebin.com/LL7FmKJu

ATTENZIONE: La funzionalità di importazione/esportazione non importa/esporta le credenziali di accesso al broker MQTT.
Bisognerà quindi specificarle manualmente nel vostro workflow appena creato, seguendo questi passaggi:
1) doppio click su uno dei due nodi mqtt presenti nel workflow
2) click sull'icona 'matita' accanto al testo localhost:1883
3) click sul tab 'security', e poi specificare username e password negli appositi campi (MQTT-User / MQTT-Passord)
4) click su 'update'
5) click su 'done'
(è sufficiente effettuare questa operazione solo per un nodo mqtt)

Eseguiti questi passaggi, potete cliccare su 'Deploy' (6) e il vostro workflow è ora pronto per funzionare.

Passiamo ora alla configurazione dello smartphone.
Installate, per prima cosa, l'App IoT MQTT Panel (Google Play)

Dopo averla installata attivate la connessione WiFi del vostro smartphone e cercate la rete 'AFOL-Train-System' alla quale vi collegherete usando la password ATS-WiFi-pwd.
(ricordatevi che quando sarete connessi a questa rete, il vostro smatphone non avrà più connettività con la rete Internet e quindi non potrete ricevere messaggi whatsapp/email/notifiche di ogni genere).

Lanciate l'App IoT e create una nuova connessione con questi parametri:

Connection name: AFOL Train System (WiFi)
Client id: (lasciare vuoto)
Broker Web/IP Address: 192.168.100.1
Port Number: 1883
Network protocol: TCP

Fate poi un tap sull'icona '+' accanto alla voce 'Device list' e scrivete ATS MQTT Test nel campo Device Name e, successivamente, tap su Add.

Espandete la sezione Advanced options e specificate questi parametri:

Connection timeout: 30
Keep alive: 60
Username: MQTT-User
Password: MQTT-Password

Salvate il tutto con un tap su Create.

Fate tap sulla connessione appena create e poi su 'Add Panel'.
Selezionate 'Button' e configuratelo con questi parametri:
Panel name: Invia messaggio
Topic: ats/test-in
Payload: Saluti da ATS
(il resto lasciatelo vuoto)

Salvate il tutto con un tap su Create

Aggiungete un ulteriore panel cliccando sull'icona + in basso a destra.
Scegliete il componente 'Text log' e configuriatelo con questi parametri:
Panel name: Messaggi da Node Red
Topic: ats/test-out
(in resto lasciate tutto vuoto)

Salvate il tutto con un tap su Create

Bene... provate dallo smartphone a tappare sul pulsante 'Invia messaggio' e, dal browser del vostro PC, a cliccare sul riguadro sand blue del nodo 'Inject'... 

Semplice vero? 😉

Link to comment
Share on other sites

Ho già un RaspberryPi con Mosquitto, Node.js e Node-Red in funzione in casa, anche se per altri scopi (domotica).

Per sicurezza mi sono riletto tutti i passaggi, controllando di avere tutto aggiornato. Confermo che funziona tutto perfettamente.

@GianCann a me il messaggio è arrivato leggermente diverso! 

image.png

Link to comment
Share on other sites

Ciao @GianCann!

Anch'io ho un Raspberry Pi con alcuni software già installati, ma non avevo mai usato né Mosquitto né Node-RED, che non conoscevo.

Per installare Mosquitto ho dovuto preliminarmente aggiornare la lista dei pacchetti.

sudo apt-get update

Per Node-RED l'installazione non è stata così lineare, perché forse a causa di pasticci effettuati in passato per installare NodeJS mi sono ritrovato con node che mi restituiva il seguente errore, che causava il fallimento dell'installazione di Node-RED:

error while loading shared libraries: libhttp_parser.so.2.8: cannot open shared object file: No such file or directory

Ho capito che il problema era che l'eseguibile /usr/sbin/node era una vecchia versione di node, che non veniva sostituita pur reinstallando il pacchetto nodejs. Ho risolto cancellando il file e sostituendolo con un link a /usr/bin/node. Riporto i passaggi nel caso qualcuno avesse lo stesso problema:

sudo rm /usr/sbin/node
sudo ln /usr/bin/node /usr/sbin/node

Una volta effettuata questa correzione, ho potuto installare Node-RED e da lì tutto il resto è andato liscio.

L'installazione di Node-RED mi ha richiesto se volevo configurare dei Pi-specific nodes. Ho lasciato la scelta di default (no), ho fatto male?

Per il resto al momento non ho seguito alla lettera tutta la tua guida, in particolare non ho ancora configurato il Raspi come access point, perché per altre cose che ci sto facendo mi serve collegato alla wi-fi domestica. Ma a meno di non utilizzare un access point esterno quando si è alle esposizioni, non mi viene in mente un'alternativa. Eventualmente potrei fare uno script per fare lo switch da una configurazione all'altra.

Edited by LegoAmaryl
tag
Link to comment
Share on other sites

Innanzitutto, grazie per aver speso del tempo per seguire la procedura, @LegoAmaryl😉

1 ora fa, LegoAmaryl ha scritto:

Anch'io ho un Raspberry Pi con alcuni software già installati, ma non avevo mai usato né Mosquitto né Node-RED, che non conoscevo.

Ritengo che ti risulteranno utili anche in altri ambiti...

Ovviamente, come hai potuto riscontrare, la guida si basa su un ambiente "pulito" e alcuni passaggi, au un sistema già usato per altri scopi, può comportate qualche problema (come accade spesso su qualsiasi sistema) dovuto a versioni di librerie/software differenti. La documentazione del tuo problema potrà essere utile in futuro.

1 ora fa, LegoAmaryl ha scritto:

L'installazione di Node-RED mi ha richiesto se volevo configurare dei Pi-specific nodes. Ho lasciato la scelta di default (no), ho fatto male?

Diciamo che, allo stato attuale, è ininfluente in quanto ATS, al momento, non farà uso di componenti specifici drl Raspy (tipo l'uso delle GPIO). Quei nodi possono comunque essere aggiunti successivamente dall'interfaccia di Node-Red, come altru che vi suggerirò di aggiungere quandi spiegherò come realizzare dei Worlflow più utili al nostro scopo.

 

1 ora fa, LegoAmaryl ha scritto:

Per il resto al momento non ho seguito alla lettera tutta la tua guida, in particolare non ho ancora configurato il Raspi come access point, perché per altre cose che ci sto facendo mi serve collegato alla wi-fi domestica. Ma a meno di non utilizzare un access point esterno quando si è alle esposizioni, non mi viene in mente un'alternativa. Eventualmente potrei fare uno script per fare lo switch da una configurazione all'altra.

L'alternativa, per non usare il Raspy come AP è appunto quella di avere un Access Point separato. Ce ne sono anche 'economici' (intorno ai 20 euro).

In realtà, il Raspy può essere configurato per agire contemporaneamente sia come client di una rete WiFi esistente, sia come Access Point:

RASPBERRY PI 3 - WIFI STATION+AP

Se ti andasse di sperimentare questo sistema, potrebbe essere utile anche ad altri. Altrimenti, quando avrai preparato il tuo script per switchare da una configurazione all'altra, ti invito a condividerlo qui su forum.

Grazie 😉

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...