Questo articolo fa parte del progetto La Domotica fai-da-me ed è il naturale proseguimento dell’articolo sul server/broker MQTT.
Una volta realizzato il server è necessario intercettare i dati inviati dai sensori per memorizzarli nel DB.
Esatto, il DB. per poter lavorare con il database è necessario crearne uno. Io uso SQLite perché è facile, leggero e nativamente integrato in Python. Per installarlo basta usare il solito comando su Ubuntu
sudo apt-get install sqlite3
Per creare il DB è sufficiente accedere a sqlite indicando il nome del DB da creare
sqlite3 /percorso/domotica.db
Una volta dentro si devono creare le tabelle necessarie per memorizzare i dati, la struttura che ho pensato io è basata su tre tabelle:
- I luoghi dei quali mi servono i dati
- Le temperature
- I consumi di corrente (questa tabella è usata dal progetto del misuratore di corrente)
Queste sono le tabelle da creare
CREATE TABLE Luoghi
(
ID INTEGER PRIMARY KEY ASC,
Descrizione TEXT NOT NULL
);
CREATE TABLE Temperature
(
ID INTEGER PRIMARY KEY ASC,
Timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
Luogo INTEGER,
Temp REAL,
Umid REAL,
Vbatt REAL
);
Una volta create le due tabelle è necessario inserire i vari luoghi che si vogliono monitorare con delle semplici INSERT
INSERT INTO Luoghi (Descrizione) VALUES ('[nome ambiente');
L’identificativo del campo “ID” viene messo automaticamente, per vederlo basta fare una SELECT sulla tabella
SELECT * FROM Luoghi;
Il risultato dovrebbe essere una cosa tipo questa
sqlite> select * from luoghi;
1|Camera
2|Balcone Strada
3|Cucina
4|Sala
Per comodità è bene prendere nota di questi valori, perché ci serviranno per programmare i sensori e fare le varie query.
Il programma è scritto ovviamente in Python e può essere trovato nella pagina GitHub del progetto. Per poter funzionare sono necessarie alcune librerie, una di queste, che sicuramente manca nel server è la libreria PAHO-MQTT, che permette di gestire MQTT con Python. Si installa con il comando:
pip install paho-mqtt
Il programma va eseguito all’avvio del sistema, se no i sensori troveranno il server, manderanno i loro dati, ma questi non saranno salvati da nessuna parte. Per fare questo è necessario modificare il crontab con il comando
crontab -e
A questo punto si deve inserire la riga
# avvio del sistema che salva i dati vai MQTT al boot
@reboot python /percorso/mqtt_to_db.py >/percorso/mqtt_to_db_std.log 2>&1
per salvare il crontab basta fare Ctrl+X, S (o Y a seconda della lingua del sistema) e poi INVIO
Giusto per capire cosa abbiamo appena scritto:
- le righe che iniziano con il cancelletto # sono commenti (usare bene i commenti è obbligatorio, sempre!)
- @reboot: questa cosa va eseguita all’avvio del sistema
- python /percorso/programma.py: esecuzione del programma
- >/percorso/log: redirige lo standard output su un file di log invece che a video
- 2>&1: redirige sullo stesso file di log anche l’output degli errori
Adesso mancano solo più i sensori!
Il progetto è rilasciato con licenza GPL V.3 (Open Source), quindi puoi prenderlo, fartelo a casa, modificarlo e pubblicarlo a nome tuo. Se lo condividi modificato devi citare questo sito (www.iltucci.com) come fonte principale.
Buonasera
sto facendo delle prove con un esp32 e MQTT, adesso ho l’esigenza di memorizzare i dati ricevuti
in un db. Ho visto il tuo programma in python e sqllite. Ti chiedo gentilmente se è ancora valido oppure hai sviluppato una nuova versione. nel mio caso forse utilizzerò come db MYsql. Ti ringrazio in anticipo se mi dai un piccolo aiuto.
Ciao, è un codice di più di 5 anni fa, su cui non metto mano da quando l’ho scritto, si SQlite dovrebbe andare, Per MySQL dovrai fare le modifiche sulla connessione al DB, ovviamente