• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
serratura otp codice qr

Serratura Codice QR + OTP
#1
Ciao a tutti,
vorrei condividere con voi questo semplice progetto, ovvero una serratura con controllo OTP (one-time-password) tramite lettore QR. E' una prima versione funzionante, ma vorrei migliorarlo il più possibile, si accettano quindi idee e consigli!

Hardware:
- Pi3
- PiCamera
- Serratura (solenoide 12V)
- Relay 5V
- Alimentatore/Batteria 12V

Circuito:
[Immagine: circuit.png]
[Immagine: imageedit_2_7486935406.jpg]

Per alimentare il solenoide ho usato 8 batterie alcaline da 1.5 ciascuna.

Software:
- Raspbian Jessie + Apache2 + PHP
- Libreria PHP per algoritmo OTP: https://github.com/lelag/otphp
- Libreria Python imaging: https://pypi.python.org/pypi/Pillow/
- Libreria Python scan QR: http://zbar.sourceforge.net/

Funzionamento:
- Tramite una web app (server remoto) su smartphone genero un codice TOTP codificato come QR via javascript (https://davidshimjs.github.io/qrcodejs/)
- Mostro il QR alla camera -> decodifico
- Calcolo il TOTP e lo confronto con il QR decodificato per determinare l'apertura della serratura.

Sia sul server remoto che sul rasp gira la stessa versione di PHP, la libreria OTP è la medesima e ovviamente anche il token per generare il codice OTP. Inoltre il codice subisce un hashing (sha256) di PHP prima dell'utilizzo.


Routine Python:
Codice:
import RPi.GPIO as GPIO
from PIL import Image
import zbar
import picamera
import time
import requests


GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)


camera = picamera.PiCamera()

while True:
camera.capture('image.jpg')

scanner = zbar.ImageScanner()
scanner.parse_config('enable')

pil = Image.open('image.jpg').convert('L')
width, height = pil.size
raw = pil.tostring()

image = zbar.Image(width, height, 'Y800', raw)

scanner.scan(image)

for symbol in image:
   print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data
   r = requests.get("http://localhost/otp")
   if symbol.data == r.text:
      print 'opening'
      GPIO.output(12, GPIO.LOW)
      time.sleep(7)
      print 'closing'
      GPIO.output(12, GPIO.HIGH)
   else:
      print 'invalid code'

del(image)


Generatore codice TOTP in PHP:
Codice:
<?php

date_default_timezone_set('Europe/Rome');

require('vendor/libs.php');
require('lib/otp.php');
require('lib/totp.php');

$totp = new \OTPHP\TOTP("token");
echo hash('sha256',$totp->now());


?>


Come già detto è una versione base funzionante. Obiettivi:
- Aumentare la velocità lettura QR
- Migliorare affidabilità/sicurezza
- Trovare bug
Risposta
#2
Seguo con interesse

Inviato dal mio SM-N9005 utilizzando Tapatalk
Risposta
#3
veramente una bel progettino, semplice e funzionale.
complimenti Smile

l'unica nota è che le elettroserrature sono a 12v alternata e di picco consumano pure parecchio (credo almeno 30 o 40 watt).

questo aspetto limita un po' l'usabilità in termini di mobilità, ma presupponendo di montare il sistema da qualche parte "fissa" (immagino una porta a casa, tanto per dire) non ci sono problemi.



Coltiva linux, che windows si pianta da solo! (cit.)
Risposta
#4
Ciao e grazie Smile
Come puoi notare la serratura è solamente un solenoide alimentato dalle pile, le quali non consumano fino a quando il relay è staccato; in sostanza le batterie si consumano solamente nel momento in cui si deve aprire la serratura, garantendo molti mesi di autonomia (in base all'utilizzo ovviamente)
Risposta
#5
eh si ma va specificato che, nel caso di utilizzo di una batteria (quella dell'auto o dello scooter), serve una elettroserratura a 12v in CONTINUA.
quelle classiche montate sui cancelli pedonali sono in alternata.

poi è chiaro che l'autonomia sia legata all'uso e quello di una porta è veramente minimo Smile



Coltiva linux, che windows si pianta da solo! (cit.)
Risposta
#6
Si esatto..in base al tipo di applicazione potrebbe anche essere più adatto un alimentatore piuttosto che la batteria, il principio è lo stesso
Risposta
#7
Il problema che dici in merito alla alimentazione della elettroserratura, lo risolvi usando un trasformatore per la serratura che comanderai con il contatto del relè pilotato da raspberry.

Inviato dal mio SM-N9005 utilizzando Tapatalk
Risposta
#8
Ho aggiunto una foto del circuito e 3 led (giallo, rosso e verde ) per verificare lo stato del lettore QR!
Risposta
  


Vai al forum:


Navigazione: 4 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect