[GELÖST] DOIF: Vermeintlich Mehrfache Ausführung?

Begonnen von Bastel-Frank, 06 April 2017, 21:06:59

Vorheriges Thema - Nächstes Thema

Bastel-Frank

Hallo zusammen,

Ich möchte meine Rolladen zu einem bestimmten Zeitpunkt runterfahren und habe hierzu ein doif mit twilight gebaut. Es führt dann dazu, dass bei Erreichen des twilight-Zeitpunktes die Rolladen heruntergefahren werden. Soweit ok. Dann wird aber ca. 70 Sekunden später das gleiche Kommando zum Runterfahren der Rolladen erneut ausgeführt. Was ziemlich doof ist, wenn sich zwischenzeitlich dazu entschieden hat, die Rolladen doch wieder per Hand hochzufahren. Was läuft falsch?

Viele Grüße
Frank

List vom DOIF:
Internals:
   DEF        ([{twilight("TC_TWILIGHT","ss_civil","16:00","21:00")}]) (set EG.wz.l.?.RO pct 0:FILTER=STATE!=off;
set EG.wz.ml.RO off)
   NAME       EG.wz.l.RO_OFF
   NR         463
   NTFY_ORDER 50-EG.wz.l.RO_OFF
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-04-06 20:47:58   cmd             1
     2017-04-06 20:47:58   cmd_event       timer_1
     2017-04-06 20:47:58   cmd_nr          1
     2017-03-28 19:17:41   mode            enable
     2017-04-06 20:47:58   state           cmd_1
     2017-04-06 20:47:58   timer_01_c01    07.04.2017 20:47:58
   Condition:
     0          DOIF_time_once($hash,0,$wday)
   Days:
   Devices:
   Do:
     0:
       0          set EG.wz.l.?.RO pct 0:FILTER=STATE!=off;  set EG.wz.ml.RO off
     1:
   Helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev
     timerevent timer_1
     timereventsState
     triggerDev
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
   Interval:
   Itimer:
   Localtime:
     0          1491590878
   Readings:
   Realtime:
     0          20:47:58
   Regexp:
   State:
   Time:
     0          {twilight("TC_TWILIGHT","ss_civil","16:00","21:00")}
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Triggertime:
     1491590878:
       localtime  1491590878
       Hash:
Attributes:
   do         always
   room       EG.Wohnen

KernSani

Genau das ist die Bedeutung von do always...  jedes Mal wenn twilight ein Event auslöst wird dein DOIF getriggert... Do always muss weg (und du brauchst ein DOELSE, sonst wird dein Rollladem nächsten Tag nicht geschlossen
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Bastel-Frank

Vielen Dank für deinen Hinweis.

Aber welches Kommando packe ich in das DOELSE rein? Ich möchte ja nur, dass zu dem Zeitpunkt die Rolladen runterfahren. Das Rauffahren soll nicht ins DOELSE rein.

igami

Vermutlich liegt es daran, dass die Sonne jeden Tag später untergeht.
Am 07.04.2017 um 20:47:58 und am 08.04.2017 dann später. Bei der Ausführung wird aber schon der neue Zeitpunkt berechnet. Es gibt ein im DOIF ein Attribut um einzuschränken wie schnell Befehle mehrmals gesendet werden. Ich bin mir nicht ganz sicher, aber es könnte cmdpause gewesen sein.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

automatisierer

DOELSE braucht kein Komanndo.

Dein Problem:
Sunset heute (Beispiel) 20.15
Sunset morgen 20.17

nachdem Sunset Heute abgelaufen ist, wird der Wert für Sunset morgen gesetzt und diese Zeit gibts heute auch nochmal (ca. 70 Sekunden später) daher wird dein DOIF wegen dem 'do alwasys' nochmal ausgeführt.

Du kannst das umgehen in dem du ein leeres
DOELSE
setzt, dann wechselt das DOIF in cmd_2, wenn es getriggert wird und die Bedingungen für cmd_1 nicht wahr sind.

Oder aber ein
DOELSEIF ([21:05])
ohne Ausführungsteil. Dann wechselt das DOIF immer fix um 21:05 in cmd_2.


pc1246

Bastel-Frank
Ich meine DOELSE reicht! Du musst das DOIF ja nur in einen anderen Zustand bringen! Steht aber auch irgendwo (Hilfe oder Wiki!)
Gruss Christoph

Edith: Der automatisierer war schneller!
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

Bastel-Frank

OK, vielen Dank an Euch! (insbesondere auch für die Erläuterungen, warum dies so passiert)

Ich bauen dann man ein leeres DOELSE ein und werde berichten.

Brockmann

Zitat von: automatisierer am 07 April 2017, 07:42:11
Du kannst das umgehen in dem du ein leeres
DOELSE
setzt, dann wechselt das DOIF in cmd_2, wenn es getriggert wird und die Bedingungen für cmd_1 nicht wahr sind.

Das Problem: Die einzige Bedingung ist der Zeitpunkt, zu dem es getriggert wird. Deshalb trifft cmd_1 immer zu, wenn getriggert wird und es geht nie in den DOELSE-Zweig. Insofern wäre das keine sinnvolle Lösung.

Zitat von: automatisierer am 07 April 2017, 07:42:11
Oder aber ein
DOELSEIF ([21:05])
ohne Ausführungsteil. Dann wechselt das DOIF immer fix um 21:05 in cmd_2.

So geht es. Dann aber das do always entfernen, sonst hilft das auch nicht.

Bastel-Frank

Ich habe die Variante mit DOELSEIF ([21:05]) umgesetzt und bin gespannt darauf, wie es sich verhalten wird.

automatisierer

#9
Ich bin mir nicht sicher, ob ein DOELSE reicht. Habs getestet, geht nicht.

da durch
[{twilight("TC_TWILIGHT","ss_civil","16:00","21:00")}]
ein Timer gesetzt wird:
2017-04-06 20:47:58   timer_01_c01    07.04.2017 20:47:58

es wird nur der Timer neu berechnet und gesetzt, das DOIF wechselt aber nicht in cmd_2 daher wird cmd_1 nicht nochmal ausgeführt werden. Abgesehen davon, sollte das DOIF durch das DOELSE in cmd_2 wechseln, würde auch der neu gesetzte Timer am gleichen Tag wieder zuschlagen.

also, besser das DOIF durch ein DOELSEIF ([21:05]) auf cmd_2 setzten.




Bastel-Frank

Kurzes Feedback: Die Lösung mit DOELSEIF funktioniert hervorragend. Jetzt habe ich DOIF auch wieder ein kleines bisschen besser verstanden.

Nochmal Danke an alle Hinweisgeber  :D.

Frohe Ostern
Frank