FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: z0lt1 am 11 Dezember 2021, 12:47:33

Titel: DOIF Wartezeit abhängig von Temperatur
Beitrag von: z0lt1 am 11 Dezember 2021, 12:47:33
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
Titel: Antw:DOIF Wartezeit abhängig von Temperatur
Beitrag von: xenos1984 am 11 Dezember 2021, 14:52:55
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]
Titel: Antw:DOIF Wartezeit abhängig von Temperatur
Beitrag von: locodriver am 11 Dezember 2021, 15:46:49
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

Titel: Antw:DOIF Wartezeit abhängig von Temperatur
Beitrag von: Damian am 11 Dezember 2021, 15:56:25
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")\
}\
}
Titel: Antw:DOIF Wartezeit abhängig von Temperatur
Beitrag von: z0lt1 am 13 Dezember 2021, 21:33:03
Ich danke euch recht herzlich, genau so habe ich mir das vorgestellt  :)