import RPi.GPIO as GPIO import MFRC522 #Import der Bibliothek MFRC readers/writers from subprocess import Popen #Import des Subprozessmoduls Popen, um externe Programme/Dateien aufzurufen oder gar zuverbinden import time #Import Zeitmodul z.B. für sleepmodus import signal #Import um GPIOS anzusteuern # Erfassen v. SIGINT(=Signale die den Prozess beenden) für Bereinigung, wenn das Skript abgebrochen wird def end_read(signal,frame): #Definition Struktur die Signal und Frame enthaelt global continue_reading #ueberall verfuegbar nicht nur in d. Schleife continue_reading = False GPIO.cleanup() #Aufräumen der GPIOS GPIO.setmode (GPIO.BOARD) GPIO.setup(40, GPIO.IN,pull_up_down=GPIO.PUD_UP) #Button GPIO Zuweisung mit Pullup-Widerstand (gegen + 3,3 V) zaehler=0 #Initialisierung für 5 Sek. Countdown uid="100, 100, 100, 100, 100" #Variable die das Array enthaelt (UIDs sind 3 stellig) # Hook the SIGINT signal.signal(signal.SIGINT, end_read) #interaktives Warnignal dass das (Ein)Lesen beendet MIFAREReader = MFRC522.MFRC522() #Kreiert eine Objekt aus der Klasse MFRC522 keinesprache= 0 #Button wurde gedrueck, es wird keine Spacherkennung gestartet erkannt = 0 #Variable fuer die Endlosschleife fuer die Erkennung der Karte fertig = 0 #Zeit wird aufgenommen und die 5 Sek. laufen t0 = 0 #Zeitstempel fuer Startzeit t1 = 0 #Zeitstempel fuer Endzeit typ = 0 #Typ 1=Chefarzt, Typ 2=KSW, Typ 3=FSJler while erkannt==0: #Kopfgesteuerte Whileschleife global continue_reading #Erhalte die UID der Karte (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL) #Antikollisions f. Schleife print "Card read UID: %s,%s,%s,%s" % (uid[0], uid[1], uid[2], uid[3]) #Ausgabe Array %s Syntax um String Ausgabe #Wenn UID erkannt: if status ==MIFAREReader.MI_OK: print "Karte erkannt" (status,uid) = MIFAREReader.MFRC522_Anticoll() #Zur Antikollision print uid print "uid0 ist %s " %(uid[0]) #gib die UID aus if uid[0] == 230 and uid[1] == 209 and uid[2] == 192 and uid[3] == 50 and fertig == 0: #wenn UID der 230, 209, .. entspricht dann starte oben def. Countdown fertig = 1 #siehe oben Zeitstempel nur einmal nehmen typ = 1 #mit zugewiese Karte Chefarzt weitermachen t0=time.time() #gibt aktuelle Zeit aus elif uid[0] == 136 and uid[1] == 4 and uid [2] ==139 and uid[3] == 94 and uid[4] ==89 and fertig == 0: fertig = 1 typ = 2 t0=time.time() elif uid[0] == 211 and uid[1] == 206 and uid[2] == 150 and uid[3] == 1 and uid[4] == 138 and fertig == 0: fertig = 1 typ = 3 t0=time.time() else: print "ACCESS DENIED - Fehlende Genehmigung fuer Ihre Karte" t1 = time.time() #wenn Knopf nicht gedrueckt wurde. if t1-t0 > 5 and fertig == 1 and keinesprache == 0: #Countdown wird heruntergezählt print "zeit abgelaufen" erkannt = 1 if typ == 1: print "Willkommen Herr Chefarzt" Popen(["/home/pi/Desktop/Client/client_0318/client_Chefarzt.sh"]) #Funktion zum GPIO XY auf 1 setzen, somit Aktivierung der Spracherkennung Popen("/usr/bin/leafpad /home/pi/NFC/Ausgabe_Chefarzt.txt",shell=True) #Aufrufparameter Subprocess-Methode: Code durch die Shell ausführen -> Prozess wird direkt gestartet if typ == 2: print "Willkommen Frau Krankenschwester" Popen(["/home/pi/Desktop/Client/client_0318/client_Krankenschwester.sh"]) Popen("/usr/bin/leafpad /home/pi/NFC/Ausgabe_Krankenschwester.txt",shell=True) if typ == 3: print "Willkommen FSJler" Popen(["/home/pi/Desktop/Client/client_0318/client_FSJler.sh"]) Popen("/usr/bin/leafpad /home/pi/NFC/Ausgabe_FSJler.txt",shell=True) typ = 0 #Abfrage Button wenn Knopf gedrueckt wurde if (GPIO.input(40)==0): time.sleep(0.1) #Abfrage des Buttons if typ == 1: keinesprache = 1 Popen("/usr/bin/leafpad /home/pi/NFC/Ausgabe_Chefarzt.txt",shell=True) #Ausfuehren Shell damit Parameter moeglich sind if typ == 2: keinesprache = 1 Popen("/usr/bin/leafpad /home/pi/NFC/Ausgabe_Krankenschwester.txt",shell=True) if typ == 3: keinesprache = 1 Popen("/usr/bin/leafpad /home/pi/NFC/Ausgabe_FSJler.txt",shell=True) print "T0" + str(t0) + " " + " T1" + str(t1) + " Diff " + str(t1-t0) #Zeitgeber Start; aktuell; Differenz T0=Start to wird in String konvertiert und somit ausgegeben time.sleep(0.5) #Führt die komplette Schleife jede halbe Sek. aus