Hallo Leute,
Habe ein DOIF dieses soll von Abends bis nächsten Morgen wo die Sonne aufgeht und die Temperatur draußen kühler als im Zimmer ist schalten. Leider ist mir erst diese Woche aufgefallen das dieses nicht so ganz so funktoniert wie ich es gerne haben würde. Es schaltet aufjedenfall abends wenn die Temperatur draußen schon kühler ist als drinnen ohne Probleme oder halt eben erst morgens zum Sonnenaufgang,
Es soll ja auch dazwischen schalten. Könnte mir vielleicht jemand damit weiter helfen??
Danke schon mal im voraus
Internals:
DEF ([LaCrosse_18:temperature] > 21 and ([LaCrosse_16:temperature] - [LaCrosse_18:temperature] < -0.1) and ([([Astro:CivilTwilightEvening]+[00:10])]-[([Astro:CivilTwilightMorning]-[00:45])]))
(set Sonnenschutz_OG_hoch trigger)
DOELSEIF
([({twilight("Astro","CivilTwilightMorning","3:00","6:50")}-900)])
(set OG_ganz_runter trigger)
FUUID 60de2a85-f33f-87a8-225f-a3266cb5c00837ca
MODEL FHEM
NAME JalousienOG_Lueften
NOTIFYDEV Astro,LaCrosse_16,global,LaCrosse_18
NR 105
NTFY_ORDER 50-JalousienOG_Lueften
STATE cmd_2
TYPE DOIF
VERSION 26182 2022-06-29 18:57:26
eventCount 67
READINGS:
2022-08-13 17:42:14 Device LaCrosse_16
2022-08-13 05:13:00 cmd 2
2022-08-13 05:13:00 cmd_event timer_3
2022-08-13 05:13:00 cmd_nr 2
2022-08-13 17:42:14 e_LaCrosse_16_temperature 31.4
2022-08-13 09:11:06 e_LaCrosse_18_temperature 25.4
2022-08-12 22:14:56 mode enabled
2022-08-13 05:13:00 state cmd_2
2022-08-13 00:00:00 timer_01_c01 13.08.2022 21:46:00
2022-08-13 04:45:00 timer_02_c01 14.08.2022 04:45:00
2022-08-13 05:13:00 timer_03_c02 14.08.2022 05:15:00
Regex:
accu:
collect:
cond:
LaCrosse_16:
0:
temperature ^LaCrosse_16$:^temperature:
1:
LaCrosse_18:
0:
temperature ^LaCrosse_18$:^temperature:
1:
itimer:
Astro:
itimer:
CivilTwilightEvening ^Astro$:^CivilTwilightEvening:
CivilTwilightMorning ^Astro$:^CivilTwilightMorning:
attr:
cmdState:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'LaCrosse_18','temperature') > 21 and (::ReadingValDoIf($hash,'LaCrosse_16','temperature') - ::ReadingValDoIf($hash,'LaCrosse_18','temperature') < -0.1) and (::DOIF_time_once($hash,0,$wday)-::DOIF_time_once($hash,1,$wday))
1 ::DOIF_time_once($hash,2,$wday)
days:
do:
0:
0 set Sonnenschutz_OG_hoch trigger
1:
0 set OG_ganz_runter trigger
2:
helper:
NOTIFYDEV Astro,LaCrosse_16,global,LaCrosse_18
event temperature: 31.4
globalinit 1
last_timer 3
sleeptimer -1
timerdev
timerevent timer_3
triggerDev LaCrosse_16
timerevents:
timer_3
timereventsState:
timer_3
triggerEvents:
temperature: 31.4
triggerEventsState:
temperature: 31.4
internals:
interval:
intervalfunc:
intervaltimer:
localtime:
0 1660419960
1 1660445100
2 1660446900
readings:
all LaCrosse_18:temperature LaCrosse_16:temperature
realtime:
0 21:46:00
1 04:45:00
2 05:15:00
time:
0 ([Astro:CivilTwilightEvening]+[00:10])
1 ([Astro:CivilTwilightMorning]-[00:45])
2 ({twilight("Astro","CivilTwilightMorning","3:00","6:50")}-900)
timeCond:
0 0
1 0
2 1
timer:
0 0
1 0
2 0
timers:
0 0 1
1 2
trigger:
triggertime:
1660419960:
localtime 1660419960
hash:
1660445100:
localtime 1660445100
hash:
1660446900:
localtime 1660446900
hash:
uiState:
uiTable:
Attributes:
room Logo,Obergeschoss
Ich habe nochmal im DOIF geschaut aber dort konnte ich nur das mit dem Klammern finden aber die müssten so passen den so steht es dort auch drin.
Danke für eure Hilfe schon mal im vorraus
Hallo Wasserwerk33,
das wird vermutlich nicht die Lösung sein, aber diese Klammersetzung würde ich ändern, denn du willst ja die Differenz überwachen.
([LaCrosse_16:temperature] - [LaCrosse_18:temperature] < -0.1)
in
(([LaCrosse_16:temperature] - [LaCrosse_18:temperature]) < -0.1)
Dann fällt mir noch ein, dass ein wiederholtes Schalten eines DOIF das Attribut do always benötigt; ansonsten wird ein Zweig nur einmal ausgeführt. Ob das die Lösung ist, kann ich allerdings nicht versprechen. Vermutlich müsste jemand drüber schauen, der sich mit der Ausgabe des DOIF-Devices per list besser auskennt als ich.
Viele Grüße Gisbert
Nochmal schalten macht es ja die nächste Nacht über den mit zweig nach dem DOELSEIF, der zweig funktoniert auch ohne Probleme wenn ich das CMD 1 selber auslöse.
Hallo Wasserwerk123,
dann hab ich deine Anforderung noch nicht ganz verstanden.
Jedenfalls ist es so, dass ein DOIF- (oder DOESLEIF-) Zweig genau einmal ausgeführt wird, wenn die Bedingung (event) erfüllt ist. Wenn man den gleichen Zweig mehrfach ausführen lassen möchte, ohne dass ein Wechsel zu einem anderen Zweig stattgefunden hat, dann muss man mit dem Attribut do always dafür sorgen. Du schreibst es ja schon, Zweig 2 wird ausgeführt, wenn ich Zweig 1 selbst auslöse. Also musst du dafür sorgen, dass der Zweig 1 automatisch nach deinen Regeln ausgeführt wird. Man kann auch wunderbar do always mit repeatsame kombinieren, das die Anzahl der Wiederholungen beschränkt. Die deutsche commandref ist sehr hilfreich und hält auch gute Beispiele parat.
Eine gute Idee ist es für sich die Anforderung sprachlich auszuformulieren, und dann zu versuchen die passenden Bedingungen und Attribute zu finden.
Viele Grüße Gisbert
Hi
Okay das habe ich verstanden.
Meine Jalousie soll nachts, dann wenn die Temperatur im Haus höher ist als Draußen die Jalousie hochfahren (aber frühstens wenn die sonne unter gegangen ist und darf dieses bis die Sonne wieder auf geht), (zum Lüften) und wieder morgens runterfahren damit meine Jungs im Hochsommer nicht morgens schon um 4 auf der Matte stehen und sagen Papa ich bin wach. Deswegen dieser Zweitraum wo sie fahren darf und DOELSEIF ist das wo die Jalousie dann wieder runterfährt damit es nicht hell im Zimmer wird und die Jungs noch weiter schlafen.
Antwort sprachlich: ;)
DOIF In dem Zeitraum (von-bis, triggernd!) und Temperaturdiff (triggernd) fahre hoch
DOELSE fahre runter
Jetzt möchtest/müsstest du aber bestimmt noch eine manuelle Übersteuerung reinbringen...
Zitat von: Per am 14 August 2022, 11:59:20
Jetzt möchtest/müsstest du aber bestimmt noch eine manuelle Übersteuerung reinbringen...
Und vermutlich wäre eine Hysterese auch nicht verkehrt? ;)
Gruß, Joachim
Hi
Nein das bräuchte ich so nicht. Es reicht so wie es ist wenn es schaltet. 😉 Heute Nacht hat es nicht geschaltet. Hoffe das es diese Nacht funktioniert.
Zitat von: Wasserwerk33 am 14 August 2022, 12:54:30
Hi
Nein das bräuchte ich so nicht. Es reicht so wie es ist wenn es schaltet. 😉 Heute Nacht hat es nicht geschaltet. Hoffe das es diese Nacht funktioniert.
Hysterese oder manueller Eingriff?
Gruß, Joachim
Eigentlich beides nicht. Soll ja autonom laufen. Was ich noch einbauen würde ist wenn es läuft das unsere Handys erkannt werden. Also wenn wir zuhause darf es schalten sonst nicht
Zitat von: Wasserwerk33 am 14 August 2022, 13:14:06
Eigentlich beides nicht. Soll ja autonom laufen. Was ich noch einbauen würde ist wenn es läuft das unsere Handys erkannt werden. Also wenn wir zuhause darf es schalten sonst nicht
Was hat Hysterese mit autonom/automatisch zu tun?
Hysterese verhindert, dass bei Tempschwankungen hin und her gefahren wird...
Aber musst du wissen...
Gruß, Joachim
Hi nochmal,
Sie hat leider nicht geschaltet. Ich habe doch von bis angegeben.
([([Astro:CivilTwilightEvening]+[00:10])] -[([Astro:CivilTwilightMorning]-[00:45])]))
zwar mit einer zusätzlichen Zeit aber müsste doch klappen.
Hier fragt er doch die Temperatur außen zu innen ab.
(([LaCrosse_16:temperature] - [LaCrosse_18:temperature]) < -0.1)
Und zwar nur dann wenn die Temperatur im Zimmer über 21 grad ist.
([LaCrosse_18:temperature] > 21
Es soll ja schalten wenn die Temperatur im Zimmer über 21 Grad ist, dann in der Zeit von Sonnenuntergang bis aufgang und dabei die Außentemperatur niedriger als die Zimmer Temperatur ist.
Er schaltet nun auf die zweite Zeit also dann wenn Sonnenaufgang ist.
Internals:
DEF ([LaCrosse_18:temperature] > 21 and (([LaCrosse_16:temperature] - [LaCrosse_18:temperature]) < -0.1) and ([([Astro:CivilTwilightEvening]+[00:10])] -[([Astro:CivilTwilightMorning]-[00:45])]))
(set Sonnenschutz_OG_hoch trigger)
DOELSEIF
([({twilight("Astro","CivilTwilightMorning","3:00","6:50")}-900)])
(set OG_ganz_runter trigger)
FUUID 60de2a85-f33f-87a8-225f-a3266cb5c00837ca
MODEL FHEM
NAME JalousienOG_Lueften
NOTIFYDEV LaCrosse_18,global,LaCrosse_16,Astro
NR 105
NTFY_ORDER 50-JalousienOG_Lueften
STATE cmd_2
TYPE DOIF
VERSION 26182 2022-06-29 18:57:26
eventCount 80
READINGS:
2022-08-15 10:44:00 Device LaCrosse_16
2022-08-15 05:15:59 cmd 2
2022-08-15 05:15:59 cmd_event timer_3
2022-08-15 05:15:59 cmd_nr 2
2022-08-15 10:44:00 e_LaCrosse_16_temperature 31.7
2022-08-15 10:03:09 e_LaCrosse_18_temperature 26.1
2022-08-14 22:50:51 mode enabled
2022-08-15 05:15:59 state cmd_2
2022-08-15 00:00:00 timer_01_c01 15.08.2022 21:42:00
2022-08-15 04:48:00 timer_02_c01 16.08.2022 04:48:00
2022-08-15 05:15:59 timer_03_c02 16.08.2022 05:17:59
Regex:
accu:
collect:
cond:
LaCrosse_16:
0:
temperature ^LaCrosse_16$:^temperature:
1:
LaCrosse_18:
0:
temperature ^LaCrosse_18$:^temperature:
1:
itimer:
Astro:
itimer:
CivilTwilightEvening ^Astro$:^CivilTwilightEvening:
CivilTwilightMorning ^Astro$:^CivilTwilightMorning:
attr:
cmdState:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'LaCrosse_18','temperature') > 21 and ((::ReadingValDoIf($hash,'LaCrosse_16','temperature') - ::ReadingValDoIf($hash,'LaCrosse_18','temperature')) < -0.1) and (::DOIF_time_once($hash,0,$wday) -::DOIF_time_once($hash,1,$wday))
1 ::DOIF_time_once($hash,2,$wday)
days:
do:
0:
0 set Sonnenschutz_OG_hoch trigger
1:
0 set OG_ganz_runter trigger
2:
helper:
NOTIFYDEV LaCrosse_18,global,LaCrosse_16,Astro
event temperature: 31.7
globalinit 1
last_timer 3
sleeptimer -1
timerdev
timerevent timer_3
triggerDev LaCrosse_16
timerevents:
timer_3
timereventsState:
timer_3
triggerEvents:
temperature: 31.7
triggerEventsState:
temperature: 31.7
internals:
interval:
intervalfunc:
intervaltimer:
localtime:
0 1660592520
1 1660618080
2 1660619879
readings:
all LaCrosse_18:temperature LaCrosse_16:temperature
realtime:
0 21:42:00
1 04:48:00
2 05:17:59
time:
0 ([Astro:CivilTwilightEvening]+[00:10])
1 ([Astro:CivilTwilightMorning]-[00:45])
2 ({twilight("Astro","CivilTwilightMorning","3:00","6:50")}-900)
timeCond:
0 0
1 0
2 1
timer:
0 0
1 0
2 0
timers:
0 0 1
1 2
trigger:
triggertime:
1660592520:
localtime 1660592520
hash:
1660618080:
localtime 1660618080
hash:
1660619879:
localtime 1660619879
hash:
uiState:
uiTable:
Attributes:
room
Außen Sensor
Internals:
DEF 3C
FUUID 6078abaf-f33f-87a8-f274-a6f9440d41c8ee65
IODev myJeeLink
LASTInputDev myJeeLink
LaCrosse_lastRcv 2022-08-15 10:48:55
MSGCNT 91607
NAME LaCrosse_16
NR 61
STATE T: 31.2 H: 38
TYPE LaCrosse
addr 3C
battery_new 0
corr1 0
corr2 0
eventCount 1839
myJeeLink_MSGCNT 91635
myJeeLink_RAWMSG OK 9 60 1 5 32 38
myJeeLink_TIME 2022-08-15 10:48:55
previousH 38
previousT 31.2
sensorType 0=T(H)
READINGS:
2022-08-07 06:07:35 IODev myJeeLink
2022-08-15 10:48:55 battery ok
2022-08-15 10:48:55 humidity 38
2022-08-15 10:48:55 state T: 31.2 H: 38
2022-08-15 10:48:55 temperature 31.2
Attributes:
IODev myJeeLink
alias Draußen
doAverage 1
event-on-change-reading temperature:0.2,humidity:2
room Draußen,Sensoren
Zimmer Sensor:
Internals:
DEF 26
FUUID 607c91e0-f33f-87a8-ad69-5d9a2105b44b3cb9
IODev myJeeLink
LASTInputDev myJeeLink
LaCrosse_lastRcv 2022-08-15 10:50:55
MSGCNT 86958
NAME LaCrosse_18
NR 71
STATE T: 26.2 H: 51
TYPE LaCrosse
addr 26
battery_new 0
corr1 0
corr2 0
eventCount 121
myJeeLink_MSGCNT 86984
myJeeLink_RAWMSG OK 9 38 1 4 238 51
myJeeLink_TIME 2022-08-15 10:50:55
previousH 51
previousT 26.2
sensorType 0=T(H)
READINGS:
2022-08-07 06:07:35 IODev myJeeLink
2022-08-15 10:50:55 battery ok
2022-08-15 10:50:55 humidity 51
2022-08-15 10:11:49 state T: 26.2 H: 51
2022-08-15 10:50:55 temperature 26.2
Attributes:
IODev myJeeLink
alias Elternzimmer
event-on-change-reading temperature:0.2,humidity:2
room Obergeschoss,Sensoren
Eins ist mir gerade noch aufgefallen ich habe Event on change Reading gesetzt macht das vielleicht die Probleme?
Meine Empfehlung: Versuche alles, was für "hoch" wichtig ist in die erste Bedingung zu packen und dann nur noch DOELSE (ohne Bedingung) für "runter" zu nehmen.
Wenn ich solche Fehler suche, zerpflücke ich das in einzelne DOIF und schaue, ob sie jeweils das machen, was sie sollen. Und natürlich mit Dummy, wegen dem WAF. Und der Umwelt ;)
Außerdem kann dann auch mit den Zeiten so arbeiten, dass man nicht nur 2x im Monat (;)) einen Effekt sieht.