-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathzuul.py
86 lines (77 loc) · 2.1 KB
/
zuul.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/python
# -*- coding: utf-8 -*-
#addons nachladen
import _mysql
import RPi.GPIO as GPIO
import func
from mplayer import Player, CmdPrefix
# schreibt den neuen key auf die karte
#TODO
def writeKey(key):
#TODO key schreiben
return False
# prüft die karte
#ungeprüft
def checkCard(id,key):
res = sql_connect()
id = no_inject(id)
key = no_inject(key)
# prüft daten mit der DB abfrage
access = sql("SELECT COUNT(*) FROM user AS u, token AS t WHERE tID = '",id,"' AND tKey = '",key,"' AND tActive = 'true' AND userID = uID AND uActive = 'true' LIMIT 1")[0]
if(access == 1):
#bei Übereinstimmung
# erzeugt neuen keys
newkey = random(32)
# speichert key auf der Karten
written = writeKey(newkey)
if(written):
# bei erfolg speichert key in der DB
sql("UPDATE token SET tKey = '",newkey,"' WHERE tID = '",id,"' AND tKey = '",newkey,"' LIMIT 1")
# schreibe log
sql("INSERT INTO log (tokenID, answere) VALUES ('",id,"','G'")
return True
else:
# schreibe log
sql("INSERT INTO log (tokenID, answere) VALUES ('",id,"','D'") #TODO token key muss auch gespeichert werden
return False
# setzt leds und andere ausgänge
#TODO
def output(pin,val,time=False):
pins {'green':24,'yellow':25,'red':26,'lock':27,'speaker':4} #TODO ka ob das so richig ist
GPIO.output(pins[pin],val)
if(time):
wait(time)
#TODO am liebsten multithread, bzw wählbar ob multithread
GPIO.output(pins[pin],!val)
return True
# spielt den angegebenen track einmal abfrage
# ungeprüft
# benötigt den mplayer, liegt im github
def playTheme(fileName):
output('speaker',1)
player = Player()
player.loadfile(fileName)
# Terminate MPlayer
player.quit()
output('speaker',0)
# wartet bis die karte vorgehalten wird
while True:
if(GPIO.wait_for_edge(24, GPIO.FALLING)):
# empfängt Karten Daten
# TODO
# prüft mittels DB
access = checkCard(cardID,cardKey)
if(access):
# gib gruen
# oeffne tuer
output("green",True)
output("lock",True)
wait(3)
output("green",False)
output("lock",False)
# bei fehlschlag
else:
# gib 2 sek rot
output("red",True,2)
#kommen wir nie hin
GPIO.cleanup()