DOIF Wartezeit abhängig von Temperatur

Begonnen von z0lt1, 11 Dezember 2021, 12:47:33

Vorheriges Thema - Nächstes Thema

z0lt1

Hallo zusammen,
ich würde gerne eine Warnung ausgeben lassen, wenn die Fenster offen sind. Die Wartezeit würde ich gerne von der Temperatur abhängig machen, z.B. bei über 10°C nach 20 Minuten, bei unter 10°C nach 10, bei unter 0°C nach 5 Minuten. Gibt es dafür in DOIF eine elegante Lösung? Aktuell arbeite ich einfach mit dem Attribut wait mit einer fest eingestellten Zeit.


(
[$SELF:mybutton] eq "on" and
(([wc_Kontakt.Fenster] eq "open") or ([bd_Kontakt.Fenster] eq "open") or ([nik_Kontakt.Fenster] eq "open") or ([mar_Kontakt.Fenster] eq "open")) and
[WetterProplanta:temperature] < 10
) (
set MyTTS volume 10, set MyTTS tts "Temperaturwarnung, ein Fenster ist geöffnet"
)

DOELSE ()

attr gb_Warnung.Fenster disable 0
attr gb_Warnung.Fenster do always
attr gb_Warnung.Fenster group Alarme
attr gb_Warnung.Fenster icon message_attention
attr gb_Warnung.Fenster readingList mybutton
attr gb_Warnung.Fenster room 000_Global,26_WC,34_Bad
attr gb_Warnung.Fenster setList mybutton:on,off
attr gb_Warnung.Fenster wait 1200
attr gb_Warnung.Fenster webCmd mybutton

xenos1984

Man kann in wait eine Berechnung angeben:

http://fhem.de/commandref_DE.html#DOIF_wait

Statt direkt in wait zu rechnen, kann man auch mit DOIF_Readings arbeiten:

http://fhem.de/commandref_DE.html#DOIF_DOIF_Readings


attr gb_Warnung.Fenster DOIF_Readings delay:([WetterProplanta:temperature] > 10 ? 1200 ([WetterProplanta:temperature] > 0 ? 600 : 300))
attr gb_Warnung.Fenster wait [$SELF:delay]

locodriver

Ich habe das so gelöst:

([BD_Fenster:"^offen$"] and [?Heizung] eq "Ein" and [?Wetter_Borsdorf:temperature:d,0]<0)
({FensterAnsage("BD_Fenster")})
(set Nachrichten message Der Rollladen des Badfensters wird in 2 Minuten geschlossen,set WZ_Echo_Dot speak Der Rollladen des Badfensters wird in 2 Minuten geschlossen)
(set BD_Rola_move cmd_7)
DOELSEIF
([BD_Fenster:"^offen$"] and [?Heizung] eq "Ein" and [?Wetter_Borsdorf:temperature:d,0]<16)
({FensterAnsage("BD_Fenster")})
(set Nachrichten message Der Rollladen des Badfensters wird in 2 Minuten geschlossen,set WZ_Echo_Dot speak Der Rollladen des Badfensters wird in 2 Minuten geschlossen)
(set BD_Rola_move cmd_7)
DOELSE ()

attr BD_Fenster_Meldung cmdState Badfenster auf
attr BD_Fenster_Meldung disable 0
attr BD_Fenster_Meldung do always
attr BD_Fenster_Meldung repeatcmd 180:int((2/15*[Wetter_Borsdorf:temperature]+3)*60)
attr BD_Fenster_Meldung repeatsame 2:3
attr BD_Fenster_Meldung room 004Bad
attr BD_Fenster_Meldung wait 300,300,120:int((2/3*[Wetter_Borsdorf:temperature]+5)*60),300,120


In repeatcmd wird der Abstand der Wiederholungen berechnet und in wait die Verzögerung bis zur ersten Meldung.
Unter 0°C bleibt die Verzögerung bei 5 Minuten und der Abstand bei 3 Minuten.

Der Bruch und der Summand kennzeichnen die Geradengleichung: zeit= f(temp)= 2/15 * temp +5

fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

Damian

#3
Aus der Commandref zu DOIF-Perl: Eine dynamische Wiederholung mit set_Exec.

Man kann hier auch z. B. die Temperatur einbauen :)

Wenn Fenster geöffnet wird, dann soll eine Benachrichtigung erfolgen, dabei soll die Benachrichtigung bis zu 10 mal jeweils um weitere 60 Sekunden verzögert werden: erste Benachrichtigung nach 5 Minuten, zweite Benachrichtigung nach weiteren 6 Minuten, dritte Benachrichtigung nach weiteren 7 Minuten usw.


defmod di_window DOIF {if ([window:state] eq "open") {\
  set_Exec("timer",'300+$count*60','fhem("echo speak window open")','$count < 9')\
} else {\
  del_Exec("timer")\
}\
}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

z0lt1

Ich danke euch recht herzlich, genau so habe ich mir das vorgestellt  :)