diff --git a/app/database.py b/app/database.py index b44f3c3..b2422d3 100644 --- a/app/database.py +++ b/app/database.py @@ -76,6 +76,24 @@ def get_user_by_name(name): print u return u +def get_user_by_rfid(rfidid): + row = query_db("SELECT * FROM USERS WHERE RFID_ID = ?", [rfidid], one=True) + u = User() + if row is None: + return None + u.id=row[0] + u.name=row[1] + u.password=row[2] + u.longname=row[3] + u.email=row[4] + u.rfid_id=row[5] + u.isblack=row[6] + u.isbaron=row[7] + u.isshown=row[8] + u.autoblack=row[9] + print u + return u + def get_users(): rows = query_db("SELECT * FROM USERS") users = [] diff --git a/app/gui.py b/app/gui.py index fdfd0bd..0caef94 100644 --- a/app/gui.py +++ b/app/gui.py @@ -6,7 +6,8 @@ from plot import * from database import * from settings import * import flask as fla - +if settings.enableRFID: + import rfid class MainWindow(wx.Frame): @@ -17,8 +18,11 @@ class MainWindow(wx.Frame): self.panelUsers = PanelUsers(self) self.panelThanks = PanelThanks(self) self.panelSorry = PanelSorry(self) + self.panelRFID = PanelRFID(self) + + if settings.enableRFID: + self.rfid = rfid.RFID(self.on_rfid) - self.settings = Settings() self.user = User() self.drinkl = str() self.active = 0 @@ -57,10 +61,23 @@ class MainWindow(wx.Frame): for user in get_users(): if user.longname == longn: self.user = user - if not self.user.isblack: - self.active = 1 #getränkeauswahl + if self.user.isblack: + self.active = 4 #Sorry Bro else: - self.active = 4 #Sorry Bro Panel + self.active = 1 #Drinks + self.switchPanels() + + def on_rfid(self, rfidid): + if self.active != 0: + return + self.user = get_user_by_rfid(rfidid) + if self.user is None: + self.panelRFID.label_1.SetLabel(rfidid) + self.active = 5 #TODO: Screen showing RFID ID + elif self.user.isblack: + self.active = 4 #Sorry Bro + else: + self.active = 1 #Drinks self.switchPanels() def onProduct(self, e): @@ -80,6 +97,7 @@ class MainWindow(wx.Frame): self.panelUsers.Hide() self.panelThanks.Hide() self.panelSorry.Hide() + self.panelRFID.Hide() if self.active == 0: self.panelStart.Show() elif self.active == 1: @@ -101,7 +119,8 @@ class MainWindow(wx.Frame): elif self.active == 4: self.panelSorry.label_1.SetLabel(self.user.longname) self.panelSorry.Show() - + elif self.active == 5: + self.panelRFID.Show() class PanelStart (wx.Panel): @@ -154,7 +173,7 @@ class PanelSorry (wx.Panel): self.Destroy() -class PanelRfid (wx.Panel): +class PanelRFID (wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent, id=wx.ID_ANY, pos=(0, 0), size=(480, 320)) diff --git a/app/rfid.py b/app/rfid.py new file mode 100644 index 0000000..9e9758c --- /dev/null +++ b/app/rfid.py @@ -0,0 +1,37 @@ +try: + import MFRC522 +except: + print "ERROR: Need MFRC522 Library to read RFID tags, disable RFID if no reader is present!" + exit() +import signal +import thread + + +class RFID: + + def __init__(self, callbackf): + self.reader = MFRC522.MFRC522() + signal.signal(signal.SIGINT, self.stop) + self.callback = callbackf + self.loop = True + thread.start_new_thread(self.read, ()) + + def read(self): + while self.loop: + (status, tagtype) = self.reader.MFRC522_Request(self.reader.PICC_REQIDL) + print "RFID Status:", status + if status == self.reader.MI_OK: + (status, uid) = self.reader.MFRC522_Anticoll() + if status == self.reader.MI_OK: + uids = "0x" + "".join(format(x, '02x') for x in uid) + self.callback(uids) + print "RFID Detect:",uids + + def start(self): + print "RFID reader started" + self.loop = True + thread.start_new_thread(self.read, ()) + + def stop(self): + print "RFID reader stopped" + self.loop = False diff --git a/app/settings.py b/app/settings.py index 0f1b92a..4200cc8 100644 --- a/app/settings.py +++ b/app/settings.py @@ -22,7 +22,7 @@ class Settings: ##User Interaction #Gui self.hideGuiList = False #Show the consumers in the gui - self.disableRFID = False #Disable RFID Reading + self.enableRFID = False #Enable RFID Reading self.allowHiding = False #Allow a user to hide from the gui consumer list self.onlyOneDrink = False #Hide selection for amount in the gui self.drinkLimit = 20 #Max amount of consumptions in the gui (default 20) @@ -43,4 +43,4 @@ class Settings: ##Developer Settings self.debug = False #Show debug output in console -settings = Settings() \ No newline at end of file +settings = Settings() diff --git a/gui/rfid.png b/gui/rfid.png new file mode 100644 index 0000000..46fd1a7 Binary files /dev/null and b/gui/rfid.png differ diff --git a/gui/rfid.xcf b/gui/rfid.xcf new file mode 100644 index 0000000..1f19402 Binary files /dev/null and b/gui/rfid.xcf differ diff --git a/gui/sorry.png b/gui/sorry.png index 6cc8b53..fbcc044 100644 Binary files a/gui/sorry.png and b/gui/sorry.png differ diff --git a/gui/sorry.xcf b/gui/sorry.xcf index f0abaed..ed5b618 100644 Binary files a/gui/sorry.xcf and b/gui/sorry.xcf differ diff --git a/gui/thanks.xcf b/gui/thanks.xcf new file mode 100644 index 0000000..6d0c08d Binary files /dev/null and b/gui/thanks.xcf differ diff --git a/gui/users.xcf b/gui/users.xcf new file mode 100644 index 0000000..e40a760 Binary files /dev/null and b/gui/users.xcf differ