Code: Alles auswählen
#!/usr/bin/python3
import os
import RPi.GPIO as gpio
import MFRC522
import MySQLdb
import MySQLdb.cursors
from contextlib import closing
import time
DB_HOST = "XXX"
DB_USER = "XXX"
DB_PASSWORD = "XXX"
ablaufaktiv = True
def connect():
return MySQLdb.connect(host=DB_HOST, port=3307,
user=DB_USER , passwd=DB_PASSWORD, db="Schiessbuch",
cursorclass=MySQLdb.cursors.DictCursor)
def benutzer_anzeigen(db):
print()
with closing(db.cursor()) as cursor:
cursor.execute("""Select tbl_Benutzer.ID, tbl_Benutzer.UName, tbl_Benutzer.UVorname
FROM tbl_Benutzer INNER JOIN tbl_Karten ON tbl_Benutzer.ID = tbl_Karten.UserID""")
for row in cursor:
print( row["ID"], row["UName"], row["UVorname"])
def benutzer_registriert(db, user_id):
print()
with closing(db.cursor()) as cursor:
cursor.execute("""SELECT tbl_Schiesstand.UserID
FROM tbl_Schiesstand
Where tbl_Schiesstand.UserID = %d AND (DATE(tbl_Schiesstand.Beginn) = CURDATE() AND NOT DATE(tbl_Schiesstand.Ende) = CURDATE())""" % (user_id))
if cursor.fetchone():
print("Du bist bereits registriert")
time.sleep(5)
return False
def stand_anzeigen(db):
print()
with closing(db.cursor()) as cursor:
cursor.execute("Select ID, StandLang From tbl_Stand")
for row in cursor:
print( row["ID"], row["StandLang"])
def kaliber_anzeigen(db, stand_id):
print()
with closing(db.cursor()) as cursor:
cursor.execute("""Select tbl_Kaliber.ID, tbl_Kaliber.KaliberLang
From tbl_Stand INNER JOIN tbl_Kaliber ON tbl_Stand.ID = tbl_Kaliber.StandID
Where tbl_Stand.ID = %s""", (stand_id,))
for row in cursor:
print( row["ID"], row["KaliberLang"])
def schuetze_anlegen(db, user_id, stand_id, platz, kaliber_id, standaufsicht):
print()
with closing(db.cursor()) as cursor:
sql_query = """INSERT INTO `tbl_Schiesstand` (`UserID`, `StandID`, `Platz`, `KaliberID`, `Beginn`, `Standaufsicht`) VALUES (%s, %s, %s, %s, NOW(), %s)"""
data = (user_id, stand_id, platz, kaliber_id, standaufsicht)
cursor.execute(sql_query, data)
db.commit()
print("Du wurdest erfolgreich registriert")
def input_int(prompt):
while True:
try:
print()
return int(input(prompt))
except ValueError:
print("Fehler: Keine Zahl eingegeben.")
#Funktion für die RFID Karten zulesen
def karte_erkennen():
continue_reading = True
MIFAREReader = MFRC522.Reader(0, 0, 22)
# This loop keeps checking for chips. If one is near it will get the UID and authenticate
while continue_reading:
# Scan for cards
(status, TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
# If a card is found
if status == MIFAREReader.MI_OK:
print("Card detected")
# Get the UID of the card
(status, uid) = MIFAREReader.MFRC522_Anticoll()
# If we have the UID, continue
if status == MIFAREReader.MI_OK:
# Print UID
print("Card read UID: " + str(uid[0]) + "," + str(uid[1]) + "," + str(uid[2]) + "," + str(uid[3])+ "," + str(uid[4]))
MIFAREReader.AntennaOff()
continue_reading=False
return str(uid[0])+str(uid[1])+str(uid[2])+str(uid[3])+str(uid[4])
def Gpio():
# Show no warnings
GPIO.setwarnings(False)
# Use GPIO pin numbers
GPIO.setmode(GPIO.BOARD)
def cardread():
cardId=karte_erkennen()
return cardId
def kartenid_Userid(db, cardID):
print()
with closing(db.cursor()) as cursor:
cursor.execute("""SELECT tbl_Benutzer.ID
FROM tbl_Benutzer INNER JOIN tbl_Karten ON tbl_Benutzer.ID = tbl_Karten.UserID
WHERE tbl_Karten.KartenNummer=%s """) %(cardID)
for row in cursor:
print( row["ID"])
return row["ID"]
def main():
while ablaufaktiv:
try:
os.system('clear')
print("Schiessbuch")
print()
print("Bitte erfasse deine Daten!")
#print()
#print("Bitte Scanne deine Karte!")
db = connect()
#cardread()
benutzer_anzeigen(db)
user_id = input_int("Bitte deine User ID eingeben: ")
benutzer_registriert(db, user_id)
# benutzer_registriert(db, kartenid_Userid)
stand_anzeigen(db)
stand_id = input_int("Bitte Stand eingeben: ")
kaliber_anzeigen(db, stand_id)
kaliber_id = input_int("Bitte Kaliber eingeben: ")
platz = input_int("Auf welchem Stand schiesst du?: ")
standaufsicht = 0
schuetze_anlegen(db, user_id, stand_id, platz, kaliber_id, standaufsicht)
except KeyboardInterrupt:
print("Abbruch")
#GPIO.cleanup()
db.connect(close)
finally:
# GPIO.cleanup()
db.connect(close)
if __name__ == '__main__':
main()
Bei der kartenid_Userid mag ich eigentlich nur die UserId aus der Tabelle tbl_Benutzer haben. Damit ich diesen Wert weiter in der tbl_Schiesstand eintragen kann.