Disclaimer

Prestare sempre attenzione a seguire le indicazioni fornite in questo blog, soprattutto se si tratta di apparecchiature elettriche collegate alla tensione di 220V. Non mi ritengo responsabile di danni causati dall'aver seguito i consigli qui pubblicati.
Grazie

venerdì 24 febbraio 2017

"Sniffando" le onde radio - RF 433Mhz




E' passato un pò di tempo dal mio ultimo post...vari impegni lavorativi e familiari mi hanno tenuto un pò lontano dai miei esperimenti...in fondo in fondo è un hobby...e in quanto tale ha "bassa priorità" soprattutto quando il tempo libero è poco...

Come forse vi ricorderete (vedi post http://domoticaduino.blogspot.it/2016/03/acquisizione-dati-produzione-impianto.html), la produzione del mio impianto fotovoltaico veniva acquisita tramite il ricevitore wireless OWL CM160 connesso via USB al Raspberry, che era in grado di ricevere i dati inviati via radio dalla pinza amperometrica collegata all'impianto fotovoltaico, a valle dell'inverter.


Purtroppo con il passare del tempo questo sistema si è rivelato instabile, in quanto spesso il driver di connessione USB del dispositivo al raspberry non funzionava correttamente e necessitava di un riavvio del sistema...non molto comodo...

Facendo diverse ricerche su internet ho capito che è possibile intercettare i segnali trasmessi dalla pinza amperometrica tramite un semplice ricevitore Wireless a 433Mhz, come quello attualmente utilizzato per ricevere i dati del sensore del gas, costruito con Arduino (vedi http://domoticaduino.blogspot.it/2015/08/acquisizione-dati-il-ricevitore.html)

Un articolo in particolare mi ha aperto la strada verso questa soluzione...eccolo

https://github.com/onlinux/OWL-CM180

E' basato su un diverso ricevitore, ma la logica è identica.

Questi sistemi utilizzano il protocollo di comunicazione della Oregon Scientific...in particolare il CM160 utilizza la versione 3...

Qui un documento che descrive il protocollo

DOWNLOAD

La trasmissione avviene tramite codifica Manchester OOK (on off keying) alla frequenza di 433 Mhz.

Collegato il ricevitore ad un Arduino UNO e scaricato il codice che permette la codifica del protocollo di comunicazione (scriverlo da zero sarebbe stato un pò lunghetto...), i pacchetti iniziano ad essere visualizzati sulla seriale. Tramite alcune "operazioni" sui bit si riesce in maniera abbastanza semplice a recuperare i dati "nascosti" nei pacchetti trasmessi...et voilà, il gioco è fatto: ecco il dato di potenza trasmesso dalla pinza amperometrica.

Esempi di pacchetti "grezzi" ricevuti in esadecimale

2a8081bf01501a011900 ==> valore di potenza rilevato = 434 W
2a81817f02d0fdf71800 ==> valore di potenza rilevato = 627 W
2a81813f0980f3b71300 ==> valore di potenza rilevato = 2366 W

Output sulla seriale


Adesso non mi resta altro che trasmettere il dato al server centrale per la memorizzazione su db e relativa visualizzazione su web.

Sniffando tutti i pacchetti trasmetti in OOK su 433 Mhz, noto che non sono tutti relativi alla pinza amperometrica; tra i pacchetti ricevuti e non riconosciuti come protocollo Oregon Scientific 3 ci saranno sicuramente quelli trasmessi da un sensore di temperatura esterno alla casa che comunica con un orologio che ho sul comodino...il protocollo è di tipo diverso e attualmente non sono in grado di leggerlo...ma non si sa mai...in un futuro più o meno lontano potrei riuscire a intercettare ed acquisire anche questa informazione...