DOIF mit vielen Bedingungen eine weitere hinzufügen

Begonnen von Ruggy, 12 März 2021, 06:59:35

Vorheriges Thema - Nächstes Thema

Ruggy

Stimmt, das mit dem <12 ist doppelt gemoppelt.


Meinst Du bezüglich der Übersichtlichkeit und Gruppieren das von Dir anfangs erwähnte setreading $SELF?


Ob es in Wirklichkeit funktioniert kann ich die nächsten Tage wahrscheinlich nicht sagen, weil es wieder kälter wird.

Evlt. könntest Du es der Logik nach erkennen ob es prinzipiell funktionieren könnte?

Ruggy

So sieht es jetzt aus:


([deltadewpoint:state]>2 and
[07:00-23:00] and
$month>4 and
$month<10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12 or
([AUS_LUFTFEUCHTIGKEIT:temperature]<[KEL_LUFTFEUCHTIGKEIT:temperature]) and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month>4 and
$month<10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=12)
(set HUEDevice9 on-for-timer 1800)
              DOELSEIF
([deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12 or
([AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature]) and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=8)
(set HUEDevice9 on-for-timer 600)
              DOELSE
(set HUEDevice9 off)

Otto123

#17
Ok ich frage nochmal :)

Es sind 5 Merkmale? 1-3 zählen immer? Bei 4: soll es 1800 sec laufen? Bei 5: soll es 900 sec laufen?

Sieht mir bez. 3 komisch aus ... Macht diese zeitliche Unterscheidung einen Sinn? (Lüfter 1800 oder 900 sec an)

1: Zeit ([07:00-23:00] and $month>4 and $month<10)
2: Draussen Trocken [deltadewpoint:state]>2
3: Drinnen ist eine bestimmte Temperatur ([KEL_LUFTFEUCHTIGKEIT:temperature]>8 and [KEL_LUFTFEUCHTIGKEIT:temperature]<12)
4: Draussen kälter als drinnen[AUS_LUFTFEUCHTIGKEIT:temperature]<[KEL_LUFTFEUCHTIGKEIT:temperature]
5: Draussen wärmer als drinnen und Innen unter 8 grad [AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature] and [KEL_LUFTFEUCHTIGKEIT:temperature]<=8

Mein Vorschlag (aber ich bin auch nicht sicher):

DOIF ([?07:00-23:00] and $month>4 and $month<10 and [deltadewpoint:state]>2 )(setreading $SELF running 1) DOELSEIF
([$SELF:running] and [KEL_LUFTFEUCHTIGKEIT:temperature]>8 and [KEL_LUFTFEUCHTIGKEIT:temperature]<12 and [AUS_LUFTFEUCHTIGKEIT:temperature]<[KEL_LUFTFEUCHTIGKEIT:temperature])
(set HUEDevice9 on) DOELSEIF
([$SELF:running] and [AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature] and [KEL_LUFTFEUCHTIGKEIT:temperature]<=8)
(set HUEDevice9 on) DOELSE
(set HUEDevice9 off , setreading $SELF running '' )
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ruggy

Danke vorerst, dass Du so viel Gedult hast.  ;) ;D

1.
Es zählt immer die Zeit wo der Lüfter laufen darf (Lärmberlästigung)
Sommermonate und Wintermonate sind verschieden (Begründung folgt)
2.
Es zählt immer 2. also dass es Draussen trockener sein soll
3.

Die Temperaturen habe ich mir so gedacht, dass der Keller im Winter nicht zu viel auskühlt (8 Grad) und im Sommer sich nicht zu viel erwärmt (12 Grad)

Bei den verschiednen Laufzeiten habe ich mich an Erfahrungen aus anderen Lüftungsanlagen gehalten. Es hat sich anscheinend gezeigt, dass es besser ist im Winter (bei kalten Außentemperaturen) nicht so lange zu lüften, damit der Keller nicht zu viel auskühlt.

4.
Es soll draußen (im Sommer) kälter als drinnen sein, damit im Sommer der durch Lüften erwärmte Keller wieder abkühlt und nicht zu warm wird.

5.
Es soll draußen (im Winter) wärmer als drinnen sein, damit im Winter der druch Lüften abgekühlte Keller wieder erwärmt.



Otto123

Moin,

bei 3. wäre meine Meinung: Du hast ja enge Temperaturvorgaben und Du hast ja auch die Feuchtigkeitswerte. Die zeitliche Taktung klingt für mich da kontraproduktiv oder nur so als Notnagel aus der manuellen Lüftung.

4. und 5. klingt für mich jetzt irgendwie als unnötige Nebenbedingung - aber ich glaube ich habe Deine Zeitsteuerung bisher falsch verstanden.

Du hast also den Wunsch: Nachts aus, Sommer und Winter andere Innentemperaturen aber primär soll die Feuchtigkeit runter?
Und eigentlich spielt doch Sommer Winter keine Rolle sondern nur die Temperaturen?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ruggy

Hallo,

und sorry für die verspätete Antwort.

Die engen Temperaturvorgaben habe ich mir so gedacht, dass im Keller eine mehr oder weniger konstante Temperatur sein soll. Die Lufttemperatur soll in dem Bereich bleiben, um zu vermeiden, dass sich letztendlich auch die Wände zu viel erwärmen oder abkühlen und dort dann evlt. Kondeswasser entsteht.

zu 4 und 5.

Es ist so gedacht, dass im Winter so lange gelüftet wird (nach eingestellten Intervallen), bis die untere Temperaturgrenze (8 Grad) erreicht wird. Dies wurde vor ein paar Wochen erreicht und es wird nicht mehr gelüftet. Rein durch die Erdwärme würde es sehr lange dauern bis wieder die 8 Grad erreicht werden und der Lüfter ein schalten würde. Mein Gedanke ist, dass die Erwärmung dadurch beschleunigt wird, wenn wärmere Luft (wenn die Außentemperaturen steigen) in den Keller geblasen werden. Diese muss natürlich auch wiederum trockener sein.

Im Sommer ist es umgekehrt, damit sich die Kellertemperatur nicht zu stark erhöht, weil dort ja auch Lebensmittel gelagert sind.

Dies alles sind aber viel auch meine eigenen Überlegungen und habe noch wenig Erfahrungen gesammelt. Wie es im Sommer aussieht, kann ich noch gar nicht sagen. Wenn es am Tag 30 Grad hat und in der Nacht evtl. minimum z.B. 20 Grad. Im Sommer kommt auch dazu, dass wahrscheinlich am Tag gar nicht gelüftet wird, weil die Luftfeuchtigkeit grundsätzlich zu hoch ist.

Hier müsste ich wahrscheinlich meine Lüftungszeiten überdenken, damit auch Nachts gelüftet wird, weil dann die Luft trockener ist. Das nachst nicht gelüftet wird geht es mir eher um die Nachbarn und das Lüftergeräusch.

Du hast recht, Sommer und Winter spielt eigenlich keine Rolle sondern nur die Temperaturen. Nach Monaten geregelt ist es nur eine grobe Lüftung. Wahrscheinlich wäre eine reine Temperaturabhängige Lüftung noch besser. Aber ich glaube dies würde noch komplizierter werden.

Ruggy

Nachdem es die letzen Tage außen wärmer war als im Keller konnte ich das erste Mal sehen, dass es nicht funktioniert  :-\

hier nochmal das gesamte DOIF:

([deltadewpoint:state]>2 and
[07:00-23:00] and
$month>4 and
$month<10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12 or
([AUS_LUFTFEUCHTIGKEIT:temperature]<[KEL_LUFTFEUCHTIGKEIT:temperature]) and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month>4 and
$month<10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=12)
(set HUEDevice9 on-for-timer 1800)
              DOELSEIF
([deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12 or
([AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature]) and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=8)
(set HUEDevice9 on-for-timer 600)
              DOELSE
(set HUEDevice9 off)


und hier der Teil, welcher jetzt eigentlich funktionieren sollte:

              DOELSEIF
([deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12 or
([AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature]) and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=8)
(set HUEDevice9 on-for-timer 600)
              DOELSE
(set HUEDevice9 off)



dewpoint war größer als 2, es war zwischen 7:00 und 23:00 Uhr, es ist Monat März, aber die Kellertemperatur war mit 7 Grad unter 8 Grad -> somit wird diese Bedingung nicht ausgeführt

= jetzt sollte doch aber die OR Bedingung zutreffen, weil jetzt die zusätzliche Bedingung hinzukommt, dass es außen wärmer ist als im Keller?

Kann mir vorstellen, dass es an evlt. fehlenden Klammern liegt.


Leider bin ich mit Wiki auch nicht weitergekommen.
Wie schon festgestellt ist mein DOIF recht verschachtelt. Leider komme ich mit dem $SELF auch nicht zurecht, weil ist erst wieder verstehen muss was damit gemeint ist.


Otto123

Wenn Du mal ein list (kein Raw Def) zeigst, sieht man in welchem zustand das DOIF ist
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ruggy

Hier das List:

Internals:
   DEF        ([deltadewpoint:state]>2 and
[07:00-23:00] and
$month>4 and
$month<10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12 or
([AUS_LUFTFEUCHTIGKEIT:temperature]<[KEL_LUFTFEUCHTIGKEIT:temperature]) and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month>4 and
$month<10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=12)
(set HUEDevice9 on-for-timer 1800)
              DOELSEIF
([deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12 or
([AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature]) and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=8)
(set HUEDevice9 on-for-timer 600)
              DOELSE
(set HUEDevice9 off)
   FUUID      5fe1bee7-f33f-f59f-1a14-e04ad4bc48189b35
   MODEL      FHEM
   NAME       TAUPUNKT_LUEFTUNG_KG
   NOTIFYDEV  deltadewpoint,AUS_LUFTFEUCHTIGKEIT,KEL_LUFTFEUCHTIGKEIT,global
   NR         103
   NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_KG
   STATE      cmd_3
   TYPE       DOIF
   VERSION    22428 2020-07-18 20:32:08
   Helper:
     DBLOG:
       state:
         DbLog:
           TIME       1615562499.1406
           VALUE      cmd_3
   READINGS:
     2021-03-27 12:55:07   Device          deltadewpoint
     2021-03-12 16:21:39   cmd             3
     2021-03-12 16:21:39   cmd_event       AUS_LUFTFEUCHTIGKEIT
     2021-03-12 16:21:39   cmd_nr          3
     2021-03-27 12:55:07   e_AUS_LUFTFEUCHTIGKEIT_temperature 7.58
     2021-03-27 12:38:50   e_KEL_LUFTFEUCHTIGKEIT_temperature 6.76
     2021-03-27 12:55:07   e_deltadewpoint_state 7.4
     2021-03-12 16:04:41   mode            enabled
     2021-03-12 16:21:39   state           cmd_3
     2021-03-26 23:00:00   timer_01_c01    27.03.2021 07:00:00
     2021-03-26 23:00:00   timer_02_c01    27.03.2021 23:00:00
     2021-03-26 23:00:00   timer_03_c01    27.03.2021 07:00:00
     2021-03-26 23:00:00   timer_04_c01    27.03.2021 23:00:00
     2021-03-26 23:00:00   timer_05_c02    27.03.2021 07:00:00
     2021-03-26 23:00:00   timer_06_c02    27.03.2021 23:00:00
     2021-03-26 23:00:00   timer_07_c02    27.03.2021 07:00:00
     2021-03-26 23:00:00   timer_08_c02    27.03.2021 23:00:00
   Regex:
     accu:
     cond:
       AUS_LUFTFEUCHTIGKEIT:
         0:
           temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
         1:
           temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
       KEL_LUFTFEUCHTIGKEIT:
         0:
           temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
         1:
           temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
       deltadewpoint:
         0:
           state      ^deltadewpoint$:^state:
         1:
           state      ^deltadewpoint$:^state:
   attr:
     cmdState:
     repeatcmd:
       3600
       5400
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,0,1,$wday,$hms) and $month>4 and $month<10 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>8 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<12 or (::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')<::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')) and ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,2,3,$wday,$hms) and $month>4 and $month<10 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<=12
     1          ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,4,5,$wday,$hms) and $month<=4 and $month>=10 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>8 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<12 or (::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')>::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')) and ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,6,7,$wday,$hms) and $month<=4 and $month>=10 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<=8
   days:
   do:
     0:
       0          set HUEDevice9 on-for-timer 1800
     1:
       0          set HUEDevice9 on-for-timer 600
     2:
       0          set HUEDevice9 off
   helper:
     DEVFILTER  ^global$|^AUS_LUFTFEUCHTIGKEIT$|^KEL_LUFTFEUCHTIGKEIT$|^deltadewpoint$
     NOTIFYDEV  global|AUS_LUFTFEUCHTIGKEIT|KEL_LUFTFEUCHTIGKEIT|deltadewpoint
     event      7.4
     globalinit 1
     last_timer 8
     sleeptimer -1
     timerdev   deltadewpoint
     timerevent 7.4
     triggerDev deltadewpoint
     timerevents:
       7.4
     timereventsState:
       state: 7.4
     triggerEvents:
       7.4
     triggerEventsState:
       state: 7.4
   internals:
   interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
   intervalfunc:
   intervaltimer:
   localtime:
     0          1616824800
     1          1616882400
     2          1616824800
     3          1616882400
     4          1616824800
     5          1616882400
     6          1616824800
     7          1616882400
   readings:
     all         deltadewpoint:state KEL_LUFTFEUCHTIGKEIT:temperature AUS_LUFTFEUCHTIGKEIT:temperature
   realtime:
     0          07:00:00
     1          23:00:00
     2          07:00:00
     3          23:00:00
     4          07:00:00
     5          23:00:00
     6          07:00:00
     7          23:00:00
   time:
     0          07:00:00
     1          23:00:00
     2          07:00:00
     3          23:00:00
     4          07:00:00
     5          23:00:00
     6          07:00:00
     7          23:00:00
   timeCond:
     0          0
     1          0
     2          0
     3          0
     4          1
     5          1
     6          1
     7          1
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   timers:
     0           0  1  2  3
     1           4  5  6  7
   trigger:
   triggertime:
     1616882400:
       localtime  1616882400
       hash:
   uiState:
   uiTable:
Attributes:
   repeatcmd  3600:5400
   room       Kellerlüftung

Otto123

#24
Weil Du die Oder Klammer zu kurz gezogen hast?

or
([AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature]) and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=8)
die sollte um alles?
or
([AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature]and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=8) )

Ich finde es nach wie vor zu kompliziert und zu viele unnütze Nebenbedingung:
Die Monate spielen mMn keine Rolle
Ich würde nicht mit on-for-timer arbeiten sondern lediglich die (engen) Grenzen für Temperatur und Luftfeuchte spielen eine Rolle.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ruggy

Danke, habe die Klammern jetzt so verändert. Mal schauen, wann der Lüfter jetzt einschaltet.
Bis jetzt noch nicht (nach ca. 30 min)

Hier nochmal das List:

Internals:
   DEF        ([deltadewpoint:state]>2 and
[07:00-23:00] and
$month>4 and
$month<10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12 or
([AUS_LUFTFEUCHTIGKEIT:temperature]<[KEL_LUFTFEUCHTIGKEIT:temperature] and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month>4 and
$month<10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=12))
(set HUEDevice9 on-for-timer 1800)
              DOELSEIF
([deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12 or
([AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature] and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=8))
(set HUEDevice9 on-for-timer 600)
              DOELSE
(set HUEDevice9 off)
   FUUID      5fe1bee7-f33f-f59f-1a14-e04ad4bc48189b35
   MODEL      FHEM
   NAME       TAUPUNKT_LUEFTUNG_KG
   NOTIFYDEV  AUS_LUFTFEUCHTIGKEIT,KEL_LUFTFEUCHTIGKEIT,deltadewpoint,global
   NR         103
   NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_KG
   STATE      cmd_3
   TYPE       DOIF
   VERSION    22428 2020-07-18 20:32:08
   Helper:
     DBLOG:
       state:
         DbLog:
           TIME       1616848669.49318
           VALUE      cmd_3
   READINGS:
     2021-03-27 14:21:11   Device          deltadewpoint
     2021-03-27 13:37:49   cmd             3
     2021-03-27 13:37:49   cmd_event       AUS_LUFTFEUCHTIGKEIT
     2021-03-27 13:37:49   cmd_nr          3
     2021-03-27 14:21:11   e_AUS_LUFTFEUCHTIGKEIT_temperature 8.8
     2021-03-27 14:05:46   e_KEL_LUFTFEUCHTIGKEIT_temperature 6.74
     2021-03-27 14:21:11   e_deltadewpoint_state 7.4
     2021-03-27 13:33:28   mode            enabled
     2021-03-27 13:37:49   state           cmd_3
     2021-03-27 13:33:28   timer_01_c01    28.03.2021 07:00:00
     2021-03-27 13:33:28   timer_02_c01    27.03.2021 23:00:00
     2021-03-27 13:33:28   timer_03_c01    28.03.2021 07:00:00
     2021-03-27 13:33:28   timer_04_c01    27.03.2021 23:00:00
     2021-03-27 13:33:28   timer_05_c02    28.03.2021 07:00:00
     2021-03-27 13:33:28   timer_06_c02    27.03.2021 23:00:00
     2021-03-27 13:33:28   timer_07_c02    28.03.2021 07:00:00
     2021-03-27 13:33:28   timer_08_c02    27.03.2021 23:00:00
   Regex:
     accu:
     cond:
       AUS_LUFTFEUCHTIGKEIT:
         0:
           temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
         1:
           temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
       KEL_LUFTFEUCHTIGKEIT:
         0:
           temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
         1:
           temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
       deltadewpoint:
         0:
           state      ^deltadewpoint$:^state:
         1:
           state      ^deltadewpoint$:^state:
   attr:
     cmdState:
     repeatcmd:
       3600
       5400
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,0,1,$wday,$hms) and $month>4 and $month<10 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>8 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<12 or (::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')<::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature') and ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,2,3,$wday,$hms) and $month>4 and $month<10 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<=12)
     1          ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,4,5,$wday,$hms) and $month<=4 and $month>=10 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>8 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<12 or (::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')>::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature') and ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,6,7,$wday,$hms) and $month<=4 and $month>=10 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<=8)
   days:
   do:
     0:
       0          set HUEDevice9 on-for-timer 1800
     1:
       0          set HUEDevice9 on-for-timer 600
     2:
       0          set HUEDevice9 off
   helper:
     DEVFILTER  ^global$|^KEL_LUFTFEUCHTIGKEIT$|^AUS_LUFTFEUCHTIGKEIT$|^deltadewpoint$
     NOTIFYDEV  global|KEL_LUFTFEUCHTIGKEIT|AUS_LUFTFEUCHTIGKEIT|deltadewpoint
     event      7.4
     globalinit 1
     last_timer 8
     sleeptimer -1
     timerdev   deltadewpoint
     timerevent 7.4
     triggerDev deltadewpoint
     timerevents:
       7.4
     timereventsState:
       state: 7.4
     triggerEvents:
       7.4
     triggerEventsState:
       state: 7.4
   internals:
   interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
   intervalfunc:
   localtime:
     0          1616907600
     1          1616882400
     2          1616907600
     3          1616882400
     4          1616907600
     5          1616882400
     6          1616907600
     7          1616882400
   readings:
     all         deltadewpoint:state KEL_LUFTFEUCHTIGKEIT:temperature AUS_LUFTFEUCHTIGKEIT:temperature
   realtime:
     0          07:00:00
     1          23:00:00
     2          07:00:00
     3          23:00:00
     4          07:00:00
     5          23:00:00
     6          07:00:00
     7          23:00:00
   time:
     0          07:00:00
     1          23:00:00
     2          07:00:00
     3          23:00:00
     4          07:00:00
     5          23:00:00
     6          07:00:00
     7          23:00:00
   timeCond:
     0          0
     1          0
     2          0
     3          0
     4          1
     5          1
     6          1
     7          1
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   timers:
     0           0  1  2  3
     1           4  5  6  7
   trigger:
   triggertime:
     1616882400:
       localtime  1616882400
       hash:
     1616907600:
       localtime  1616907600
       hash:
   uiState:
   uiTable:
Attributes:
   repeatcmd  3600:5400
   room       Kellerlüftung


Leuchtet mir jetzt ein wenn ich es sehe, aber selber wäre ich wahrscheinlich nicht drauf gekommen.
Irgendwie hat es noch nicht so recht klick bei mir gemacht mit den Klammern und was zusammengehört.

Hast schon recht, das alles noch zu kompliziert ist.

Ja, es würde eigentlich reichen, wenn die Steuerung in Abhängigkeit zwischen Temperatur und Luffeuchtigkeit erfolgen würde.
Die Uhrzeit könnte man theoretisch weg lassen (ist nur wegen der "Ruhestörung"; ist aber nicht so schlimm);

Das im Winter kürzer gelüftet wird als im Sommer ist dafür gedacht, dass der Keller nicht zu weit abkühlt; jedoch sollte er sich aber ja auch im Sommer nicht zu viel erwärmen.
Ich weiß auch nicht ob es besser wäre kürzer zu lüften dafür öfters oder länger lüften und dafür die Abstände zwischen den Lüftungen länger.

Grundsätzlich so in der Richtung, je größer der Unterschied zwischen Kellertemperatur und Außentemperatur desto kürzer die Lüftungszeit und/oder größer der Abstand zwischen den Lüftungszeiten. Oder/und man legt hierfür eine Grundtemperatur im Keller von z.b. 8 Grad.

Wie so ein Art steigernder Graph der immer steiler ansteigt?
Weiß nicht ob dies überhaupt umsetztbar ist; und mit meinem "Wissen" dann sowieso nicht.


Ruggy

Bin mir nicht sicher evlt. funktioniert es doch.
Wie lange dauert es, bis das DOIF nach der Änderung ausgeführt wird?
Evlt. erst dann wenn alle Werte neu abgerufen wurden, nachdem ich die Änderung gespeichert habe?

Habe nämlich den Lüfter manuell eingeschaltet.
Nach kurzer Zeit wurde er aber automatisch ausgeschaltet; ich denke, weil es außen kälter geworden ist als im Keller. So sieht es zumindest vom Temperaturverlauf aus.

Otto123

Du siehst doch in den readings oder im list immer was das DOIF tut ...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ruggy

Laut den readings im List müsste der Lüfter doch einschalten?
Ist außen wärmer als im Keller. Der Rest der readings sollte auch passen.

Internals:
   DEF        ([deltadewpoint:state]>2 and
[07:00-23:00] and
$month>4 and
$month<10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12 or
([AUS_LUFTFEUCHTIGKEIT:temperature]<[KEL_LUFTFEUCHTIGKEIT:temperature] and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month>4 and
$month<10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=12))
(set HUEDevice9 on-for-timer 1800)
              DOELSEIF
([deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12 or
([AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature] and
[deltadewpoint:state]>2 and
[07:00-23:00] and
$month<=4 and
$month>=10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=8))
(set HUEDevice9 on-for-timer 600)
              DOELSE
(set HUEDevice9 off)
   FUUID      5fe1bee7-f33f-f59f-1a14-e04ad4bc48189b35
   MODEL      FHEM
   NAME       TAUPUNKT_LUEFTUNG_KG
   NOTIFYDEV  global,deltadewpoint,KEL_LUFTFEUCHTIGKEIT,AUS_LUFTFEUCHTIGKEIT
   NR         103
   NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_KG
   STATE      cmd_3
   TYPE       DOIF
   VERSION    22428 2020-07-18 20:32:08
   Helper:
     DBLOG:
       state:
         DbLog:
           TIME       1616858871.27417
           VALUE      cmd_3
   READINGS:
     2021-03-28 12:45:49   Device          deltadewpoint
     2021-03-27 16:27:51   cmd             3
     2021-03-27 16:27:51   cmd_event       KEL_LUFTFEUCHTIGKEIT
     2021-03-27 16:27:51   cmd_nr          3
     2021-03-28 12:45:49   e_AUS_LUFTFEUCHTIGKEIT_temperature 8.56
     2021-03-28 12:23:56   e_KEL_LUFTFEUCHTIGKEIT_temperature 6.85
     2021-03-28 12:45:49   e_deltadewpoint_state 4.4
     2021-03-27 16:21:58   mode            enabled
     2021-03-27 16:27:51   state           cmd_3
     2021-03-27 23:00:00   timer_01_c01    28.03.2021 07:00:00
     2021-03-27 23:00:00   timer_02_c01    28.03.2021 23:00:00
     2021-03-27 23:00:00   timer_03_c01    28.03.2021 07:00:00
     2021-03-27 23:00:00   timer_04_c01    28.03.2021 23:00:00
     2021-03-27 23:00:00   timer_05_c02    28.03.2021 07:00:00
     2021-03-27 23:00:00   timer_06_c02    28.03.2021 23:00:00
     2021-03-27 23:00:00   timer_07_c02    28.03.2021 07:00:00
     2021-03-27 23:00:00   timer_08_c02    28.03.2021 23:00:00
   Regex:
     accu:
     cond:
       AUS_LUFTFEUCHTIGKEIT:
         0:
           temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
         1:
           temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
       KEL_LUFTFEUCHTIGKEIT:
         0:
           temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
         1:
           temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
       deltadewpoint:
         0:
           state      ^deltadewpoint$:^state:
         1:
           state      ^deltadewpoint$:^state:
   attr:
     cmdState:
     repeatcmd:
       3600
       5400
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,0,1,$wday,$hms) and $month>4 and $month<10 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>8 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<12 or (::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')<::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature') and ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,2,3,$wday,$hms) and $month>4 and $month<10 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<=12)
     1          ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,4,5,$wday,$hms) and $month<=4 and $month>=10 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>8 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<12 or (::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')>::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature') and ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,6,7,$wday,$hms) and $month<=4 and $month>=10 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<=8)
   days:
   do:
     0:
       0          set HUEDevice9 on-for-timer 1800
     1:
       0          set HUEDevice9 on-for-timer 600
     2:
       0          set HUEDevice9 off
   helper:
     DEVFILTER  ^global$|^AUS_LUFTFEUCHTIGKEIT$|^KEL_LUFTFEUCHTIGKEIT$|^deltadewpoint$
     NOTIFYDEV  global|AUS_LUFTFEUCHTIGKEIT|KEL_LUFTFEUCHTIGKEIT|deltadewpoint
     event      4.4
     globalinit 1
     last_timer 8
     sleeptimer -1
     timerdev   deltadewpoint
     timerevent 4.4
     triggerDev deltadewpoint
     timerevents:
       4.4
     timereventsState:
       state: 4.4
     triggerEvents:
       4.4
     triggerEventsState:
       state: 4.4
   internals:
   interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
   intervalfunc:
   intervaltimer:
   localtime:
     0          1616907600
     1          1616965200
     2          1616907600
     3          1616965200
     4          1616907600
     5          1616965200
     6          1616907600
     7          1616965200
   readings:
     all         deltadewpoint:state KEL_LUFTFEUCHTIGKEIT:temperature AUS_LUFTFEUCHTIGKEIT:temperature
   realtime:
     0          07:00:00
     1          23:00:00
     2          07:00:00
     3          23:00:00
     4          07:00:00
     5          23:00:00
     6          07:00:00
     7          23:00:00
   time:
     0          07:00:00
     1          23:00:00
     2          07:00:00
     3          23:00:00
     4          07:00:00
     5          23:00:00
     6          07:00:00
     7          23:00:00
   timeCond:
     0          0
     1          0
     2          0
     3          0
     4          1
     5          1
     6          1
     7          1
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   timers:
     0           0  1  2  3
     1           4  5  6  7
   trigger:
   triggertime:
     1616965200:
       localtime  1616965200
       hash:
   uiState:
   uiTable:
Attributes:
   repeatcmd  3600:5400
   room       Kellerlüftung

Christoph Morrison

Das Problem an deinem Code ist, dass du zu viele Bedingungen kombinierst und vermutlich in Operatoren-Präzendezproblem (Reihenfolge/Bindung von and/or) läufst. Nur: Die Definition ist halt so umfangreich, dass das kaum mehr zu debuggen ist, wie du ja bereits bemerkt hast. So sieht z.B. eine deiner Bedingungen in Perl übersetzt aus (und das sind eigentlich zwei), wenn man das mal lesbar formatiert:


        ::ReadingValDoIf($hash,'deltadewpoint','state')>2
    and ::DOIF_time($hash,0,1,$wday,$hms)
    and $month>4
    and $month<10
    and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>8
    and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<12
or (
        ::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature') < ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')
    and ::ReadingValDoIf($hash,'deltadewpoint','state') > 2
    and ::DOIF_time($hash,2,3,$wday,$hms)
    and $month>4
    and $month<10
    and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<=12
)


Da stellst sich doch direkt die Frage: Wohin bindet das or? Kann das selbst gerade nicht sagen, aber am Ende prüfst du logisch, ob viele Bedingungen vorher wahr und KEL_LUFTFEUCHTIGKEIT < 12 ODER ob der Block im OR wahr ergibt. Nicht was du willst, schätze ich. 

Dein Problem ist auch, dass du dein umfangreiches DOIF wirklich schlecht formatierst.