Comandare centralina allarme low cost 433Mhz con un raspberry
Introduzione
Qualche tempo fa avevo letto una mail su Agora di Renzo, dove raccontava una sua esperienza sui radiocomandi (apri cancelli e trasmissioni a codice fisso), facendo vedere come potesse essere "relativamente semplice" con alcune librerie, leggere i codici generati dai radiocomandi o perfino effettuare un bruteforce nel tentativo di beccare quello da replicare; cosi ho pensato: "perchè non attivare/disattivare la mia centralina di allarme dal raspberry?". La mia motivazione in relatà non è scontata, da qualche annetto ho fatto escludere l'invio degli SMS nella mia promozione telefonica mobile, cosi sono riuscito a risparmiare un paio di euro al mese, per cui ora ogni qual volta ne invio uno, devo pagare 25 cent, e questa cosa ultimamente stava cominciando a diventare un pò seccante per gestire la cetralina. Essendo una centralina low cost acquistata su ebay (che ha già sventato due furti), utilizza codici fissi su due frequenze diverse 433Mhz/868Mhz (e permette di essere allarmato, a parte dai vari sensori filari, tramite radiofrequenze con invio di un codice fisso a 433/868mhz inviato da sensori PIR, magnetici, gas, fumo o qualsiasi altra cosa basta che sia stato preventivamente acquisito e memorizzato in fase di configurazione dalla centralina).Inoltre al suo interno è presente un modulo GSM che serve a notificare i segnali di allarme oppure di alimentazione assente o batteria tampone scarica tramite l'invio si SMS, e ricevere comandi sempre tramite SMS per allarmare/disallarmare la centralina.
Modulini tx/rx FS1000A
Circa 5 mesi fà, ho acquistato due modulini a 2 euro su ebay denominati FS1000A che sono finalmente riuscito a testare; questi, possono lavorare tranquillamente alla frequenza di nostro interesse 433,92Mhz.
Per quanto riguarda il modulo di trasmissione le specifiche e le connessioni sono le seguenti:
Portata: 20-200mt Tensione di alimentazione: da 3,5Vdc a 12Vdc Modo di funzionamento: AM Velocità di trasmissione: 4 KB/s Potenza: 10mW Frequenza di trasmissione: 433,92 Mhz Dimensioni: 19x19 mm
DATA <-> Raspberry BCM GPIO17 (pin0 wiringPi) Vcc <-> Raspberry 5v GND <-> Raspberry GND
Per quanto riguarda il modulo di ricezione le seguenti:
Tensione di alimentazione: 5Vdc Assorbimento a riposo: 4mA Frequenza di ricezione: 433,92 Mhz Sensibilità: -105dB Dimensioni: 30x14 mm
Vcc <-> Raspberry 5v DATA <-> (non usato) DATA <-> Raspberry BCM GPIO18 (pin1 wiringPi) GND <-> Raspberry GND
Installazione e configurazione librerie su Raspberry PI
Dopo avere collegato il raspberry ai moduli, ora serve configurare ed installare le librerie che ci consentiranno di scoprire i codici che vengono inviati alla centralina dai radiocomandi a 4 canali, utilizzando il modulo di ricezione, cosi da poterli replicare utilizzando il modulo di trasmissione.
Le alternative a livello di librerire che ho trovato in rete sono due, ovvero sfruttare le pigpio, oppure utilizzare le librerie rc-switch. Ho visto che la seconda scelta era la più documentata online con i moduli FS1000A, cosi ho deciso di intraprendere questa strada.
L'installazione e la configurazione dell'ambiente è abbastanza veloce, ho eseguito prima di tutto un aggiornamento alle ultime versione del firmware, dato che alcuni lamentavano malfunzionamento se non aggiornati.
Cosi ho eseguito l'aggiornamento del kernel/firmware e dei vari pacchetti:
sudo rpi-update sudo apt-get update sudo apt-get upgrade
Successivamente installiamo le wiringPi per l'accesso alla GPIO:
cd ~/ git clone git://git.drogon.net/wiringPi cd wiringPi ./build
Poi è possibile scrivere il proprio programma tramite le rc-switch(ci sono diversi esempi), io ho utilizzato le https://github.com/ninjablocks/433Utils:
cd ~/ git clone git://github.com/ninjablocks/433Utils.git cd 433Utils git clone https://github.com/sui77/rc-switch.git cd RPi_utils
Ora, prima di compilare, modifichiamo i pin corretti usati per la trasmissione e ricezione (GPIO17, GPIO18) relativamente pin 0 e pin 1
https://projects.drogon.net/raspberry-pi/wiringpi/pins/
Quindi per i file code.cpp e codesend.cpp o settato il pin 1:
int PIN = 1; ...
mentre per il file RFSniffer.cpp o settato il pin 0, fatto ciò lanciare nella directory corrente il comando make e attendere la compilazione
Recupero codici del telecomando e replicazione
Per recuperare i codici utilizzati dal telecomando/i o sfruttato l'utility RFSniffer ( in alcuni casi potrebbe essere utile variare la modulazione per riuscire a individuarli )
Io mio telecomando utilizza un chip cinese SC2260-R4 (che è equivalente al PT2260) e quella di default ha funzionato ma non perfettamente, ovvero ad una distanza che supera il metro non becca il segnale, e alle volte neppure da vicino, per cui c'è ancora da capire perchè, probabilemente va configurata la modulazione corretta ma dato che il mio intento per ora era recuperare i codici da replicare, andava più che bene.
Quindi, dando il comando e premendo i tasti del radiocomando ho mappato i due comandi per abilitare/disabilitare la centralina:
pi@raspberrypi ~/433Utils/RPi_utils $ sudo ./RFSniffer Received 16546576 Received 16546576 Received 16546576 Received 16546576 Received 16546528 Received 16546528 Received 16546528 Received 16546528
Da ciò è possibile sfruttare l'utility codesend per inviare il codice corretto(precedentmente identificato) per allarmare/disallarmare la centralina:
pi@raspberrypi ~/433Utils/RPi_utils $ sudo ./codesend 16546576 sending code[16546576] pi@raspberrypi ~/433Utils/RPi_utils $
Per integrare il tutto sul mio sistema, avendo una pagina web per monitorare il mio raspberry su un server web (nas: samba, minidlna, transmission, amuled, vpn, shell web etc etc) è stato interfacciare il comando codesend lato web, cosi collegandomi dall'esterno in vpn tramite smartphone posso collegarmi all'interfaccia web (protetta da password) e allarmare/disarmare la centralina, senza dover più spendere un centesimo per gli SMS , ed attualmente funziona:D
Prossimamente, devo riuscire a capire come configurare il ricevitore in modo che riesca a beccare il segnale che viene inviato alla sirena wifi per essere abilitata/disabilitata, anche da lunga distanza (modulazione errata?! antenna non ottimale?!) ,questo per avere un feedback dalla centralina quando la stessa centralina viene allarmata/disarmata.