Raspberry Pi + RFM01: ricezione sensori PCE FWS 20 senza consolle

Raspberry Pi + RFM01: ricezione sensori PCE FWS 20 senza consolle

Se avete dato un’occhiata alla pagina della mia stazione meteo ultimamente, avrete visto che non aggiorna i dati da qualche giorno. Questo purtroppo perchè la consolle della stazione si è guastata e l’ho dovuta mandare in assistenza. Questa stazione costa poco ma sicuramente non è molto affidabile… soprattutto la parte della consolle interna.

Prima che si rompesse, il sistema di ricezione dati tramite Raspberry Pi e swpi funzionava egregiamente.

Una ulteriore implementazione che Tonino Tarsi (sviluppatore del Sint Wind Pi) ha fatto al suo software è il supporto per l’RFM01. Si tratta di un piccolo chip che si trova a pochi euro ed è in grado di riceve il segnale RF a 868 Mhz direttamente dai sensori wireless della PCE, senza dunque dover collegarsi alla consolle tramite usb.

Su suggerimento di Tony ho deciso di acquistare l’RFM01 (preso su RS, in versione SMD a circa 5€).

RMF01 sul dorso della mia mano ;)

RMF01 sul dorso della mia mano 😉

Una volta arrivato (insieme a dei cavetti jumper F-F che ho acquistato per interfacciarsi più agilmente al connettore GPIO del Raspberry) ho eseguito i collegamenti secondo lo schema (che trovate qui), con piccole saldature (il risultato non è certo professionale con gli strumenti che ho, ma tutto sommato è stato abbastanza facile, io non sono assolutamente un esperto di queste cose :P). Ho poi saldato un filo di 8,3 cm come antenna (piedino ANT) e collegato tutto al raspberry con i connettori.

Con gli ultimi aggiornamenti di swpi per far riconoscere l’RFM01 è sufficiente impostare nel file di configurazione (anche via web) “WH1080-RFM01” come tipo di sensore.

Adesso swpi riceve i dati dai sensori ogni 48 secondi e li invia alla stessa pagina che avevo costruito (meteostrada.grechi.it).

Dovrebbe essere una soluzione molto più stabile e duratura, avrò modo di testarla nel prossimi giorni.

Fatto questo è già in cantiere la prossima aggiunta: il supporto al sensore di temperatura/umidità BMP085 che dice essere molto preciso 😉

Di seguito alcune foto durante il montaggio:

Edit del 27/12/2013: Aggiungo qui l’esperienza (postata anche sul forum di SWPI) di questi ultimi mesi con l’utilizzo del sensore. Ho dovuto risolvere alcuni problemini, magari i miei stratagemmi saranno utili ad altri.

Considerata anche la distanza (i sensori sono nel terrazzo al piano di sotto e la stazione nel sottotetto) ed i molti muri nel mezzo, inizialmente [l’RFM01] non “agganciava” il segnale.
Ho dovuto spippolare non poco e alla fine ho risolto con tre workaround che potrebbero essere utili anche ad altri:

– la sensibilità di ricezione dipende MOLTISSIMO da come è posizionata e orientata l’antennina. Cambiandone anche di poco la posizione, il risultato può variare molto! Consiglio di metterla più lontano possibile da ogni altro elemento (raspberry, chiavette, alimentatori) che potrebbero fornire disturbi e posizionarla in modo fisso con un pezzo di nastro isolante. Io l’ho attaccata in posizione verticale ad un lato interno della scatola.

– dopo qualche mese ad ottobre ho di nuovo avuto problemi di ricezione, questa volta imputabili a un non precisato rumore ambientale esterno. Ho risolto alla fine mettendo semplicemente davanti alla scatola un foglio di alluminio a schermare (coperchio di una vaschetta!). Sembra incredibile ma funziona. Mi blocca un po’ di interferenze provenienti frontalmente e ricevo bene i sensori (che ho in basso, ma posteriore). FOTO

– infine recentemente ho riscontrato una perdita di sensibilità di ricezione quando le temperature vanno sotto lo zero. E’ una correlazione con la temperatura evidente che però ancora non ho ben capito a cosa sia dovuta. (mi è stata confermata anche da Tony).
La cosa strana è che riavviando swpi quasi sempre la ricezione riparte. Per cui per adesso ho risolto mettendo uno script cron che mi controlla da quanto tempo non si aggiorna wh1080_rf.txt e se son passati più di 600 secondi mi riavvia swpi.

#!/bin/bash

now=$(date "+%d/%m/%Y - %H:%M")
seconds=$(expr `date +%s` - `stat -c %Y /home/pi/swpi/wh1080_rf.txt`)

if [ $seconds -gt 600 ]; then
        echo "[ $now ] $seconds seconds since last update, REBOOT swpi" >> /home/pi/swpi/rebootscript.log
        sudo /home/pi/swpi/killswpi.sh
        sudo -u pi /home/pi/swpi/swpi.sh
else
        echo "[ $now ] $seconds seconds since since update. Wait" >> /home/pi/swpi/rebootscript.log
fi