Lettura misura in remoto - Raspberry PI

misura temperaturaCominciamo con le cose serie... Mi ha sempre affascinato l'idea di interfacciare un po' di eletronica al computer, per controllarla ed acquisire qualche dato di interesse, ma non ho mai concluso niente per due motivi: la lunghezza e la complessità del programma che si interfaccia e dialoga con l'elettronica, ed il non sapere come maneggiare i dati acquisiti. Finalmente, complici il Raspberry ed il semplicissimo Python (sicuramente più del C o dell'assembly che mi impegnavano fino a qualche anno fa) qualcosa comincia a svilupparsi. Di seguito illustrerò lo sviluppo di una serie di applicazioni che leggono la temperatura interna del Raspberry e la visualizzano in un widget su ToBlog (potete vederlo in basso a destra). Niente di eccezionale, ma per me che gioco con l'elettronica piuttosto che con l'informatica è qualcosa di molto utile quanto divertente.

Funzionamento generale

Il funzionamento del sistema è basato su 3 applicazioni:

- un programma che legge la temperatura del processore del Raspberry e salva la misura su un file (txt, ma basta cambiare 3 lettere estensione per avere un csv piuttostobche qualcos'altro)

- qualche modifica al file fstab e la creazione di una crontab, dalla shell di Wheezy, che si occupano di caricare il file via sul server del blog

- uno script PHP che legga il file e visualizzi la temperatura in un widget

Lettura della temperatura

Il codice è in Python, semplicissimo sia da scrivere che da capire:

import subprocess
from time import localtime, strftime
t = subprocess.check_output(["/opt/vc/bin/vcgencmd","measure_temp"])
a = str(t)
h = a[7:11]
s = strftime("%H:%M:%S", localtime())
d = strftime("%d %b %Y", localtime())
f = open("temperature.txt", "w")
print("Internal temperature of Toby's Raspberry at ", s, "of ", d,"it's ", h ,file =f)
f.close()

 

ed è tutto nell'articolo che ho pubblicato qualche giorno fa 🙂

Caricamento sul blog

Il caricamento del file avviene via FTP grazie all'applicazione curlftpfs (rassegnatevi: non ha alcuna interfaccia grafica che vi faccia sentire a vostro agio, è tutto da riga di comando) che va quindi subito installata:

sudo apt-get install curlftpfs

e siete pronti! Per spiegare esattamente come funzioni curlftpfs non posso che riportare la chiarissima risposta che mi è stata data: "hai un percorso nel tuo sistema (/media/[etc etc]) che punta direttamente al tuo ftp ma, tu lo usi come se fosse una directory locale". Quindi per creare questo punto di mount andiamo a modificare il file fstab:

sudo nano /etc/fstab

e si aggiunge la riga:

curlftpfs#user:pass@host/media/ftp

fuse allow_other,nonempty,rw,user,_netdev 0 0

tenete presente che queste 2 righe in realtà sono una sola (tagliata dal tag quote...); con il primo comando entrate nel file, con la seconda riga create il punto di mount (la cartella ftp, il nome è indifferente, chiamatela come volete!). user, pass e host sono ovviamente utente e password con cui vi autenticate sul server FTP, mentre host è l'indirizzo del server. allow_other permette di montare la cartella anche senza essere utente di root, rw la monta sia in scrittura che lettura mentre _netdev monta la cartella solo una volta stabilita la connessione; quest'ultimo serve ad evitare che la cartella venga montata a connessione non ancora stabilita (in al caso il file non verrebbe caricato: sono stato un giorno a capire dove era il problema). Salvate il file fstab e digitate nella shell:

sudo mount -a

 

Fatto ciò rimangono da automatizzare lettura e salvataggio della temperatura e caricamento del file sul punto di mount: i primi due compiti si risolvono facendo eseguire il listato python, mentre l'ultimo si attua copiando semplicemente il file creato dal programma, nella cartella /etc/ftp. Le istruzioni necessarie vanno scritte in una crontab, che vi permetterà di rendere automatico il tutto; quindi digitate nella shell:

crontab -e

 ed aggiungete le seguenti righe:

* */1 * * * python3 /home/pi/temperature.py

* */1 * * * cp /home/pi/temperature.txt /media/ftp >/dev/null

e salvate.

Visualizzazione sul Blog

Volendo mostrare la misura in un widget ho scaricato innanzitutto un plug-in per poter incorporare codice php nei widget (di norma ciò non  possibile e vi ritrovate stampato e non interpretato il codice che avete scritto). Quindi sono bastate le seguenti 5 righe:

<?php
$filename = "temperature.txt";
echo file_get_contents("temperature.txt");
fclose($handle);
?>

che non fanno altro che restituire tutto il contenuto del file temperature.txt . Riavviate il Raspberry e dorebbe tutto funzionare (meglio tener conto della legge di Murphy!).

PS: grazie a xam8re per l'aiuto nella stesura e ripetuta correzione dei listati 🙂