FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: luftdieb am 30 August 2020, 21:50:18

Titel: Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: luftdieb am 30 August 2020, 21:50:18
Hallo,
folgende DoIf Abfrage geht nicht mehr (schon seit >1 Jahr) und ich weiß nicht warum... Bisher hatte ich noch nicht die Zeit und die Muse danach zu schauen...

([09:00-21:00,+:15] and checkBeschatten("w")) (set .*West_RL pct 20) DOELSEIF
([09:00-21:00,+:15] and !checkBeschatten("w") and [duAutomatic:state] eq "on" and [HM_Hellligkeit:state]>20) (set .*West_RL pct 100) DOELSEIF
([16:00-23:00] and [HM_Hellligkeit:state]<20] or [21:00]) (set .*West_RL pct 0)


Die Perl Routine checkBeschatten() lieft immer 0 oder 1 zurück und erstellt einen Logbook Eintrag. Im Logbook sehe ich Einträge mit 0 und mit 1. Von daher muss ich davon ausgehen, dass die Routine mehrfach am Tag aufgerufen wird und eigentlich auch die cmd1 ausführen müsste. Aber genau das passiert nicht mehr. Es wird nur noch morgens cmd2 ausgeführt und abends cmd3.
Das Attribut "do always" habe ich auch schon probiert.
Ich verstehe es nicht. Vielleicht fällt jemanden hierzu was ein.

Gruß
luftdieb
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: Otto123 am 30 August 2020, 22:12:27
Hi,

kannst Du nochmal tief Luft holen und die Widersprüche lösen?
ZitatCmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Zitatmehrfach am Tag aufgerufen wird und eigentlich auch die cmd1 ausführen müsste. Aber genau das passiert nicht mehr.
Wird jetzt oder wird nicht?
Zumindest in der 3 Bedingung ist ein Fehler:
Zitat([16:00-23:00] and [HM_Hellligkeit:state]<20] or [21:00])

Ein list zum fraglichen Zeitpunkt ist eventuell aussagekräftiger.

Gruß Otto
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: luftdieb am 01 September 2020, 21:04:30
Hi Otto,
sorry, irgendwie scheint die Beschreibung widersprüche zuzulassen :-)
Mein Problem ist, dass  Cmd1 nie ausgeführt wird. Ich versuchte zu schreiben, dass die Perl Funktion checkBeschatten() mehrfach am Tag aufgerufen wird und dies auch 1 zurückliefert, was beschatten bedeuten würde und daher cmd1 ausgeführt werden sollte... Das passiert aber nicht :-(
Oder kann doif nicht 1 als true interpretieren?

Gruß
luftdieb
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: Otto123 am 01 September 2020, 22:15:53
Deine Beschreibung - Deine Widersprüche...
Deine DEF bringt folgenden Fehler wenn ich die speichern will:
test DOIF: right bracket without left bracket: ] or [21:00]
Also: wie immer Du es fertig gebracht hast, aber dieses DOIF macht gar nix, das ist einfach falsch. Oder Du hast hier einen Fake gepostet ;)

Gruß Otto
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: Damian am 01 September 2020, 22:42:34
Poste doch einfach list von deinem DOIF, dann kann man dazu was sagen, sonst wird es wie immer ein Rätselraten.
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: Sany am 02 September 2020, 09:07:15
ZitatOder kann doif nicht 1 als true interpretieren?
Doch, das kann es. Ich hab das testhalber mal nachgestellt.
Zum List des DOIF könntest Du noch die Funktion checkBeschatten() hier mal zeigen. Ich finde den Ansatz über die Funktion eigentlich zu kompliziert, das kannst Du doch bestimmt direkt im DOIF machen und bleibst "sprachlich" in einer Welt (Stichwort: DOIF_Readings).
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: luftdieb am 06 September 2020, 21:07:14
Ich hatte das DoIf statement etwas vereinachft darstellen wollen. Hier ist das Original
([09:00-21:00,+:15] and checkBeschatten("w")) (set .*West_RL pct [duBeschattenPctRollo:state]) DOELSEIF
([09:00-21:00,+:15] and !checkBeschatten("w") and [duAutomatic:state] eq "on" and [HM_Hellligkeit:state]>[duHelligkeit:state]) (set .*West_RL pct 100) DOELSEIF
([16:00-23:00] and [HM_Hellligkeit:state]<[duHelligkeit:state] or [21:00]) (set .*West_RL pct 0)


Da das DoIf mir zu groß wurde, habe die zumindest die Beschattung ausgelagert in die 99_myUtils. Hier ist das Modul:
sub checkBeschatten($) {
# Benötigt: nur die Himmelsrichtung (n o s w)

# Rückgabe: 1 = Beschatten sinnvoll
# 0 =Beschatten nicht erforderlich
my ($Himmelsrichtung) = @_;
my $CurrentSunPosition = ReadingsVal("TC_TWILIGHT","azimuth", "");
my $CurrentTemp = ReadingsVal("Heizung","Temp-Aussen","");
my $CurrentMaxTemp = ReadingsVal("duBeschattenTemp","state","");
my $Automatic = ReadingsVal("duAutomatic","state","");
my $HelligkeitBeschattung = ReadingsVal("duHelligkeitBeschattung","state","");
my $HelligkeitBeschattungZeit = ReadingsVal("duHelligkeitBeschattungZeit","state","");
my $CurrentBrightness = movingAverage("HM_Hellligkeit","1.LUX",$HelligkeitBeschattungZeit,"average");
my $BeschattenAktiv = ReadingsVal("duBeschattenAktiv","state","");
# my $CurrentBrightness = ReadingsVal("HM_Hellligkeit","1.LUX","");
# select round(avg (value),2) from history where history.DEVICE = 'HM_Hellligkeit' and  history.TIMESTAMP > DATE_ADD(Now(),INTERVAL -1500 Minute)
Log3(undef,4,"checkBeschatten: $Himmelsrichtung / SonnenPos:$CurrentSunPosition / CurrTemp:$CurrentTemp / MaxTemp:$CurrentMaxTemp / Auto:$Automatic / Helligkeit:$CurrentBrightness");
my $timestamp = getTime('%H:%M:%S');   
if ($CurrentBrightness < $HelligkeitBeschattung){
addRollbufferBeschatten($timestamp." Zu Dunkel! (".$CurrentBrightness.")");
Log3(undef,4,"checkBeschatten: Zu Dunkel! ($CurrentBrightness)");
return (0);
}
if ($Himmelsrichtung eq ""){
Log3(undef,3,"checkBeschatten: Keine Himmerlsrichtung angegeben!");
return ( 0 );
}
if ($Automatic eq "off"){
Log3(undef,3,"checkBeschatten: duAutomatic = 0");
return ( 0 );
}
if ($BeschattenAktiv eq "0"){
Log3(undef,3,"checkBeschatten: duBeschattenAktiv = 0");
return ( 0 );
}
if ($CurrentTemp < $CurrentMaxTemp ){
addRollbufferBeschatten($timestamp." Kalt genug!(".$CurrentTemp.")");
Log3(undef,4,"checkBeschatten: Kalt genug!");
return ( 0 );
}
if ($CurrentSunPosition > 60 and $CurrentSunPosition < 157 and $Himmelsrichtung eq "o") {
addRollbufferBeschatten($timestamp."_".$Himmelsrichtung."_ Beschattung sinnvoll!");
Log3(undef,3,"checkBeschatten: Im Osten beschatten sinnvoll");
return ( 1 );
}
elsif ($CurrentSunPosition > 152 and $CurrentSunPosition < 268 and $Himmelsrichtung eq "s") {
addRollbufferBeschatten($timestamp."_".$Himmelsrichtung."_ Beschattung sinnvoll!");
Log3(undef,3,"checkBeschatten: Im Sueden beschatten sinnvoll");
return ( 1 );
}
elsif ($CurrentSunPosition > 230 and $Himmelsrichtung eq "w") {
addRollbufferBeschatten($timestamp."_".$Himmelsrichtung."_ Beschattung sinnvoll!");
Log3(undef,3,"checkBeschatten: Im Westen beschatten sinnvoll");
return ( 1 );
}
else {
addRollbufferBeschatten($timestamp."_".$Himmelsrichtung."_ Keine Beschattung erforderlich!");
Log3(undef,3,$Himmelsrichtung."_checkBeschatten: Keine Beschattung erforderlich");
Log3(undef,4,"checkBeschatten: $Himmelsrichtung / SonnenPos:$CurrentSunPosition / CurrTemp:$CurrentTemp / MaxTemp:$CurrentMaxTemp / Auto:$Automatic / Helligkeit:$CurrentBrightness");
return ( 0 );
}
return ( 0 );
}


Sorry wenn ich nicht gleich Antworte... Aber irgendwie fehlt mir Zeit :-)

Gruß
luftdieb
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: Christoph Morrison am 07 September 2020, 18:05:32
Bitte ein list vom DOIF (nicht nur die DEF) und die Definition von addRollbufferBeschatten() noch.

Schau dir mal deinen if-Bandwurm noch mal an. So wie du das gemacht hast, brauchst du nirgendwo ein elsif und das letzte return (bitte ohne Klammern wenn du nur einen Wert zurück geben willst) wird niemals erreicht.

sub checkBeschatten($) {
Erklär mir mal was ein Prototyp tut.

if ($CurrentBrightness < $HelligkeitBeschattung){
HelligkeitBeschattung ist ein String und das Ergebnis von movingAverage() (falls du die aus dem Wiki (https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen) genommen hast), eine Zahl. Nimm lieber ReadingsNum() und lösche bitte den Prototypen.

addRollbufferBeschatten($timestamp." Zu Dunkel! (".$CurrentBrightness.")");
Nimm für sowas doch bitte qq (https://perldoc.perl.org/5.32.0/perlop.html#Quote-Like-Operators) und konkateniere den String nicht durch.

if ($BeschattenAktiv eq "0"){
Tests auf "0" sind in Perl false, d.h. du brauchst kein eq.

if ($CurrentTemp < $CurrentMaxTemp ){
Beides Strings die du numerisch vergleichst. Nimm lieber ReadingsNum().



Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: luftdieb am 12 September 2020, 16:20:05
Hallo Christoph,
vielen Dank dass du dir mein Problem angeschaut hast. Mein Perl ist sicherlich grotig... Aber ich habe den Eindruck, dass die Funktion checkBeschatten($) ihren Dienst erfüllt. Zumindest gibt sie mir zuverlässig, wenn ich es von Hand aufrufe im FHEM sauber 0 und 1 zurück, je nach Übergabe Parameter.

Ich nehme mal an, dass du mit Prototype den Übergabeparameter ($) meinst. Damit möchte ich die Himmelsrichtung als String (s, o, w) übergeben, um passend hierzu abzufragen, ob Beschattung sinnvoll ist oder nicht.

Die Funktion "addRollbufferBeschatten()" schreibt einfach nur ein Zustand in einen Rollpuffer, der im FHEM angezeigt wird.

Ich werde deine Empfehlung zur Verbesserung des Perl Scriptes mir mal genauer anschauen.


Ich frage mich allerdings immer noch, warum das doif nicht funktioniert. Wenn ich mehrfach die Funktion "{checkBeschatten("w")}" aus FHEM aufrufe, kommt reproduzierbar eine 1 zurück, wenn Beschatten sinnvoll ist. Für eine andere Himmelsrichtung, z.B. {checkBeschatten("o")} kommt dann zuverlässig eine 0 zurück. Von daher bin ich bisher überzeugt, dass es was mit dem doif zu tun haben muss.

Gruß
luftdieb
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: amenomade am 12 September 2020, 22:16:17
Zitat von: luftdieb am 12 September 2020, 16:20:05Ich frage mich allerdings immer noch, warum das doif nicht funktioniert.
So wie es geht, wirst Du dich noch lange fragen.

Zitat von: Otto123 am 30 August 2020, 22:12:27
Ein list zum fraglichen Zeitpunkt ist eventuell aussagekräftiger.

Zitat von: Damian am 01 September 2020, 22:42:34
Poste doch einfach list von deinem DOIF, dann kann man dazu was sagen, sonst wird es wie immer ein Rätselraten.

Zitat von: Sany am 02 September 2020, 09:07:15
Zum List des DOIF könntest Du ...

Zitat von: Christoph Morrison am 07 September 2020, 18:05:32
Bitte ein list vom DOIF (nicht nur die DEF)

Also... zum 5. Mal: poste doch bitte endlich ein "list" vom DOIF. Nur damit kann man weiter analysieren. Du hast schon fast 2 Wochen verloren.
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: luftdieb am 13 September 2020, 09:21:24
Oops. Sorry, das war nicht mit Absicht ignoriert worden.
Die list <doif> Funktion kannte ich bisher noch gar nicht und habe sie im DoIf "Gerät" gesucht. Aber eine kurze google Suche verschafft Klarheit. Hier die gewünschte Ausgabe
Internals:
   DEF        ([09:00-21:00,+:15] and checkBeschatten("w")) (set .*West_RL pct [duBeschattenPctRollo:state]) DOELSEIF
([09:00-21:00,+:15] and !checkBeschatten("w") and [duAutomatic:state] eq "on" and [HM_Hellligkeit:state]>[duHelligkeit:state]) (set .*West_RL pct 100) DOELSEIF
([16:00-23:00] and [HM_Hellligkeit:state]<[duHelligkeit:state] or [21:00]) (set .*West_RL pct 0)
   FUUID      5c4e1f48-f33f-68c5-65c8-7f81acec9890d03a
   MODEL      FHEM
   NAME       di_Rollos_Westen
   NOTIFYDEV  HM_Hellligkeit,global,duAutomatic,duHelligkeit
   NR         104
   NTFY_ORDER 50-di_Rollos_Westen
   STATE      cmd_2
   TYPE       DOIF
   VERSION    22588 2020-08-12 19:25:15
   READINGS:
     2020-09-13 09:16:28   Device          HM_Hellligkeit
     2020-09-13 09:15:00   cmd             2
     2020-09-13 09:15:00   cmd_event       timer_6
     2020-09-13 09:15:00   cmd_nr          2
     2020-09-13 09:16:28   e_HM_Hellligkeit_state 2135.6
     2020-09-12 10:00:00   e_duAutomatic_state on
     2020-09-01 20:57:15   e_duHelligkeit_state 17
     2020-08-27 22:56:01   mode            enabled
     2020-09-13 09:15:00   state           cmd_2
     2020-09-12 21:00:00   timer_01_c01    13.09.2020 09:00:00
     2020-09-12 21:00:00   timer_02_c01    13.09.2020 21:00:00
     2020-09-13 09:15:00   timer_03_c01    13.09.2020 09:30:00
     2020-09-12 21:00:00   timer_04_c02    13.09.2020 09:00:00
     2020-09-12 21:00:00   timer_05_c02    13.09.2020 21:00:00
     2020-09-13 09:15:00   timer_06_c02    13.09.2020 09:30:00
     2020-09-12 23:00:00   timer_07_c03    13.09.2020 16:00:00
     2020-09-12 23:00:00   timer_08_c03    13.09.2020 23:00:00
     2020-09-12 21:00:00   timer_09_c03    13.09.2020 21:00:00
     2020-09-13 09:10:41   wait_timer      13.09.2020 09:20:41 cmd_2 HM_Hellligkeit
   Regex:
     accu:
     cond:
       HM_Hellligkeit:
         0:
         1:
           state      ^HM_Hellligkeit$:^state:
         2:
           state      ^HM_Hellligkeit$:^state:
       duAutomatic:
         0:
         1:
           state      ^duAutomatic$:^state:
       duHelligkeit:
         0:
         1:
           state      ^duHelligkeit$:^state:
         2:
           state      ^duHelligkeit$:^state:
   attr:
     cmdState:
     wait:
       0:
         600
       1:
         600
       2:
         240
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms) and checkBeschatten("w")
     1          ::DOIF_time($hash,3,4,$wday,$hms) and !checkBeschatten("w") and ::ReadingValDoIf($hash,'duAutomatic','state') eq "on" and ::ReadingValDoIf($hash,'HM_Hellligkeit','state')>::ReadingValDoIf($hash,'duHelligkeit','state')
     2          ::DOIF_time($hash,6,7,$wday,$hms) and ::ReadingValDoIf($hash,'HM_Hellligkeit','state')<::ReadingValDoIf($hash,'duHelligkeit','state') or ::DOIF_time_once($hash,8,$wday)
   days:
   do:
     0:
       0          set .*West_RL pct [duBeschattenPctRollo:state]
     1:
       0          set .*West_RL pct 100
     2:
       0          set .*West_RL pct 0
     3:
   helper:
     DEVFILTER  ^global$|^duHelligkeit$|^duAutomatic$|^HM_Hellligkeit$
     NOTIFYDEV  global|duHelligkeit|duAutomatic|HM_Hellligkeit
     event      1.LUX: 2135.6,control: 2135.6,2135.6,hmstate: 2135.6
     globalinit 1
     last_timer 9
     sleepdevice HM_Hellligkeit
     sleepsubtimer 0
     sleeptimer 1
     timerdev   HM_Hellligkeit
     timerevent 1.LUX: 2135.6,control: 2135.6,2135.6,hmstate: 2135.6
     triggerDev HM_Hellligkeit
     timerevents:
       1.LUX: 2135.6
       control: 2135.6
       2135.6
       hmstate: 2135.6
     timereventsState:
       1.LUX: 2135.6
       control: 2135.6
       state: 2135.6
       hmstate: 2135.6
     triggerEvents:
       1.LUX: 2135.6
       control: 2135.6
       2135.6
       hmstate: 2135.6
     triggerEventsState:
       1.LUX: 2135.6
       control: 2135.6
       state: 2135.6
       hmstate: 2135.6
   internals:
   interval:
     0          -1
     1          0
     3          -1
     4          3
     6          -1
     7          6
   intervalfunc:
     2          ::DOIF_time($hash,0,1,$wday,$hms)
     5          ::DOIF_time($hash,3,4,$wday,$hms)
   intervaltimer:
     0          2
     1          2
     3          5
     4          5
   localtime:
     0          1599980400
     1          1600023600
     2          1599982200
     3          1599980400
     4          1600023600
     5          1599982200
     6          1600005600
     7          1600030800
     8          1600023600
   perlblock:
   readings:
     all         duAutomatic:state HM_Hellligkeit:state duHelligkeit:state
   realtime:
     0          09:00:00
     1          21:00:00
     2          09:30:00
     3          09:00:00
     4          21:00:00
     5          09:30:00
     6          16:00:00
     7          23:00:00
     8          21:00:00
   time:
     0          09:00:00
     1          21:00:00
     2          +:15
     3          09:00:00
     4          21:00:00
     5          +:15
     6          16:00:00
     7          23:00:00
     8          21:00:00
   timeCond:
     0          0
     1          0
     2          0
     3          1
     4          1
     5          1
     6          2
     7          2
     8          2
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
   timers:
     0           0  1  2
     1           3  4  5
     2           6  7  8
   trigger:
   triggertime:
     1599982200:
       localtime  1599982200
       hash:
     1600005600:
       localtime  1600005600
       hash:
     1600023600:
       localtime  1600023600
       hash:
     1600030800:
       localtime  1600030800
       hash:
   uiState:
   uiTable:
Attributes:
   alias      di_Rollos_Westen
   do         always
   room       Automatismen
   verbose    5
   wait       600:600:240


Wenn es nachher etwas wärmer ist und die Beschattung zuschlage sollte, schicke ich noch mal die list<> Ausgabe.
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: Christoph Morrison am 13 September 2020, 10:04:01
Zitat von: luftdieb am 12 September 2020, 16:20:05
Hallo Christoph,
vielen Dank dass du dir mein Problem angeschaut hast. Mein Perl ist sicherlich grotig...

Deshalbe habe ich dir Tipps gegeben, wie du dein Perl verbessern kannst. Dein list ist jetzt schon mal gut, aber da checkBeschatten im Moment eine 0 zurück geliefert hat (sonst wäre die 2. Cond. nicht wahr), kann man schlecht beurteilen warum die 1. Cond. nicht wahr ist. Insofern hast du Recht, dass du noch mal ein list machen musst, wenn das DOIF den "falschen" (aka nicht intendierten) Zustand hat.

Ich würde übrigens zum Debugging den Rückgabewert von checkBeschatten in ein Reading im DOIF schreiben lassen, folgend als formatierte DEF, denn der Rückgabewert ist im list des DOIF nicht enthalten:

DOIF
    (
            [09:00-21:00,+:15]
        and checkBeschatten("w")
    )
    (
        setreading $SELF checkBeschatten_retVal_cond1 checkBeschatten(q(w)),
        set .*West_RL pct [duBeschattenPctRollo:state]
    )
DOELSEIF
    (
            [09:00-21:00,+:15]
        and !checkBeschatten("w")
        and [duAutomatic:state] eq "on"
        and [HM_Hellligkeit:state] > [duHelligkeit:state]
    )
    (
        setreading $SELF checkBeschatten_retVal_cond2 !checkBeschatten(q(w)),
        set .*West_RL pct 100
    )
DOELSEIF
    (
            [16:00-23:00]
        and [HM_Hellligkeit:state] < [duHelligkeit:state]
        or  [21:00]
    )
    (
        set .*West_RL pct 0
    )

Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: luftdieb am 13 September 2020, 13:13:23
Hallo,
hier die Ausgabe, nachdem ich die SollTemperatur von 26 auf 23 reduziert habe, um eine 1 bei checkbeschatten("s") zu erhalten.

Internals:
   DEF        (
            [09:00-21:00,+:15]
        and checkBeschatten("s")
    )
    (
        setreading $SELF checkBeschatten_retVal_cond1 checkBeschatten(q(s)),
        set .*Sued_RL pct [duBeschattenPctRollo:state]
    )
DOELSEIF
    (
            [09:00-21:00,+:15]
        and !checkBeschatten("s")
        and [duAutomatic:state] eq "on"
        and [HM_Hellligkeit:state] > [duHelligkeit:state]
    )
    (
        setreading $SELF checkBeschatten_retVal_cond2 !checkBeschatten(q(s)),
        set .*Sued_RL pct 100
    )
DOELSEIF
    (
            [16:00-23:00]
        and [HM_Hellligkeit:state] < [duHelligkeit:state]
        or  [21:00]
    )
    (
        set .*Sued_RL pct 0
    )
   FUUID      5c4e1f45-f33f-68c5-e288-334c34dd90a527d7
   MODEL      FHEM
   NAME       di_Rollos_Sueden
   NOTIFYDEV  global,HM_Hellligkeit,duAutomatic,duHelligkeit
   NR         90
   NTFY_ORDER 50-di_Rollos_Sueden
   STATE      initialized
   TYPE       DOIF
   VERSION    22588 2020-08-12 19:25:15
   READINGS:
     2020-09-13 13:08:30   Device          HM_Hellligkeit
     2020-09-13 13:07:14   cmd             0
     2020-09-13 13:08:30   e_HM_Hellligkeit_state 6063.4
     2020-09-13 13:07:14   mode            enabled
     2020-09-13 13:07:14   state           initialized
     2020-09-13 13:07:14   timer_01_c01    14.09.2020 09:00:00
     2020-09-13 13:07:14   timer_02_c01    13.09.2020 21:00:00
     2020-09-13 13:07:14   timer_03_c01    13.09.2020 13:15:00
     2020-09-13 13:07:14   timer_04_c02    14.09.2020 09:00:00
     2020-09-13 13:07:14   timer_05_c02    13.09.2020 21:00:00
     2020-09-13 13:07:14   timer_06_c02    13.09.2020 13:15:00
     2020-09-13 13:07:14   timer_07_c03    13.09.2020 16:00:00
     2020-09-13 13:07:14   timer_08_c03    13.09.2020 23:00:00
     2020-09-13 13:07:14   timer_09_c03    13.09.2020 21:00:00
     2020-09-13 13:08:37   wait_timer      13.09.2020 13:18:37 cmd_1 di_Rollos_Sueden
   Regex:
     accu:
     cond:
       HM_Hellligkeit:
         0:
         1:
           state      ^HM_Hellligkeit$:^state:
         2:
           state      ^HM_Hellligkeit$:^state:
       duAutomatic:
         1:
           state      ^duAutomatic$:^state:
       duHelligkeit:
         1:
           state      ^duHelligkeit$:^state:
         2:
           state      ^duHelligkeit$:^state:
   attr:
     cmdState:
     wait:
       0:
         600
       1:
         600
       2:
         240
     waitdel:
   condition:
     0                       ::DOIF_time($hash,0,1,$wday,$hms)         and checkBeschatten("s")     
     1                       ::DOIF_time($hash,3,4,$wday,$hms)         and !checkBeschatten("s")         and ::ReadingValDoIf($hash,'duAutomatic','state') eq "on"         and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') > ::ReadingValDoIf($hash,'duHelligkeit','state')     
     2                       ::DOIF_time($hash,6,7,$wday,$hms)         and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') < ::ReadingValDoIf($hash,'duHelligkeit','state')         or  ::DOIF_time_once($hash,8,$wday)     
   days:
   do:
     0:
       0                   setreading di_Rollos_Sueden checkBeschatten_retVal_cond1 checkBeschatten(q(s)),         set .*Sued_RL pct [duBeschattenPctRollo:state]     
     1:
       0                   setreading di_Rollos_Sueden checkBeschatten_retVal_cond2 !checkBeschatten(q(s)),         set .*Sued_RL pct 100     
     2:
       0                   set .*Sued_RL pct 0     
     3:
   helper:
     DEVFILTER  ^global$|^HM_Hellligkeit$|^duAutomatic$|^duHelligkeit$
     NOTIFYDEV  global|HM_Hellligkeit|duAutomatic|duHelligkeit
     event      1.LUX: 6063.4,control: 6063.4,6063.4,hmstate: 6063.4
     globalinit 1
     last_timer 9
     sleepdevice di_Rollos_Sueden
     sleepsubtimer 0
     sleeptimer 0
     timerdev   
     timerevent 1.LUX: 6063.4,control: 6063.4,6063.4,hmstate: 6063.4
     timerevents
     timereventsState
     triggerDev
   internals:
   interval:
     0          -1
     1          0
     3          -1
     4          3
     6          -1
     7          6
   intervalfunc:
     2          ::DOIF_time($hash,0,1,$wday,$hms)
     5          ::DOIF_time($hash,3,4,$wday,$hms)
   intervaltimer:
     0          2
     1          2
     3          5
     4          5
   localtime:
     0          1600066800
     1          1600023600
     2          1599995700
     3          1600066800
     4          1600023600
     5          1599995700
     6          1600005600
     7          1600030800
     8          1600023600
   readings:
     all         duAutomatic:state HM_Hellligkeit:state duHelligkeit:state
   realtime:
     0          09:00:00
     1          21:00:00
     2          13:15:00
     3          09:00:00
     4          21:00:00
     5          13:15:00
     6          16:00:00
     7          23:00:00
     8          21:00:00
   time:
     0          09:00:00
     1          21:00:00
     2          +:15
     3          09:00:00
     4          21:00:00
     5          +:15
     6          16:00:00
     7          23:00:00
     8          21:00:00
   timeCond:
     0          0
     1          0
     2          0
     3          1
     4          1
     5          1
     6          2
     7          2
     8          2
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
   timers:
     0           0  1  2
     1           3  4  5
     2           6  7  8
   trigger:
   triggertime:
     1599995700:
       localtime  1599995700
       hash:
     1600005600:
       localtime  1600005600
       hash:
     1600023600:
       localtime  1600023600
       hash:
     1600030800:
       localtime  1600030800
       hash:
     1600066800:
       localtime  1600066800
       hash:
   uiState:
   uiTable:
Attributes:
   alias      di_Rollos_Sueden
   room       Automatismen
   verbose    5
   wait       600:600:240


Die beiden Conditions checkBeschatten_retVal_cond1 und checkBeschatten_retVal_cond2 habe ich jetzt noch nicht im Device gefunden. Evtl. muss ich hier noch etwas warten. In meinem  Rollpuffer (addRollbufferBeschatten) erscheint zumindest "13:08:37_s_ Beschattung sinnvoll!".

Oh Wunder. Eben sind die Rollos runtergegangen. Hier die list Ausgabe dazu
Internals:
   DEF        (
            [09:00-21:00,+:15]
        and checkBeschatten("s")
    )
    (
        setreading $SELF checkBeschatten_retVal_cond1 checkBeschatten(q(s)),
        set .*Sued_RL pct [duBeschattenPctRollo:state]
    )
DOELSEIF
    (
            [09:00-21:00,+:15]
        and !checkBeschatten("s")
        and [duAutomatic:state] eq "on"
        and [HM_Hellligkeit:state] > [duHelligkeit:state]
    )
    (
        setreading $SELF checkBeschatten_retVal_cond2 !checkBeschatten(q(s)),
        set .*Sued_RL pct 100
    )
DOELSEIF
    (
            [16:00-23:00]
        and [HM_Hellligkeit:state] < [duHelligkeit:state]
        or  [21:00]
    )
    (
        set .*Sued_RL pct 0
    )
   FUUID      5c4e1f45-f33f-68c5-e288-334c34dd90a527d7
   MODEL      FHEM
   NAME       di_Rollos_Sueden
   NOTIFYDEV  global,HM_Hellligkeit,duAutomatic,duHelligkeit
   NR         90
   NTFY_ORDER 50-di_Rollos_Sueden
   STATE      cmd_1
   TYPE       DOIF
   VERSION    22588 2020-08-12 19:25:15
   READINGS:
     2020-09-13 13:18:18   Device          HM_Hellligkeit
     2020-09-13 13:18:37   checkBeschatten_retVal_cond1 checkBeschatten(q(s))
     2020-09-13 13:18:38   cmd             1
     2020-09-13 13:18:38   cmd_event       di_Rollos_Sueden
     2020-09-13 13:18:38   cmd_nr          1
     2020-09-13 13:18:18   e_HM_Hellligkeit_state 6098.4
     2020-09-13 13:07:14   mode            enabled
     2020-09-13 13:18:38   state           cmd_1
     2020-09-13 13:07:14   timer_01_c01    14.09.2020 09:00:00
     2020-09-13 13:07:14   timer_02_c01    13.09.2020 21:00:00
     2020-09-13 13:15:02   timer_03_c01    13.09.2020 13:30:00
     2020-09-13 13:07:14   timer_04_c02    14.09.2020 09:00:00
     2020-09-13 13:07:14   timer_05_c02    13.09.2020 21:00:00
     2020-09-13 13:15:02   timer_06_c02    13.09.2020 13:30:00
     2020-09-13 13:07:14   timer_07_c03    13.09.2020 16:00:00
     2020-09-13 13:07:14   timer_08_c03    13.09.2020 23:00:00
     2020-09-13 13:07:14   timer_09_c03    13.09.2020 21:00:00
     2020-09-13 13:18:37   wait_timer      no timer
   Regex:
     accu:
     cond:
       HM_Hellligkeit:
         0:
         1:
           state      ^HM_Hellligkeit$:^state:
         2:
           state      ^HM_Hellligkeit$:^state:
       duAutomatic:
         1:
           state      ^duAutomatic$:^state:
       duHelligkeit:
         1:
           state      ^duHelligkeit$:^state:
         2:
           state      ^duHelligkeit$:^state:
   attr:
     cmdState:
     wait:
       0:
         600
       1:
         600
       2:
         240
     waitdel:
   condition:
     0                       ::DOIF_time($hash,0,1,$wday,$hms)         and checkBeschatten("s")     
     1                       ::DOIF_time($hash,3,4,$wday,$hms)         and !checkBeschatten("s")         and ::ReadingValDoIf($hash,'duAutomatic','state') eq "on"         and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') > ::ReadingValDoIf($hash,'duHelligkeit','state')     
     2                       ::DOIF_time($hash,6,7,$wday,$hms)         and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') < ::ReadingValDoIf($hash,'duHelligkeit','state')         or  ::DOIF_time_once($hash,8,$wday)     
   days:
   do:
     0:
       0                   setreading di_Rollos_Sueden checkBeschatten_retVal_cond1 checkBeschatten(q(s)),         set .*Sued_RL pct [duBeschattenPctRollo:state]     
     1:
       0                   setreading di_Rollos_Sueden checkBeschatten_retVal_cond2 !checkBeschatten(q(s)),         set .*Sued_RL pct 100     
     2:
       0                   set .*Sued_RL pct 0     
     3:
   helper:
     DEVFILTER  ^global$|^HM_Hellligkeit$|^duAutomatic$|^duHelligkeit$
     NOTIFYDEV  global|HM_Hellligkeit|duAutomatic|duHelligkeit
     event      timer_3
     globalinit 1
     last_timer 9
     sleepdevice di_Rollos_Sueden
     sleepsubtimer -1
     sleeptimer -1
     timerdev   
     timerevent timer_3
     triggerDev
     DOIF_eventa:
       cmd_nr: 1
       cmd: 1
       cmd_event: di_Rollos_Sueden
       cmd_1
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: di_Rollos_Sueden
       state: cmd_1
     timerevents:
       timer_3
     timereventsState:
       timer_3
     triggerEvents:
       timer_3
     triggerEventsState:
       timer_3
   internals:
   interval:
     0          -1
     1          0
     3          -1
     4          3
     6          -1
     7          6
   intervalfunc:
     2          ::DOIF_time($hash,0,1,$wday,$hms)
     5          ::DOIF_time($hash,3,4,$wday,$hms)
   intervaltimer:
     0          2
     1          2
     3          5
     4          5
   localtime:
     0          1600066800
     1          1600023600
     2          1599996600
     3          1600066800
     4          1600023600
     5          1599996600
     6          1600005600
     7          1600030800
     8          1600023600
   readings:
     all         duAutomatic:state HM_Hellligkeit:state duHelligkeit:state
   realtime:
     0          09:00:00
     1          21:00:00
     2          13:30:00
     3          09:00:00
     4          21:00:00
     5          13:30:00
     6          16:00:00
     7          23:00:00
     8          21:00:00
   time:
     0          09:00:00
     1          21:00:00
     2          +:15
     3          09:00:00
     4          21:00:00
     5          +:15
     6          16:00:00
     7          23:00:00
     8          21:00:00
   timeCond:
     0          0
     1          0
     2          0
     3          1
     4          1
     5          1
     6          2
     7          2
     8          2
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
   timers:
     0           0  1  2
     1           3  4  5
     2           6  7  8
   trigger:
   triggertime:
     1599996600:
       localtime  1599996600
       hash:
     1600005600:
       localtime  1600005600
       hash:
     1600023600:
       localtime  1600023600
       hash:
     1600030800:
       localtime  1600030800
       hash:
     1600066800:
       localtime  1600066800
       hash:
   uiState:
   uiTable:
Attributes:
   alias      di_Rollos_Sueden
   room       Automatismen
   verbose    5
   wait       600:600:240


Ich vermute es liegt an den Klammern. Beim Übernehmen der vorgeschlagenen Anpassung sind mir ein paar Klammern aufgefallen, die irgendwie unstimmig wirken. Das muss ich mir noch mal in Ruhe anschauen.
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: Christoph Morrison am 13 September 2020, 16:52:13
Achso, ich hatte das vorhin nur so runtergeschrieben, checkBeschattung funktioniert im Ausführungsteil ohne {()} nicht. Das muss also wie folgt heißen:

DOIF
    (
            [09:00-21:00,+:15]
        and checkBeschatten("w")
    )
    (
        setreading $SELF checkBeschatten_retVal_cond1 {( checkBeschatten(q(w));  )},
        set .*West_RL pct [duBeschattenPctRollo:state]
    )
DOELSEIF
    (
            [09:00-21:00,+:15]
        and !checkBeschatten("w")
        and [duAutomatic:state] eq "on"
        and [HM_Hellligkeit:state] > [duHelligkeit:state]
    )
    (
        setreading $SELF checkBeschatten_retVal_cond2 {( !checkBeschatten(q(w)); )},
        set .*West_RL pct 100
    )
DOELSEIF
    (
            [16:00-23:00]
        and [HM_Hellligkeit:state] < [duHelligkeit:state]
        or  [21:00]
    )
    (
        set .*West_RL pct 0
    )
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: luftdieb am 18 September 2020, 16:29:52
Hallo,
leider funktioniert die Beschattung noch nicht so, wie erwartet. Im Rollpuffer wird mir die Beschattung als empfohlen eingetragen aber das cmd1 vom doif wird scheinbar nicht ausgeführt. Wird cmd1 manuell aufgerufen, reagiert der Rollo und würde in die Position der Beschattung anfahren. Aber in den Attributen steht als letzter command cmd2 von heute früh.
Ich habe vom Zustand eben, wo checkBeschatten() true zurückliefert ein list<> erstellt

Internals:
   DEF        (
        ([09:00-19:00|7,+:15] or [08:00-20:00|8,+:15])
        and checkBeschatten("s")
    )
    (
        setreading $SELF checkBeschatten_retVal_cond1 {( checkBeschatten(q(s));  )},
        set .*Sued_RL pct [duBeschattenPctRollo:state]
    )
DOELSEIF
    (
        ([09:00-18:30|7,+:15] or [08:00-18:30|8,+:15])
        and !checkBeschatten("s")
        and [duAutomatic:state] eq "on"
        and [HM_Hellligkeit:state] > [duHelligkeit:state]
    )
    (
        setreading $SELF checkBeschatten_retVal_cond2 {( !checkBeschatten(q(s)); )},
        set .*Sued_RL pct 100
    )
DOELSEIF
    (
        [16:00-23:00]
        and [HM_Hellligkeit:state] < [duHelligkeit:state]
        or  [21:00]
    )
    (
        set .*Sued_RL pct 0
    )
   FUUID      5c4e1f45-f33f-68c5-e288-334c34dd90a527d7
   MODEL      FHEM
   NAME       di_Rollos_Sueden
   NOTIFYDEV  duHelligkeit,HM_Hellligkeit,duAutomatic,global
   NR         90
   NTFY_ORDER 50-di_Rollos_Sueden
   STATE      cmd_2
   TYPE       DOIF
   VERSION    22588 2020-08-12 19:25:15
   READINGS:
     2020-09-18 16:23:27   Device          HM_Hellligkeit
     2020-09-17 10:51:45   checkBeschatten_retVal_cond1 0
     2020-09-18 08:00:01   checkBeschatten_retVal_cond2 1
     2020-09-18 08:00:02   cmd             2
     2020-09-18 08:00:02   cmd_event       timer_7
     2020-09-18 08:00:02   cmd_nr          2
     2020-09-18 16:23:27   e_HM_Hellligkeit_state 6648.2
     2020-09-18 10:00:00   e_duAutomatic_state on
     2020-09-16 19:24:04   mode            enabled
     2020-09-18 08:00:02   state           cmd_2
     2020-09-17 19:00:00   timer_01_c01    18.09.2020 09:00:00|7,+:15
     2020-09-17 19:00:00   timer_02_c01    18.09.2020 19:00:00|7,+:15
     2020-09-17 20:00:00   timer_03_c01    18.09.2020 08:00:00|8,+:15
     2020-09-17 20:00:00   timer_04_c01    18.09.2020 20:00:00|8,+:15
     2020-09-17 18:30:00   timer_05_c02    18.09.2020 09:00:00|7,+:15
     2020-09-17 18:30:00   timer_06_c02    18.09.2020 18:30:00|7,+:15
     2020-09-17 18:30:00   timer_07_c02    18.09.2020 08:00:00|8,+:15
     2020-09-17 18:30:00   timer_08_c02    18.09.2020 18:30:00|8,+:15
     2020-09-17 23:00:00   timer_09_c03    18.09.2020 16:00:00
     2020-09-17 23:00:00   timer_10_c03    18.09.2020 23:00:00
     2020-09-17 21:00:00   timer_11_c03    18.09.2020 21:00:00
     2020-09-17 19:47:29   wait_timer      no timer
   Regex:
     accu:
     cond:
       HM_Hellligkeit:
         0:
         1:
           state      ^HM_Hellligkeit$:^state:
         2:
           state      ^HM_Hellligkeit$:^state:
       duAutomatic:
         0:
         1:
           state      ^duAutomatic$:^state:
       duHelligkeit:
         1:
           state      ^duHelligkeit$:^state:
         2:
           state      ^duHelligkeit$:^state:
   attr:
     cmdState:
     wait:
       0:
         600
       1:
         600
       2:
         240
     waitdel:
   condition:
     0                   (::DOIF_time($hash,0,1,$wday,$hms,"7,+:15") or ::DOIF_time($hash,2,3,$wday,$hms,"8,+:15"))         and checkBeschatten("s")     
     1                   (::DOIF_time($hash,4,5,$wday,$hms,"7,+:15") or ::DOIF_time($hash,6,7,$wday,$hms,"8,+:15"))         and !checkBeschatten("s")         and ::ReadingValDoIf($hash,'duAutomatic','state') eq "on"         and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') > ::ReadingValDoIf($hash,'duHelligkeit','state')     
     2                   ::DOIF_time($hash,8,9,$wday,$hms)         and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') < ::ReadingValDoIf($hash,'duHelligkeit','state')         or  ::DOIF_time_once($hash,10,$wday)     
   days:
     0          7,+:15
     1          7,+:15
     2          8,+:15
     3          8,+:15
     4          7,+:15
     5          7,+:15
     6          8,+:15
     7          8,+:15
   do:
     0:
       0                   setreading di_Rollos_Sueden checkBeschatten_retVal_cond1 {( checkBeschatten(q(s));  )},         set .*Sued_RL pct [duBeschattenPctRollo:state]     
     1:
       0                   setreading di_Rollos_Sueden checkBeschatten_retVal_cond2 {( !checkBeschatten(q(s)); )},         set .*Sued_RL pct 100     
     2:
       0                   set .*Sued_RL pct 0     
     3:
   helper:
     DEVFILTER  ^global$|^duAutomatic$|^HM_Hellligkeit$|^duHelligkeit$
     NOTIFYDEV  global|duAutomatic|HM_Hellligkeit|duHelligkeit
     event      1.LUX: 6648.2,control: 6648.2,6648.2,hmstate: 6648.2
     globalinit 1
     last_timer 11
     sleepdevice HM_Hellligkeit
     sleepsubtimer -1
     sleeptimer -1
     timerdev   HM_Hellligkeit
     timerevent 1.LUX: 4888.2,control: 4888.2,4888.2,hmstate: 4888.2
     triggerDev HM_Hellligkeit
     timerevents:
       1.LUX: 4888.2
       control: 4888.2
       4888.2
       hmstate: 4888.2
     timereventsState:
       1.LUX: 4888.2
       control: 4888.2
       state: 4888.2
       hmstate: 4888.2
     triggerEvents:
       1.LUX: 6648.2
       control: 6648.2
       6648.2
       hmstate: 6648.2
     triggerEventsState:
       1.LUX: 6648.2
       control: 6648.2
       state: 6648.2
       hmstate: 6648.2
   internals:
   interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
     8          -1
     9          8
   intervalfunc:
   intervaltimer:
   localtime:
     0          1600412400
     1          1600448400
     10         1600455600
     2          1600408800
     3          1600452000
     4          1600412400
     5          1600446600
     6          1600408800
     7          1600446600
     8          1600437600
     9          1600462800
   perlblock:
   readings:
     all         duAutomatic:state HM_Hellligkeit:state duHelligkeit:state
   realtime:
     0          09:00:00
     1          19:00:00
     10         21:00:00
     2          08:00:00
     3          20:00:00
     4          09:00:00
     5          18:30:00
     6          08:00:00
     7          18:30:00
     8          16:00:00
     9          23:00:00
   time:
     0          09:00:00
     1          19:00:00
     10         21:00:00
     2          08:00:00
     3          20:00:00
     4          09:00:00
     5          18:30:00
     6          08:00:00
     7          18:30:00
     8          16:00:00
     9          23:00:00
   timeCond:
     0          0
     1          0
     10         2
     2          0
     3          0
     4          1
     5          1
     6          1
     7          1
     8          2
     9          2
   timer:
     0          0
     1          0
     10         0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   timers:
     0           0  1  2  3
     1           4  5  6  7
     2           8  9  10
   trigger:
   triggertime:
     1600446600:
       localtime  1600446600
       hash:
     1600448400:
       localtime  1600448400
       hash:
     1600452000:
       localtime  1600452000
       hash:
     1600455600:
       localtime  1600455600
       hash:
     1600462800:
       localtime  1600462800
       hash:
   uiState:
   uiTable:
Attributes:
   alias      di_Rollos_Sueden
   room       Automatismen
   verbose    5
   wait       600:600:240


Vielleicht fällt da jemandem noch was auf. Die Ausgabe fällt mir schwer zu interpretieren.

Gruß
luftdieb
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: amenomade am 18 September 2020, 19:11:40
checkbeschatten in einer Bedingung triggert aber nicht. Es wird dann erst wieder aufgerufen, wenn ein anderer Trigger dieselbe Bedingung anstosst.

Um 8 Uhr hat [08:00-18:30|8,+:15] getriggert, dann wurde checkbeschatten ausgeführt, und cmd2 wurde ausgelöst.

Seitdem kalkuliert er anscheinend checkbeschatten nicht mehr weil (zumindest meine Interpretation) alle Trigger der Bedingung 2 immer noch wahr sind.

Dazu noch: ich habe nicht deinen Code für checkbeschattung geprüft. Bist Du sicher, dass deine Bedingungen exklusiv sind? Zwischen 16 Uhr und 20 Uhr, wenn Helligkeit unter Limit, ist systematisch checkbeschattung falsch? Wenn nicht, was soll er ausführen? cmd1 oder cmd3?
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: luftdieb am 18 September 2020, 22:25:38
Hallo amenomade,
wenn checkbeschatten aufgerufen wird, kommt es zu einem Eintrag in einen Rollpuffer. Der sieht .z.B. wie folgt aus:
19:50:37 Zu Dunkel! (26.588)||
19:53:38 Zu Dunkel! (23.308)||
19:53:38 Zu Dunkel! (20.948)||
19:53:38 Zu Dunkel! (18.588)||
19:56:25 Zu Dunkel! (16.200)||
19:56:25 Zu Dunkel! (14.468)||
19:56:26 Zu Dunkel! (12.736)||
19:58:58 Zu Dunkel! (10.992)||
19:58:58 Zu Dunkel! (9.708)||
19:58:58 Zu Dunkel! (8.424

Ist jetzt leider keine Beschattung für eine Himmelsrichtung empfohlen. Aber man sieht immer 3 Anfragen bei +/- einer Sekunde differenz. Diese werden aufgerufen von den 3 Doifs für Ost / Süd / West. Tagsüber erscheint dann z.B. Ost: Keine Beschattung erforderlich, Süd: Beschattung sinnvoll, West: Keine Beschattung erforderlich.
Der Rollpuffer bildet das auch immer sinnvoll zur Sonneneinstrahlung ab.

Im jeweiligen doif der Himmelsrichtung sind im cmd1 und cmd2 die Abfragen von Checkbeschatten zueinander negiert. Würde ich so z.B.: interpretieren,
Bdg 1: wenn Beschatten sinnvoll und zeitlicher trigger zutrifft, dann führe beschatten aus.
Bdg 2 ist zu diesem Zeitpunkt nicht mehr gültig, da: zeitlicher trigger OK, Nicht Checkbeschatten = True ==>NOK. Dadurch müsste
Bdg 3 ist unzutreffend da Helligkeit nicht unterschritten.

Die Helligkeit ist auch in Checkbeschatten enthalten. Wenn es draußen zu dunkel ist, kann niemals true zurückkommen.
In der Zeit 16-20 Uhr, gehen die Rollos komplett runter, wenn es draußen zu dunkel ist. Trifft eh nur im Winter zu, da  gibt es keine Beschattung, weil die Temperatur auch deutlich <26° ;-)

Oder gibt es ein Problem mit dem Interval von 15 Minuten ? Aber das hatte ich letzte Woche zu testzwecken draußen. Wobei 1x sind die Rollos tatsächlich runtergegangen. Muss ich noch mal testen.
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: amenomade am 18 September 2020, 23:49:43
Hab jetzt ein bisschen Zeit gefunden, um Tests zu machen... und ich verstehe nicht warum es bei dir nicht geht.
Folgendes habe ich gemacht:

- in myUtils:
sub checkBeschatten {
return ReadingsVal("di_Rollos_Sueden","beschattung",0);
}


- DOIF:
Internals:
   CFGFN     
   DEF        (
        ([00:00-23:59,+:01])
        and checkBeschatten("s")
    )
    (
    )
DOELSEIF
    (
        ([00:00-23:59,+:01])
        and !checkBeschatten("s")
    )
    (
    )
DOELSEIF
    (
        [16:00-23:00]
        and [HM_Hellligkeit:state] < [duHelligkeit:state]
        or  [21:00]
    )
{Log3 "di_Rollos_Sueden",3, "di_Rollos_Sueden: cmd1"}

   DOIFDEV    ^global$|^HM_Hellligkeit$|^duHelligkeit$
   FUUID      5f652589-f33f-fe91-c57a-228b916cdc160251
   MODEL      FHEM
   NAME       di_Rollos_Sueden
   NR         402
   NTFY_ORDER 50-di_Rollos_Sueden
   STATE      cmd_2
   TYPE       DOIF
   VERSION    22588 2020-08-12 19:25:15
   .attraggr:
   .attrminint:
   OLDREADINGS:
   READINGS:
     2020-09-18 23:38:27   beschattung     0
     2020-09-18 23:39:00   cmd             2
     2020-09-18 23:39:00   cmd_event       timer_6
     2020-09-18 23:39:00   cmd_nr          2
     2020-09-18 23:36:44   mode            enabled
     2020-09-18 23:39:00   state           cmd_2
     2020-09-18 23:36:44   timer_01_c01    19.09.2020 00:00:00
     2020-09-18 23:36:44   timer_02_c01    18.09.2020 23:59:00
     2020-09-18 23:43:00   timer_03_c01    18.09.2020 23:44:00
     2020-09-18 23:36:44   timer_04_c02    19.09.2020 00:00:00
     2020-09-18 23:36:44   timer_05_c02    18.09.2020 23:59:00
     2020-09-18 23:43:00   timer_06_c02    18.09.2020 23:44:00
     2020-09-18 23:36:44   timer_07_c03    19.09.2020 16:00:00
     2020-09-18 23:36:44   timer_08_c03    19.09.2020 23:00:00
     2020-09-18 23:36:44   timer_09_c03    19.09.2020 21:00:00
   Regex:
     accu:
     cond:
       HM_Hellligkeit:
         2:
           state      ^HM_Hellligkeit$:^state:
       duHelligkeit:
         2:
           state      ^duHelligkeit$:^state:
   attr:
     cmdState:
     waitdel:
   condition:
     0                   (::DOIF_time($hash,0,1,$wday,$hms))         and checkBeschatten("s")     
     1                   (::DOIF_time($hash,3,4,$wday,$hms))         and !checkBeschatten("s")     
     2                   ::DOIF_time($hash,6,7,$wday,$hms)         and ::ReadingValDoIf($hash,'HM_Hellligkeit','state') < ::ReadingValDoIf($hash,'duHelligkeit','state')         or  ::DOIF_time_once($hash,8,$wday)     
   days:
   do:
     0:
       0               
     1:
       0               
     2:
       0          {Log3 "di_Rollos_Sueden",3, "di_Rollos_Sueden: cmd1"}
     3:
   helper:
     DEVFILTER  ^global$|^HM_Hellligkeit$|^duHelligkeit$
     NOTIFYDEV  global|HM_Hellligkeit|duHelligkeit
     event      timer_6
     globalinit 1
     last_timer 9
     sleeptimer -1
     timerdev   
     timerevent timer_6
     triggerDev
     DOIF_eventa:
       cmd_nr: 2
       cmd: 2
       cmd_event: timer_6
       cmd_2
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: timer_6
       state: cmd_2
     timerevents:
       timer_6
     timereventsState:
       timer_6
     triggerEvents:
       timer_6
     triggerEventsState:
       timer_6
   interval:
     0          -1
     1          0
     3          -1
     4          3
     6          -1
     7          6
   intervalfunc:
     2          ::DOIF_time($hash,0,1,$wday,$hms)
     5          ::DOIF_time($hash,3,4,$wday,$hms)
   intervaltimer:
     0          2
     1          2
     3          5
     4          5
   localtime:
     0          1600466400
     1          1600466340
     2          1600465440
     3          1600466400
     4          1600466340
     5          1600465440
     6          1600524000
     7          1600549200
     8          1600542000
   readings:
     all         HM_Hellligkeit:state duHelligkeit:state
   realtime:
     0          00:00:00
     1          23:59:00
     2          23:44:00
     3          00:00:00
     4          23:59:00
     5          23:44:00
     6          16:00:00
     7          23:00:00
     8          21:00:00
   time:
     0          00:00:00
     1          23:59:00
     2          +:01
     3          00:00:00
     4          23:59:00
     5          +:01
     6          16:00:00
     7          23:00:00
     8          21:00:00
   timeCond:
     0          0
     1          0
     2          0
     3          1
     4          1
     5          1
     6          2
     7          2
     8          2
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
   timers:
     0           0  1  2
     1           3  4  5
     2           6  7  8
(...)
Attributes:
   readingList beschattung
   setList    beschattung:0,1


Wenn ich jetzt den Wert von di_Rollos_Sueden:beschattung ändere, wechselt die Minute drauf der Zustand des DOIFs zwischen cmd1 und cmd2 - also eigentlich was Du erwartest.

Kann man noch ein "list" von duHelligkeit haben?
Hat sich die Funktion checkBeschatten geändert, seitdem du sie hieroben gepostet hast?
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: amenomade am 19 September 2020, 00:06:36
EDIT: OK, das ist ein Syntaxproblem, das sieht man sogar in deinem "list":
   days:
     0          7,+:15
     1          7,+:15
     2          8,+:15
     3          8,+:15
     4          7,+:15
     5          7,+:15
     6          8,+:15
     7          8,+:15


Die Wochentagsteuerung muss am Ende kommen:
[09:00-19:00,+:15|7]
Titel: Antw:Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind
Beitrag von: luftdieb am 19 September 2020, 19:24:16
Vielen Dank. Das war es. Oh man, da wäre ich wirklich nicht darauf gekommen. Sonst funktioniert die Syntax Kontrolle ja echt ziemlich gut. Habe es heute Mittag gleich geändert und siehe da, die Beschattung funktioniert ;-)
Aber auch wieder viel dabei gelernt.

Dafür auch noch mal recht herzlichen Dank :-)

Gruß
luftdieb