Daten aus der Datenbank beziehen und wieder Speichern

  • Hallo erstmal,

    ich bin neu im Forum aber besitze schon Raspberry mit Python Kenntnisse.

    Zu meinem Projekt, also ich habe vor, in meiner kleinen Firma gibt es 5 Maschinen (Drehmaschinen, Fräsmaschinen) und jeder Mitarbeiter bekommt später ein RFid Karte . Da ich an jeder Maschine einen Raspberry mit einem RFID Leser, 2 Tastern und 2 Relais installiert habe und das alles für mein Projekt> Ich möchte das jeder Mitarbeiter seine eigene Karte bekommt und bevor er die Maschine startet sich einloggt, sodass ich später sehen kann wie lang war die Maschine im Betrieb(z.b. Der User bediente die Maschine Std:Min:Sec am Tag.Monat.Jahr) aber ich will nicht wissen wer, sondern einfach das sie Jemand bedient hat.

    Ich fange auch nicht bei Null an sondern habe mir das jetzt über einpaar Monate etwas zusammen gebastelt:

    Ich bin soweit das ich mich über zwei Taster Ein- und Ausloggen kann und die RFID-Codes in einer Textdatei liegen und mein Python Programm vergleicht die ausgelesene UID (mit dem RFID-Leser)mit den Codes aus der Text Datei. Nach dem Ausloggen wird wieder in eine Textdatei geschrieben und zwar,,Der User bediente die Maschine Std:Min:Sec am Tag.Monat.Jahr''. Das funktioniert alles super aber jetzt hab ich vor das ich einen Haupt-Raspberry hab, der die ganzen Codes auf ner Datenbank gespeichert hat und an meinen Maschinen sind auch Raspberrys wie oben beschrieben. Die Verbindung würde ich gerne über LAN ermöglichen.

    Jetzt wäre ich sehr Dankbar wenn mir jemand ne Anleitung bzw. ein Beispiel Script schicken könnte das ich etwas weiter komme.:)

  • Ich kann da jetzt leider keine konkrete Frage erkennen.


    Zusätzlich bitte Code zeigen

    Naja meine Frage ist wie ich Dateien aus einer Datenbank meines Haupt-Raspberrys bekomme der über LAN verbunden ist.



    #! /usr/bin/env python

    import RPi.GPIO as GPIO

    import time

    import MFRC522


    GPIO.setmode(GPIO.BOARD)


    GPIO.setup(36, GPIO.IN) #ein

    GPIO.setup(38, GPIO.IN) #Rot aus

    GPIO.setup(35, GPIO.OUT) # ein

    GPIO.setup(37, GPIO.OUT)#Rot aus

    GPIO.setup(29, GPIO.OUT) #Blau

    GPIO.setup(31, GPIO.OUT) #Blau



    c = open('code.txt', 'r')

    code = c.read()

    c.close()


    Ein = 0

    Aus = 0

    start = 0

    End = 0

    Geh = 0

    Komm = 0


    MIFAREReader = MFRC522.MFRC522()

    authcode = [32, 146, 26, 181, 29]



    try:

    while True:


    if Komm == 0:

    if GPIO.input(36) == True:

    Ein = 1

    Aus = 0

    End = 0

    print 'Kommen'

    GPIO.output(35, GPIO.HIGH)

    GPIO.output(37, GPIO.LOW)



    if Geh == 1:


    if GPIO.input(38) == True:

    Aus = 1

    Ein = 0

    print 'Gehen'

    GPIO.output(37, GPIO.HIGH)

    GPIO.output(35, GPIO.LOW)


    (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)

    if status == MIFAREReader.MI_OK:

    (status,uid) = MIFAREReader.MFRC522_Anticoll()

    key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]

    MIFAREReader.MFRC522_SelectTag(uid)

    status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, key, uid)

    if status == MIFAREReader.MI_OK:

    MIFAREReader.MFRC522_Read(8)

    MIFAREReader.MFRC522_StopCrypto1()

    print uid

    GPIO.output(29, GPIO.HIGH)

    time.sleep(0.2)

    GPIO.output(29, GPIO.LOW)

    time.sleep(0.2)

    GPIO.output(29, GPIO.HIGH)

    time.sleep(0.2)

    GPIO.output(29, GPIO.LOW)

    time.sleep(0.5)




    if start == 0:

    if Ein == 1:

    if str(uid) in code:

    GPIO.output(31, GPIO.HIGH) #ein

    start_time = time.time()

    print 'Eingeloggt'

    start = 1

    Geh = 1

    Komm = 1

    if End == 0:

    if Aus == 1:

    if str(uid) in code:

    GPIO.output(31, GPIO.LOW) #rot aus

    e = int(time.time() - start_time)

    print 'Ausgeloggt'

    print ('Der User bediente die Maschine ' '{:02d}:{:02d}:{:02d} std:min:sec'.format(e // 3600, (e % 3600 // 60), e % 60))

    print (time.strftime('%d.%m.%Y %H:%M:%S'))

    a = open('Anwesendheit.txt', 'a')

    a.write('Der User bediente die Maschine ' '{:02d}:{:02d}:{:02d} std:min:sec '.format(e // 3600, (e % 3600 // 60), e % 60))

    a.write(time.strftime('am %d.%m.%Y %H:%M:%S''\n'))

    a.close()

    End = 1

    start = 0

    Geh = 0

    Komm = 0





    except KeyboardInterrupt:

    print 'Abbruch'


    GPIO.output(37, GPIO.LOW) #Rot aus

    GPIO.output(35, GPIO.LOW) #ein

    GPIO.output(31, GPIO.LOW)

    GPIO.cleanup()

  • Du könntest die Textdateien vom Haupt Raspi auslesen lassen und direkt in die Datenbank schreiben.

    Wenn du die Daten in Textdateien hast, dann kannst du dir in Python ein Script schreiben.


    Ich vermute, dass die Werte von den Maschinen und auch der Aufbau der Textdateien immer gleich ist.


    Es würde mehrere Möglichkeiten geben, an die Daten zu kommen.

    Evtl. vom Haupt Raspi per SSH auf die "Maschinen" Raspis zugreifen und den Pfad hinterlegen zur Textdatei und diese dann auslesen lassen. Das geht per LAN.

    Oder du lässt die Dateien an den Haupt Raspi übertragen.

    - vielleicht per Socket

    oder

    - vielleicht per SCP

  • Also mein Vorschlag:

    Der "Hauptraspberry Pi" fungiert ja als Server.

    Somit werden die Maschinen Pis zu Clients.

    Entweder du richtest die verwendete Datenbank so ein, dass man innerhalb des lokalen Netzwerkes darauf zugreifen kann und die Clients in die DB schreiben oder aber, wenn nur via Localhost darauf zugegriffen werden kann, erstellst du von den Clients einen SSH Tunnel mit dem Server und trägst über den Clients die entsprechenden Daten direkt in die Datenbank ein.

    Ebenso kannst du in der Datenbank die RFID Codes hinterlegen.

    Vorteil, zentrale Verwaltung der Codes. Um das ganze abzusichern kannst du den Inhalt von den RFID Codes ja nochmals zwischenspeichern auf den Clients, welche sich dann bei jeden Start nochmals die Aktualisierung vom Server abholen, oder falls eben der Server nicht erreichbar ist, mit den zwischengespeicherten weiter arbeiten.


    Abhängig dessen welche DB bei dir zum Einsatz kommt, gibt es unterschiedliche Python Module, welche für dich in Frage kommen können.

    Mit Peewee hättest du aber ein Modul, welches unabhängig der Datenbank zu verwenden ist.


    Code bitte immer in Codetags posten.

    Desweiteren verwende Python3 nicht Python2! Sollten weitere Empfehlungen zum Code gewünscht sein, gib bescheid ;)

  • Erstmals vielen Dank an alle die mir geschrieben haben aber könnte mir bitte jemand ein Beispiel Code schicken,

    dieser sollte beinhaltet das ich die Codes aus der Datenbank direkt mit der ausgelesenen UID vergleichen kann. Und das ich von einer Hauptdatenbank zugreifen kann, habe es schon über den Terminal probiert und erfolgreich geschafft , aber bei Python habe ich da noch keine Ahnung.

    Würde mich über alles freuen was ich bekomme:)

    MFG

    Tobias