MFRC522 Lesegerät

  • Hallo zusammen :)

    Ich brauch nochmal eure hilfe kurze vorgeschichte:

    Ich habe vorher das lesegerät RDM6300 verwendet ging auch ohne Probleme (siehe original scatch)

    Das was auskommentiert ist, war das alte lesegerät.

    Ich wollte das jetzt duch ein MFRC522 ersetzten und da fängt das an.


    File "/home/pi/lcdtest/functions.py", line 18, in read_rfid

    reader = SimpleMFRC522.read(5)

    TypeError: unbound method read() must be called with SimpleMFRC522 instance as first argument (got int instance instead)

    Und da hänge ich irgenwie fest.

    Gruß stefan


    Geänderter code

  • Hallo,

    poste bitte mal den Link zu der von dir Verwendeten Python Bibliothek `mfrc522` - habe gerade auf die schnelle nichts gefunden...

    Zum Code:

    • Warum führst du `read` in Zeile 18 nicht gegen die Instanz von `SimpleMFRC522()` aus Zeile 15 aus? Und warum überschreibst du die Instanz von `SimpleMFRC522()` später mit dem ausgelesenen Wert? Das macht keinen Sinn...
    • Was hast du in Zeile 20 und 21 vor? Das sieht wenig sinnvoll aus, was du da machst...
    • Die Methode `db_close` suggerierst, dass die DB geschlossen wird - wird sie aber nicht, du schließt nur den Cursor.
    • Die beiden + in Zeile 36 und 38 machen keinen Sinn - erstens verknüpft man Strings nicht mit +, zweitens kannst du das so wie so als einen String schreiben.
    • Die Zeilen 39 bis 42 sind komplett überflüssig -> weg damit.
    • Die Umwandlung der Datentypen in den Zeilen 44 - 47 ist fragwürdig. Normalerweise sollte dir die DB 2.0 API von Python den richtigen Datentyp zurück liefern WENN deine DB richtig angelegt ist. Heißt z.B., dass bei der id so wie so in Integer geliefert werden soll. Und einen Timestamp zum String zu machen ist Quatsch - dann brauchst du auch keinen Zeitstempel.
    • `id` ist ein ganz schlechter Name für eine Variable, weil du damit die eingebaute Funktion `id` von Python überschreibst - was zu unerwünschten Nebeneffekten führen kann.
    • `a` als Variablenname ist schlecht, weil nichtssagen. Benutzte aussagekräftige Variablennamen. Ein paar Buchstuben mehr kosten nichts.

    Gruß, noisefloor

  • Hallo,

    Hallo,

    poste bitte mal den Link zu der von dir Verwendeten Python Bibliothek `mfrc522` - habe gerade auf die schnelle nichts gefunden...

    Zum Code:

    • Warum führst du `read` in Zeile 18 nicht gegen die Instanz von `SimpleMFRC522()` aus Zeile 15 aus? Und warum überschreibst du die Instanz von `SimpleMFRC522()` später mit dem ausgelesenen Wert? Das macht keinen Sinn...
    • Was hast du in Zeile 20 und 21 vor? Das sieht wenig sinnvoll aus, was du da machst...
    • Die Methode `db_close` suggerierst, dass die DB geschlossen wird - wird sie aber nicht, du schließt nur den Cursor.
    • Die beiden + in Zeile 36 und 38 machen keinen Sinn - erstens verknüpft man Strings nicht mit +, zweitens kannst du das so wie so als einen String schreiben.
    • Die Zeilen 39 bis 42 sind komplett überflüssig -> weg damit.
    • Die Umwandlung der Datentypen in den Zeilen 44 - 47 ist fragwürdig. Normalerweise sollte dir die DB 2.0 API von Python den richtigen Datentyp zurück liefern WENN deine DB richtig angelegt ist. Heißt z.B., dass bei der id so wie so in Integer geliefert werden soll. Und einen Timestamp zum String zu machen ist Quatsch - dann brauchst du auch keinen Zeitstempel.
    • `id` ist ein ganz schlechter Name für eine Variable, weil du damit die eingebaute Funktion `id` von Python überschreibst - was zu unerwünschten Nebeneffekten führen kann.
    • `a` als Variablenname ist schlecht, weil nichtssagen. Benutzte aussagekräftige Variablennamen. Ein paar Buchstuben mehr kosten nichts.

    Gruß, noisefloor

    https://github.com/pimylifeup/MFRC522-python

  • Ja super danke, damit bin ich erstmal ein stück weiter und es funktioniert.

    Eine Sache noch:

    wie baue ich die GPIO ein das bestimmte geschaltet werden können wenn z.B der user bekannt ist?

    Ich habe mein glück da schonmal versucht aber ohne erfolg, muss das in einer schleife oder am ende ?

    danke im vorraus


  • Zitat
    wie baue ich die GPIO ein das bestimmte geschaltet werden können wenn z.B der user bekannt ist?

    das habe ich also garnicht verstanden. Schreib mal bitte Deinen Wunsch in korrektem und verständlichem Deutsch auf.

    Zitat

    Ich habe mein glück da schonmal versucht aber ohne erfolg, muss das in einer schleife oder am ende ?

    Das Programm ist eine Schleife: "while True:"

    - Karte lesen

    - wenn Kartenname in Datebank vorhanden:

    dann Zeit in Datenbank eintragen und zum Anfang

    sonst zum Anfang

    Du solltest allgemeine Algorithmik mit der Programmiersprache Python lernen.

  • Hallo,

    zum Code:

    • Eingerückt wird bei Python _immer_ mit 4 Leerzeichen, nicht nur 2.
    • SQL Statements mit Variablen werden nicht mit + zusammengestückelt wie in Zeile 26. So wie du es in Zeile 33 machst ist es richtig.
    • Zeile 31 macht in Kombination mit Zeile 27 keinen Sinn. `rowcount` kann nur 1 oder 0 sein, weil du in Zeile 27 nur max eine Zeile holtst. Du solltest gegen `None` prüfen.
    • Im `finally` Block solltest du auch die DB-Verbindung schließen.

    Die Frage zum Schalten verstehe ich auch nicht. Du schaltest doch in Zeile 35 einen GPIO bei bekanntem Nutzer?

    Gruß, noisefloor

  • Soweit funktioniert es jetzt GPIO 27 in diesen fall lässt sich schalten wie gewünscht.Ist der user vorhanden (rfid chip) schaltet GPIO und die LED in diesem fall leuchtet.

    Eine Sache noch wie baue ich ein KeyboardInterrupt das ich das Programm sauber beenden kann?

    noisefloor wie ist das gemeint in Zeile 27 gegen "none" prüfen? und wie wird Zeile 26 richtig zusammen gestückelt?

    danke im vorraus

  • Hallo,

    Zitat

    und wie wird Zeile 26 richtig zusammen gestückelt?

    Hatte ich oben schon geschrieben...

    Zitat

    wie ist das gemeint in Zeile 27 gegen "none" prüfen?

    Wenn die ID in er DB nicht vorhanden ist, dann liefert die Abfrage `None` (mit großem N) zurück. Ob `result` `None` ist oder Daten da sind prüfst du mit `if result:`

    Zitat

    Eine Sache noch wie baue ich ein KeyboardInterrupt das ich das Programm sauber beenden kann?

    Zeig' doch mal, was du probiert hast und nicht wie erwartet funktioniert.

    Gruß, noisefloor

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!