Registrare i dati dei sensori in giro per casa

closeQuesto articolo è stato pubblicato 2 anni 7 mesi 19 giorni giorni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi.

Sempre parlando del mio progetto di domotica fai da me, vi presento oggi le poche righe di codice necessarie per memorizzare i dati dei sensori che spargerò per casa (per la gioia di mia quasi moglie!).

L’obiettivo è rendere disponibile un server web che memorizzi i dati passati con una GET http, così da scrivere il codice dello sketch del sensore per registrare il dato in questo modo:

http://[ip_server]:[porta]/?variabile1=valore1&variabile2=valore2

Questo tipo di chiamate si possono generare molto facilmente con Arduino (a patto che abbia una connessione di rete) o con ESP8266.

Oltre al server che recepisce i dati, serve anche un posto dove memorizzarli, per questo ho installato SQLite sul mio Raspberry, un motore di DB leggero, veloce e semplice da usare con Python.

Installare SQLite

Nulla di più banale sul Raspberry:

sudo apt-get install sqlite3

Poi spostatevi nella vostra cartella di lavoro e create il vostro DB:

sqlite3 nomedb.db

Fatto. Troppo facile? Adesso si possono creare le tabelle, per il momento io ne ho create quattro:

  • Luoghi (le varie stanze di casa)
  • Corrente (lo storico degli assorbimenti di corrente)
  • Temperature (lo storico di temperature e umidità)
  • Allarmi (gestione degli allarmi) Questa per adesso non la uso.

Trovate il codice SQL per la creazione delle tabelle sulla mia pagina di Github, come sempre

Fare il backup di SQLite

Mai sviluppare o archiviare dati senza avere pronto un sistema di backup! Ricordate che il Raspberry usa le memorie SD, non il massimo in fatto di sicurezza dei dati. Il backup di un DB SQLite si fa con un semplice comando, magari da pianificare giornalmente nel crontab e spostare poi su un altro dispositivo (via ftp, dropbox, google Drive, …). Il comando è molto semplice:

echo '.dump' | sqlite3 /[percorso]/[del]/[db]/[nome].db > exportdb

nel file exportdb avrete lo script in SQL per la creazione del DB e il popolamento dello stesso.

Il server web

Per realizzare il piccolo server web ho usato la libreria Python web.py che tra tutte le librerie Python per il web mi pareva quella con il gradino di apprendimento più semplice. Si instala e si inizia a programmare, in 120 righe di codice (e commenti) il server è pronto, trovate il codice, indovinate, sulla mia pagina di Github.

Il server web deve essere avviato al boot del sistema, sempre nel crontab, e come argomento dovete indicare la porta, io ho usato la 8000.

# avvio il server web all'avvio del sistema
@reboot python /[cartella]/[server]/[web]/[web_appplicazione].py [porta] >>/[cartella]/[log]/[server]/[web]/[nome_file_log].log 2>&1

Da questo momento il server resta in attesa sulla porta indicata e a seconda delle chiamate GET che riceverà memorizzerà i dati. Il suo log verrà scritto nel file scelto, giusto per vedere se le cose vanno bene o meno. Per leggere in tempo reale il contento del log, che viene popolato ad ogni chiamata che riceve, usare il comando tail in una nuova shell del vostro server:

tail -f /[percorso]/[nome_file_log]

Per il codice che ho scritto la chiamata deve essere in questi due formati, la prima per temperatura e umidità e la seconda per il consumo di corrente

http://[ip_server]:[porta]/?tab=temp&a=[ambiente]&t=[temperatura]&h=[umidità]

http://[ip_server]:[porta]/?tab=corr&a=[ambiente]&w=[potenza in Watt]

Arrivate le chiamate http, queste saranno registrate nelle tabelle relative in modo che poi i valori possano essere elaborati. Qui un rapido esempio per esportare i dati del consumo di corrente in un CSV per poi elaborarlo con un foglio di calcolo.

  1. aprire l’interfaccia di sqlite con sqlite3 [nomedb].db
  2. dare i comandi, esattamente in questo ordine
    1. .mode csv
    2. .output [file_di_output].csv
    3. select strftime(‘%d/%m %H:%M’, Timestamp, ‘localtime’), Consumo from Corrente;
    4. .output stdout
  3. Copiare il file creato in CSV sul proprio PC e importarlo in un foglio di calcolo
  4. Buon divertimento

Se volete pianificare invece lo script di export basta scrivere questa unica riga di comando:

qlite3 -header -csv [nomedb].db "select strftime('%d/%m %H:%M', Timestamp, 'localtime'), Consumo from Corrente" > [file_di_output].csv

Il bot di Telegram fa la stessa cosa e mi risponde via messaggio con un’elaborazione minima dei dati, anche qui trovate il codice al solito posto, su Github

Un commento su “Registrare i dati dei sensori in giro per casa”

Nota importante, da leggere prima di commentare

Questo è un blog scritto per passione, non fornisco quindi risposte di tipo professionale, se avete bisogno di un aiuto tecnico rivolgetevi ad un professionista di fiducia, non offendetevi se mi astengo dal rispondere. Vi ringrazio per la comprensione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.