Hab es geschafft, aus den HEX Daten die über den RFID Leser reinkommen, die ID der Chipkarten zusammenzubauen.
Danke an Euch!
Gruß,
Christoph
Hab es geschafft, aus den HEX Daten die über den RFID Leser reinkommen, die ID der Chipkarten zusammenzubauen.
Danke an Euch!
Gruß,
Christoph
Guten Abend
Ich habe hier einen RC522 RFID und einen Raspberry Pi.
Würde gern mittels Karten die Ab/Anwesenheit von Personen auf IPS Tracken.
Sprich, Person A kommt -> Skript A ausführen.
IPS läuft auf einem Server in meinem Netzwerk.
Gibt es hier Beispiele wie ich von Phyton Befehle per WebHook an IPS schicke?
Würde mich freuen, bin im Programmieren keine eins.
Grüße
Das wäre eine tolle Sache. Würde mich auch interessieren. Ich möchte mir auch so einen Leser basteln.
Ich hatte vor einiger Zeit mit dem Linux-Tool „netcat“ gute Erfahrungen (Werte der Temperaturmessung über 1-Wire vom PI an IPS übertragen) gemacht. Wenn ich mich recht entsinne, hatte ich dafür am IPS-Rechner in der Firewall einen Port und im IPS einen Server-Socket eingerichtet. Damit konnte ich z.B. von der Konsole des PIs per nc Daten an das IPS schicken und da auswerten.
Webhook wäre sicherlich charmanter. Allerdings ist ja auch Symcon auf dem PI lauffähig. Und wenn man die ID der Karte aus dem Python-Output in das lokale IPS bekäme, fände ich das noch besser.
Hat dazu jemand Ideen oder es sogar umgesetzt?
Nach vielem Probieren und einigen Stunde später bin in dieser Sache etwas weiter gekommen:
Zunächst habe den Code der ursprünglichen Read.py etwas gekürzt:
#!/usr/bin/env python
# -*- coding: utf8 -*-
import RPi.GPIO as GPIO
import MFRC522
import signal
continue_reading = True
# Capture SIGINT for cleanup when the script is aborted
def end_read(signal,frame):
global continue_reading
print "Ctrl+C captured, ending read."
continue_reading = False
GPIO.cleanup()
# Hook the SIGINT
signal.signal(signal.SIGINT, end_read)
# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()
# Welcome message
print "Beispielscript zum Auslesen der IDs von RFID-Tags mittels MFRC522-Leser"
print "Drücke Ctrl-C zum Abbrechen."
# 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
card_id = str(uid[0])+str(uid[1])+str(uid[2])+str(uid[3])
print
print "erkannte Tag-ID: "+card_id
Auf der Linux-Konsole kann ich mir mittels
sudo python Read.py
die ID meines Transponders anzeigen:
pi@raspberrypi:~/MFRC522-python $ sudo python Read1.py
Beispielscript zum Auslesen der IDs von RFID-Tags mittels MFRC522-Leser
Drücke Ctrl-C zum Abbrechen.
erkannte Tag-ID: 3811636217
erkannte Tag-ID: 3811636217
erkannte Tag-ID: 3811636217
erkannte Tag-ID: 3811636217
erkannte Tag-ID: 3811636217
erkannte Tag-ID: 3811636217
Dabei ist mir aufgefallen, dass bei zu langem Verweilen des Tags vor dem Leser der Lesevorgang mehrmalig ausgegeben wird. Das kann man verhindern, indem man in die Schleife für das Auslesen ein
time.sleep(5)
einfügt (hier 5 Sekunden). Dafür muss oben noch das Modul „time“ importiert werden:
import time
Die ID wird in der Variablen „card_id“ gespeichert und auf der Konsole ausgegeben. Wir möchten diesen Wert nun per Webhook ans IPS senden. Dafür muss das Modul „python-requests“ installiert und geladen werden:
sudo apt-get install python-requests
import requests
Nun können wir den HTTP-Request absetzen, bei dem wir die Tag-ID übertragen. (entsprechenden Webhook vorher auf dem IPS erstellen)
Das erstmal funktionierende Scritpt:
#!/usr/bin/env python
# -*- coding: utf8 -*-
import RPi.GPIO as GPIO
import MFRC522
import signal
import time
import requests
continue_reading = True
# Capture SIGINT for cleanup when the script is aborted
def end_read(signal,frame):
global continue_reading
print "Ctrl+C captured, ending read."
continue_reading = False
GPIO.cleanup()
# Hook the SIGINT
signal.signal(signal.SIGINT, end_read)
# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()
# Welcome message
print "Beispielscript zum Auslesen der IDs von RFID-Tags mittels MFRC522-Leser"
print "Drücke Ctrl-C zum Abbrechen."
# 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:
# Ausgeben der ID auf der Konsole
card_id = str(uid[0])+str(uid[1])+str(uid[2])+str(uid[3])
print
print "erkannte Tag-ID: "+card_id
# HTTP-Request absetzen
response = requests.get("http://192.168.99.99:82/hook/tag?tag_id="+card_id)
# Verzögerung von 5 Sekunden bis zum nächsten Lesevorgang
time.sleep(5)
Letzte Tat bis hierhin: das Read-Script muss noch reboot-sicher gemacht werden. Mittels
sudo nano /etc/rc.local
den Code
python /home/pi/test.py &
vor „exit 0“ einfügen
Der Code ist sicherlich einfach (und ggf. unsauber) gestrickt, aber als Python-Laie freue ich mich erstmal über die Funktion.