Nodemcu mit PN532 RFID write

Begonnen von joewanne, 14 Juni 2019, 22:58:20

Vorheriges Thema - Nächstes Thema

joewanne

Hallo zusammen,

weiß hier zufällig jemand wie ich mit dem PN532 Tags schreiben kann?
Ich bin recht neu auf diesem Gebiet.
Ich habe den PN532 per i2c an dem NodeMCU, kann die Chips auch lesen, nur würde ich gerne die 10 stellige Zahlen dur Namen ersetzen.
Bekomme es leider nicht hin.

Liebe Grüße
Jörg

Gesendet von meinem BLA-L29 mit Tapatalk


jheinze@waldbroel-hahn.de

#1
Hallo Jörg,

ich kann zwar nicht die ID's in Name umsetzen, aber vielleicht hilft Dir hier mein Ansatz.

ich hab mal eine kleine Doku dazu zusammengestellt, mit meiner Variante (und das geht sicherlich noch besser und anders) musst due nur 4 zusätzliche devices pro Reader anlegen, kannst aber dafür x-beliebig viele Reader einbinden, die dann alle Tags verarbeiten können. Die Konfiguration für MQTT ist schon vorhanden, unterstelle ich einfach mal.

Beispiel für das MQTT_DEVICE
Zitat
defmod RFID_R MQTT_DEVICE PN532
attr RFID_R IODev MyBroker
attr RFID_R alias RFID_R
attr RFID_R event-on-change-reading RFID1:5
attr RFID_R room _RFID
attr RFID_R stateFormat { ReadingsVal("RFID_R","RFID1","") }
attr RFID_R subscribeReading_RFID1 ESP_Easy/RFID/Tag

darauf reagiert dann das Notify:

defmod RFID_Sw notify RFID_R  { RFID_Switch("RFID_R","RFID1","RFID_ACK") }
attr RFID_Sw alias RFID_Sw
attr RFID_Sw room _Logik



und hier die Perl Funktion, am besten in 99_mUtils.pm einbinden:

sub
RFID_Dev_Toggle (@@@)
{
my ($xrfid,$xdevname,$xrfid_reading) = @_;
my ($readval) = ReadingsVal($xdevname,"state","00000000");
    Log 6, "RFID  $xrfid_reading  $xdevname => $readval   = $xrfid ";
if ( $readval eq 'on' )
{
fhem ( "set $xdevname off" ) ;
}
else {
fhem ( "set $xdevname on" ) ;
}
}


###RFID_Switch("RFID_R","RFID1","RFID_ACK")
# Parameter1: ReaderNr
# Parameter2: Reading mit TAG Nr
# Parameter3: Device für Quittungssignal (LED am Reader)
sub
RFID_Switch(@@@)
{
my ($rfid_check,$rfid_read,$devname) = @_;
my ($rfid) = ReadingsVal($rfid_check,$rfid_read,"00000000");
my ($readval) = ReadingsVal($rfid_check,$rfid_read,"00000000");

    Log 6, "RFID erkannt   $rfid_check = $rfid ";
# Quittungsignal = 1
fhem ( "set $devname on" );
    if ( $rfid eq '00000001' )
{
    Log 6, "RFID <0000001>   $rfid_check = $rfid ";
fhem ( "set <irgendeindevice> on" ) ;
}
if ( $rfid eq '00000002' )

RFID_Dev_Toggle ('00000002', '<device2>',$readval);
}
# ID Tag zurücksetzen, damit steht das Reading auf 00000000
#fhem ( "setreading $rfid_check $rfid_read 00000000")
}



dann das Dummy Device für das Quittungssignal, dieser Dummy wird in der Perl Funktion gefeuert:
defmod RFID_ACK dummy
attr RFID_ACK alias RFID_ACK
attr RFID_ACK room _RFID
attr RFID_ACK setList on off
attr RFID_ACK webCmd on:on off:off


und abschliessend das Senden der Quittung an den ESP:


defmod RFID_ACK_A notify RFID_ACK { \
    if ("$EVENT" eq "on") { \
    system "wget -O /dev/null -q http://192.168.xxx.xxx/control?cmd=Pulse,12,1,500&" \
    }0;;\
    if ("$EVENT" eq "off") { \
    system "wget -O /dev/null -q http://192.168.xxx.xxx/control?cmd=GPIO,12,0&" \
    }0;;\
}
attr RFID_ACK_A alias RFID_ACK_A
attr RFID_ACK_A room _Logik