Watchdog auf FRM-Device (Arduino)

Begonnen von Pati_Alpha, 28 Februar 2017, 21:32:31

Vorheriges Thema - Nächstes Thema

Pati_Alpha

Hallo,

ich werde hier verrückt! Meine sonstigen Watchdogs laufen super, aber ich kriege keinen auf den Eingang eines Arduino geschaltet!
Code ist folgender:

# Eingang 4 des Arduino
define Eingang4 FRM_IN 4
attr Eingang4 IODev ArduinoMicro
attr Eingang4 stateFormat reading

define FlurmelderNote DOIF ([Eingang4:"on"] and [Kueche_Lampen] eq "off" and [SonneOben] eq "off") (\
set Kueche_Lampen on)

define FlurmelderWatch watchdog Eingang4:on 00:04:00 SAME (set Kueche_Lampen off)
attr FlurmelderWatch autoRestart


Der Watchdog wird nichtmal getriggert.
Ich vermute schwer (naheliegend), dass es etwas mit dem RegExp1 zutun hat. Der Watchdog reagiert ja nicht auf readings sondern events, richtig?
Kann es sein, dass der Arduino über FRM kein Event erzeugt, sondern nur das reading ändert?

Hintergrund der Sache ist übrigens, dass das Küchenlicht maximal 4 Minuten an bleibt, falls der Melder nicht nochmal in der Zeit auslöst. Möchte ich so haben, da der Melder mind. 3 Minuten braucht bis er wieder auslösen kann und man so besser verhindern kann, dass das Licht aus geht und man im Dunkeln steht.

Hat jemand einen Tipp dazu?
Ich hasse watchdogs mittlerweile irgendwie. :(

EDIT:
Kann ich durch Testen von Filtern im Eventmonitor nicht rausfinden, was ich als Filter zu nutzen habe für den watchdog?
Aber warum muss ich dann da zB bei einem Türmelder statt "HM_561CD2:open" dann "HM_561CD2.open" eingeben? Mit dem ":" zeigt er nichts an, so steht es aber (in dem anderen Beispiel-Watchdog des Türmelders) drin und funktioniert auch. Im Eventmonitor zeigt er aber nur das passende Event wenn ich den "." verwende.

Danke fürs Lesen und Grüße
Pati

rudolfkoenig

ZitatDer Watchdog reagiert ja nicht auf readings sondern events, richtig?
Richtig, genau wie notify, FileLog, Event-Monitor, usw.

ZitatKann es sein, dass der Arduino über FRM kein Event erzeugt, sondern nur das reading ändert?
Unwahrscheinlich: es verwendet readingsBulkUpdate, was Events generiert. Das Modul ist aber nicht von mir, ich habe nur kurz reingeschaut.

ZitatIch hasse watchdogs mittlerweile irgendwie.
Ich auch. Sequence mit notify ist mir deutlich lieber :)

ZitatKann ich durch Testen von Filtern im Eventmonitor nicht rausfinden, was ich als Filter zu nutzen habe für den watchdog?
Doch. Neuerdings kann man mit "Create/Modify device" im Event-Monitor sogar einen watchdog mit dem passenden Regexp anlegen.


ZitatAber warum muss ich dann da zB bei einem Türmelder statt "HM_561CD2:open" dann "HM_561CD2.open" eingeben?
Musst du nicht, die sind equivalent. Dein Regexp muss den kompletten(!) String deviceName _oder_ deviceName:event erwischen. Ob das mit : oder . passiert, ist dem Regexp egal.
Es gibt diverse Regexp-Tester im Internet, kannst damit experimentieren. Das einzige was man merken muss, FHEM packt dein Regexp automatisch in ^$ ein. Also ^DeinRegexp$

ZitatIm Eventmonitor zeigt er aber nur das passende Event wenn ich den "." verwende.
Das habe ich nicht verstanden.

Damian

define FlurmelderNote DOIF ([Eingang4:"on"] and [?Kueche_Lampen] eq "off" and [?SonneOben] eq "off")
  (set Kueche_Lampen on)
  (set Kueche_Lampen off)

attr FlurmelderNote do resetwait
attr FlurmelderNote wait 0,240


Hier geht die Lampe nicht aus solange sich einer innerhalb von 4 Minuten bewegt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Pati_Alpha

#3
Hallo Rudolf,

yes!! Dank dir hab ich es hinbekommen UND (was mindestens genau so super ist) wiedermal einiges über die Funktion von FHEM gelernt!
Wenn ich "Eingang4.*.on" als regexp nutze funktioniert es wunderbar. ;)

Dass man im EventMonitor direkt watchdogs angelegen kann ist ja auch super!


Ein paar Fragen habe ich aber interessehalber noch:
DOIF reagiert aber (auch?) auf Readings, oder? Denn dort kann ich ja sowas angeben wie:
([Lampe:state] eq "on")

Was hat es mit ^DeinRegexp$ auf sich? Warum dieses einpacken und worauf muss ich diesbezüglich achten?

Vergiss das letzte mit dem ".", das war Quatsch.

Interessant finde ich übrigens, dass man bei zB "Dummy.*.on" auch "Dummy on-for-timer 10" erwischt, obwohl nach dem "on" kein wildcard mehr ist. Wobei ich mich dann sowieso erinnert habe, dass "dummy" und "on-for-timer" keine gute Idee ist.

Müsste übrigens schwer grinsen, weil du geschrieben hast, dass du watchdogs auch hasst. ;)


Hey Damian,

das setzt aber glaube ich voraus, dass "Eingang4" so lange an bleibt, bis der Melder nicht mehr meldet, richtig? Der Eingang bleibt aber leider nur ca. 2-3 Sekunden an. :/
Bedeuten die 2. und 3. runden Klammern die Aktion für DOIF und für DOELSEIF? Ich wusste garnicht, dass man das so formulieren kann.



Viele Grüße und danke euch fürs Helfen! :)

Damian

Zitatdas setzt aber glaube ich voraus, dass "Eingang4" so lange an bleibt, bis der Melder nicht mehr meldet, richtig? Der Eingang bleibt aber leider nur ca. 2-3 Sekunden an. :/

nein. es reicht wenn Eingang4 bei bewegung kurz on meldet.

ZitatBedeuten die 2. und 3. runden Klammern die Aktion für DOIF und für DOELSEIF? Ich wusste garnicht, dass man das so formulieren kann.

nein, es handelt sich hier um verzögerbare Befehlssequenzen

Da musst du noch mal die Commandref des Moduls genauer studieren.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

ZitatWas hat es mit ^DeinRegexp$ auf sich?
^ heisst in Regexp-Sprech "Anfang des Strings" und $ heisst "Ende des Strings".
notify/fhemweb/etc packt "dein" Regexp so ein, damit ein device:on Regexp eben _nicht_ sowas wie noch_ein_device:on-for-timer erwischt.

Ich empfehle Dir die Regexp-Grundlagen zu lernen, in FHEM wird Regexp an vielen Stellen eingesetzt. Es gibt etliche Regexp-Tutorials auf dem Netz, aber man kann auch "perldoc perlretut" in der Kommandozeile aufrufen, perldoc entspricht dem commandref von FHEM.

Zitat"Dummy.*.on" auch "Dummy on-for-timer 10" erwischt
Das haette ich gerne belegt, ich bin der Ansicht, dass das nicht der Fall ist.

Pati_Alpha

Hey Damian,

ah, dann verstehe ich. Ja, das ist auch eine coole Lösung. Damit kann man eigentlich den watchdog (zumindest mit zwei gleichen regexps) komplett ersetzen, oder?
Eins noch: warum die "?" vor Kueche_Lampen und SonneOben?


Hey Rudolf,

ah, ich sehe schon, ich muss in der Tat mal meine Perl-Kenntnisse auffrischen! Danke dir aber nochmals fürs Erklären! :)

Einen Screenshot zu dem Verhalten mit dem on-for-timer hänge ich dir an.
Ich habe dort nur einen Dummy namens "TestDing" definiert, habe oben in die Befehlszeile "set TestDing on-for-timer 1" eingegeben und den Filter siehst du ja im Screenshot.

Damian

Zitat von: Pati_Alpha am 02 März 2017, 21:09:57
Hey Damian,

ah, dann verstehe ich. Ja, das ist auch eine coole Lösung. Damit kann man eigentlich den watchdog (zumindest mit zwei gleichen regexps) komplett ersetzen, oder?
Eins noch: warum die "?" vor Kueche_Lampen und SonneOben?

Auch das steht in der Commandref: https://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Stati_ohne_Trigger
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

ZitatEinen Screenshot zu dem Verhalten mit dem on-for-timer hänge ich dir an.
Der Regexp-Filter im Event-Monitor verhaelt sich anders, und filtert die sichtbaren Zeilen. Da das verwirrend ist, hat er jetzt eine Option bekommen, damit kann man zwischen bisherigen und Notify-Type Filterung umschalten.