FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: choetzu am 20 November 2016, 16:27:17

Titel: DOIF bei Bewegungsmelder
Beitrag von: choetzu am 20 November 2016, 16:27:17
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.
Titel: Antw:DOIF bei Bewegungsmelder
Beitrag von: Ellert am 20 November 2016, 18:22:17
([Flur_UG_L_NodOn31:state] eq "on") (setreading ...)
DOELSE

wait 180
Titel: Antw:DOIF bei Bewegungsmelder
Beitrag von: choetzu am 20 November 2016, 20:47:49
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
Titel: Antw:DOIF bei Bewegungsmelder
Beitrag von: Ellert am 20 November 2016, 21:06:58
wait ist ein Attribut und setreading hat eine andere Syntax. Wie kommst Du auf =off?
Titel: Antw:DOIF bei Bewegungsmelder
Beitrag von: choetzu am 20 November 2016, 21:39:41
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?
Titel: Antw:DOIF bei Bewegungsmelder
Beitrag von: Ellert am 20 November 2016, 23:19:54
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.
Titel: Antw:DOIF bei Bewegungsmelder
Beitrag von: Brockmann am 21 November 2016, 08:28:08
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.
Titel: Antw:DOIF bei Bewegungsmelder
Beitrag von: choetzu am 21 November 2016, 21:16:28
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..
Titel: Antw:DOIF bei Bewegungsmelder
Beitrag von: Ellert am 21 November 2016, 21:53:52
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.
Titel: Antw:DOIF bei Bewegungsmelder
Beitrag von: Brockmann am 22 November 2016, 09:11:58
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.