Cmd1 Bedingung wird ausgeführt, obwohl die Bedingungen alle erfüllt sind

Begonnen von luftdieb, 30 August 2020, 21:50:18

Vorheriges Thema - Nächstes Thema

amenomade

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

luftdieb

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.

amenomade

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

amenomade

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

luftdieb

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