Come creare un datalogger: DietPi, InfluxDB e Grafana.
Eccoci qua, oggi cavalco l’onda di uno dei trittici di moda al momento, e a ragion veduta. Il trittico in questione è DietPi come sistema operativo, InfluxDB come database e Grafana come visualizzatore.
Nell’articolo descriverò brevemente le soluzioni e come mai sono state scelte e poi descriverò un piccolo tutorial per arrivare ad avere un datalogger self hosted sul vostro Single Board Computer (SBC) preferito, nel mio caso una RaspberryPi.
Prima di cominciare vorrei ringraziare l’amico Marco Brianza, per gli utili tutorial sul sito ufficiale della DietPi e tutto lo staff dietro alla distribuzione DietPi per il lavoro svolto e il mantenimento della distribuzione.
I componenti
DietPi è una versione di Raspbian, la più conosciuta distribuzione Debian per RaspberryPi.
I punti di forza di DietPi, sono:
- la leggerezza della distribuzione, solo 400MB. Ci accorgiamo della leggerezza già copiando l’immagine sull'SD, l’operazione dura qualche secondo;
- l'ottimizzazione del sistema operativo;
- un facile menù di configurazione e di installazione del software. Tramite l’uso del classico menù Whiptail Debian, possiamo andare a configurare la nostra SBC, in modo semplice e chiaro scendendo ad un buon livello di configurazione;
- anche l’installazione del software segue lo stesso processo, c’è un menù con moltissimi software pronti per l’installazione;
L'uso di questo menù non esclude i soliti comandi UNIX o Raspbian per la configurazione, è solo un modo un po’ più comodo per configurare la nostra scheda; - la distribuzione permette anche di automatizzare questo processo;
- in più è stato ottimizzato per molte schede di diverse case produttrici.
InfluxDB è un sistema gestore di base dati creato appositamente per la registrazione di serie storiche. Come si evince dalla descrizione, è un DB in grado di gestire un gran carico di scritture e richieste in termini di frequenza di accesso al DB.
InfluxDB inoltre permette di utlizzare dei metodi di scrittura e lettura tramite API in HTTP, esponendo un semplice server.
Ha una sintassi similare all’SQL ed è open source.
Grafana è un software per la visualizzazione di dati. Il progetto ha una versione open source facilmente installabile su una RaspberryPi, così come su di un server. In più si integra in modo molto snello con molti database, ospitati anche su macchine diverse da quella che ospita Grafana.
Grafana è famoso anche per rendere possibile una visualizzazione dei dati efficace e bella esteticamente (non è un punto che sottovaluterei, soprattutto quando si parla di dataviz) in un modo semplice.
I numeri in gioco al momento sono 44 tipi di database, 36 tipi di visualizzazioni e pannelli, integrazione con 16 app e più di 1500 tipologie di dashboard già sviluppate.
Il sistema che vado a descrivere quindi è composto da una RaspberryPi che esegue il sistema operativo DietPi, in cui sono stati installati e configurati InfluxDB e Grafana.
In più ho aggiunto un piccolissimo script Python 3 per creare dei dati e popolare il DB, in modo da controllare che la visualizzazione dei dati sia corretta e creare un piccolo progetto completo, dalla generazione di dati alla loro visualizzazione.
Il sistema
Per effettuare l’installazione di DietPi, possiamo riferirci alla guida ufficiale.
L’installazione è quella tipica di una Raspbian ma con qualche particolare in più. La prima installazione può sembrare più lunga della normale installazione di una Raspbian, ma offre una vasta possibilità di configurazione e scelta con un menù testuale.
Per copiare il sistema operativo sulla SD, utilizziamo lo strumento con cui siamo più a nostro agio, tipo: Etcher o dd.
Una volta copiato il sistema operativo, possiamo andare a configurare alcune impostazioni iniziali (tipo connettersi alla rete Wi-Fi) andando a modificare il file dietpi.txt
.
Poi si inserisce l’SD nella RaspberryPi, alimentiamo e parte il boot.
Scegliamo tutte le configurazioni che preferiamo.
Il sistema potrebbe riavviarsi qualche volta.
Trick: io consiglio di installare OpenSSH
come server SSH se volete utilizzare tool come scp
o shhfs
, in quando il DropBear
installato non li supporta.
Una volta configurata la nostra SBC, possiamo passare all’installazione di InfluxDB e Grafana.
Io ho utilizzato lo strumento per l’installazione di programmi di DietPi, tramite il comando sudo ditepi-software
.
Con la barra spaziatrice, selezioniamo InfluxDB e Grafana che si trovano nella sezione Hardware Projects.
Uscendo dal menù, dobbiamo confermare che vogliamo proseguire con l’installazione.
Due buoni punti di partenza per l’installazione e la configurazione dei sistemi sono le pagine ufficiali della distribuzione DietPi: InfluxDB e Grafana.
Adesso che InfluxDB è installato possiamo utilizzare gli esempi proposti da Marco Brianza nelle pagine ufficiali di DietPi.
Creiamo la base dati chiamando la mydb:
influx -execute 'create database mydb'
Per scrivere i dati utilizziamo le API HTTP esposte dal DB:
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'temperature value=20.12'
Per controllare che la scrittura dei dati sia andata a buon fine:
influx -database mydb -execute 'SELECT * FROM temperature'
.
Adesso passiamo alla configurazione di Grafana, che avviene dall’interfaccia web esposta.
Di default Grafana è un servizio che dopo l'installazione parte allo startup, espone un server con una pagina web, quindi per raggiungerla dobbiamo, da un computer connesso alla stessa rete della RaspberryPi, andare sull’indirizzo IP della RaspberryPi alla porta 3000 con un normale browser, per esempio 192.168.0.10:3000
.
Le credenziali di accesso a Grafana sono:
utente: root
password: dietpi
La prima cosa da fare è configurare il DB o Data Sources:
- Diamo un nome al data source;
- nel campo Name;
- selezionamo InfluxDB nel campo Type;
- L’url da chiamare sarà http://localhost:8086, se il DB è ospitato sulla stessa macchina che espone Grafana (altrimenti dobbiamo utilizzare l'indirizzo IP della macchina che ospita il DB). 8086 è la porta aperta dal database InfluxDB di default;
- I dati di configurazione di InfluxDB e Grafana posso essere trovati qui
/etc/influxdb/influxdb.conf
e/etc/grafana/grafana.ini
.
Nella sezione InfluxDB Details, selezioniamo il nome del DB, nel nostro caso mydb
.
Possiamo salvare e un pop-up ci confermerà della configurazione dei dati.
Adesso, salvata la base dati da utilizzare, passiamo a selezionare il tipo di grafico.
Selezioniamo New Graph poi con “e” editiamo il grafico e dobbiamo modificare le query per mostrare i dati come vogliamo.
Nel mio caso ho selezionato il campo temperature
indicando la modalità distinct
,così da poter vedere i punti generati con il cURL
precedente.
La query può essere composta a piacere: ci sono molte funzioni disponibili per elaborazioni statistiche.
Allego uno script in Python 3: la parte di generazione dati è casuale ma può essere utilizzata come base di partenza per completare il nostro data logger.
Eccoci qua: con dei semplici passi siamo riusciti nel nostro scopo... avete suggerimenti o migliorie da consigliare?