Hallo,
ich habe im Forum Bereich "Enocean" einen Bericht zum Aktor NodOn verfasst. Dieser Aktor habe ich nun an einen bestehenden konventionellen Bewegungsmelder gehängt, welcher mein Licht schaltet im UG Flur. Funktioniert eigenlich gut.. https://forum.fhem.de/index.php/topic,52750.msg524790.html#msg524790
Da ich nun aber hinsichtlich DOIF nicht weiter komme, wende ich mich an Euch, mit der Bitte um Hilfestellung:
--> Das Problem ist, dass das Einschalten zwar reibungslos geht, aber nach der abgelaufenen Zeit zwar das Licht ausgeht, aber nicht immer/unzuverlässig eine Bestätigung geschickt wird. Ich möchte dies nun so lösen, dass, wenn keine Bestätigung nach 3 Minuten eintraf, dass ich ein setreading state=off machen möchte.. Also im Sinne von
DOIF Flur_UG_L_NodOn31 state=on für länger als 3 Minuten setreating state=off
Wie mach ich das mit den länger als 3 Minuten? Hab auf die Schnelle nix hier im Bereich gefunden, schaue aber natürlich parallel weiter ;) Danke.
([Flur_UG_L_NodOn31:state] eq "on") (setreading ...)
DOELSE
wait 180
hallo ellert, danke..
aber wird da nicht zuerst das setreading geschrieben und dann erst 180sec gewartet? Es müsste ja umgekehrt sein.. zuerst 180sec warten, und dann erst das setreading state=off...
es geht aber auch so nicht.. ist irgendwas falsch?
([Flur_UG_L_NodOn31:state] eq "on") (setreading Flur_UG_L_NodOn31 state=off) DOELSE wait 180
wait ist ein Attribut und setreading hat eine andere Syntax. Wie kommst Du auf =off?
Danke, sorry.. natürlich nur "state off".. jetzt klappt es, danke
So stimmts
([Flur_UG_L_NodOn31:state] eq "on") (setreading Flur_UG_L_NodOn31 state off)
Muss ich noch das DOELSE am Schluss ergänzen oder gehts auch ohne?
Ich denke ja, kann aber sei, dass dann setreading immer ausgeführt wird, weil der Timer evt. nicht abgebrochen wird beim internen Statuswechsel, bin mir aber nicht sicher, einfach mal ausprobieren.
Zitat von: choetzu am 20 November 2016, 21:39:41
Muss ich noch das DOELSE am Schluss ergänzen oder gehts auch ohne?
Solange Du nur ein DOIF verwendest (also ohne DOELSEIF) ist das DOELSE immer implizit dabei, auch wenn Du es nicht hinschreibst.
herzlichen Dank...
Irgendwie scheint es nicht zu funktionieren. Als ich heute Nachmittag geprüft habe, war der Status on, obschon das Licht aus war.. der DOIF hat also nicht gegriffen.. an was könnte das liegen?
Mit dem DOIF Befehl sollte ja ein konstanter ON Status gar nicht möglich sein... resp. eben nur 180 sek..
Dann solltest Du mal alle Events aufzeichen, wie hier beschrieben http://www.fhemwiki.de/wiki/DOIF/Tools_und_Fehlersuche#Verhaltensanalyse_des_DOIF
und Flur_UG_L_NodOn31 auch mit loggen.
Zitat von: choetzu am 21 November 2016, 21:16:28
Irgendwie scheint es nicht zu funktionieren. Als ich heute Nachmittag geprüft habe, war der Status on, obschon das Licht aus war.. der DOIF hat also nicht gegriffen.. an was könnte das liegen?
Wie schon gesagt wurde, ist eine Diagnose schwierig ohne weitere Informationen. Ich würde aber mal einen Tipp wagen:
Wenn Dein DOIF ausgeführt wurde, wechselt es nicht den Zustand. Das liegt daran, dass im Ausführungsteil ein Reading gesetzt wird, auf das die Kondition reagiert. Das DOIF würde sich also quasi selbst triggern, was standardmäßig unterbunden wird (siehe Commandref unter "Triggerung durch selbst ausgelöste Events").
Das
Flur_UG_L_NodOn31 state off erreicht das DOIF also nicht, so dass es im cmd1 verbleibt. Wenn nun das Licht das nächste Mal eingeschaltet wird, ist das DOIF bereits in cmd1, es findet kein Statuswechsel und somit auch keine Aktion statt. Das kann erst wieder klappen, wenn
Flur_UG_L_NodOn31 einmal "extern" auf off gesetzt wurde.
Vermutlich kannst Du das Problem recht einfach beheben, indem Du das Attribut
do always setzt.
Aber wie gesagt, das ist nur eine Vermutung, ohne alle Details zu kennen.