RASPBERRY PI STAGIONE 3 Puntata 3: Rpi e Stazione meteo parte 2

Ben ritrovati.
Nuova puntata, dopo un po’ di vacanza, per la rubrica dedicata alla single board più famosa al mondo: il Raspberry Pi.
L’ultima volta ci siamo lasciati dopo aver completato la base per la nostra stazione meteo. Ora è il momento per dargli qualcosa in più…

Stazione meteo 1.2

Per migliorare il nostro progetto sarebbe bene inserire, accanto alla temperatura, i dati fondamentali di una stazione meteo, cioè pressione e umidità.
In effetti, l’operazione è affatto difficoltosa. Basta aggiungere, sotto i valori di celsius e fahrenheit, quelli relativi a pressione e umidità con una sintassi del tutto simile alle precedenti, ovvero:

pressure = round(sense.get_pressure(), 1)
humidity = round(sense.get_humidity(), 1)

Poi occorre ovviamente inserire anche i valori di pressione ed atmosfera nella pagina web. Per farlo, bisogna modificare il commando che attiva la pagina web, che diventa

return render_template('meteo.html', pressure=pressure, humidity=humidity, celsius=celsius, fahrenheit=fahrenheit)

e, altrettanto ovviamente, aggiornare di conseguenza il template della pagina web, che diventa così

<!doctype html>
<div align="center">
<h1>Raspberry Pi Stazione Meteo sperimentale</h1>
</div>
<div align="center">
<h2> Temperatura</h2>
<strong> Gradi celsius:</strong> {{ celsius }} <strong> Gradi fahrenheit:</strong> {{ fahrenheit }}
</div>
<div align="center">
<h2> Umidità</h2>
<strong> Umidità dell'aria:</strong> {{ humidity }} </div>
<div align="center">
<h2> Pressione</h2>
strong> Pressione atmosferica:<</strong> {{ pressure }}
</div>

e il gioco è fatto.

Un po’ di migliorie grafiche

Dal punto di vista grafico, però, la nostra pagina web lascia un po’ a desiderare. Potremmo colorarla un po’, metterci un’immagine di sfondo, qualche immagine ecc..
Ma, se proviamo a modificare il template aggiungendo, ad esempio, un’immagine di fondo, il browser non la leggerà.
Questo perché in realtà la pagina template è solo un modello, che il framework usa per costruire al volo la pagina web da far vedere al browser. Tuttavia, non è necessario fare grandi manovre per far vedere un’immagine di sfondo o altri elementi grafici. Basta inserire nella stessa directory della pagina web una cartella dal nome static ed inserire dentro questa i nostri file da inserire nella pagina web. Flask leggerà tutto ciò che è collegato a static come un elemento da riportare pedissequamente nella pagina.
Il nostro template diventa così, con qualche abbellimento estetico, qualcosa del tipo

<!doctype html>
<div align="center">
<h1>Raspberry Pi Stazione Meteo sperimentale</h1>
<img src="/static/Logo-Liceo.png" width="50%" />
</div>
<div style="background-color: #cccccc;" align="center">
<h2> Temperatura</h2>
< strong> Gradi celsius:</strong> {{ celsius }} <strong> Gradi fahrenheit:</strong> {{ fahrenheit }}
</div>
<div style="background-color: #cccccc;" align="center">
<h2> Umidità</h2>
<strong> Umidità dell'aria:</strong> {{ humidity }} </div>
<div style="background-color: #cccccc;" align="center">
<h2> Pressione</h2>
strong> Pressione atmosferica:<</strong> {{ pressure }}
</div>

Dove l’immagine di sfondo è inserita nella cartella static e richiamata con la sintassi

<img src="/static/Logo-Liceo.png" width="50%" />

Così com’è, il programma python che abbiamo scritto va avviato manualmente ogni volta. E se volessimo farlo partire in modo automatico?

Come far lanciare all’avvio il vostro programma

Esistono molti modi, tutti più o meno utili a seconda delle necessità. Uno dei più efficienti è sicuramente aggiungere un cronjob.

Un cronjob è, in soldoni, un comando a inserire nel file crontab per far compiere azioni automatiche al sistema.
Grazie a crontab, infatti, si possono impostare (o, più correttamente, schedulare) delle operazioni (appunto job) sul sistema Linux con una certa semplicità sfruttando il demone cron.
Il “cron daemon” legge il file “crontab” ed segue le operazioni ivi impostate (cronjob) al momento specificato ed in modo del tutto automatico.

La sintassi del comando è la seguente:

crontab -u username –opzione

L’opzione -u consente di specificare il nome dell’utente che “possiede” il file. Se l’opzione -u è omessa, il sistema presume che ci si riferisca al crontab dell’account in attività.

Per aggiungere un nuovo job di Cron bisogna modificare il crontab che contiene l’elenco completo dei job creati fino ad ora. Per editarlo aprite una finestra di Terminale ed eseguite:

sudo crontab -e

Attenzione, ogni utente ha il suo crontab, ma nel nostro caso vogliamo editare quello di sistema. per questo, usiamo il comando sudo. Cron dedurrà autonomamente che ci rivolgiamo al crontab dell’account amministratore. Questo è il comando da utilizzare (supponendo di aver messo un po’ d’ordine e sistemato il nostro programma, cartelle varie ecc… in una cartella script)

sudo @reboot python /home/pi/script/meteo.py &

Questa stringa è diversa dal formato usuale per i job normali perché occorre dire al sistema che il nostro script deve essere lanciato non ad intervalli regolari, ma ad ogni boot del sistema, in questo caso usando python, proprio come se fosse lanciato da riga di comando. Il carattere & finale dice a Cron che lo script deve essere eseguito in background e che quindi non deve bloccare la sequenza di avvio.

Per testare il tutto potete provare a riavviare il vostro sistema inserite 

sudo reboot

.
Quando ripartirà il vostro sistema dovrebbe lanciare lo script, dipende tutto da cosa fa, ma se il vostro script deve girare sempre e volete controllare se sta girando vi basta eseguire sempre in una finestra di terminale:
ps aux | grep /home/pi/script/meteo.py

E per oggi è tutto.
Alla prossima….

Lascia un commento

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