Wiederholte Ausführung tortz unveränderter Bedingung

Begonnen von Sirel, 09 August 2017, 17:42:16

Vorheriges Thema - Nächstes Thema

Sirel

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

amenomade

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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Sirel

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

nils_

hiho,

dann wird wohl einer der anderen pfade zwischendurch "aktiv".
logfile/eventmonitor mal angeschaut während der zeit?

grüße
viele Wege in FHEM es gibt!

Per

Leider sehen wir ja nur einen Ausschnitt. Gibt es ein DOELSE?

Sirel

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

Frank_Huber

Kuck dir mal das Attribut repeatsame an. Das ist genau was du suchst.

Gesendet von meinem S3_32 mit Tapatalk


Sirel

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

Frank_Huber

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


amenomade

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.ä)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Frank_Huber

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.

Frank_Huber

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" :-)

Sirel

[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.

Sirel

Ich glaube amenomade hat recht. Es liegt am alleinstehenden [RB Wetter]. Ich nehme das mal raus und beobachte.

Max

Frank_Huber

Jedes Event der beiden triggert ebenfalls den Zweig erneut.

Gesendet von meinem S3_32 mit Tapatalk