Problem ESP8266, RFID Reader - Karten-ID wird permanent gesendet

Begonnen von cyvr1, 12 April 2017, 11:10:03

Vorheriges Thema - Nächstes Thema

cyvr1

Hallo zusammen,

ich habe ein kleines Problem mit einem ESP8266-12E, ESP Easy und einem PN532 RFID Reader.

Der Hintergrund:

ich brauche dann und wann ein kleines Bastelprojekt. Da ich vor kurzem in die Arduino/ESP8266 Welt eingetaucht bin, habe ich mir folgende Aufgabe vorgenommen. Die Gartenbewässerung erfolgt über eine Zisterne mit entsprechender Pumpe. Diese kann über FHEM ein- und ausgeschaltet werden (verschiedene Zeitprogramme, dauer an usw.). Manchmal ist man jedoch im Garten unterwegs und braucht spontan Wasser. Zur Zeit muss man dann erst wieder ins Haus, um die Pumpe zu aktivieren. Stiefel, Schuhe aus, Pumpe einschalten, wieder raus...

Ich möchte mir daher an zwei stellen im Garten eine NFC/RFID Reader installieren, um dann mit einem Anhänger am Schlüsselbund (das hat man ja eigentlich immer dabei) die Pumpe ein- und ausschalten zu können. Ich habe mir dazu einen ESP8266-12E besorgt und auf diesem ESPEasy (Version R147) geflasht, da er dann Daten über WLAN direkt an FHEM schicken kann. Damit verbunden ist ein PN532 RFID Reader, der auch von ESP Easy unterstützt wird.

Es tritt folgendes Problem auf. Die Karten ID wird immer mehrfach an FHEM geschickt, so dass auch die entsprechenden notifies und DOIFs mehrfach ausgeführt werden. Dadurch schaltet die Pumpe (bzw. zur Zeit eine LED am ESP) mehrfach ein und aus. Der letzte Zustand ist eher zufällig, in Abhängigkeit von der Anzahl der übermittelten IDs. Je länger man die Karte vor den RFID Reader hällt, desto öfter wird die ID gesendet.

Mein Idee/Hoffnung war, dass die Karten ID genau einmal an FHEM übermittelt wird, wenn der Lesevorgang stattfindet und man daher mit der ersten Übermittlung ein Gerät einschalten und mit einer zweiten wieder ausschalten kann. Das scheint aber nicht so einfach zu funktionieren.

Ich habe es schon mit verschiedenen notify-events probiert, die in FHEM in Verbindung mit ESPEasy zur Verfügung stehen, z.B. auch "presence:.present" (für Karte ans Lesegeräte gehalten) für das RFID Device. Dieses Event wird laut Event Monitor aber leider nur manchmal ausgelöst und teilweise mit Verspätung und ggf. sogar mehrfach, was wieder ein unkontrolliertes hin- und herschalten zur Folge hat.


Hat jemand schon mal mit ESP und RFID experimentiert und vielleicht sogar ähnliche Erfahrungen gemacht? Wie kann man das Problem lösen, so dass das Lesen einer Karte am RFID Reader einen definierbaren/vorhersagbaren Zustand erzeugt?

----------
Stephan Krätzschmar

dev0

Ich würde das ESPEasy Plugin so anpassen, dass nach dem Erkennen und Senden einer ID x Sekunden lang alle weiteren IDs ignoriert werden.

dev0

Auf FHEM Seite könnte man das wohl auch mit einer Kombination aus den Attributen event-on-change-reading und event-min-interval lösen.

cyvr1

Hi,

danke für die Vorschläge, ich werde mir das mal ansehen. Vielleicht hilft es, eine einfache Lösung zu finden.

Die kompliziertere/aufwändigere ist mir vermutlich gerade eingefallen. Die schließt drei Dummies, ein Notify und ein DOIF ein, sowie die Funktion "clearreadings" beim RFID Reader in FHEM, die nach dem Übertragen der gelesenen Karten ID in einen Dummy ausgeführt wird und den RFID Reader dazu bringt, die ID nicht weiter zu senden (quasi ein Reset des Readers). Muss ich heute Abend aber auch erst mal testen. In einer Trockensimulation sah das ganz gut aus, jetzt ist nur die Frage ob sich mit "clearreadings" der Reader tasächlich so zurücksetzen lässt, dass er sich wie nach einem Neustart verhält, nämlich ruhig.  ;)

----------
Stephan Krätzschmar

Benni

Du könntest das theoretisch sogar auch in deinem Notify per Code entprellen (FHEM hat immer so viele möglichkeiten  ;D):

set nyESPNotify inactive;sleep 1;set nyESPNotify active

Noch ein Hinweis. Ich habe bei mir festgestellt, das scheinbar wilkürlich ein paar Minuten nach der letzten Erfolgreichen übertragung einer ID vom ESP, diese nochmals übertragen wird und darauf hin natürlich auch entsprechende notify nochmals getriggert werden.

Verantwortlich dafür war anscheinden der presenceCheck des ESP-Devices. Ich habe diesen dann kurzerhand deaktiviert. Seither funktioniert es, wie es soll

Benni

Zitat von: cyvr1 am 12 April 2017, 12:10:54
Die kompliziertere/aufwändigere ist mir vermutlich gerade eingefallen. Die schließt drei Dummies, ein Notify und ein DOIF ein, sowie die Funktion "clearreadings" beim RFID Reader in FHEM, die nach dem Übertragen der gelesenen Karten ID in einen Dummy ausgeführt wird und den RFID Reader dazu bringt, die ID nicht weiter zu senden (quasi ein Reset des Readers). Muss ich heute Abend aber auch erst mal testen. In einer Trockensimulation sah das ganz gut aus, jetzt ist nur die Frage ob sich mit "clearreadings" der Reader tasächlich so zurücksetzen lässt, dass er sich wie nach einem Neustart verhält, nämlich ruhig.  ;)

Das klingt ja gruselig!  :o

clearreadings leert/löscht übrigens nur die Readings. Der Reader bekommt davon nix mit!

cyvr1

Gruselig trifft es.  Aber man probiert halt erst mal aus, wie man es zum Laufen bekommt. Optimieren kann man immer.

Wie gesagt die Sache mit "clearreadings" muss ich noch testen, wird dann aber wahrscheinlich nichts bringen. Zur Not gibt es auch noch "reset" bzw. "reboot". Vielleicht ist es das, was hilft den Reader ruhig zu stellen.

Die Vorschläge von dev0 werde ich mur heute Abend mal genauer ansehen. Vielleicht ist darüber was zu machen.

----------
Stephan Krätzschmar

cyvr1

So, ich habe es hinbekommen, indem ich die gelesene ID in einen Dummy verschiebe und dann für die Zeit, bis sich der RFID Reader wieder schlafen legt (rund 25 Sekunden) alle weiteren IDs ignoriere, indem der Dummy, da nicht 0, nicht mehr befüllt wird. Dieser triggert durch das Setzen der ID das DOIF, dass die entsprechenden Funktionen aktiviert/deaktiviert. Nach 25 Sekunden wird der Dummy wieder auf 0 gesetzt und dadurch bereit für eine neue ID. Vielleicht nicht die eleganteste Lösung, aber sie funktioniert erst mal wie erwartet.  :D

Für den oben genannten Zweck sind die 25 Sekunden Timeout bis sich der RFID Reader schlafen legt, kein Problem. Für andere mögliche Anwendungen ist das aber vielleicht etwas lang. Ich habe im ESPEasy keine Möglichkeit gefunden, diesen Timeout zu verkürzen. Hat jemand eine Idee, ob und wie sich das bewerktstelligen lässt? Ansonsten werde ich mal im ESPEasy Forum nachfragen.

----------
Stephan Krätzschmar

Benni

Zitat von: cyvr1 am 13 April 2017, 12:15:40
Hat jemand eine Idee, ob und wie sich das bewerktstelligen lässt? Ansonsten werde ich mal im ESPEasy Forum nachfragen.

Was ist mit den anderen Vorschlägen, die du bereits bekommen hast?

cyvr1

Hi,

Zitat von: Benni am 13 April 2017, 15:01:33
Was ist mit den anderen Vorschlägen, die du bereits bekommen hast?

die werde ich mir über Ostern mal in Ruhe ansehen. Da die Timeout Geschichte vermutlich ja eher von ESPEasy gesteuert wird werde ich eine Frage in das Forum dort stellen. Ich denke, das lässt sich nicht aus FHEM raus beeinflussen.

----------
Stephan Krätzschmar