Web Door Lock: controlla la tua serratura in remoto con un Raspberry Pi

Il famoso hacker e autore Simon Monk mostra come realizzare il controllo remoto di una serratura via web, utilizzando un Raspberry Pi. Il RasPi gira su un web server, al quale è possibile collegarsi utilizzando ogni dispositivo dotato di browser. Per esempio, se ci si trova nel raggio di una connessione wireless casalinga, è possibile, stando fuori dall’abitazione, connettersi al server con uno smartphone, inserire una password e aprire la serratura. Tutto questo è attuabile in semplici passaggi, portando a termine un progetto divertente e utile, che potrebbe risparmiare a qualcuno il terribile disagio di restare chiusi fuori, magari in piena notte!

Di cosa abbiamo bisogno per realizzare una serratura controllata dal Raspberry Pi

Per questo progetto sono necessari alcuni componenti. Esso infatti si basa su una breadboard e utilizza un transistor TIP120 Darlington per comandare una serratura elettrica. Questo tipo di transistor è molto affidabile, ma si possono usare anche un MOSFET o un FQP30N06. Il diodo può essere uno qualunque presente in un kit base di componenti. Il tipo di serratura (12V DC) è del tipo progettato per sostituire una preesistente mortasa (l’alloggio in cui la serratura viene inserita) con una dotata di un’estremità a cerniera, che viene rilasciata nel momento in cui si fornisce energia ad un elettromagnete presente nella serratura.
La presa cilindrica DC per avvitare l’adattatore è un piccolo, utile dispositivo che permette di collegare i fili ad un’alimentazione DC standard, senza dover tranciare il cavo. Tuttavia, se si preferisce, è possibile tagliare la spina dall’alimentatore (dopo averlo staccato!), così da non aver bisogno dei cavi elettrici maschio-maschio, perché vengono utilizzati per collegare l’alimentazione da 12V alla breadboard. Questa alimentazione è solo per la serratura, mentre il Raspberry Pi ne necessita un’altra.

Immagine

Come funziona l’elettronica

I pin GPIO del Raspberry Pi sono progettati per fornire un massimo di circa 3mA. La serratura ha bisogno di circa 200mA per restare aperta; per ovviare a questa differenza, è stato utilizzato un transistor, permettendo così ai fiacchi pin GPIO del Raspberry Pi di controllare la corrente verso la serratura. Il tipo di transistor utilizzato è chiamato Darlington ed è costituito di fatto da due transistor, uno a cavallo dell’altro, per fornire una maggiore amplificazione della corrente, rispetto ad un solo transistor.

Schema

Quando il pin GPIO 18 è su HIGH, una debole corrente (circa 1,5mA) scorrerà attraverso R2 e nella base del transistor. Questa operazione attiva il transistor, così che un maggiore quantitativo di corrente possa scorrere dal polo positivo dell’alimentatore da 12V, attraverso l’elettromagnete presente nella serratura, rilasciando quest’ultima. Il diodo D1 serve per proteggere il transistor dai picchi di tensione, che si verificano quando viene fornita energia alla serratura.
Anche LED1 e R2 vengono attivati dal transistor, così quando la serratura è abilitata, il LED lampeggerà anche, per avvisare che la porta è sbloccata.

Costruire la serratura a controllo remoto: l’hardware

Prima di iniziare a montare le parti, sarebbe opportuno verificare che ogni componente funzioni correttamente, come mostrato di seguito.
1) Costruire la breadboard: collegare i componenti alla breadboard, come mostrato nel diagramma; l’estremità più lunga del Led è quella positiva, è va sulla destra della breadboard. Il diodo presenta una striscia su un’estremità, che deve andare sempre sulla destra. Il transistor viene orientato con il lato piatto e metallico verso destra.

MagPi32-1
2) Aggiungere le connessioni di alimentazione: attaccare i cavi maschio-maschio ai connettori a vite dell’adattatore. Utilizzare i cavi nero e rosso, assicurandosi di collegare quest’ultimo al terminale a vite segnato con +. Quindi, collegare le altre estremità alla breadboard.MagPi32-2
3) Attaccare la serratura: i fili della serratura possono essere collegati direttamente alla breadboard, specialmente durante il test. Tuttavia, passando alla fase reale del progetto, potrebbero essere necessari cavi più lunghi per la connessione. In questo caso si possono utilizzare dei cavi per altoparlanti.MagPi32-3
4) Ci sono solo due collegamenti da fare tra il Raspberry Pi e la breadboard e per questo occorrono dei cavi maschio-femmina; uno va dal GND sul connettore GPIO del Raspberry Pi, alla linea della breadboard dove si trovano i tre transistor. L’altro va dal GPIO 18 al lato sinistro di R1.

MagPi32-4

Costruire la serratura a controllo remoto: il software

Una volta completato il montaggio, avendo la parte hardware completa, bisogna far partire il software. Il programma è scritto in Phyton e usa una libreria chiamata Bottle per fornire la funzione di web server al progetto. Per installare Bottle, assicurarsi di essere collegati in rete, quindi digitare i seguenti comandi:
sudo apt-get update
sudo apt-get install python-bottle

È possibile scaricare il programma dalla linea di comando Raspberry Pi:

git clone https://github.com/simonmonk/
pi_magazine.git

Prima di lanciare il programma, aprire door_Lock_server.py in un editor (come nano) e cambiare i valori dell’IP variabile, affinché corrispondano a quelli del Raspberry Pi.
Per avviare il programma, cambiare la directory in quella in cui si trova il codice del progetto, poi digitare i seguenti comandi:

cd /home/pi/pi_magazine/02_door_lock
sudo python door_lock_server.py

Ora il web server si avvierà sul Raspberry Pi; per controllare, bisogna aprire il browser su un altro computer o sul telefono e digitare l’IP del Raspberry. Se tutto è corretto, verrà visualizzata una pagina in cui si chiede l’introduzione di una password; una volta fatto, il Led dovrebbe accendersi, e la serratura fare click e sbloccarsi.

Come funziona il codice

Codice

Il programma parte con l’importazione di Bottle, di RPi.GPIO e delle librerie time di cui ha bisogno. Poi ci sono delle costanti da impostare: una è la password, che serve a far aprire la serratura, l’altra è MAX_ATTEMPTS (numero massimo di tentativi), inizialmente settata su 5. OPEN_TIME specifica per quanti secondi la serratura debba rimanere sbloccata, prima di chiudersi automaticamente.

La funzione unlock_door configura il LOCK_PIN HIGH per sbloccare la serratura , i ritardi per il numero di secondi specificati in OPEN_TIME e il LOCK_PIN_LOW per bloccare nuovamente la serratura.
Bottle utilizza il comando @route per indicare le funzioni che lo seguono immediatamente incaricate alle richieste web. Quindi, la pagina route di default di / è gestita dalla funzione chiamata index. Essa utilizza il meccanismo di templating di Bottle per restituire il codice HTML contenuto nel file template home.tpl.
/unlock è il secondo handler, dove viene postata la scheda dell’index page. Questa funzione rappresenta il “luogo” in cui si svolge la maggior parte del lavoro. Prima di tutto, la password inserita nella scheda viene recuperata dal parametro request e assegnata alla variabile pwd. Poi, il numero dei tentativi viene confrontato con il numero massimo consentito e, se è maggiore, la pagina di lockout viene riproposta, per impedire altri tentativi di login.
Dopo questo, la password della scheda viene confrontata con PASSWORD e, se corrisponde, viene chiamato il comando unlock_door e il numero di tentativi falliti resettato a 0. Se invece la password è sbagliata, viene aggiunto 1.
Le ultime linee del programma avviano il server web sulla porta 80. Il comando try/finally viene utilizzato per configurare i pin GPIO al livello iniziale di input, quando si esce dal programma utilizzando CTRL+C.

Utilizzare il blocco della serratura

La prima cosa da dire è che anche un esperto in sicurezza, vagamente competente, troverebbe diverse falle nel sistema, a causa della sua vulnerabilità; tuttavia, tenendo il Raspberry Pi coperto dal firewall, vuol dire che l’interfaccia web su cui dovrebbe avvenire l’attacco è accessibile solo attraverso la LAN della casa. Quindi, qui non ci si assume nessuna responsabilità, ognuno deve valutare il grado di rischio, in base a quello di sicurezza impostato nella propria rete internet.

Article by Simon Monk, courtesy of MagPi

3 Commenti

  1. Davide Japan 23 novembre 2015

Scrivi un commento