Problem ESP8266, RFID Reader PN532 - Karten-ID wird mehrfach gesendet

Begonnen von niels330, 11 April 2018, 14:48:24

Vorheriges Thema - Nächstes Thema

Tueftler1983


niels330

Eventmonitor zu rate gezogen, ohne das Event-on-change-reading wird ca 2 Minuten nach dem eigentlichen einlesen der Karte nochmal ein Event generiert und der "state" geupdatet.

2018-04-11 20:12:01 ESPEasy ESPEasy_ESP_Easy_RFIDScanner Tag: 226093xxxx
2018-04-11 20:12:01 ESPEasy ESPEasy_ESP_Easy_RFIDScanner Tag: 226093xxxx
2018-04-11 20:12:01 dummy Zimmertur off
...
2018-04-11 20:13:59 ESPEasy ESPEasy_ESP_Easy_RFIDScanner Tag: 226093xxxx
2018-04-11 20:13:59 dummy Zimmertur off

Sprich ein Event-on-update-reading hilft nicht weiter, doppeltes Event = doppeltes klicken. Ein Event-on-change-reading unterdrückt zwar das zweite event und somit ein erneutes klicken, aber dann ist wie gesagt das Problem, dass er bei zukünftigem Einlesen der selben RFID Karte gar nichts mehr macht.

Was mir die ganze Zeit noch nicht klar ist, warum wird das state-Reading (state "Tag: xxxxxx") nach 2-4 Minuten nochmal geupdatet, das Tag-Reading aber liest wirklich nur das einscannen der Karte aus (Tag "xxxxx")und updatet nicht random... Das heißt doch eigentlich, dass ich im Endeffekt nur mit dem Tag-Reading wirklich weiterkomme und dieses irgendwie verarbeiten muss, oder?

Entchuldigt bitte die vielleicht total dämlichen Fragen, aber daran hänge ich momentan extrem... :) Ist einfach nicht hübsch, wenn die Tür zwei Minuten nach dem öffnen nochmal klickert, auch wenn es in dem Fall nicht sicherheitsrelevant ist.

Besten Gruß,
Niels

tik-tak-tok

#17
Hallo Niels,

probiere doch bitte mal folgendes DOIF (statt deines Notify). Notify bitte für den Test deaktivieren!


define RFID_Tag_DOIF DOIF ([ESPEasy_ESP_Easy_RFIDScanner:Tag] eq "1234567") (set Zimmertur off)
DOELSE


Eventuell musst du in diesem DOIF das Attribut "do" - "always" setzen.
Also in die FHEM Befehlszeile folgendes eingeben:
attr RFID_Tag_DOIF do always

Das do always aber erst setzen, wenn es irgendeine Fehlfunktion ohne dieses Attribut gibt.

Mit der Bitte um Feedback, wie die Tests verliefen.

Gruß,
Mike

niels330

Zitat von: tik-tak-tok am 11 April 2018, 20:26:01
Hallo Niels,

probiere doch bitte mal folgendes DOIF (statt deines Notify). Notify bitte für den Test deaktivieren!


define RFID_Tag_DOIF DOIF ([ESPEasy_ESP_Easy_RFIDScanner:Tag] eq "1234567") (set Zimmertur off)
DOELSE


Eventuell musst du in diesem DOIF das Attribut "do" - "always" setzen.
Also in die FHEM Befehlszeile folgendes eingeben:
attr RFID_Tag_DOIF do always

Das do always aber erst setzen, wenn es irgendeine Fehlfunktion ohne dieses Attribut gibt.

Mit der Bitte um Feedback, wie die Tests verliefen.

Gruß,
Mike

Servus,
erstmal danke für den neuen Ansatz, soeben getestet, leider auch nicht wirklich erfolgreich. Ohne das do always atrribut passiert gar nichts, also im Eventmonitor taucht zwar das Reading auf

2018-04-11 20:31:54 ESPEasy ESPEasy_ESP_Easy_RFIDScanner Tag: 226093xxxx
2018-04-11 20:31:55 ESPEasy ESPEasy_ESP_Easy_RFIDScanner Tag: 226093xxxx

Aber es klickt gar nicht.

Setze ich dann das do always Attribut passiert folgendes:

2018-04-11 20:40:38 DOIF RFID_Tag_DOIF cmd_nr: 1
2018-04-11 20:40:38 DOIF RFID_Tag_DOIF cmd: 1
2018-04-11 20:40:38 DOIF RFID_Tag_DOIF cmd_event: ESPEasy_ESP_Easy_RFIDScanner
2018-04-11 20:40:38 DOIF RFID_Tag_DOIF cmd_1
2018-04-11 20:40:38 ESPEasy ESPEasy_ESP_Easy_RFIDScanner Tag: 226093xxxx
2018-04-11 20:40:38 ESPEasy ESPEasy_ESP_Easy_RFIDScanner Tag: 226093xxxx
2018-04-11 20:40:38 dummy Zimmertur off
....
2018-04-11 20:43:43 DOIF RFID_Tag_DOIF cmd_nr: 1
2018-04-11 20:43:43 DOIF RFID_Tag_DOIF cmd: 1
2018-04-11 20:43:43 DOIF RFID_Tag_DOIF cmd_event: ESPEasy_ESP_Easy_RFIDScanner
2018-04-11 20:43:43 DOIF RFID_Tag_DOIF cmd_1
2018-04-11 20:43:43 ESPEasy ESPEasy_ESP_Easy_RFIDScanner Tag: 226093xxxx
2018-04-11 20:43:43 dummy Zimmertur off
....
2018-04-11 20:48:44 DOIF RFID_Tag_DOIF cmd_nr: 1
2018-04-11 20:48:44 DOIF RFID_Tag_DOIF cmd: 1
2018-04-11 20:48:44 DOIF RFID_Tag_DOIF cmd_event: ESPEasy_ESP_Easy_RFIDScanner
2018-04-11 20:48:44 DOIF RFID_Tag_DOIF cmd_1
2018-04-11 20:48:44 ESPEasy ESPEasy_ESP_Easy_RFIDScanner present
2018-04-11 20:48:44 dummy Zimmertur off

Sprich diesmal klickt er sogar dreimal... mit ca 3 Minuten verzögerung kommt das Reading mit der UID erneut rein und nach weiteren 5 Minuten wechselt er auf das reading "present" und schaltet nochmal. Einfach zum Mäuse melken.

Im List von ESPEasy_ESP_Easy_RFIDScanner ist aber auch hier zu erkennen, dass nur das state-reading randomly geupdatet wird. Wenn man es irgendwie schaffen würde mit dem Tag-Reading weiterzuarbeiten, dann wäre alles super, da steht nälich auch jetzt noch die Uhrzeit vom letzten einlesen der RFID Karte...

Internals:
   DEF        192.168.0.241 80 espBridge ESP_Easy_RFIDScanner
   ESP_BUILD  20100
   ESP_SLEEP  0
   ESP_UNIT   0
   HOST       192.168.0.241
   IDENT      ESP_Easy_RFIDScanner
   INTERVAL   300
   IODev      espBridge
   LASTInputDev espBridge
   MSGCNT     9
   NAME       ESPEasy_ESP_Easy_RFIDScanner
   NOTIFYDEV  global
   NR         499
   NTFY_ORDER 50-ESPEasy_ESP_Easy_RFIDScanner
   PORT       80
   STATE      present
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    0.82
   espBridge_MSGCNT 9
   espBridge_TIME 2018-04-11 20:40:38
   Readings:
     2018-04-11 20:40:38   Tag             2260931259
     2018-04-04 03:38:40   presence        present
     2018-04-11 20:48:43   state           present
   Helper:
     Intat:
       1:
         FN         ESPEasy_statusRequest
         INTERVAL   304
         TRIGGERTIME 11.04.2018 20:53:47
     Received:
       Tag        1523472038.5515
Attributes:
   IODev      espBridge
   Interval   300
   event-on-update-reading .*
   group      ESPEasy Device
   presenceCheck 0
   readingSwitchText 1
   room       ESPEasy
   setState   3

Seltsaaaam....

Beste Grüße,
Niels

PS: Wollte mich mal bedanken, toll wieviele sich hier einfach einschalten um mit mir nach der Lösung suchen, find ich super! Danke!

RaspiLED

Hi,
Und ich mich beschweren ;-)
1.) Nutze Code Tags um die Listen von Logs oder Befehlen:
[code]blabla[/code]

2.) Gehe dich mal dem root cause auf die Spur! Hast Du mal in deinem ESP Easy Device geschaut, was da eingetragen ist? Unter Rules oder Hardware (z.B. Delays?)

Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

niels330

Zitat von: RaspiLED am 11 April 2018, 21:08:31
2.) Gehe dich mal dem root cause auf die Spur! Hast Du mal in deinem ESP Easy Device geschaut, was da eingetragen ist? Unter Rules oder Hardware (z.B. Delays?).

Einen Rules Reiter habe ich in ESPEasy gar nicht. Und unter Hardware sind bei mir folgende Items aufgeführt: Wifi Status LED, I2C Interface, SPI Interface, GPIO boot states... nix mit Delays oder ähnliches. Verwirrend. Aber wie ursprünglich gesagt, das zeitverzögerte Event tritt auch auf, wenn ich den ESP nach erstmaligem schalten komplett vom Strom nehme (und lasse), daher gehe ich davon aus, dass der Fehler auf FHEM seite liegt. kann mich natürlich täuschen...

Tueftler1983

Was hast du den auf der ESP Config seite hier bei delay stehen?? siehe screenshot?

niels330

Zitat von: Tueftler1983 am 11 April 2018, 21:37:43
Was hast du den auf der ESP Config seite hier bei delay stehen?? siehe screenshot?

Mein Menü schaut etwa anders aus. Evtl ist da was falsch eingestellt? Habe dort aber nicht rumgespielt, sondern einfach die Original-Einstellungen so gelassen...

Gruß

RaspiLED

Hi,
Aber in jeder Hardware gibt es doch wieder ein Delay. 0 gleich sofort übermitteln und Wert in s für Zwitverzögert. Die Rules muss man erst unter Advanced aktivieren, wenn Du die nicht hast, ist das nicht schlimm und kann auch nicht den Fehler machen ;-)
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

Otto123

Zitat von: niels330 am 11 April 2018, 20:21:43
Eventmonitor zu rate gezogen, ohne das Event-on-change-reading wird ca 2 Minuten nach dem eigentlichen einlesen der Karte nochmal ein Event generiert und der "state" geupdatet.

2018-04-11 20:12:01 ESPEasy ESPEasy_ESP_Easy_RFIDScanner Tag: 226093xxxx
2018-04-11 20:12:01 ESPEasy ESPEasy_ESP_Easy_RFIDScanner Tag: 226093xxxx
2018-04-11 20:12:01 dummy Zimmertur off
...
2018-04-11 20:13:59 ESPEasy ESPEasy_ESP_Easy_RFIDScanner Tag: 226093xxxx
2018-04-11 20:13:59 dummy Zimmertur off

Hallo Niels,

wenn das alles ist im Eventmonitor (da gibt es übrigens Filter, Du solltest Dir wirklich mal das Wiki durchlesen) dann kommen ja nicht zwei Events wie Du immer erzählst, sondern drei. Zwei sofort und einer verzögert.

Edit:
Die ersten beiden Events sind übrigens einmal das setzen des Readings Tag und zum zweiten das setzen des STATE durch attr setstate 3. Ändere das attr mal auf setstate 2, dann kann man die Events unterscheiden.

Edit2:

Kannst Du mal das attr <> Interval 300 auf 0 setzen! Das brauchst Du aus meiner Sicht nicht. Aber ob es das ist?
ZitatInterval
Used to set polling interval for presence check and GPIOs polling in seconds. 0 will disable this feature.
Possible values: secs > 10.
Default: 300

Gruß Otto

Anhang: Nur falls Du die Codetags nicht findest, die Arnd erwähnt hat.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Tueftler1983

probieren kann er es ja indem er den interval auf 0 setzt aber 300 sind ja 5 min und das passt ja auch nicht

Otto123

Moin,

ja ich weiß. War nur eine Idee.

Das Hauptproblem in dem Fall ist sicher, dass Tag 3 Zeichen hat und mit dem Standard attr <> setState 3 ist dann der Event für das setzen des state und des Readings nicht mehr unterscheidbar ist.
ZitatsetState
Summarize received values in state reading.
A positive number determines the number of characters used for abbreviated reading names. Only readings with an age less than interval will be considered. If your are not satisfied with format or behavior of setState then disable this attribute (set to 0) and use global attributes userReadings and/or stateFormat to get what you want.
Possible values: integer >=0
Default: 3 (enabled with 3 characters abbreviation)
Warum der state nach ein paar Minuten nochmal aktualisiert wird erschliesst sich mir nicht.

Fakt ist, so wie es jetzt ist, ist der eigentliche Event nicht auswertbar!

Könnte man eventuell damit beheben
ZitataddStateEvent
Das mit dem state Reading verknüpfte Event ist speziell, da das dazugehörige Prefix "state: " entfernt wird, d.h. $EVENT ist nicht "state: on", sondern nur "on". In manchen Fällen ist es aber erwünscht das unmodifizierte Event zu bekommen, d.h. wo "state: " nicht entfernt ist. Für diese Fälle sollte addStateEvent auf 1 gesetzt werden, die Voreinstellung ist 0 (deaktiviert).
Achtung:
dieses Attribut muss beim Empfänger (notify, FileLog, etc) gesetzt werden.
dieses Attribut zeigt nur für solche Geräte-Events eine Wirkung, die readingFnAttributes unterstützen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

dev0

@niels330:
Die einzelnen Readings der einzelnen FHEM ESPEasy Devices werden dann aktualisiert (incl. event), wenn Daten dafür empfangen werden.

Das Reading state wird aktualisiert, wenn irgendein anderes Reading aktualisiert wird, auch das presence Reading. Wenn Dein notify, wie im ersten Beitrag gezeigt, auf das Reading Tag triggert, dann, weil es aktualisiert wurde oder Otto123s Vermutung trifft zu (habe ich nicht geprüft), dann sollte Dir das notify Attribut addStateEvent helfen.

Wenn das Update (incl. events) des Readings state Dich stört, dann kannst Du das mit dem Attribut setState abstellen und Dich selbst um den Inhalt von state kümmern.

Die event-on-[change|update]-reading Attribute funktionieren bei allen Readings der FHEM ESPEasy Devices so wie sie in der command reference beschrieben sind.

niels330

Zitat von: Otto123 am 11 April 2018, 22:18:40
Edit:
Die ersten beiden Events sind übrigens einmal das setzen des Readings Tag und zum zweiten das setzen des STATE durch attr setstate 3. Ändere das attr mal auf setstate 2, dann kann man die Events unterscheiden.

Edit2:

Kannst Du mal das attr <> Interval 300 auf 0 setzen! Das brauchst Du aus meiner Sicht nicht. Aber ob es das ist?


Otto... Danke! Ganz genau erschließt es sich mir nicht, warum wieso weshalb, aber durch diese beiden Modifikationen ist das Problem behoben worden!

define ESPEasy_notify_Checkkarte notify ESPEasy_ESP_Easy_RFIDScanner:Tag:.226093xxxx {fhem "set Zimmertur off"}
attr ESPEasy_notify_Checkkarte room ESPEasy



define ESPEasy_ESP_Easy_RFIDScanner ESPEasy 192.168.0.241 80 espBridge ESP_Easy_RFIDScanner
attr ESPEasy_ESP_Easy_RFIDScanner IODev espBridge
attr ESPEasy_ESP_Easy_RFIDScanner Interval 0
attr ESPEasy_ESP_Easy_RFIDScanner event-on-update-reading .*
attr ESPEasy_ESP_Easy_RFIDScanner group ESPEasy Device
attr ESPEasy_ESP_Easy_RFIDScanner presenceCheck 0
attr ESPEasy_ESP_Easy_RFIDScanner readingSwitchText 1
attr ESPEasy_ESP_Easy_RFIDScanner room ESPEasy
attr ESPEasy_ESP_Easy_RFIDScanner setState 2


Su tut es genau wie gewünscht!

Vielen danke an alle für die hervorragenden Lösungsansätze, super!

Gruß,
Niels

Otto123

Hallo Niels,

noch zwei Tipps
{fhem "set Zimmertur off"} -> set Zimmertur off
An der Stelle brauchst Du den Sprung von FHEm nach Perl und zurück nach FHEM nicht. Aber ich weiß manche mögen das so "Einheitlich"  ;D

Jetzt ist ja unklar was zum Erfolg geführt hat?
Auf alle Fälle ist der Event für das setzen des state nur noch zweistellig, der sollte also jetzt so aussehen - oder?:
2018-04-11 20:31:55 ESPEasy ESPEasy_ESP_Easy_RFIDScanner Ta: 226093xxxx

Ist der zweite Event nach ein paar Minuten weggefallen?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz