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
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
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
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.
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.
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)
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.
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)
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 :)
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)
Die Antwort hat sich überschnitten.
Aber stimmt, DOIF nimmt es nicht. :P
Und stimmt, ich bin auch schon ganz wirr ;)
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)
Jetzt hast Du (Bedingung)(Ausführung)or(Bedingung) ...
DOIF (B)(A) DOELSEIF (B)(A) DOELSE (A)
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)
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.
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?
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)
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 '' )
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.
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
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.
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.
Wenn Du mal ein list (kein Raw Def) zeigst, sieht man in welchem zustand das DOIF ist
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
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.
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.
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.
Du siehst doch in den readings oder im list immer was das DOIF tut ...
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
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.
Das mit den unübersichtlichen DOIF sehe ich ja mittlerweile ein.
Aber was kann ich machen, wenn ich so viele Bedingungen habe. Ich könnte höchsten auf ein paar verzichten wie z.B. dass der Lüfter auch nachts einschalten darf.
Was meinst Du mit schlecht formatiert? Das einrücken? Sollte ich mal die ganzen Leerzeichen im DEF entfernen?
Das OR sollte eigentlich zutreffen, weil alle andere Bedingungen vorher beachten werden (was dann letztendlich dazu führt, dass dieser Teil vor OR nicht zutrifft; weil es im Keller momentan ca 6,8 Grand und somit unter den festgelegten 8 bis 12 Grad ist und somit nicht einschalten soll).
Das nach dem OR enthält mehr oder weniger die selben Bedingungen, nur dass die Temperatur zusätzlich außen wärmer sein soll als im Keller.
Was momentan mit ca. 9 Grad Außentemperatur zutreffen würde und somit der Lüfter einschalten sollte/"dürfte".
Für logische Operatoren gibt es math. Regeln für Umformungen.
Wenn man weiß, dass und der Multiplikation entspricht und oder der Addition und das Distributivgesetz in der Schule kennengelernt hat, dann kann man auch gleiche Anteile ausklammern.
Und was viele intuitiv falsch machen, ist die Negation:
Das Gegenteil von A und B ist nicht: nicht A und nicht B
Aber die Bedingungen nach dem OR würde doch in Klammer stehen (und innerhalb die Bedingugen wieder mit und) und somit komplett als andere Bedingung angesehen werden?
Sollte ich den Teil mit den Bedingungen vor dem OR dann auch komplett in Klammern setzen (rote Klammern) und zusätzlich um das Gesamte nochmal Klammern (grüne Klammern)?
Zitat von: Ruggy am 28 März 2021, 14:20:16
Das mit den unübersichtlichen DOIF sehe ich ja mittlerweile ein.
Aber was kann ich machen, wenn ich so viele Bedingungen habe. Ich könnte höchsten auf ein paar verzichten wie z.B. dass der Lüfter auch nachts einschalten darf.
Du kannst z.B. auch, wenn die Bedingungen wirklich exklusiv sind, deine Bedingungen auch in zwei DOIF aufteilen - schon hast du es lesbarer und wartbarer. Dein DOIF umfasst ja aktuell vier Gruppen von Fällen, die du vermutlich auch problemlos in vier DOIF auslagern kannst.
Zitat
Was meinst Du mit schlecht formatiert? Das einrücken? Sollte ich mal die ganzen Leerzeichen im DEF entfernen?
Nein im Gegenteil. Meine DOIF sehen so aus wie ich es in meinem anderen Beitrag gezeigt habe - mehr Leerzeichen, mehr Klammern, mehr Ebenen. So findet man Probleme einfach schneller.
ZitatDas OR sollte eigentlich zutreffen, weil alle andere Bedingungen vorher beachten werden (was dann letztendlich dazu führt, dass dieser Teil vor OR nicht zutrifft; weil es im Keller momentan ca 6,8 Grand und somit unter den festgelegten 8 bis 12 Grad ist und somit nicht einschalten soll).
Das nach dem OR enthält mehr oder weniger die selben Bedingungen, nur dass die Temperatur zusätzlich außen wärmer sein soll als im Keller.
Was momentan mit ca. 9 Grad Außentemperatur zutreffen würde und somit der Lüfter einschalten sollte/"dürfte".
Mag sein, aber es gibt in Perl Präzedenzen und Bindungsseiten für Operatoren. Wie gesagt, ich hab da jetzt keinen test case zu geschrieben, aber die Stelle mit and/or sieht fishy aus und da würde ich auch noch mal ansetzen.
Hallo Ruggy,
verfolge diesen Thread nun auch schon eine Weile. Es wurde ja schon oft gesagt: zu viele Bedingungen. Auf den ersten Blick stimmt das, bei genauerem hinsehen ist es gar nicht so viel und Du kannst verschiedene Teile zusammenziehen.
Was willst Du erreichen: Abhängig von Monaten (Winter/Sommer) soll der Lüfter unterschiedlich angesteuert werden. Täglich abhängig von der Uhrzeit, sprich es soll nur tagsüber etwas passieren. Ausserdem soll nur etwas passieren, wenn deltadewpoint:state größer 2 ist. Danach kommen noch zwei Bedingungen, die entweder/oder sind:
im Sommer entweder Kellertemperatur zwischen 8 und 12 Grad oder Aussen kälter als im Keller.
im Winter entweder Kellertemperatur zwischen 8 und 12 Grad oder Aussen wärmer als im Keller und der Keller kälter oder gleich 8 Grad.
Du hast Dein DOIF in 2 Hauptteile getrennt, für Sommer und für Winter. Das ist korrekt und muss so sein, da der Lüfter unterschiedlich angesteuert wird (600/1800). Das DOELSE lassen wir so, das schaltet den Lüfter aus, wenn nichts von den ersten beiden Zweigen eintritt.
Jetzt gehst Du erst mal so vor: unabhängig von den Zeiten machst Du eine Bedingung:(ich schreib das jetzt mal "leserlich", also nicht Deine Devicenamen
([Keller:temperature] > 8 and [Keller:temperature] < 12) ##das gehört zusammen also Klammer drum.
ODER
[Aussen:temperature] < [Keller:temperature] ## nur die eine Bedingung.
Die beiden teile sind mit ODER verknüpft, also muss um alles eine Klammer:
(([Keller:temperature] > 8 and [Keller:temperature] < 12) or [Aussen:temperature] < [Keller:temperature]) ## die ganze Klammer wird wahr, wenn mindestens eine der beiden Bedingungen wahr ist.
Jetzt bleiben nur noch die Zeiten und Dewpointdifferenz übrig: Diese sollen (müssen) wahr sein, und zwar alle, also müssen sie mit AND verknüpft werden:
($month > 4 and $month < 10 and [07:00-23:00] and [deltadewpoint:state] > 2 and (([Keller:temperature] > 8 and [Keller:temperature] < 12) or [Aussen:temperature] < [Keller:temperature]))
Das ist Teil 1 Deines DOIF.
Teil 2 ist ähnlich aufgebaut, hier hast Du allerdings die ganze Zeit schon einen Fehler drin, und deshalb gehts auch nicht: analog zum ersten Teil fragst Du $month ab.
Im ersten Teil muss $month größer 4 und kleiner 10 sein, also Mai bis September: $month > 4 and $month < 10
Im zweiten Teil suchst Du die andern Monate: nur Du schreibst $month <= 4 and $month >= 10: $month ist eine Zahl von 1 bis 12. Keine mir bekannte Zahl ist gleichzeitig kleiner 4 und größer 10. Es muss also heißen: ($month <= 4 or $month >= 10) ## das gehört zusammen und deshalb in Klammern, da nur das Ergebnis beider Vergleiche zählt.
Der Rest ist ähnlich wie im ersten teil aufgebaut:
(($month <= 4 or $month >= 10) and [07:00-23:00] and [deltadewpoint:state] > 2 and (([Keller:temperature] > 8 and [Keller:temperature] < 12) or ([Aussen:temperature] > [Keller:temperature] and [Keller:temperature] <= 8 ))
Das Problem beim fhem-DOIF ist halt, dass Du Bedingungen nicht schachteln kannst. Es gibt nur die Zweige mit DOELSEIF, weshalb Bedingungen z.T. gleich abgeprüft werden müssen, wenn der Ausführungsteil unterschiedlich ist.
Dann ist ganz wichtig zu wissen, wie das DOIF arbeitet: Immer von links nach rechts, Zeile für Zeile (oder Bedingung für Bedingung). Bei den Bedingungen kommt immer nur wahr oder falsch raus, selbst bei Zeitangaben. Damit kannst du schon ganz gut nachvollziehen, ob das geschriebene auch funktionieren kann.
In Deinem Fall z.B. Bedingung 1:
Monat > 4 -> Nein
und
Monat < 10 -> Ja
und
Zwischen 7 und 23Uhr -> Ja
und
deltadewpoint > 2 -> Ja (als beispiel)
und
( (Keller zwischen 8 und 12) oder Aussen < Keller) -> falsch wenn beide Bedingungen nicht erfüllt, wahr wenn mindestens eine zutrifft.
In diesem Fall ist der ganze Zweig falsch, weil Monat > 4 falsch ist, also...DOELSEIF
(Monat <= 4 oder Monat >= 10) -> wahr, da März
und
Zwischen 7 und 23Uhr -> Ja
und
deltadewpoint > 2 -> Ja (als beispiel)
und
((Keller zwischen 8 und 12) oder (Aussen > Keller und Keller < 8 )) -> wenn eine der Beiden Bedingungen wahr ist ist der gesamte Zweig wahr und der Lüfter wird angeschaltet.
Sollte auch hier eine der und-verbundenen Bedingungen nicht wahr sein ist der ganze Zweig nicht wahr und DOELSE wird ausgeführt.
Zur Formatierung hier mal ein Vorschlag:
(
[Test_deltadewpoint:state] > 2 and ## $month > 4 and $month < 10 and [07:00 - 23:00] and
(
([Test_KEL_LUFTFEUCHTIGKEIT:temperature] > 8 and [Test_KEL_LUFTFEUCHTIGKEIT:temperature] < 12)
or
([Test_AUS_LUFTFEUCHTIGKEIT:temperature] < [Test_KEL_LUFTFEUCHTIGKEIT:temperature])
)
)
(set Test_HUEDevice9 on-for-timer 1800)
DOELSEIF
(
[Test_deltadewpoint:state] > 2 and ($month <= 4 or $month >= 10) and [07:00 - 23:00] and
(
([Test_KEL_LUFTFEUCHTIGKEIT:temperature] > 8 and [Test_KEL_LUFTFEUCHTIGKEIT:temperature] < 12)
or
([Test_AUS_LUFTFEUCHTIGKEIT:temperature] > [Test_KEL_LUFTFEUCHTIGKEIT:temperature] and [Test_KEL_LUFTFEUCHTIGKEIT:temperature] <= 8)
)
)
(set Test_HUEDevice9 on-for-timer 600)
DOELSE
(set Test_HUEDevice9 off)
Nicht wundern:
1. in der ersten Bedingung ist Datum und Zeitabfrage auskommentiert, einfach die 2 # rausnehmen, dann wird die zeit wieder abgeprüft.
2. Alle Devices haben ein Test_ vorangestellt. Ich hatte mal Lust, Dein DOIF zu simulieren und habe die "sendenden" Devices nachgebaut.
Wenn Du die ab hier gezeigten Raw-Definitionen alles in Dein System (oder ein testsystem) einfügst bekommst Du einen Raum "Test_Kellerlüftung", dort findest Du dann alles zusammen und kannst ein wenig spielen. Der Lüfter zeigt Dir die verbleibende Zeit an bei on-for-timer. Bei Sekunden > 60 wird gerundet und Minuten angezeigt. Ich denke mal zum testen wirst Du diese Zeiten anpassen.
defmod Test_TAUPUNKT_LUEFTUNG_KG DOIF (\
[Test_deltadewpoint:state] > 2 and ## $month > 4 and $month < 10 and [07:00 - 23:00] and \
(\
([Test_KEL_LUFTFEUCHTIGKEIT:temperature] > 8 and [Test_KEL_LUFTFEUCHTIGKEIT:temperature] < 12)\
or \
([Test_AUS_LUFTFEUCHTIGKEIT:temperature] < [Test_KEL_LUFTFEUCHTIGKEIT:temperature])\
)\
)\
(set Test_HUEDevice9 on-for-timer 1800)\
DOELSEIF\
(\
[Test_deltadewpoint:state] > 2 and ($month <= 4 or $month >= 10) and [07:00 - 23:00] and \
(\
([Test_KEL_LUFTFEUCHTIGKEIT:temperature] > 8 and [Test_KEL_LUFTFEUCHTIGKEIT:temperature] < 12)\
or\
([Test_AUS_LUFTFEUCHTIGKEIT:temperature] > [Test_KEL_LUFTFEUCHTIGKEIT:temperature] and [Test_KEL_LUFTFEUCHTIGKEIT:temperature] <= 8)\
)\
) \
(set Test_HUEDevice9 on-for-timer 600)\
DOELSE\
(set Test_HUEDevice9 off)\
attr Test_TAUPUNKT_LUEFTUNG_KG repeatcmd 3600:5400
attr Test_TAUPUNKT_LUEFTUNG_KG room Test_Kellerlüftung
setstate Test_TAUPUNKT_LUEFTUNG_KG cmd_3
setstate Test_TAUPUNKT_LUEFTUNG_KG 2021-03-28 23:00:00 cmd 3
setstate Test_TAUPUNKT_LUEFTUNG_KG 2021-03-28 23:00:00 cmd_event timer_2
setstate Test_TAUPUNKT_LUEFTUNG_KG 2021-03-28 23:00:00 cmd_nr 3
setstate Test_TAUPUNKT_LUEFTUNG_KG 2021-03-28 21:49:53 mode enabled
setstate Test_TAUPUNKT_LUEFTUNG_KG 2021-03-28 23:00:00 state cmd_3
setstate Test_TAUPUNKT_LUEFTUNG_KG 2021-03-28 23:00:00 timer_01_c02 29.03.2021 07:00:00
setstate Test_TAUPUNKT_LUEFTUNG_KG 2021-03-28 23:00:00 timer_02_c02 29.03.2021 23:00:00
defmod Test_HUEDevice9 DOIF init{\
set_Reading("myCountdown",0,1);;\
set_State("off");;\
}\
\
ventON{\
if(["Test_HUEDevice9:^on$"]){\
set_State("on");;\
del_Exec("counter");;\
del_Exec("offTimer");;\
}\
}\
ventOFF{\
if(["Test_HUEDevice9:^off$"]){\
set_State("off");;\
del_Exec("counter");;\
del_Exec("offTimer");;\
set_Reading("myCountdown",0,1);;\
}\
}\
ventTIMER{\
if([$SELF:"^on-for-timer"]){\
set_State("on");;\
\
$event =~ /on-for-timer.(\d+)/;;\
$_zahl = $1;;\
\
set_Reading("myCountdown",($_zahl > 60)? sprintf("%.0f",$_zahl/60):$_zahl,1);;\
set_Exec("counter",($_zahl > 60)? 60 : 1,'set_Reading("myCountdown",$_zahl - $count,1)','$count <= $_zahl');; \
\
set_Exec("offTimer",$_zahl,'set_State("off")');;\
}\
}\
OnOf1{\
if(["$SELF:^OnOFF"]){\
if(get_Reading("OnOFF") eq "ON"){\
set_State("on");;\
} else {\
set_State("off");;\
}\
}\
}
attr Test_HUEDevice9 group Test_Devices
attr Test_HUEDevice9 room Test_Kellerlüftung
attr Test_HUEDevice9 setList on off on-for-timer
attr Test_HUEDevice9 sortby c
attr Test_HUEDevice9 uiTable {\
package ui_Table;;\
$TC{0..9} = "align='center'";;\
$SHOWNOSTATE=1;;\
##widget([$SELF:OnOFF],"uzsuToggle,ON,OFF")\
sub ventIcon {\
my ($ventState) = @_;;\
\
if ($ventState =~ "on"){\
return("vent_ventilation_level_3\@limegreen");;\
} else {\
return("vent_ventilation\@slategray");;\
}\
}\
}\
\
icon_label (ventIcon([$SELF]),([$SELF:myCountdown] > 0)?[$SELF:myCountdown]:"","yellow",([$SELF:myCountdown] > 0)?"dimgray":"")\
setstate Test_HUEDevice9 off
setstate Test_HUEDevice9 2021-03-27 16:13:29 OnOFF OFF
setstate Test_HUEDevice9 2021-03-28 10:22:18 block_init executed
setstate Test_HUEDevice9 2021-03-28 23:00:00 block_ventOFF executed
setstate Test_HUEDevice9 2021-03-28 23:00:00 block_ventTIMER executed
setstate Test_HUEDevice9 2021-03-28 23:00:00 e_Test_HUEDevice9_events off
setstate Test_HUEDevice9 2021-03-27 17:20:48 mode enabled
setstate Test_HUEDevice9 2021-03-28 23:00:00 myCountdown 0
setstate Test_HUEDevice9 2021-03-28 23:00:00 state off
defmod Test_KEL_LUFTFEUCHTIGKEIT DOIF ##
attr Test_KEL_LUFTFEUCHTIGKEIT group Test_Devices
attr Test_KEL_LUFTFEUCHTIGKEIT room Test_Kellerlüftung
attr Test_KEL_LUFTFEUCHTIGKEIT sortby e
attr Test_KEL_LUFTFEUCHTIGKEIT stateFormat T: temperature °C
attr Test_KEL_LUFTFEUCHTIGKEIT uiTable {\
package ui_Table;;\
$TC{0..9} = "align='center'";;\
##$SHOWNOSTATE=1;;\
}\
widget([$SELF:temperature],"knob,min:-15,max:35,width:100,height:100,step:.1,lineCap:round,angleOffset:240,cursor:3,thickness:.3")\
"Keller"
setstate Test_KEL_LUFTFEUCHTIGKEIT T: 14.6 °C
setstate Test_KEL_LUFTFEUCHTIGKEIT 2021-03-27 15:09:08 cmd 0
setstate Test_KEL_LUFTFEUCHTIGKEIT 2021-03-27 15:09:08 mode enabled
setstate Test_KEL_LUFTFEUCHTIGKEIT 2021-03-27 15:09:08 state initialized
setstate Test_KEL_LUFTFEUCHTIGKEIT 2021-03-28 00:34:06 temperature 14.6
defmod Test_deltadewpoint DOIF init{\
set_State(0);;\
}\
dew2State {\
if([$SELF:"^temperature"]){\
set_State(get_Reading("temperature"));;\
}\
}
attr Test_deltadewpoint group Test_Devices
attr Test_deltadewpoint room Test_Kellerlüftung
attr Test_deltadewpoint sortby f
attr Test_deltadewpoint uiTable {\
package ui_Table;;\
$TC{0..9} = "align='center'";;\
##$SHOWNOSTATE=1;;\
}\
widget([$SELF:temperature],"knob,min:-5,max:5,width:100,height:100,step:.1,lineCap:round,angleOffset:240,cursor:3,thickness:.3")\
"delta Taupunkt"
setstate Test_deltadewpoint 2.3
setstate Test_deltadewpoint 2021-03-28 23:09:39 block_dew2State executed
setstate Test_deltadewpoint 2021-03-28 10:22:18 block_init executed
setstate Test_deltadewpoint 2021-03-28 23:09:39 e_Test_deltadewpoint_events temperature: 2.3
setstate Test_deltadewpoint 2021-03-27 17:11:36 mode enabled
setstate Test_deltadewpoint 2021-03-28 23:09:39 state 2.3
setstate Test_deltadewpoint 2021-03-28 23:09:39 temperature 2.3
defmod Test_AUS_LUFTFEUCHTIGKEIT DOIF ##
attr Test_AUS_LUFTFEUCHTIGKEIT group Test_Devices
attr Test_AUS_LUFTFEUCHTIGKEIT room Test_Kellerlüftung
attr Test_AUS_LUFTFEUCHTIGKEIT sortby g
attr Test_AUS_LUFTFEUCHTIGKEIT stateFormat T: temperature °C
attr Test_AUS_LUFTFEUCHTIGKEIT uiTable {\
package ui_Table;;\
$TC{0..9} = "align='center'";;\
##$SHOWNOSTATE=1;;\
}\
widget([$SELF:temperature],"knob,min:-15,max:35,width:100,height:100,step:.1,lineCap:round,angleOffset:240,cursor:3,thickness:.3")\
"Aussen"
setstate Test_AUS_LUFTFEUCHTIGKEIT T: 4 °C
setstate Test_AUS_LUFTFEUCHTIGKEIT 2021-03-27 15:10:21 cmd 0
setstate Test_AUS_LUFTFEUCHTIGKEIT 2021-03-27 15:10:21 mode enabled
setstate Test_AUS_LUFTFEUCHTIGKEIT 2021-03-27 15:10:21 state initialized
setstate Test_AUS_LUFTFEUCHTIGKEIT 2021-03-28 00:33:54 temperature 4
mit einem
Zitatlist Test_.*:FILTER=room=Test_Kellerlüftung
kannst Du Dir alle beteiligten Devices anzeigen lassen
Mit einem
Zitatdelete Test_.*:FILTER=room=Test_Kellerlüftung
werde alle wieder gelöscht. Ich denke aber, Du kannst das gut für Erweiterungen verwenden, parallel zu Deinen "echten" Devices.
Und dann noch einen Eventmonitor mit Test_.* mitlaufen lassen, dann siehst Du, was die einzelnen Komponenten so tun.
Viel Erfolg!
Sany
@Sany
Vielen Dank für Deine ausführlicht Erklärung.
Kann leider nur ein "Dauenhoch" geben.
Ich muß mir aber deine Erklärung ein paarmal durchlesen, damit ich es verstehe und hoffentlich nachvollziehen kann. Heute bringt es leider nichts mehr. ;)
Ein Hauptproblem war aber anscheinend das mit dem Monat; gleichzeitig kleiner 4 und größer 10. Wird schierig werden diese Zahl zu finden ::)
Ich wusste leider nicht, dass sich jemand so ausführlich mit meinem Problem beschäftigt und habe zur selben Zeit als "Notlösung" folgendes gemacht. Ist natürlich nicht ideal, wollte aber probieren ob es so in die Richtung geht, was ich haben möchte.
Ich habe meine DOIF in drei DOIF's aufgeteilt. Eins für normal eins für Winter und eins für Sommer. Die Monate und Uhrzeiten habe ich mal ganz weg gelassen.
Weiß nicht ob es zu einen ähnlichen Ergebnis führt.
Bin mal auf morgen gespannt.
Wie gesagt, werde ich mir Deine Ausführungen anschauen und versuchen, dass es damit klappt.
Auch das mit dem "Testsystem" finde ich praktisch.
Hier meine drei Lists:
Normal
Internals:
CFGFN
DEF ([deltadewpoint:state]>2 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>8 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12)
(set HUEDevice9 on-for-timer 600)
DOELSE
(set HUEDevice9 off)
FUUID 6060ee07-f33f-f59f-9eb7-12b1002aa68bffa8
MODEL FHEM
NAME TAUPUNKT_LUEFTUNG_NORMAL
NOTIFYDEV KEL_LUFTFEUCHTIGKEIT,deltadewpoint,global
NR 2026
NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_NORMAL
STATE cmd_2
TYPE DOIF
VERSION 22428 2020-07-18 20:32:08
Helper:
DBLOG:
state:
DbLog:
TIME 1616965817.71083
VALUE cmd_2
READINGS:
2021-03-28 23:56:29 Device deltadewpoint
2021-03-28 23:10:17 cmd 2
2021-03-28 23:10:17 cmd_event KEL_LUFTFEUCHTIGKEIT
2021-03-28 23:10:17 cmd_nr 2
2021-03-28 23:55:27 e_KEL_LUFTFEUCHTIGKEIT_temperature 6.81
2021-03-28 23:56:29 e_deltadewpoint_state 6.6
2021-03-28 23:00:45 mode enabled
2021-03-28 23:10:17 state cmd_2
Regex:
accu:
cond:
KEL_LUFTFEUCHTIGKEIT:
0:
temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
deltadewpoint:
0:
state ^deltadewpoint$:^state:
attr:
cmdState:
repeatcmd:
3600
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>8 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<12
do:
0:
0 set HUEDevice9 on-for-timer 600
1:
0 set HUEDevice9 off
helper:
DEVFILTER ^global$|^KEL_LUFTFEUCHTIGKEIT$|^deltadewpoint$
NOTIFYDEV global|KEL_LUFTFEUCHTIGKEIT|deltadewpoint
event 6.6
globalinit 1
last_timer 0
sleeptimer -1
timerdev deltadewpoint
timerevent 6.6
triggerDev deltadewpoint
timerevents:
6.6
timereventsState:
state: 6.6
triggerEvents:
6.6
triggerEventsState:
state: 6.6
internals:
readings:
all deltadewpoint:state KEL_LUFTFEUCHTIGKEIT:temperature
trigger:
uiState:
uiTable:
Attributes:
repeatcmd 3600
room Kellerlüftung
Kalt:
Internals:
CFGFN
DEF ([deltadewpoint:state]>2 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=8 and
[AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature])
(set HUEDevice9 on-for-timer 600)
DOELSE
(set HUEDevice9 off)
FUUID 6060ef63-f33f-f59f-0724-1fb6e7a4b53fc5e7
MODEL FHEM
NAME TAUPUNKT_LUEFTUNG_KALT
NOTIFYDEV global,deltadewpoint,AUS_LUFTFEUCHTIGKEIT,KEL_LUFTFEUCHTIGKEIT
NR 2042
NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_KALT
STATE initialized
TYPE DOIF
VERSION 22428 2020-07-18 20:32:08
Helper:
DBLOG:
state:
DbLog:
TIME 1616965702.08496
VALUE initialized
READINGS:
2021-03-28 23:56:29 Device deltadewpoint
2021-03-28 23:08:22 cmd 0
2021-03-28 23:56:29 e_AUS_LUFTFEUCHTIGKEIT_temperature 6.37
2021-03-28 23:55:27 e_KEL_LUFTFEUCHTIGKEIT_temperature 6.81
2021-03-28 23:56:29 e_deltadewpoint_state 6.6
2021-03-28 23:56:29 error condition c01: syntax error, line 1, near "8 ::ReadingValDoIf"
2021-03-28 23:08:22 mode enabled
2021-03-28 23:08:22 state initialized
2021-03-28 23:56:29 warning condition c01: (Missing operator before ::ReadingValDoIf?)
Regex:
accu:
cond:
AUS_LUFTFEUCHTIGKEIT:
0:
temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
KEL_LUFTFEUCHTIGKEIT:
0:
temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
deltadewpoint:
0:
state ^deltadewpoint$:^state:
attr:
repeatcmd:
3600
condition:
0 ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<=8 ::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')>::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')
do:
0:
0 set HUEDevice9 on-for-timer 600
1:
0 set HUEDevice9 off
helper:
DEVFILTER ^global$|^deltadewpoint$|^KEL_LUFTFEUCHTIGKEIT$|^AUS_LUFTFEUCHTIGKEIT$
NOTIFYDEV global|deltadewpoint|KEL_LUFTFEUCHTIGKEIT|AUS_LUFTFEUCHTIGKEIT
event 6.6
globalinit 1
last_timer 0
sleeptimer -1
triggerDev deltadewpoint
triggerEvents:
6.6
triggerEventsState:
state: 6.6
internals:
readings:
all deltadewpoint:state KEL_LUFTFEUCHTIGKEIT:temperature AUS_LUFTFEUCHTIGKEIT:temperature
trigger:
uiTable:
Attributes:
repeatcmd 3600
room Kellerlüftung
Warm:
Internals:
CFGFN
DEF ([deltadewpoint:state]>2 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>=12 and
[AUS_LUFTFEUCHTIGKEIT:temperature]<[KEL_LUFTFEUCHTIGKEIT:temperature])
(set HUEDevice9 on-for-timer 600)
DOELSE
(set HUEDevice9 off)
FUUID 6060f068-f33f-f59f-7b67-d2e5224f86ac0104
MODEL FHEM
NAME TAUPUNKT_LUEFTUNG_WARM
NOTIFYDEV deltadewpoint,AUS_LUFTFEUCHTIGKEIT,KEL_LUFTFEUCHTIGKEIT,global
NR 2051
NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_WARM
STATE initialized
TYPE DOIF
VERSION 22428 2020-07-18 20:32:08
Helper:
DBLOG:
state:
DbLog:
TIME 1616965965.85336
VALUE initialized
READINGS:
2021-03-28 23:56:29 Device deltadewpoint
2021-03-28 23:12:45 cmd 0
2021-03-28 23:56:29 e_AUS_LUFTFEUCHTIGKEIT_temperature 6.37
2021-03-28 23:55:27 e_KEL_LUFTFEUCHTIGKEIT_temperature 6.81
2021-03-28 23:56:29 e_deltadewpoint_state 6.6
2021-03-28 23:56:29 error condition c01: syntax error, line 1, near "12 ::ReadingValDoIf"
2021-03-28 23:12:45 mode enabled
2021-03-28 23:12:45 state initialized
2021-03-28 23:56:29 warning condition c01: (Missing operator before ::ReadingValDoIf?)
Regex:
accu:
cond:
AUS_LUFTFEUCHTIGKEIT:
0:
temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
KEL_LUFTFEUCHTIGKEIT:
0:
temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
deltadewpoint:
0:
state ^deltadewpoint$:^state:
attr:
repeatcmd:
3600
condition:
0 ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>=12 ::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')<::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')
do:
0:
0 set HUEDevice9 on-for-timer 600
1:
0 set HUEDevice9 off
helper:
DEVFILTER ^global$|^AUS_LUFTFEUCHTIGKEIT$|^KEL_LUFTFEUCHTIGKEIT$|^deltadewpoint$
NOTIFYDEV global|AUS_LUFTFEUCHTIGKEIT|KEL_LUFTFEUCHTIGKEIT|deltadewpoint
event 6.6
globalinit 1
last_timer 0
sleeptimer -1
triggerDev deltadewpoint
triggerEvents:
6.6
triggerEventsState:
state: 6.6
internals:
readings:
all deltadewpoint:state KEL_LUFTFEUCHTIGKEIT:temperature AUS_LUFTFEUCHTIGKEIT:temperature
trigger:
uiTable:
Attributes:
repeatcmd 3600
room Kellerlüftung
Das mit dem auftrenne in 3 DOIFs ist zwar eine Möglichkeit, macht es aber auch nicht übersichtlicher, besonders bei Änderungen (und die wirst Du machen, um die Werte den Gegebenheiten anzupassen.
Das 2te und 3te DOIF wird aber nicht funktionieren, da es ja schon bei der Definition Fehler meldet. Woran das liegt kann ich nicht sagen, hängt aber mit der Formatierung zusammen. Offensichtlich gehen Zeilenumbrüche, Tabs und Leerzeichen nicht beliebig:
aus dem 2ten DOIF:
ZitatDEF ([deltadewpoint:state]>2 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<=8 and
[AUS_LUFTFEUCHTIGKEIT:temperature]>[KEL_LUFTFEUCHTIGKEIT:temperature])
(set HUEDevice9 on-for-timer 600)
DOELSE
(set HUEDevice9 off)
und
Zitaterror condition c01: syntax error, line 1, near "8 ::ReadingValDoIf"
warning condition c01: (Missing operator before ::ReadingValDoIf?)
condition:
0 ::ReadingValDoIf($hash,'deltadewpoint','state')>2 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<=8 XX ::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')>::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')
XX = hier fehlt das "and".
ind der letzten Zeile sieht man, dass das "and" fehlt.
Vielleicht kann jemand dazu etwas sagen, warum das so ist. Ich hatte ab und zu Fehler bei der Def mit dem Hinweis auf missing Brackets, obwohl die alle richtig waren. Hing auch mit Zeilenumbrüchen und was jeweils in der Zeile steht zusammen.
Das mit den AND habe ich heute früh bemerkt und geändert.
Konnte aber jetzt erst in FHEM nachschauen was so über den Tag passiert ist und habe gesehen, dass sich der Lüfter mehrmals ein- und ausgeschalten hatten. Sieht somit aus als wie wenn es mit dieser "Notlösung" funktionieren würde. Also das "Kalt" DOIF.
Werde demnächst versuchen, das es nach Deiner Art in einem DOIF klappt.
Bisher läuft die "Steuerung" relativ gut.
Es funktioniert jedoch irgendwie nicht, dass ich die Einschaltzeiten und die Dauer bis der Lüfter wieder einschalten getrennt voneinander zu regeln.
Im DOIF für die Steuerung wäre es so eingestellt bzw. so gedacht, dass der Lüfter für 10 Minuten einschaltet und das ganze sich alle 4.000 Sekunden (66,67 Minuten) wiederholt.
Die Wiederholungen wollte ich mit dem Attribut repeatcmd machen.
Wenn ich aber jetzt die Luftungszeit ändere, ändert sich auch z.B. die Pausenzeit so dass alles gleich lange dauert.
Als Anhang habe ich mal einen Screeshot davon angehängt (vom 26.04.21); hier habe ich die Zeiten mehrmals geändert.
Wie kann ich es z.B. einstellen, dass der Lüfter 10 Min läuft und 60 Minuten Pause dazwischen ist?
Hier das List vom DOIF:
Internals:
CFGFN
DEF ([deltadewpoint:state]>3 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>7 and
[KEL_LUFTFEUCHTIGKEIT:temperature]<12)
(set HUEDevice9 on-for-timer 600)
DOELSE
(set HUEDevice9 off)
FUUID 6060ee07-f33f-f59f-9eb7-12b1002aa68bffa8
MODEL FHEM
NAME TAUPUNKT_LUEFTUNG_NORMAL
NOTIFYDEV KEL_LUFTFEUCHTIGKEIT,deltadewpoint,global
NR 2026
NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_NORMAL
STATE cmd_1
TYPE DOIF
VERSION 22428 2020-07-18 20:32:08
Helper:
DBLOG:
state:
DbLog:
TIME 1619955230.31368
VALUE cmd_1
READINGS:
2021-05-02 14:17:40 Device deltadewpoint
2021-05-02 13:33:50 cmd 1
2021-05-02 13:33:50 cmd_event deltadewpoint
2021-05-02 13:33:50 cmd_nr 1
2021-05-02 14:12:08 e_KEL_LUFTFEUCHTIGKEIT_temperature 7.6
2021-05-02 14:17:40 e_deltadewpoint_state 3.8
2021-04-21 15:27:26 mode enabled
2021-05-02 13:33:50 state cmd_1
2021-05-02 13:33:50 wait_timer 02.05.2021 14:40:30 cmd_1 deltadewpoint
Regex:
accu:
cond:
KEL_LUFTFEUCHTIGKEIT:
0:
temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
deltadewpoint:
0:
state ^deltadewpoint$:^state:
attr:
cmdState:
repeatcmd:
4000
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'deltadewpoint','state')>3 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>7 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')<12
do:
0:
0 set HUEDevice9 on-for-timer 600
1:
0 set HUEDevice9 off
helper:
DEVFILTER ^global$|^deltadewpoint$|^KEL_LUFTFEUCHTIGKEIT$
NOTIFYDEV global|deltadewpoint|KEL_LUFTFEUCHTIGKEIT
event 3.8
globalinit 1
last_timer 0
sleepdevice deltadewpoint
sleepsubtimer 0
sleeptimer 0
timerdev deltadewpoint
timerevent 3.8
triggerDev deltadewpoint
timerevents:
3.8
timereventsState:
state: 3.8
triggerEvents:
3.8
triggerEventsState:
state: 3.8
internals:
readings:
all deltadewpoint:state KEL_LUFTFEUCHTIGKEIT:temperature
trigger:
uiState:
uiTable:
Attributes:
repeatcmd 4000
room Kellerlüftung