NEWS
Script wird mehrfach ausgeführt Bedingung nicht geändert
-
Hallo in die Runde,
ich habe folgendes Problem und bin etwas ratlos wie ich das am besten löse.
Trigger ist ein GPIO - Port, der True bzw. false liefert. Bei True wird mit folgendem Blockly der Gaszähler hochgezählt:
Hin und wieder (vermute ich) bleibt der Gaszähler am Magneten stehen und damit bleibt der GPIO länger auf True. Wird dann wieder Gas verbraucht, liefert der GPIO wieder ein True. Zwischen diesen beiden True werden dann vom Blockly weitere Werte Gezählt.
Beispiel für den auslösenden GPIO-Port von letzter Nacht:
Zwischen 02:21:39 = true und dem nächsten aufgezeichneten Wert um 02:33:32 wieder = true
und
zwischen 02:38:57 und 02:47:06 ebenfalls = true wurde vom Script hochgezählt obwohl eigentlich keine Werte geliefert wurden:
Wie kann ich das unterbinden?
Die Einstsellung der rpi2.0 Instanz zu den GPIO´s:
Die History - Einstellungen zum Daten-Objekt:
Vielen Dank im Voraus
Franz
-
@datzerf ändere den Trigger von "ist wahr" auf "ist größer als letztes", dann wird der Trigger nur ausgelöst, wenn der Wert true ist und der vorherige false war
-
@ahnungsbefreit, danke für den Tipp.
Der hat das Problem zumindest teilweise gelöst. Das hochzählen zwischen zwei true - Zuständen ist damit erledigt.
Allerdings wird jetzt zu wenig gezählt.
Immer dann, wenn das Zähler-Rad mit dem Magneten der den Reed-Kontakt auslöst unter dem Reed-Kontakt stehen bleibt wird ein true am GPIO-Port gezählt wird. Läuft der Zähler wieder an, kommt kein false sondern das nächste true.
Dadurch wird dann nicht hochgezählt
History GPIO wobei um 00:57:36 der Zählwerk mit dem Magneten unter dem Reed Kontakt stehen geblieben ist:Irgendwann zwischen 00:57:36 und 01:08:24 ist die Heizung wieder angelaufen und um 01:08:24 das Zählwerk wieder mit dem Magneten am Reed-Kontkat vorbei gekommen. Ein false wurde zwischen diesen zwei Zeitpunkten nicht geschrieben, deshalb auch nicht hochgezählt.
History GPIO als Excel-Tabelle:
Vergleich History des GPIO und History des Gaszählers:
Kann ich das Problem eventuell mit einem Blockly lösen, das nach einem true am GPIO ca. 20-25 Sekunden wartet und prüf ob ein false geschrieben wurde? Falls keine vorhanden ist einfach eines schreibt?
Viele Grüße
Franz
-
@datzerf sagte in Script wird mehrfach ausgeführt Bedingung nicht geändert:
Läuft der Zähler wieder an, kommt kein false
Dann ist aber was anderes faul
Den triggern entweder auf, ist größer, wie schon geschrieben, oder du stellst auf ,wurde geändert,
Aber wie gesagt, prüfe doch erstmal dein Signal -
@crunchip ,
das Script lief nach dem Änderungsvorschlag @Ahnungsbefreit bis zu meinem letzte Post so:
Vorher war die Bedienung = wahr.
Ändere ich die Bedingung auf "wurde geändert" muss ich zusätzlich noch prüfen ob der Wert auch = wahr, denn nur dann will ich zählen.
Das Signal kann ich leider nur mit einem Magneten und nicht elektrisch prüfen. Mit Magnet an den Reed-Kontakt und wieder weg wird bei gesetzter Bedingung = wahr richtig gezählt. Ich muss allerdings zugeben, dass ich den Magneten nie länger als ca. 30 Sekunden an den Reed-Kontakt gehalten habe. -
-
@ahnungsbefreit ,
jetzt bin ich etwas "verwirrt"....
Hier der Trigger, den ich abfrage:
Falls dieses Objekt sich ändert (Prüfung versucht mit "ist wahr" und "ist größer als letztes")
dann soll der im usderdata - Bereich angelegt Datenpunk:
um 0,1 hochgezählt werden.
Den Wert aus dem Menü Trigger verwende ich an der Stelle doch und frage nicht noch mal separat mit wert von ab??
Die Aktualisierung, also die eigentliche Aktion sollte so doch auch passen?Wie schon geschrieben, so Lange der Status-Wechsel von true auf false im Wechsel erfolgt ist alles gut. Bleibt das Zählwerk mit dem Magneten aber über dem Reed-Kontakt (ist ein Schließer) stehen, weil der Brenner eben ausschaltet, dann scheint der Reed-Kontakt sobald der Zähler sich weiterdreht keinen false (für mich der Reed-Kontakt ist wieder offen) am GPIO - Port zu melden.
Statt dessen meldet er beim nächsten Durchlauf des Magneten an der Zählerwalze wieder ein true, Kontakt ist geschlossen. -
@datzerf sagte: Reed-Kontakt sobald der Zähler sich weiterdreht keinen false (für mich der Reed-Kontakt ist wieder offen) am GPIO - Port zu melden.
Dann tausche den Reed-Kontakt aus, denn er scheint zu verkleben, wenn er längere Zeit geschlossen ist.
-
@paul53
hab sowas schon fast befürchtet... Na dann versuch ich es mal mit einem anderen.
Danke für die Hilfe und Tipps. -
@datzerf Der Vollständigkeit halber: Was ich meinte, war folgender Ansatz:
Damit löst das Script immer aus, auch wenn der Wert schon vorher "true" war, sobald der DP aktualisiert wird. Aber vermutlich liegt das Problem hier wirklich bei Reed-Kontakt.