Comandare centralina allarme low cost 433Mhz con un raspberry

Da raspibo.
Jump to navigation Jump to search

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 )

Telecomando.jpg

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:

Ricevitore test.png

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:

Trasmettitore test.png

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.