Code
Inhahalt meiner Datenbank bzw erstellen von Tabellen
Code
#CREATE TABLE IF NOT EXISTS `user` (
# `userid` int(255) UNSIGNED NOT NULL AUTO_INCREMENT,
# `cknutzerid` varchar(10) NOT NULL,
# `cknutzer` varchar(100) NOT NULL,
# `rfid` varchar(20) NOT NULL,
# PRIMARY KEY (`userid`)
#) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
#CREATE TABLE IF NOT EXISTS `dota` (
# `userid` int(255) UNSIGNED NOT NULL AUTO_INCREMENT,
# `cknutzerid` varchar(10) NOT NULL,
# `cknutzer` varchar(100) NOT NULL,
# `rfid` varchar(20) NOT NULL,
# `hd1` date NOT NULL,
# `hd2` varchar(4) NOT NULL,
# `hz1` varchar(10) NOT NULL,
# PRIMARY KEY (`userid`)
#) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
Alles anzeigen
meine Databankfelder
JoyIT Reader
Python
#!/usr/bin/env python3
# -*- coding: utf8 -*-
import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522
import signal
import datetime
import time
import mysql.connector
import os
#Zugriff auf Datenbank
mydb = mysql.connector.connect( host="localhost", user="user", password="password", database="database" )
#GPIO Schalten
GPIO.setmode(GPIO.BCM)
#Blaue LED GPIO12
LED_BLUE = 12
#Gruene LED GPIO16
LED_GREEN = 16
#Gelbe LED GPIO20
LED_YELLOW = 20
#Rote LED GPIO21
LED_RED = 21
#Setup fuer Blaue LED GPIO Ausgang
#Prgramm gestartet
GPIO.setup(LED_BLUE, GPIO.OUT)
#Setup fuer Gruene LED GPIO Ausgang
#Bereit zum scannen
GPIO.setup(LED_GREEN, GPIO.OUT)
#Setup fuer Gelbe LED GPIO Ausgang
#Daten werden verarbeitet
GPIO.setup(LED_YELLOW, GPIO.OUT)
#Setup fuer Rote LED GPIO Ausgang
#Fehler beim verarbeiten
GPIO.setup(LED_RED, GPIO.OUT)
#LED Blau Aus
GPIO.output(LED_BLUE, GPIO.LOW)
#LED Gruen Aus
GPIO.output(LED_GREEN, GPIO.LOW)
#LED Gelb Aus
GPIO.output(LED_YELLOW, GPIO.LOW)
#LED Rot Aus
GPIO.output(LED_RED, GPIO.LOW)
continue_reading = True
def end_read(signal,frame):
global continue_reading
print ("\nProgramm beendet!")
continue_reading = False
GPIO.cleanup()
GPIO.output(LED_BLUE, GPIO.HIGH)
signal.signal(signal.SIGINT, end_read)
reader=SimpleMFRC522()
print ("Programm gestartet zum Karten scannen!")
#Alle Programme Begin
while continue_reading:
now = datetime.datetime.today()
hd1 = now.strftime('%Y-%m-%d')
hd2 = now.strftime('%Y')
hz1 = time.strftime('%H:%M:%S', time.localtime())
ck, text=reader.read()
#if ck is not None:
GPIO.output(LED_GREEN , GPIO.LOW)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.HIGH)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.LOW)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.HIGH)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.LOW)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.HIGH)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.LOW)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.HIGH)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.LOW)
GPIO.output(LED_YELLOW, GPIO.HIGH)
mycursor = mydb.cursor()
sql = "SELECT * FROM user WHERE rfid = 'ck'"
mycursor.execute(sql)
myresult = mycursor.fetchone()
print(ck)
#Brauche userid
#erst mal sehen was ich zu sehen bekomme
print(myresult)
#Prüfe ob ck einen user zugeordnet ist
#wenn ja ( nicht nein ) dann etnehme daten aus rfis und trage in dota ein
#sonst weiter mit fehler
if myresult is not None:
mycursor = mydb.cursor()
sql = "SELECT * FROM user WHERE rfid = 'ck'"
mycursor.execute(sql)
myresult = mycursor.fetchall()
for row in myresult:
icknutzerid = row[1]
icknutzer = row[2]
irfid = ck
ihd1 = hd1
ihd2 = hd2
ihz1 = hz1
mycursor = mydb.cursor()
sql = "INSERT INTO dota (cknutzerid, cknutzer, rfid, hd1, hd2, hz1) VALUES (%s, %s, %s, %s, %s, %s)"
val = (icknutzerid, icknutzer, irfid, ivsb04hd1, ihd2, ihz1)
mycursor.execute(sql, val)
mydb.commit()
time.sleep(1)
print (ck + " wurde eingetragen")
print("Nächste Karte.")
GPIO.output(LED_YELLOW, GPIO.LOW)
continue
else:
GPIO.output(LED_YELLOW, GPIO.LOW)
GPIO.output(LED_RED, GPIO.HIGH)
time.sleep(1)
print (ck + " ist nicht vorhanden")
print("Nächste Karte.")
GPIO.output(LED_RED, GPIO.LOW)
Alles anzeigen
Soweit mein script, es klapt inzern Raspian Jessie mit Raspberry 3/ 3B ( Stretch habe ich unter den 3B+ )
allerdings habe ich die alten Mifare ~ JoyIT einträge angepasst hier
mein urcode
Code
passte für Mifare und JoyIT Reader
Code
#!/usr/bin/env python3
# -*- coding: utf8 -*-
import RPi.GPIO as GPIO
import MFRC522
import signal
import datetime
import time
import mysql.connector
import os
#Zugriff auf Datenbank
mydb = mysql.connector.connect( host="localhost", user="user", password="password", database="database")
#GPIO Schalten
GPIO.setmode(GPIO.BCM)
#Blaue LED GPIO12
LED_BLUE = 12
#Gruene LED GPIO16
LED_GREEN = 16
#Gelbe LED GPIO20
LED_YELLOW = 20
#Rote LED GPIO21
LED_RED = 21
#Setup fuer Blaue LED GPIO Ausgang
GPIO.setup(LED_BLUE, GPIO.OUT)
#Setup fuer Gruene LED GPIO Ausgang
GPIO.setup(LED_GREEN, GPIO.OUT)
#Setup fuer Gelbe LED GPIO Ausgang
GPIO.setup(LED_YELLOW, GPIO.OUT)
#Setup fuer Rote LED GPIO Ausgang
GPIO.setup(LED_RED, GPIO.OUT)
#LED Blau Aus
GPIO.output(LED_BLUE, GPIO.LOW)
#LED Gruen Aus
GPIO.output(LED_GREEN, GPIO.LOW)
#LED Gelb Aus
GPIO.output(LED_YELLOW, GPIO.LOW)
#LED Rot Aus
GPIO.output(LED_RED, GPIO.LOW)
continue_reading = True
def end_read(signal,frame):
global continue_reading
print ("\nProgramm beendet!")
continue_reading = False
GPIO.cleanup()
GPIO.output(LED_BLUE, GPIO.HIGH)
signal.signal(signal.SIGINT, end_read)
MIFAREReader = MFRC522.MFRC522()
print ("Programm gestartet zum Karten scannen!")
#Alle Programme Begin
while continue_reading:
now = datetime.datetime.today()
hd1 = now.strftime('%Y-%m-%d')
hd2 = now.strftime('%Y')
hz1 = time.strftime('%H:%M:%S', time.localtime())
(status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
(status,uid) = MIFAREReader.MFRC522_Anticoll()
if status == MIFAREReader.MI_OK:
GPIO.output(LED_GREEN , GPIO.LOW)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.HIGH)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.LOW)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.HIGH)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.LOW)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.HIGH)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.LOW)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.HIGH)
time.sleep(0.2)
GPIO.output(LED_GREEN , GPIO.LOW)
GPIO.output(LED_YELLOW, GPIO.HIGH)
card = str(uid[0]) + str(uid[1]) + str(uid[2]) + str(uid[3])
#Prüfe ob card einem user zugeordent ist
mycursor = mydb.cursor()
sql = "SELECT * FROM user WHERE rfid = ' + "card" + '"
mycursor.execute(sql)
myresult = mycursor.fetchone()
#Wenn Ja dann lese Daten aus rfid und schreibe in dota
#sonst weiter mit fehler
if myresult is not None:
mycursor = mydb.cursor()
sql = "SELECT * FROM user WHERE rfid = ' + "card" + '"
mycursor.execute(sql)
myresult = mycursor.fetchall()
for row in myresult:
icknutzerid = row[1]
icknutzer = row[2]
irfid = ck
ihd1 = hd1
ihd2 = hd2
ihz1 = hz1
mycursor = mydb.cursor()
sql = "INSERT INTO dota (cknutzerid, cknutzer, rfid, hd1, hd2, hz1) VALUES (%s, %s, %s, %s, %s, %s)"
val = (icknutzerid, icknutzer, irfid, ivsb04hd1, ihd2, ihz1)
mycursor.execute(sql, val)
mydb.commit()
#Datei zur absicherung der eingaben
y = icknutzerid + "|@|" + icknutzer + "|@|" + irfid + "|@|" + ihd1 + "|@|" + ihd2 + "|@|" + ihz1 + "\n"
file = open("/var/www/html/dota.dat","a+")
file.write(y)
file.close
time.sleep(1)
print (ck + " wurde eingetragen")
print("Nächste Karte.")
GPIO.output(LED_YELLOW, GPIO.LOW)
continue
else:
GPIO.output(LED_YELLOW, GPIO.LOW)
GPIO.output(LED_RED, GPIO.HIGH)
time.sleep(1)
print (ck + " ist nicht vorhanden")
print("Nächste Karte.")
GPIO.output(LED_RED, GPIO.LOW)
Alles anzeigen
Bitte darüber hinweg sehen fals hier abstände nicht immer passen
Abruchmeldung mit cleanup() soweie datenbank auslesen klapt nicht
was ich nicht verstehe unter dem alten PI klapts beim neuen nicht
warum ?