Kann man beim DOIF das DOELSE weg lassen?

Begonnen von Ruggy, 05 Februar 2023, 14:14:07

Vorheriges Thema - Nächstes Thema

Ruggy

Hallo,

kann man bei einem DOIF, das DOELSE weg lassen?

Der Hintergrund ist, dass ich für meine Kellerlüftungssteuerung fünf verschiedene DOIFs habe, welche bei unterschiedlich festgelegten Temperaturen/Luftfeuchtigkeit (Keller und Außen) dementsprechend verschieden ansprechen und auch verschieden lange den Lüfter laufen lassen. Fragen zur Steuerung im Allgemeinen habe ich hier schon öfters gestellt.


Das erste DOIF schaltet einen Lüfter ein, wenn die Bedingungen erfüllt sind. Wenn nicht, schaltet es den Lüfter aus.

Ein DOIF alleine würde funktionieren.

Das zweite DOIF überprüft aber seine Bedingungen ebenfalls (parallel).
Hier liegt wahrscheinlich das Problem.
Weil nämlich beim zweiten DOIF die Bedingungen in diesem Fall nicht zutreffen, schaltet es mit dem DOELSE den Lüfter aus.
Somit wird mir also der Lüfter ausgeschaltet, welcher eigenlich wegen dem erste DOIF (richtigerweise) noch weiter laufen sollte.


Bisher habe ich mir so beholfen, dass ich die DOIFS, welche derzeit nicht zutreffen, auf "disable" händisch gesetzt habe.
Ist natürlich umständlich und ich muß selber immer wieder schauen, welches gerade das richtige wäre.
Ist auch nicht gerade "smart" für ein Smarthome  :-[.

Was wäre, wenn ich bei jedem DOIF das DOELSE weg lasse. Wenn also die Bedingung nicht zutrifft, soll nichts weiter gemacht werden.

Falls dies funktioniert, wäre dies das Einfachste für mich.



Hier die Lists von zwei DOIF:

Internals:
   DEF        ([deltadewpoint:state]>2.3 and [HUESensor84:temperature]>8.5 and [HUESensor84:temperature]<=10)(set HUEDevice18 on-for-timer 17)(set HUEDevice11 on-for-timer 900)(set HUEDevice7 on-for-timer 17) DOELSE (set HUEDevice11 off)
   FUUID      61bcdea7-f33f-f59f-b9c1-6d3492ce084fd1cf
   MODEL      FHEM
   NAME       TAUPUNKT_LUEFTUNG_KALT
   NOTIFYDEV  HUESensor84,deltadewpoint,global
   NR         129
   NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_KALT
   STATE      disabled
   TYPE       DOIF
   VERSION    26444 2022-09-25 16:29:19
   eventCount 30033
   Helper:
     DBLOG:
       state:
         DbLog:
           TIME       1674372224.63503
           VALUE      disabled
   READINGS:
     2023-01-22 08:23:15   Device          HUESensor84
     2023-01-22 08:23:15   cmd             2
     2023-01-22 08:23:15   cmd_event       HUESensor84
     2023-01-22 08:23:15   cmd_nr          2
     2023-01-22 08:23:15   e_HUESensor84_temperature 8.26
     2023-01-22 08:17:08   e_deltadewpoint_state 9.7
     2023-01-22 08:23:44   last_cmd        cmd_2
     2023-01-22 08:23:44   mode            disabled
     2023-01-22 08:23:44   state           disabled
     2023-01-22 00:19:48   wait_timer      no timer
   Regex:
     accu:
     collect:
     cond:
       HUESensor84:
         0:
           temperature ^HUESensor84$:^temperature:
       deltadewpoint:
         0:
           state      ^deltadewpoint$:^state:
   attr:
     cmdState:
     repeatcmd:
       7400
     wait:
       0:
         0
         20
         920
       1:
         0
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'deltadewpoint','state')>2.3 and ::ReadingValDoIf($hash,'HUESensor84','temperature')>8.5 and ::ReadingValDoIf($hash,'HUESensor84','temperature')<=10
   do:
     0:
       0          set HUEDevice18 on-for-timer 17
       1          set HUEDevice11 on-for-timer 900
       2          set HUEDevice7 on-for-timer 17
     1:
       0          set HUEDevice11 off
   helper:
     NOTIFYDEV  HUESensor84,deltadewpoint,global
     event      temperature: 8.26
     globalinit 1
     last_timer 0
     sleepdevice HUESensor84
     sleepsubtimer 0
     sleeptimer -1
     timerdev   HUESensor84
     timerevent temperature: 8.26
     triggerDev HUESensor84
     bm:
       DOIF_Get:
         cnt        13
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        05.02. 12:57:36
         max        0.000232934951782227
         tot        0.000790834426879883
         mAr:
           HASH(0x3796840)
           TAUPUNKT_LUEFTUNG_KALT
           ?
       DOIF_Notify:
         cnt        31815
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        22.01. 08:17:09
         max        0.527423858642578
         tot        18.0940017700195
         mAr:
           HASH(0x3796840)
           HASH(0x34a8648)
       DOIF_Set:
         cnt        133
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        22.01. 08:23:44
         max        0.0273299217224121
         tot        0.0571322441101074
         mAr:
           HASH(0x3796840)
           TAUPUNKT_LUEFTUNG_KALT
           disable
     timerevents:
       temperature: 8.26
     timereventsState:
       temperature: 8.26
     triggerEvents:
       temperature: 8.26
     triggerEventsState:
       temperature: 8.26
   internals:
   readings:
     all         deltadewpoint:state HUESensor84:temperature
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   repeatcmd  7400
   room       Kellerlüftung
   wait       0,20,920:0


List zwei:

Internals:
   DEF        ([deltadewpoint:state]>2.3 and [HUESensor84:temperature]<=8.5 and [AUS_LUFTFEUCHTIGKEIT:temperature]>[HUESensor84:temperature])(set HUEDevice18 on-for-timer 17)(set HUEDevice11 on-for-timer 480)(set HUEDevice7 on-for-timer 17) DOELSE (set HUEDevice11 off)
   FUUID      6060ef63-f33f-f59f-0724-1fb6e7a4b53fc5e7
   MODEL      FHEM
   NAME       TAUPUNKT_LUEFTUNG_WINTER
   NOTIFYDEV  deltadewpoint,HUESensor84,AUS_LUFTFEUCHTIGKEIT,global
   NR         100
   NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_WINTER
   STATE      disabled
   TYPE       DOIF
   VERSION    26444 2022-09-25 16:29:19
   eventCount 23691
   Helper:
     DBLOG:
       state:
         DbLog:
           TIME       1674929228.11564
           VALUE      disabled
   READINGS:
     2023-01-28 19:06:38   Device          HUESensor84
     2023-01-28 19:06:38   cmd             2
     2023-01-28 19:06:38   cmd_event       HUESensor84
     2023-01-28 19:06:38   cmd_nr          2
     2023-01-28 19:06:09   e_AUS_LUFTFEUCHTIGKEIT_temperature -3.68
     2023-01-28 19:06:38   e_HUESensor84_temperature 8.11
     2023-01-28 18:58:41   e_deltadewpoint_state 12.4
     2023-01-28 19:07:08   last_cmd        cmd_2
     2023-01-28 19:07:08   mode            disabled
     2023-01-28 19:07:08   state           disabled
   Regex:
     accu:
     collect:
     cond:
       AUS_LUFTFEUCHTIGKEIT:
         0:
           temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
       HUESensor84:
         0:
           temperature ^HUESensor84$:^temperature:
       deltadewpoint:
         0:
           state      ^deltadewpoint$:^state:
   attr:
     cmdState:
     repeatcmd:
       9000
     wait:
       0:
         0
         20
         500
       1:
         0
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'deltadewpoint','state')>2.3 and ::ReadingValDoIf($hash,'HUESensor84','temperature')<=8.5 and ::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')>::ReadingValDoIf($hash,'HUESensor84','temperature')
   do:
     0:
       0          set HUEDevice18 on-for-timer 17
       1          set HUEDevice11 on-for-timer 480
       2          set HUEDevice7 on-for-timer 17
     1:
       0          set HUEDevice11 off
   helper:
     NOTIFYDEV  deltadewpoint,HUESensor84,AUS_LUFTFEUCHTIGKEIT,global
     event      battery: 100,batteryPercent: 100,reachable: 1,temperature: 8.11
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   HUESensor84
     timerevent battery: 100,batteryPercent: 100,reachable: 1,temperature: 8.11
     triggerDev HUESensor84
     bm:
       DOIF_Get:
         cnt        10
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        22.01. 11:13:45
         max        8.98838043212891e-05
         tot        0.000464439392089844
         mAr:
           HASH(0x3684db8)
           TAUPUNKT_LUEFTUNG_WINTER
           ?
       DOIF_Notify:
         cnt        61633
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        28.01. 09:18:18
         max        0.583838939666748
         tot        573.331291675568
         mAr:
           HASH(0x3684db8)
           HASH(0x2d71d90)
       DOIF_Set:
         cnt        1095
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        22.01. 19:39:58
         max        0.0367300510406494
         tot        0.199435472488403
         mAr:
           HASH(0x3684db8)
           TAUPUNKT_LUEFTUNG_WINTER
           disable
     timerevents:
       battery: 100
       batteryPercent: 100
       reachable: 1
       temperature: 8.11
     timereventsState:
       battery: 100
       batteryPercent: 100
       reachable: 1
       temperature: 8.11
     triggerEvents:
       battery: 100
       batteryPercent: 100
       reachable: 1
       temperature: 8.11
     triggerEventsState:
       battery: 100
       batteryPercent: 100
       reachable: 1
       temperature: 8.11
   internals:
   readings:
     all         deltadewpoint:state HUESensor84:temperature AUS_LUFTFEUCHTIGKEIT:temperature
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   repeatcmd  9000
   room       Kellerlüftung
   wait       0,20,500:0


Vielen Dank
Grüße Ruggy

juemuc

Hallo Ruggy,
ja geht. Du solltest die sehr ausführliche Doku und die vielen Beispiele einmal lesen.

Warum machts Du das nicht mit einem DOIF mit DOELSEIF?

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Ruggy

Die Commandref habe ich mir schon durchgelesen.
Leider ist mir trotzdem alles noch nicht so klar geworden. Mir wurde auch hier schon mal versucht dies zu erklären. Das schwierige ist für mich wie was zusammen hängt; DOIF, DOELSE, DOELSEIF, dann verschiedene Klammern (), []

Vor allem bei so vielen Verschachtelungen wie in meinen DOIFs

Meinst Du mit mit DOESLEIF, dass ich meine DOIFs zu einem DOIF zusammen fasse?

Etwa so (vorerst mit zwei)?

define Kellerlüftung_Taupunkt DOIF ([deltadewpoint:state]>2.3 and [HUESensor84:temperature]>8.5 and [HUESensor84:temperature]<=10)(set HUEDevice18 on-for-timer 17)(set HUEDevice11 on-for-timer 900)(set HUEDevice7 on-for-timer 17) DOELSEIF ([deltadewpoint:state]>2.3 and [HUESensor84:temperature]<=8.5 and [AUS_LUFTFEUCHTIGKEIT:temperature]>[HUESensor84:temperature])(set HUEDevice18 on-for-timer 17)(set HUEDevice11 on-for-timer 480)(set HUEDevice7 on-for-timer 17)

der-Lolo

Eine Zeitlang habe ich in DOELSE einen Log eintrag gesetzt - um zu signalisieren das das DOIF durch ein Event getriggert wurde, aber keine Bedingung passte. Fand ich zum debuggen ganz hilfreich.

juemuc

@Ruggy,

funktioniert denn Deine Definition wie gewünscht?
Ich habe zum testen mir häufug einen Dummy definiert, den ich dann in Abhängigkeit der BEdingungen mit einem Wert versorgt habe. So kann man erst einmal die Bedingungen testen. Wenn das alles passt, kann man die richtigen Befehl absetzen.

Viele Grüße
Jürgen

PS.: Für spezielle DOIF-Fragen sollten man das entsprechende Unterforum nutzen.
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Ruggy

#5
Zitat von: juemuc am 05 Februar 2023, 21:21:39
@Ruggy,

funktioniert denn Deine Definition wie gewünscht?

PS.: Für spezielle DOIF-Fragen sollten man das entsprechende Unterforum nutzen.

Ich glaube jetzt, dass es nicht so wie gewünscht funktoniert.
Laut den SVG-Plot schaltet sich der Lüfter aber mehrmals ein (siehe Anhang).

Folgende Temperatur-Werte und Taupunktwerte sind derzeit vorhanden (HUESensor84 ist im Keller). Eigentlich sollte das DOIF der Lüfter doch derzeit nicht einschalten.


e_AUS_LUFTFEUCHTIGKEIT_temperature
4.35
2023-02-17 11:31:13

e_HUESensor84_temperature
7.05
2023-02-17 10:28:05

e_deltadewpoint_state
3.2
2023-02-17 10:37:13


Folgendes DOIF wird laut state cmd_1 anscheindend aktiv

Internals:
   DEF        ([deltadewpoint:state]>2.3 and [HUESensor84:temperature]<=8.5 and [AUS_LUFTFEUCHTIGKEIT:temperature]>[HUESensor84:temperature])(set HUEDevice18 on-for-timer 17)(set HUEDevice11 on-for-timer 480)(set HUEDevice7 on-for-timer 17)
   FUUID      6060ef63-f33f-f59f-0724-1fb6e7a4b53fc5e7
   MODEL      FHEM
   NAME       TAUPUNKT_LUEFTUNG_WINTER
   NOTIFYDEV  deltadewpoint,global,AUS_LUFTFEUCHTIGKEIT,HUESensor84
   NR         125
   NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_WINTER
   STATE      cmd_1
   TYPE       DOIF
   VERSION    27190 2023-02-07 19:11:02
   eventCount 323
   Helper:
     DBLOG:
       state:
         DbLog:
           TIME       1676625414.82009
           VALUE      cmd_1
   READINGS:
     2023-02-17 11:39:13   Device          AUS_LUFTFEUCHTIGKEIT
     2023-02-17 10:16:54   cmd             1.3
     2023-02-17 10:16:54   cmd_event       AUS_LUFTFEUCHTIGKEIT
     2023-02-17 10:16:54   cmd_nr          1
     2023-02-17 10:16:54   cmd_seqnr       3
     2023-02-17 11:39:13   e_AUS_LUFTFEUCHTIGKEIT_temperature 4.73
     2023-02-17 11:34:39   e_HUESensor84_temperature 7.04
     2023-02-17 11:33:43   e_deltadewpoint_state 2.5
     2023-02-05 16:40:23   mode            enabled
     2023-02-17 10:16:54   state           cmd_1
     2023-02-17 10:16:54   wait_timer      17.02.2023 12:46:54 cmd_1_1 AUS_LUFTFEUCHTIGKEIT
   Regex:
     accu:
     bar:
     collect:
     cond:
       AUS_LUFTFEUCHTIGKEIT:
         0:
           temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
       HUESensor84:
         0:
           temperature ^HUESensor84$:^temperature:
       deltadewpoint:
         0:
           state      ^deltadewpoint$:^state:
   attr:
     cmdState:
     repeatcmd:
       9000
     wait:
       0:
         0
         20
         500
       1:
         0
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'deltadewpoint','state')>2.3 and ::ReadingValDoIf($hash,'HUESensor84','temperature')<=8.5 and ::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')>::ReadingValDoIf($hash,'HUESensor84','temperature')
   do:
     0:
       0          set HUEDevice18 on-for-timer 17
       1          set HUEDevice11 on-for-timer 480
       2          set HUEDevice7 on-for-timer 17
     1:
   helper:
     NOTIFYDEV  deltadewpoint,global,AUS_LUFTFEUCHTIGKEIT,HUESensor84
     event      temperature: 4.73
     globalinit 1
     last_timer 0
     sleepdevice AUS_LUFTFEUCHTIGKEIT
     sleepsubtimer 0
     sleeptimer 0
     timerdev   AUS_LUFTFEUCHTIGKEIT
     timerevent temperature: 7.37
     triggerDev AUS_LUFTFEUCHTIGKEIT
     bm:
       DOIF_Get:
         cnt        4
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        11.02. 21:41:53
         max        4.50611114501953e-05
         tot        0.000128030776977539
         mAr:
           HASH(0x503d4e8)
           TAUPUNKT_LUEFTUNG_WINTER
           ?
       DOIF_Notify:
         cnt        9240
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        16.02. 21:20:12
         max        0.0199840068817139
         tot        17.8054039478302
         mAr:
           HASH(0x503d4e8)
           HASH(0x471aa98)
       DOIF_Set:
         cnt        30
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        17.02. 11:30:20
         max        0.000196933746337891
         tot        0.00280284881591797
         mAr:
           HASH(0x503d4e8)
           TAUPUNKT_LUEFTUNG_WINTER
           ?
     timerevents:
       temperature: 7.37
     timereventsState:
       temperature: 7.37
     triggerEvents:
       temperature: 4.73
     triggerEventsState:
       temperature: 4.73
   internals:
   perlblock:
   readings:
     all         deltadewpoint:state HUESensor84:temperature AUS_LUFTFEUCHTIGKEIT:temperature
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   repeatcmd  9000
   room       Kellerlüftung
   wait       0,20,500:0