DOIF mit vielen Bedingungen eine weitere hinzufügen

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

Vorheriges Thema - Nächstes Thema

Ruggy

Hallo,

habe im Zusammenhang mit einer Kellerbelüftung in einem DOIF bereits viele Bedingungen.

Abhängig von der Jahreszeit und Uhrzeit soll der Lüfter eingeschalten werden, wenn es außen trockener ist als innen (über den Taupunkt). Außerdem soll der Lüfter nur einschalten, wenn es im Keller eine vorgegebene Temperatur hat (Keller soll im Winter nicht auskühlen und im Sommer nicht zu viel aufgeheizt werden).
Soweit funktioniert es.


Jetzt möchte ich noch folgende weitere Bedingung hinzufügen und ich weiß aber nicht wie die Bedingung in der DEF umsetzen kann.

Da der Keller mittlerweile die Untergrenze (von 8 Grad) erreicht hat schaltet sich der Lüfter nicht mehr ein. So weit ist es ja gewünscht.
Jetzt möchte ich aber, dass der Lüfter trotzdem einschaltet, obwohl die Untergrenze unterschritten ist, es aber außen wärmer ist, als die aktuelle Temperatur im Keller.
Dadurch soll sich der Keller wieder aufwärmen können. Durch die Erdtemperatur würde es sehr lange dauern, bis sich die Temperatur im Keller von selber wieder erhöht.
Zusätzlich sollen aber weiterhin die anderen Bedingungen gelten (insbesondere, dass die absolute Luftfeuchtigkeit (Taupunkt) außen trockener sein muß als im Keller)

Wie muss ich die Bedingung ins vorhandene DOIF als "schnelle Lösung" aufnehmen, damit es funktioniert?


Hier die DEF vom 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)) (set HUEDevice9 on-for-timer 1800) DOELSEIF ([deltadewpoint:state]>2 and [07:00-23:00] and ($month<=4 or $month>=10) and ([KEL_LUFTFEUCHTIGKEIT:temperature]>8 and [KEL_LUFTFEUCHTIGKEIT:temperature]<12)) (set HUEDevice9 on-for-timer 600) DOELSE (set HUEDevice9 off)

Hier das List vom gesamten DOIF:

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)) (set HUEDevice9 on-for-timer 1800) DOELSEIF ([deltadewpoint:state]>2 and [07:00-23:00] and ($month<=4 or $month>=10) and ([KEL_LUFTFEUCHTIGKEIT:temperature]>8 and [KEL_LUFTFEUCHTIGKEIT:temperature]<12)) (set HUEDevice9 on-for-timer 600) DOELSE (set HUEDevice9 off)
   FUUID      5fe1bee7-f33f-f59f-1a14-e04ad4bc48189b35
   MODEL      FHEM
   NAME       TAUPUNKT_LUEFTUNG_KG
   NOTIFYDEV  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       1615110968.23403
           VALUE      cmd_3
   READINGS:
     2021-03-12 06:50:34   Device          deltadewpoint
     2021-03-07 10:56:08   cmd             3
     2021-03-07 10:56:08   cmd_event       KEL_LUFTFEUCHTIGKEIT
     2021-03-07 10:56:08   cmd_nr          3
     2021-03-12 06:42:55   e_KEL_LUFTFEUCHTIGKEIT_temperature 7.09
     2021-03-12 06:50:34   e_deltadewpoint_state 6.3
     2021-03-07 10:55:04   mode            enabled
     2021-03-07 10:56:08   state           cmd_3
     2021-03-11 23:00:00   timer_01_c01    12.03.2021 07:00:00
     2021-03-11 23:00:00   timer_02_c01    12.03.2021 23:00:00
     2021-03-11 23:00:00   timer_03_c02    12.03.2021 07:00:00
     2021-03-11 23:00:00   timer_04_c02    12.03.2021 23:00:00
   Regex:
     accu:
     cond:
       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)
     1          ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::DOIF_time($hash,2,3,$wday,$hms) and ($month<=4 or $month>=10) and (::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>8 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<12)
   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$|^deltadewpoint$|^KEL_LUFTFEUCHTIGKEIT$
     NOTIFYDEV  global|deltadewpoint|KEL_LUFTFEUCHTIGKEIT
     event      6.3
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   deltadewpoint
     timerevent 6.3
     triggerDev deltadewpoint
     timerevents:
       6.3
     timereventsState:
       state: 6.3
     triggerEvents:
       6.3
     triggerEventsState:
       state: 6.3
   internals:
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   intervaltimer:
   localtime:
     0          1615528800
     1          1615586400
     2          1615528800
     3          1615586400
   readings:
     all         deltadewpoint:state KEL_LUFTFEUCHTIGKEIT:temperature
   realtime:
     0          07:00:00
     1          23:00:00
     2          07:00:00
     3          23:00:00
   time:
     0          07:00:00
     1          23:00:00
     2          07:00:00
     3          23:00:00
   timeCond:
     0          0
     1          0
     2          1
     3          1
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     0           0  1
     1           2  3
   trigger:
   triggertime:
     1615528800:
       localtime  1615528800
       hash:
     1615586400:
       localtime  1615586400
       hash:
   uiState:
   uiTable:
Attributes:
   repeatcmd  3600:5400
   room       Kellerlüftung


Wenn ich folgende Bedingung mit hineinschreibe würde es nicht funktionieren, da es ja dann außen immer wärmer sein muß als im Keller. Der Lüfter soll sich ja trotzdem einschalten, auch wenn es außen kälter ist als im Keller.

and ([AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature])


Unabhängig davon würde mich interessieren, ob man grundsätlich das DOIF anders umsetzen würde. Ich bin relativ unerfahren mit FHEM. Bei dem bisherigen Weg wurde ich in einem anderen Thread bereits unterstützt.


Vielen Dank
Vielen Grüße
Ruggy

Otto123

Moin,

so wie Du es formulierst klingt es eher noch ODER.
Generell die Vergleiche brauchst Du nicht separat umklammern, die werden zuerst aufgelöst -> https://perldoc.perl.org/perlop#Operator-Precedence-and-Associativity
Die AND brauchst Du normal auch nicht separat zu Klammern.
Was man in der Regel immer separat (ein)klammern muss sind OR Ausdrücke -> eins and zwei or (drei or vier) or (fünf and sechs) - entscheidend ist aber immer die Logiktabelle - die man sich ruhig für alle Kombinationen aufstellen sollte.
0 or 0 = 0    0 and 0 = 0
1 or 0 = 1    1 and 0 = 0
0 or 1 = 1    0 and 1 = 0
1 or 1 = 1    1 and 1 = 1

Wenn Du jetzt aber nur den Ausdruck hinzufügst wird der dominant.
Manchmal hilft es die Einzelbedingungen zu priorisieren und diese vielleicht auch erstmal einzeln zu bearbeiten.
Es bietet sich auch an solche Zwischenergebnisse in einem Reading zu speichern und dies immer mit abzufragen.
z.B. generell ist es draußen trockener als drinnen: (setreading $SELF trocken 1)  und Grundbedingung erfüllt? [$SELF:trocken] eq '1'

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

Guten Morgen,

mit den Klamern habe ich so meine Probleme. Mal rund, mal eckig, mal geschweift, mal keine, mal eine,...


Wenn ich jetzt meine weitere Bedingung mit OR hinzufüge ist es dann nicht so, dass der Lüfter IMMER einschaltet bzw. läuft, wenn es außen wärmer ist als im Keller undabhängig von den anderen Bedingungen?
Es werden ja alle AND nacheinanger abgearbeitet und es kommt zum Ergebnis ein oder aus aber dann kommt die Bedingung mit OR und "wirft alles vorherige über den Haufen"?


D.h. ich könnte schon mal alle Klammern wie nachfolgend weglassen, oder noch mehr oder doch nicht so viele?

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


Das mit dem Reading speicher und mit setreading habe ich noch nie gemacht; da fehlen mir die Grundkenntnisse und wahrscheinlich Grundverständniss dafür.
Werde mir diese Dinge anschauen und hoffe, dass es bei mir mal klick macht.
Ist die "Logiktabelle" immer so aufgebaut?

So ganz logisch ist es nämlich für mich nicht; nur als Beispiel 1 or 0 = 1 (warum 1; bei oder könnte es doch auch 0 sein?)

Gruß
Ruggy

Otto123

#3
ZitatSo ganz logisch ist es nämlich für mich nicht; nur als Beispiel 1 or 0 = 1 (warum 1; bei oder könnte es doch auch 0 sein?)

1 steht für wahr
0 steht für falsch

und die Regel ist nun mal so festgelegt genau wie 1+1 = 2 ist - ist in der Logik wahr oder falsch -> wahr - also 1 or 0 = 1

Die Klammern sind nicht völlig beliebig! Du musst schon den Syntax beachten Die äußeren Klammern müssen sein: (Bedingung)(Ausführung) !!! Ich habe nur von den Klammern um die Logik gesprochen!
Die eckigen Klammern sind der Syntax für Werte Abfragen, die haben mit dem Logikteil nichts zu tun! [Zeit] oder [Device:Wert]

Du hast 6 Elemente in Deiner Logik! und die or musst Du Klammern!
DOIF (eins and zwei and drei and vier and fünf and sechs) (set ..) DOELSEIF (eins and (zwei or drei) and vier and fünf and sechs ) (set ..)

Denn
0 and 0 or 0 = 0 aber  0 and (0 or 0) = 0
1 and 0 or 0 = 0 aber  1 and (0 or 0) = 0
0 and 1 or 0 = 0 aber  0 and (1 or 0) = 0
1 and 1 or 0 = 1 aber  1 and (1 or 0) = 1
0 and 0 or 1 = 1 aber  0 and (0 or 1) = 0
1 and 0 or 1 = 1 aber  1 and (0 or 1) = 1
0 and 1 or 1 = 1 aber  0 and (1 or 1) = 0
1 and 1 or 1 = 1 aber  1 and (1 or 1) = 1


Da deine Tabelle noch komplizierter wird und keiner mehr durchschaut, ist es mMn besser "Grundlagen" zusammenzufassen und extra zu behandeln.
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

laberlaib

Tipp: DOIF kann Zeilenumbruch & Einrückungen
Also mal mindestens
([deltadewpoint:state]>2 and [07:00-23:00] and $month>4 and $month<10 and [KEL_LUFTFEUCHTIGKEIT:temperature]>8 and [KEL_LUFTFEUCHTIGKEIT:temperature]<12 set HUEDevice9 on-for-timer 1800)
DOELSEIF ([deltadewpoint:state]>2 and [07:00-23:00] and $month<=4 or $month>=10 and [KEL_LUFTFEUCHTIGKEIT:temperature]>8 and [KEL_LUFTFEUCHTIGKEIT:temperature]<12 set HUEDevice9 on-for-timer 600)
DOELSE (set HUEDevice9 off)

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


Inhaltlich trag ich zu nix was bei.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

Ruggy

#5
Denke, das mit 1 und 0 habe ich verstanden. Hängt wahrscheinlich damit zusammen, weil der "Computer" nur ein oder aus kennt (0 oder 1).

Danke auch für den Tip mit Zeilenumbruch & Einrücken. Evlt. wird es dadurch etwas übersichtlicher.

Würde es dann so funktionieren? Habe die OR Bedingung mal mit eingefügt.

Möchte mal kurz "laut denken" und mal "durchspielen":

Momentan greift ja der zweite Teil der gesamten Bedingung, weil wir den Monat März haben.
Es ist momentan zwischen 7:00 und 23:00 Uhr.
Angenommen im Keller hat es eine Temperatur von 7 Grad; außen hat es eine Temperatur von 12 Grad
Die Kellertemperatur ist somit momentan unter 8 Grad.
-> somit würde der Lüfter momentan nicht einschalten.
Die OR Bedingung bewirkt, dass der Lüfter trotzdem einschaltet, weil es außen wärmer ist als im Keller.

Aber ist es jetzt nicht so, dass der Lüfter jetzt auch einschaltet, wenn es außen feuchter ist als im Keller, weil ja nur die OR Bedingung greift.
Müsste ich in die OR Bedingung jetzt zusätzliche alle AND Bedingungen vom ersten Teil mit einbauen?

Liege ich hier richtig? Bin jetzt irgendwie komplett durcheinander mit oder und usw... :-[ ;)


([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]))
(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]))
(set HUEDevice9 on-for-timer 600)
              DOELSE
(set HUEDevice9 off)

Otto123

Wie schon ganz am Anfang gesagt: jetzt ist der ODER Teil dominant!
Wenn der wahr ist spielt der Rest keine Rolle mehr. Schlussendlich hängt so alles wesentlich nur noch von der Temperaturdifferenz ab.

Ja Du musst alles mit einfließen lassen.
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

Habe es mal versucht; könnte es so klappen?

Vor allem auch mit den Klammern?
Die "(" gleich zu Beginn und der dazugehörigen ")" vor dem OR könnte ich auch weg lassen? Die Bedingungen für OR stehen ja in Klammer.

Demnach es es so, wenn die Kellertemperatur unter 8 Grad ist (nach der Bedingung vor dem OR schaltet der Lüfter nicht ein) aber die Außentemperatur wärmer als die Kellertemperatur ist (und trockener und, und,...), schaltet der Lüfter ein.

([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 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 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12)
(set HUEDevice9 on-for-timer 600)
              DOELSE
(set HUEDevice9 off)

Otto123

Zitat von: Ruggy am 12 März 2021, 15:18:15
Habe es mal versucht; könnte es so klappen?
Ganz spontan: nein.
Weil der Syntax nicht stimmt. Du musst Dir zur Kontrolle des Syntax einen "Klammerzähler" hernehmen: notepad++ kann das, der codemirror Editor in FHEM kann das auch.

(Bedingung)(Ausführung) bei Dir jetzt (Bedingung)or(Bedingung)(Ausführung) - das nimmt Dir DOIF nicht ab :)

Über die Logik denke ich mal nach - Du musst das Gruppieren sonst wirst Du wirr :)
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

Habe es mal in FHEM getestet. Wenn ich es so in die DEF schreibe kommt folgende Fehlermeldung.

TAUPUNKT_LUEFTUNG_KG DOIF: expected DOELSEIF or DOELSE:  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 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 and [KEL_LUFTFEUCHTIGKEIT:temperature]<12) (set HUEDevice9 on-for-timer 600)               DOELSE (set HUEDevice9 off)

Ruggy

Die Antwort hat sich überschnitten.

Aber stimmt, DOIF nimmt es nicht.  :P

Und stimmt, ich bin auch schon ganz wirr  ;)

Ruggy

So mag es FHEM aber auch nicht  :-[

Die (Bedingung) sind doch alle Bedingungen und die (Ausführung ist doch das (set ... on-for-timer...). Oder?

([deltadewpoint:state]>2 and
[07:00-23:00] and
$month>4 and
$month<10 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12)
(set HUEDevice9 on-for-timer 1800) 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 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)
(set HUEDevice9 on-for-timer 1800) 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 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12)
(set HUEDevice9 on-for-timer 600)
              DOELSE
(set HUEDevice9 off)

Otto123

Jetzt hast Du (Bedingung)(Ausführung)or(Bedingung) ...
DOIF (B)(A) DOELSEIF (B)(A) DOELSE (A)
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

Zitat von: Otto123 am 12 März 2021, 15:37:29
Jetzt hast Du (Bedingung)(Ausführung)or(Bedingung) ...
DOIF (B)(A) DOELSEIF (B)(A) DOELSE (A)

  ::) :o 8) ;D


Glaube ich habs verstanden, auch wie Du es mit dem Notepad gemeint hast.
Zumindest hat FHEM jetzt folgendes ohne Fehlermeldung übernommen.

Ob es funktioniert weiß ich nicht.


([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 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 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12)
(set HUEDevice9 on-for-timer 600)
              DOELSE
(set HUEDevice9 off)

Otto123

#14
Versuch einer Struktur

Ein Block ist: Zeit ([07:00-23:00] and $month>4 and $month<10)
Ein Block ist: Draussen Trocken [deltadewpoint:state]>2
Ein Block ist: Drinnen ist eine bestimmte Temperatur ([KEL_LUFTFEUCHTIGKEIT:temperature]>8 and [KEL_LUFTFEUCHTIGKEIT:temperature]<12)

Wenn alle 3 erfüllt sind soll es 1800 anschalten und wenn Eines nicht erfüllt ist - soll nichts passieren?


das hier [KEL_LUFTFEUCHTIGKEIT:temperature]<=8 and [KEL_LUFTFEUCHTIGKEIT:temperature]<12 ??? Kleiner 12 und kleinergleich 8 ergibt  [KEL_LUFTFEUCHTIGKEIT:temperature]<=8 den Rest kannst Du weglassen.
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