Hallo zusammen,
ich habe folgende DOIF Definition, in der ich eine Range abfrage. Solange der Azimuth zwischen 240° u. 270° und die Automatik auf "An" steht, sollte die Bedingung doch durchgehen wahr sein und der Befehlsstrang nicht mehrfach ausgeführt werden. Das passiert aber nicht und das Modul triggert alle 5 Minuten - immer dann, wenn der Azimuth aktualisiert wird.
Das Attribut do always ist nicht gesetzt.
DOELSEIF ([du_Beschattung] eq "An" and [xxx:azimuth]>= 240 and [xxx:azimuth] <270) (bla bla bla)
Gibt es eine Lösung, wie ich das Verhalten unterbinden kann?
Vielen Dank und Grüße,
Max
Zeig mal ein "list" vom DOIF. Du hast vermutlich irgendwelches Attribute wie do always im Einsatz. Dann ja, die Bedingung wird jedes mal getriggert, wenn [xxx:azimuth] sich ändert.
Hi amenomade,
List liefer ich gerne nach - sitze gerade nicht am PC. Das Do always Attribut ist, wie oben geschrieben, nicht eingerichtet.
Dann hätte ich es ja verstanden... ;)
Max
hiho,
dann wird wohl einer der anderen pfade zwischendurch "aktiv".
logfile/eventmonitor mal angeschaut während der zeit?
grüße
Leider sehen wir ja nur einen Ausschnitt. Gibt es ein DOELSE?
Hallo zusammen,
so, anbei das List
Internals:
DEF ([du_Beschattung] eq "An" and [xxx:azimuth]>= 75 and [xxx:azimuth] <120)
(set RL_SZ_Links:FILTER=position_2>{(ReadingsVal('du_Beschattung','Abdunkelung',25))} dim [du_Beschattung:Abdunkelung])
DOELSEIF
([du_Beschattung] eq "An" and [xxx:azimuth]>= 125 and [xxx:azimuth] <240 and [rgr_Bewohner] and [RB_Wetter])
(
IF ([rgr_Bewohner] =~ /gone|absent/) ((set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts dim [du_Beschattung:Abdunkelung]), set RL_WZ_Links position {(100-[du_Beschattung:Abdunkelung])}, (set RL_SZ_Links:FILTER=position_2<={(ReadingsVal("du_Beschattung","Abdunkelung",25))} Hoch), set Markise:FILTER=STATE!=closed Rein),
IF ([rgr_Bewohner] =~ /home/ and [RB_Wetter:wind_speed:d] <=30 and [FTK_WZ_Links] eq "open") ((set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts dim [du_Beschattung:Abdunkelung]), set Markise:FILTER=STATE!=open Raus, (set RL_SZ_Links:FILTER=position_2<={(ReadingsVal("du_Beschattung","Abdunkelung",25))} Hoch)),
IF ([rgr_Bewohner] =~ /home/ and [RB_Wetter:wind_speed:d] <=30 and [FTK_WZ_Links] eq "closed") ((set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts dim [du_Beschattung:Abdunkelung]), set Markise:FILTER=STATE!=closed Rein, set RL_WZ_Links position {(100-[du_Beschattung:Abdunkelung])}, (set RL_SZ_Links:FILTER=position_2<={(ReadingsVal("du_Beschattung","Abdunkelung",25))} Hoch)),
IF ([rgr_Bewohner] =~ /home/ and [RB_Wetter:wind_speed:d] >30 and [FTK_WZ_Links] eq "closed")((set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts dim [du_Beschattung:Abdunkelung]), set RL_WZ_Links position {(100-[du_Beschattung:Abdunkelung])}, (set RL_SZ_Links:FILTER=position_2<={(ReadingsVal("du_Beschattung","Abdunkelung",25))} Hoch), set Markise:FILTER=STATE!=closed Rein),
IF ([rgr_Bewohner] =~ /home/ and [RB_Wetter:wind_speed:d] >30 and [FTK_WZ_Links] eq "open")((set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts dim [du_Beschattung:Abdunkelung]), (set RL_SZ_Links,RL_WZ_Links Hoch), set Markise:FILTER=STATE!=closed Rein)
)
DOELSEIF ([du_Beschattung] eq "An" and [xxx:azimuth]>= 240 and [xxx:azimuth] <270)
(
IF ([FTK_WZ_Links] eq "open" and [FTK_WZ_Rechts] eq "closed") ((set RL_KZ_Rechts,RL_KZ_2_Links dim [du_Beschattung:Abdunkelung]),(set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts,RL_WZ_Links Hoch),set RL_WZ_Rechts position {(100-[du_Beschattung:Abdunkelung])}, set Markise:FILTER=STATE!=open Raus),
IF ([FTK_WZ_Rechts] eq "open" and [FTK_WZ_Links] eq "closed") ((set RL_KZ_Rechts,RL_KZ_2_Links dim [du_Beschattung:Abdunkelung]), (set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts,RL_WZ_Links Hoch),set Markise:FILTER=STATE!=closed Rein),
IF ([FTK_WZ_Rechts] eq "closed" and [FTK_WZ_Links] eq "closed") ((set RL_KZ_Rechts,RL_KZ_2_Links dim [du_Beschattung:Abdunkelung]), set RL_WZ_Rechts position {(100-[du_Beschattung:Abdunkelung])}, (set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts,RL_WZ_Links Hoch), set Markise:FILTER=STATE!=closed Rein)
)
DOELSEIF ([du_Beschattung] eq "Aus") (set struc_RL_Alle [FILTER=position_2<97] Hoch, set Markise:FILTER=STATE!=closed Rein)
DOELSE
NAME di_Beschattung_II
NR 252
NTFY_ORDER 50-di_Beschattung_II
STATE cmd_5
TYPE DOIF
READINGS:
2017-08-10 20:10:08 Device rgr_Bewohner
2017-08-09 18:56:12 cmd 5
2017-08-09 18:56:12 cmd_event rgr_Bewohner
2017-08-09 18:56:12 cmd_nr 5
2017-08-10 20:09:34 e_RB_Wetter_STATE T: 14 H: 92 W: 11 P: 993
2017-08-10 20:06:09 e_xxx_azimuth 284.65
2017-08-09 18:56:10 e_du_Beschattung_STATE Aus
2017-08-10 20:10:08 e_rgr_Bewohner_STATE home
2017-08-09 18:56:12 state cmd_5
condition:
0 InternalDoIf($hash,'du_Beschattung','STATE') eq "An" and ReadingValDoIf($hash,'xxx','azimuth')>= 75 and ReadingValDoIf($hash,'xxx','azimuth') <120
1 InternalDoIf($hash,'du_Beschattung','STATE') eq "An" and ReadingValDoIf($hash,'xxx','azimuth')>= 125 and ReadingValDoIf($hash,'xxx','azimuth') <240 and InternalDoIf($hash,'rgr_Bewohner','STATE') and InternalDoIf($hash,'RB_Wetter','STATE')
2 InternalDoIf($hash,'du_Beschattung','STATE') eq "An" and ReadingValDoIf($hash,'xxx','azimuth')>= 240 and ReadingValDoIf($hash,'xxx','azimuth') <270
3 InternalDoIf($hash,'du_Beschattung','STATE') eq "Aus"
devices:
0 du_Beschattung xxx
1 du_Beschattung xxx rgr_Bewohner RB_Wetter
2 du_Beschattung xxx
3 du_Beschattung
all du_Beschattung xxx rgr_Bewohner RB_Wetter
do:
0:
0 set RL_SZ_Links:FILTER=position_2>{(ReadingsVal('du_Beschattung','Abdunkelung',25))} dim [du_Beschattung:Abdunkelung]
1:
0 IF ([rgr_Bewohner] =~ /gone|absent/) ((set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts dim [du_Beschattung:Abdunkelung]), set RL_WZ_Links position {(100-[du_Beschattung:Abdunkelung])}, (set RL_SZ_Links:FILTER=position_2<={(ReadingsVal("du_Beschattung","Abdunkelung",25))} Hoch), set Markise:FILTER=STATE!=closed Rein), IF ([rgr_Bewohner] =~ /home/ and [RB_Wetter:wind_speed:d] <=30 and [FTK_WZ_Links] eq "open") ((set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts dim [du_Beschattung:Abdunkelung]), set Markise:FILTER=STATE!=open Raus, (set RL_SZ_Links:FILTER=position_2<={(ReadingsVal("du_Beschattung","Abdunkelung",25))} Hoch)), IF ([rgr_Bewohner] =~ /home/ and [RB_Wetter:wind_speed:d] <=30 and [FTK_WZ_Links] eq "closed") ((set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts dim [du_Beschattung:Abdunkelung]), set Markise:FILTER=STATE!=closed Rein, set RL_WZ_Links position {(100-[du_Beschattung:Abdunkelung])}, (set RL_SZ_Links:FILTER=position_2<={(ReadingsVal("du_Beschattung","Abdunkelung",25))} Hoch)), IF ([rgr_Bewohner] =~ /home/ and [RB_Wetter:wind_speed:d] >30 and [FTK_WZ_Links] eq "closed")((set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts dim [du_Beschattung:Abdunkelung]), set RL_WZ_Links position {(100-[du_Beschattung:Abdunkelung])}, (set RL_SZ_Links:FILTER=position_2<={(ReadingsVal("du_Beschattung","Abdunkelung",25))} Hoch), set Markise:FILTER=STATE!=closed Rein), IF ([rgr_Bewohner] =~ /home/ and [RB_Wetter:wind_speed:d] >30 and [FTK_WZ_Links] eq "open")((set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts dim [du_Beschattung:Abdunkelung]), (set RL_SZ_Links,RL_WZ_Links Hoch), set Markise:FILTER=STATE!=closed Rein)
2:
0 IF ([FTK_WZ_Links] eq "open" and [FTK_WZ_Rechts] eq "closed") ((set RL_KZ_Rechts,RL_KZ_2_Links dim [du_Beschattung:Abdunkelung]),(set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts,RL_WZ_Links Hoch),set RL_WZ_Rechts position {(100-[du_Beschattung:Abdunkelung])}, set Markise:FILTER=STATE!=open Raus), IF ([FTK_WZ_Rechts] eq "open" and [FTK_WZ_Links] eq "closed") ((set RL_KZ_Rechts,RL_KZ_2_Links dim [du_Beschattung:Abdunkelung]), (set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts,RL_WZ_Links Hoch),set Markise:FILTER=STATE!=closed Rein), IF ([FTK_WZ_Rechts] eq "closed" and [FTK_WZ_Links] eq "closed") ((set RL_KZ_Rechts,RL_KZ_2_Links dim [du_Beschattung:Abdunkelung]), set RL_WZ_Rechts position {(100-[du_Beschattung:Abdunkelung])}, (set RL_KZ_Links,RL_WZ_Mitte,RL_GZ_Links,RL_SZ_Mitte,RL_SZ_Rechts,RL_WZ_Links Hoch), set Markise:FILTER=STATE!=closed Rein)
3:
0 set struc_RL_Alle [FILTER=position_2<97] Hoch, set Markise:FILTER=STATE!=closed Rein
4:
0
helper:
event durTimerPresence_cr: 204,durTimerPresence: 03:24:01
globalinit 1
last_timer 0
sleeptimer -1
timerdev rgr_Bewohner
timerevent durTimerPresence_cr: 204,durTimerPresence: 03:24:01
triggerDev rgr_Bewohner
timerevents:
durTimerPresence_cr: 204
durTimerPresence: 03:24:01
timereventsState:
durTimerPresence_cr: 204
durTimerPresence: 03:24:01
triggerEvents:
durTimerPresence_cr: 204
durTimerPresence: 03:24:01
triggerEventsState:
durTimerPresence_cr: 204
durTimerPresence: 03:24:01
internals:
0 du_Beschattung:STATE
1 du_Beschattung:STATE rgr_Bewohner:STATE RB_Wetter:STATE
2 du_Beschattung:STATE
3 du_Beschattung:STATE
all du_Beschattung:STATE rgr_Bewohner:STATE RB_Wetter:STATE
itimer:
readings:
0 xxx:azimuth
1 xxx:azimuth
2 xxx:azimuth
all xxx:azimuth
regexp:
0:
1:
2:
3:
all:
state:
STATE:
trigger:
Attributes:
checkReadingEvent 1
Ein DOELSE gibt es, aber wieso sollte das aktiv werden?
Viele Grüße,
Max
Kuck dir mal das Attribut repeatsame an. Das ist genau was du suchst.
Gesendet von meinem S3_32 mit Tapatalk
Hallo Frank,
repeatsame bringt doch nur etwas i.V.m Repeatcmd um die Schleifendurchläufe zu begrenzen. So jedenfalls mekn Verständnis.
Das Verhalten dürfte m.E. eigentlich gar nicht auftreten, da die Bedingungen durchgehen wahr sind/bleiben und das Modul somit nicht den Zustand wechseln sollte. erst wenn der Azimuth in eine andere Range springt, sollte die Sequenz sich ändern.
Oder wie hast du das gemeint?
Max
Bei dir wird immer der gleiche Zweig erneut vom azimuth getriggert. Genau das kannst du mit dem Attribut unterbinden. Kann dir nachher am PC meine rollo Definition posten, da hab ich das genau so drin.
Gesendet von meinem S3_32 mit Tapatalk
Hmm... schwierig.
Ich vermute, das Problem liegt da:
ZitatDOELSEIF ([du_Beschattung] eq "An" and [xxx:azimuth]>= 125 and [xxx:azimuth] <240 and [rgr_Bewohner] and [RB_Wetter])
Wie wird das bewertet?
Zitatand [rgr_Bewohner] and [RB_Wetter]
. M.A. triggert das regelmässig das DOIF, und der geht dann entweder im DOELSE oder in einem anderen Zweig, dann zurück auf dem 3.
Um sicher zu stellen, was passiert, stelle verbose auf 5 und guck mal die Log. Alternativ baust Du in jedem Zweig ein "Log3 1, 'ich bin im Zweig x' ", inkl. im DOELSE.
@Frank_Hubert: ja, getriggert, aber wenn der Zustand sich nicht geändert hat, wird nw. das entspr. cmd nicht wiederholt (so lange keine "do always" o.ä)
defmod DOIF_ROLLO_BESCHATTUNG_SUED DOIF ([Anwesenheit] eq "off" and [Aussen_Temp:temperature] > 23 and [Sonnenstand:azimuth] > 130 and [Sonnenstand:azimuth] < 290 and [WetterProplanta:weather] =~ "bedeckt|heiter|klar|sonnig") \
(set PI_EG cmd set Rollo1_Gast geschlossen, set PI_OG cmd set Rollos_OG_Sued geschlossen)\
\
DOELSEIF ([Anwesenheit] eq "on" and [Aussen_Temp:temperature] > 23 and [Sonnenstand:azimuth] > 130 and [Sonnenstand:azimuth] < 290 and [WetterProplanta:weather] =~ "bedeckt|heiter|klar|sonnig") \
(set PI_EG cmd set Rollo1_Gast position 90, set PI_OG cmd set Rollos_OG_Sued position 90)\
\
DOELSEIF ([$SELF:cmd] =~ "1|2" and [Sonnenstand:azimuth] > 130 and [Sonnenstand:azimuth] < 290 and \
([WetterProplanta:weather] =~ "stark.bewoelkt" or [Aussen_Temp:temperature] < 22)) \
(set PI_EG cmd set Rollo1_Gast offen)\
\
DOELSEIF ([$SELF:cmd] =~ "1|2" and [Sonnenstand:azimuth] > 130 and [Sonnenstand:azimuth] < 290 and \
([WetterProplanta:weather] =~ "stark.bewoelkt" or [Aussen_Temp:temperature] < 22)and [DOIF_ROLLO_KINDER:cmd] == 1) \
(set PI_OG cmd set Rollos_OG_Sued offen)\
\
DOELSEIF ([$SELF:cmd] =~ "1|2" and [DOIF_ROLLO_KINDER:cmd] == 1 and [Sonnenstand:azimuth] > 290) (set PI_OG cmd set Rollos_OG_Sued offen)\
\
DOELSEIF ([$SELF:cmd] =~ "1|2" and [Sonnenstand:azimuth] > 290) (set PI_EG cmd set Rollo1_Gast offen)
attr DOIF_ROLLO_BESCHATTUNG_SUED DbLogExclude .*
attr DOIF_ROLLO_BESCHATTUNG_SUED cmdpause 900
attr DOIF_ROLLO_BESCHATTUNG_SUED do always
attr DOIF_ROLLO_BESCHATTUNG_SUED group Rollo
attr DOIF_ROLLO_BESCHATTUNG_SUED repeatsame 1:1:1:1:1
attr DOIF_ROLLO_BESCHATTUNG_SUED room zentrale Funktionen
attr DOIF_ROLLO_BESCHATTUNG_SUED verbose 0
der geht einwandfrei ohne Wiederholungen.
Zitat von: amenomade am 10 August 2017, 20:51:37
@Frank_Hubert: ja, getriggert, aber wenn der Zustand sich nicht geändert hat, wird nw. das entspr. cmd nicht wiederholt (so lange keine "do always" o.ä)
das DOELSE am Ende mach denke ich das gleiche.
Er schreibt ja dass es erneut ausgeführt wird wenn der Azimuth neu berechnet ist.
Daher das "repeatsame" da wird kein Zweig doppelt ausgeführt wenn nicht zuvor ein anderer Zweig tätig war.
btw: Huber ohne "t" :-)
[Rgr Bewohner] und [RB Wetter] habe deshalb mit drin, damit im Fall eines Anwesenheitswechsels oder Wetteränderung der Strang erneut getriggert wird. Aber auch dort ist der Zustand unverändert.
Ich glaube amenomade hat recht. Es liegt am alleinstehenden [RB Wetter]. Ich nehme das mal raus und beobachte.
Max
Jedes Event der beiden triggert ebenfalls den Zweig erneut.
Gesendet von meinem S3_32 mit Tapatalk
Das triggern selber ist ja ok, solange die Bedingung wahr bleibt - dann wird nichts, per Default, mehrfach ausgeführt.
Auszug aus der Commandref:
"Das Modul wird getriggert, sobald das angegebene Device hier "remotecontrol" ein Event erzeugt. Das geschieht, wenn irgendein Reading oder der Status von "remotecontrol" aktualisiert wird. Ausgewertet wird hier der Zustand des Status von remotecontrol nicht das Event selbst. Die Ausführung erfolgt standardmäßig einmalig nur nach Zustandswechsel des Moduls. Das bedeutet, dass ein mehrmaliges Drücken der Fernbedienung auf "on" nur einmal "set garage on" ausführt. "
Weiß nur nicht wie das Modul mit dem Status umgeht, sofern er nicht spezifiziert wird.
Zitatdas DOELSE am Ende mach denke ich das gleiche
Nein, ohne do always, nicht ganz. Ein leeres DOELSE wird benutzt, um ein Zustandswechseln zu provozieren,
wenn keine andere Bedingungen wahr ist, sonst bleibt das DOIF auf dem letzten cmd blockiert, und dies wird nicht wiederholt wenn die entspr. Bedingung inzwischen wieder wahr wird.
Zitat von: amenomade am 10 August 2017, 22:28:42
Nein, ohne do always, nicht ganz. Ein leeres DOELSE wird benutzt, um ein Zustandswechseln zu provozieren, wenn keine andere Bedingungen wahr ist, sonst bleibt das DOIF auf dem letzten cmd blockiert, und dies wird nicht wiederholt wenn die entspr. Bedingung inzwischen wieder wahr wird.
ah, OK. danke. hab ich auch wieder was gelernt. :)