Ich möchte gerne 10 Minuten nachdem ein Fenster geöffnet wird eine Meldung darüber erhalten. Das soll aber nur passieren, wenn das Fenster nicht innerhalb dieser Zeit geschlossen wurde und die Aussentemperatur <16 Grad ist.
Fensterzustand meldet mein Fensterkontakt, Temperatur meldet mein Aussenthermometer.
Theoretisch könnte ich das ja ,mit einem Notify und einem AT machen. Aber das kann ich ja nicht wieder abbrechen, falls das Fenster innerhalb der 10 Minuten wieder geschlossen wurde.
Das I-Tüpfelchen wäre natürlich, wenn das alles nur aktiv wäre, solange die Heizperiode dauert. Die Heizperiode kann ich testen, da dann die Temperatur des Heizkörpers (die ich auch messe) mindestens einmal täglich höher ist, als die Raumtemperatur.
Wie kann ich das alles elegant bewerkstelligen? Ich habe mich da momentan total verrannt.
Hallo,
watchdog wäre eine Möglichkeit.
Eine weitere wäre dennoch ein notify und ein at.
Das notify triggert auf den Fensterkontakt - wenn Fenster auf das at definiert, wenn Fenster zu das at löschen.
Wenn die Heizperiode startet setzt du das Attribut disable auf 0 und am Ende dder Heizperiode auf 1.
Im notify kannst du ja alles abfragen und verknüpfen was du möchtest.
Grüße
Wie wäre es mit DOIF?
(Pseudocode)
define DI_Fenster_offen DOIF ([Fenster] eq "offen" and [Aussenthermometer:Temperatur] < 16)(..."Meldung machen"...)
attr DI_Fenster_offen wait 600
Das wait sorgt dafür, dass die Ausführung um 10 Minuten verschoben wird. Sollten sich die Bedingungen in dieser Zeit ändern (Fenster wird geschlossen oder Temperatur steigt auf >= 16 Grad) bricht das Ganze automatisch ab.
Eine Berücksichtigung der Heizperiode ist da jetzt noch nicht mit drin, lässt sich aber sicher irgendwie ergänzen.
Hmmm..... Notyfi und AT waren auch meine erste Vorstellung, aber ich weiss nicht so recht, ob ein AT abgebrochen werden kann.
Die Lösung mit dem DOIF gefaällt mir auch sehr gut, aber da weiss ich wieder nicht genau, ob dea wait Nachteile hat. Läuft denn das System bei wait klaglos weiter? Ich erinnere mich, hie irgendwo etwas über Nachteile zu wait gelesen zu haben, finde es aber nicht wieder.
Auf jeden Fall danke ich euch beiden. Ich werde es eifach mal ausprobieren. Man kann es ja wieder ändern, falls es botwendig ist.
Danke euch beiden für die Hilfe.
Hallo,
Zitataber ich weiss nicht so recht, ob ein AT abgebrochen werden kann.
Doch kann es - mann kann es zur Laufzeit wieder löschen (hab ich ja geschrieben und mache ich genauso in meinen Codes).
ZitatIch erinnere mich, hie irgendwo etwas über Nachteile zu wait gelesen zu haben, finde es aber nicht wieder.
Das ist komplett falsch.
Das was du meinst ist sleep und nicht wait.
Und dann auch nur das perl-sleep und nicht das fhem-sleep.
Lies dir doch bitte erstmal den Beitrag zu DOIF im Automatisierungsbereich durch damit wir hier auch über das gleiche reden.
Danke.
Grüße
Ja, du hast Recht, ich habe die beiden Begriffe vertauscht. Das erklärt auch, warum ich das, was ich meinte gelesen zu haben, nicht mehr finden kann.
DOIF habe ich schon lange auf dem Schirm.
Danke.
...DOIF - son neumodisches Zeugs! Die Jugend von heute, total schreibfaul!!! Früher zu Kaisers Zeiten - da haben wir noch richtig programmiert... ;D
In die CFG:
#############################################################################
########################### Fensterüberwachung ##############################
#############################################################################
# Beim ersten Wechsel von closed nach open wird ein Notify angelegt,
# das nach 3 Minuten nochmal prüft, ob die/das Fenster noch offen sind/ist.
# Wenn es in der Zwischenzeit geschlossen wird, wird das Notify gelöscht
# Wenn nicht, wird 10 Mal eine Erinnerung abgespielt.
# Wird das Fenster geschlossen, wird auch das Erinnerungs- Notify gelöscht
# http://www.fhemwiki.de/wiki/FHTTK:_Benachrichtigung_bei_offenem_Fenster
define Fenster_Status dummy
attr Fenster_Status devStateIcon Open:Fenster_Status.Open Closed:Fenster_Status.Closed
attr Fenster_Status fp_0_Hauptbildschirm 420,38,2,
attr Fenster_Status group Status
attr Fenster_Status room 0_Überblick
# FHTTK: Mail bei offenem Fenster; Fenster_Status setzen:
# um Mails zu erhalten, folgende Zeile über "Log 3..." einfügen:
# exmail('user@@gmx.de',$subject,$fhttk_status);;
define Func_Fenster_Stat_N notify .*:Window.*(Open|Closed) { \
my $window_state=ReadingsVal("@", "Window", "nA");;\
my $deftype=$defs{@}{TYPE};;\
return if ( $deftype ne "CUL_FHTTK" );;\
if ( $defs{@}{PREVSTATE} ne $window_state ) { \
my $fhttk_status=FHTTK_status;;\
my $subject="FHEM: Fenster @ ".$window_state;; \
Log 3, "@: Window ".$window_state;;\
}\
}
attr Func_Fenster_Stat_N group Programm
attr Func_Fenster_Stat_N room 5_System
# Erinnerung Lüften beenden:
# wenn Fenster offen, starte Erinnerungsfunktion:
define Func_Fenst_Lueft_beend_N notify Fenster_Status:Open.* { \
\
my $T_aussen = (ReadingsVal("Sens_TF_Aussen", "temperature", "6.0"));;\
my $T_innen = (ReadingsVal("Sens_TF_Wohnz_UG", "temperature", "16.0"));;\
\
if (($T_aussen <= 15.0) and OldValue("Fenster_Status") eq "Closed") {\
fhem("define Lueft_beend_A at +00:03:00 trigger Func_Fenster_Pruef_zu_N");;\
} \
}
attr Func_Fenst_Lueft_beend_N group Programm
attr Func_Fenst_Lueft_beend_N room 5_System
# wenn Fenster wieder zu, lösche Erinnerungsfunktion:
define Func_Fenster_zu_N notify Fenster_Status:Closed.* { \
if (OldValue("Fenster_Status") =~ /Open/) { \
if (($defs{Lueft_beend_A})) {\
fhem("delete Lueft_beend_A");;\
}\
if (OldValue("Fenster_Status") =~ /Open/) { \
if (($defs{Remind_Fenster_A})) {\
fhem("delete Remind_Fenster_A");;\
}\
}\
}\
}
attr Func_Fenster_zu_N group Programm
attr Func_Fenster_zu_N room 5_System
# wenn Fenster noch offen, führe Erinnerung aus
define Func_Fenster_Pruef_zu_N notify Func_Fenster_Pruef_zu_N { \
if (Value("Fenster_Status") =~ /Open/) { \
fhem("define Remind_Fenster_A at +*{9}00:02:00 set Dum_SM_D Qlueften_beenden");;\
fhem("set Dum_SM_D Qlueften_beenden");;\
}\
}
attr Func_Fenster_Pruef_zu_N group Programm
attr Func_Fenster_Pruef_zu_N room 5_System
In die myUtils:
# FHTTK: Benachrichtigung bei offenem Fenster:
##############################################
sub FHTTK_status {
my @fhttks = devspec2array("TYPE=CUL_FHTTK");
my @wopen = ();
foreach(@fhttks) {
my $fhttk_window = ReadingsVal($_, "Window", "nA");
push (@wopen,$_) if ($fhttk_window eq "Open" );
}
if ( "Fenster_Status" ne "Open" ) {
fhem("set Fenster_Status Open");
}
my $num_wopen = @wopen;
my $resultstring='';
if ( $num_wopen gt 0 ) {
$resultstring="folgende Fenster sind noch offen:\n\n";
foreach(@wopen) {
$resultstring.="- ".$_."\n";
Log 4, "FHTTK_status: ". $_. "noch offen";
}
} else {
$resultstring="alle Fenster sind derzeit geschlossen.";
fhem("set Fenster_Status Closed");
}
return $resultstring;
}
Wenn das mit dem DOIF oder Watchdog gut geht (was ich annehme), muss ich mein Kauderwelsch hier auch mal vereinfachen. ;)
Oh, vielen Dank. Hast du im Wiki gefunden?
Mist. Im Wiki zu suchen habe ich nicht dran gedacht. Das gesamte Forum hatte ich durchsucht.
Vielen Dank für die Mühe und den Code.
Zitat von: fiedel am 22 Juli 2014, 07:00:08
Wenn das mit ... Watchdog gut geht
Der WD ruft mich seit Monaten, über eine nur dafür genutzte Telnummer, zuverlässig an:
(somit sehe ich auch gleich, daß eines meiner Fenster durchklingelt) 8)
define Watchdog_WZ_Fenster watchdog WZ_Fenster:Window:.Open 00:10:00 WZ_Fenster:Window:.Closed "anrufen.sh";; trigger Watchdog_WZ_Fenster .
Da müsste man bei Bedarf nur noch die Temperaturabfrage dranbauen.
Gruß
Telefonieren geht bei mir seit der Umstellung auf raspberry noch nicht. Darum muss ich mich auch noch kümmern. versucht habe ich es schon, aber vergeblich.
Die Tipps von ier muss ich erst einmal alle probieren und anpassen.
Erst einmal Dank an alle Helfer.
Zitat von: fiedel am 22 Juli 2014, 07:00:08
...DOIF - son neumodisches Zeugs! Die Jugend von heute, total schreibfaul!!! Früher zu Kaisers Zeiten - da haben wir noch richtig programmiert... ;D
Danke für das Kompliment - ich fühle mich direkt zehn Jahre jünger, aber wahrscheinlich bin ich älter als du ;)
Gruß
Damian
Also ich mache das über einen Watchdog.
Eine Zeile Code und ich werde benachrichtigt, wenn die Haustür länger wie 15 Minuten offen ist.
Die Temp könnte da auch noch abfragen, würde eine Zeile Code bleiben.
Zitat von: Brockmann am 21 Juli 2014, 17:37:58
Wie wäre es mit DOIF?
(Pseudocode)
define DI_Fenster_offen DOIF ([Fenster] eq "offen" and [Aussenthermometer:Temperatur] < 16)(..."Meldung machen"...)
attr DI_Fenster_offen wait 600
Eine Berücksichtigung der Heizperiode ist da jetzt noch nicht mit drin, lässt sich aber sicher irgendwie ergänzen.
z. B.
define DI_Fenster_offen DOIF ([Fenster] eq "offen" and [Aussenthermometer:Temperatur] < 16 and [Heizung] eq "on")(..."Meldung machen"...)
oder
define DI_Fenster_offen DOIF ([Fenster] eq "offen" and [Aussenthermometer:Temperatur] < 16 and [Heizventil:d] > 0)(..."Meldung machen"...)
oder
define DI_Fenster_offen DOIF ([Fenster] eq "offen" and [Aussenthermometer:Temperatur] < 16 and $month > 10 and $month < 5)(..."Meldung machen"...)
Der Fantasie sind keine Grenzen gesetzt :)
Gruß
Damian
Immer noch Watchdog ;D
Pseudocode:
define FensterAuf watchdog Fenster:open 00:10 Fenster:closed {if(ReadingsVal("Aussentemperatur", "state", "") < "16"){fhem("set pushover "blablabla")}}
Zitat von: Mitch am 22 Juli 2014, 13:55:26
Immer noch Watchdog ;D
Pseudocode:
define FensterAuf watchdog Fenster:open 00:10 Fenster:closed {if(ReadingsVal("Aussentemperatur", "state", "") < "16"){fhem("set pushover "blablabla")}}
ja, es gibt im Vergleich zum unteren Beispiel einen kleinen aber feinen Unterschied.
Wenn ich das Fenster hier öffne und die Temperatur knapp über 16 Grad ist, dann gibt es keine Meldung auch dann nicht, wenn die Temperatur danach weiter fällt und die Bude im Winter komplett auskühlt.
Das würde im unteren Beispiel von Brockmann nicht passieren.
Edit: Das macht man dann besser über structure in Verbindung mit THRESHOLD und Watchdog, dann aber besser nicht mehr in einer Zeile ;)
Gruß
Damian
THRESHOLD war mein erster Gedanke. Aber irgendwie dachte ich, das wäre mit Kanonen auf Spatzen schiessen. Habe gestern erst im Wiki die Erläuterungen dazu gelesen.
Zitat von: Damian am 22 Juli 2014, 14:26:56
Edit: Das macht man dann besser über structure in Verbindung mit THRESHOLD und Watchdog, dann aber besser nicht mehr in einer Zeile ;)
da gebe ich Dir vollkommen recht, aber die Anforderung war ja genauso einfach: Fenster länger als 10 Min offen und Außentemp kleiner 16 Grad ;)
Zitat von: Mitch am 22 Juli 2014, 15:21:37
da gebe ich Dir vollkommen recht, aber die Anforderung war ja genauso einfach: Fenster länger als 10 Min offen und Außentemp kleiner 16 Grad ;)
Umgangssprachliche Formulierungen sind leider oft nicht eindeutig genug. Denn die Aussage:
"Fenster länger als 10 Min offen und Außentemp kleiner 16 Grad"
tut´s eben nicht, denn es kann 2 Stunden das Fenster offen sein (
länger als 10 Min)
und die Temperatur unter Null Grad (
kleiner 16 Grad) sein und es gibt trotzdem, wie unten beschrieben, keine Meldung.
Und das hat @Invers bestimmt nicht gewollt.
Gruß
Damian
Zitat von: Invers am 22 Juli 2014, 15:06:58
THRESHOLD war mein erster Gedanke. Aber irgendwie dachte ich, das wäre mit Kanonen auf Spatzen schiessen. Habe gestern erst im Wiki die Erläuterungen dazu gelesen.
ja, deswegen werde ich in der commanref von THRESHOLD die umfangreichen und damit umständlichen Beispiele in Verbindung mit watchdog zugunsten von DOIF wieder herausnehmen.
Gruß
Damian
Hab ich vor kurzem (auch) mit watchdog gelöst:
fenster:on 00:30 fenster:off {
if (($month > 9 || $month < 4)) {
FB_mail('alarm@xxxxx.de','FHEM-Alarm','Fenster seit 30 min offen');
fhem("trigger wd_fenster .");
}
}
- Eingeschränkt auf die "kalte" Jahreszeit
- Info per mail via Fritz!Box
Der trigger-Befehl sorgt dafür, dass sich der Wachhund alle 30 min meldet, solange bis das Fenster geschlossen wird ...
Hallo Leute,
ich hab das auch so gelöst:
define SchlafzimmerFensterAuf watchdog Schlafzimmer_Fenster:open 00:15 Schlafzimmer_Fenster:closed {if(ReadingsVal("Temperaturfuehler_1", "temperature", "") < "16"){fhem ("set Pushover1 msg 'fhem' 'Schlafzimmerfenster ist auf' '' 0 ''")}}
Aber nachdem ich per Pushover benachrichtigt worden bin und ich das Fenster geschlossen habe funktioniert es nicht mehr. Es geht nur einmal nachdem ich FHEM neu gestartet habe.
Kann mir einer einen Tip geben ich komm nicht mehr weíter.
Gruß Daniel
Hallo,
da fehlt (zum "Wiederscharfmachen") am Schluß ein
trigger SchlafzimmerFensterAuf .
Mein Fenster_Watchdog z.B. ruft mich nach 20min an:
Bad_Fenster:Window:.Open 00:20:00 Bad_Fenster:Window:.Closed "anrufen.sh"; trigger Watchdog_Bad_Fenster .
Gruß
Hi,
habe das jetzt mal so geändert
Zitatdefine SchlafzimmerFensterAuf watchdog Schlafzimmer_Fenster:open 00:01 Schlafzimmer_Fenster:closed {if(ReadingsVal("Temperaturfuehler_1", "temperature", "") < "16"){fhem ("set Pushover1 msg 'fhem' 'Schlafzimmerfenster ist auf' '' 0 ''")}}; trigger SchlafzimmerFensterAuf
geht aber immer noch nicht.
Gruß
Da fehlt ein "Leerzeichen" + "Punkt" am Ende. ::)
Hallo,
danke Dir jetzt geht es!
Da wäre ich allein nie drauf gekommen.
Gruß und Gute Nacht
Hallo,
vielleicht kannst Du aus diesem Beitrag auch noch sinnvolle Infos rausziehen:
http://forum.fhem.de/index.php/topic,34482.msg268826.html#msg268826
Vorteil hier ist, dass Du den Watchdog nicht pro Fenster definieren musst, sondern nur ein mal.
Gruss
Auch wenn der Thread schon ein paar Tage alt ist, hier noch mein(e) Senf/Lösung:
define doif_Badfenster DOIF (([og_ba_Thermostat:measured-temp:d]-[os_Aussenthermometer:temperature:d]) >= 1 and [og_ba_Fenster] ne "closed" and [og_ba_Thermostat_Weather:humidity:d] <= 55) ( set MP3DingDong_Mp3 playTone 020, set MP3DingDong_Led led orangeL 255, define at_replay_bad_Fenster at +*{15}00:03:00 set MP3DingDong_Mp3 playTone 020;; set MP3DingDong_Led led orangeL 255 )
DOELSEIF ([og_ba_Fenster] eq "closed" and [og_ba_Thermostat_Weather:humidity:d] >= 65) ( set MP3DingDong_Mp3 playTone 010, set MP3DingDong_Led led orangeL 255, define at_replay_bad_Fenster at +*{15}00:03:00 set MP3DingDong_Mp3 playTone 010;; set MP3DingDong_Led led redL 255 )
DOELSE ( set MP3DingDong_Led led pause, delete at_replay_bad_Fenster )
og_ba_Fenster ist ein HM-SEC-RHS, og_ba_Thermostat ein HM-TC-IT-WM-W-EU der zwar nichts regelt, sich aber recht unauffällig mit den PowerStrips integrieren hat lassen. Das os_Aussenthermometer ist ein HM-WDS10-TH-O auf der Nordseite und MP3DingDong ein HM-OU-CFM-PL, dessen MP3s ich für die Sprachausgabe über die Webseite http://www.fromtexttospeech.com (http://www.fromtexttospeech.com) habe erzeugen lassen.
Nach dem DOIF gerade im Bezug auf die Steuerung über Zeiten/Intervalle kürzlich ein mächtiges Update erfahren hat, werde ich das doif_Badfenster demnächst noch um den at erleichtern. 8)
VG Stefan
Hi Stefan, danke für das Beispiel!
Zitat von: StefanD am 24 April 2015, 18:22:44
Nach dem DOIF gerade im Bezug auf die Steuerung über Zeiten/Intervalle kürzlich ein mächtiges Update erfahren hat, werde ich das doif_Badfenster demnächst noch um den at erleichtern. 8)
Hast Du das inzwischen erfolgreich umgesetzt?
Grüße, Christian
Homematic funktioniert grundsätzlich mit allen Fenster, ja. Und ja, die Frage passt überhaupt nicht in diesen Thread 8)
Deinen Anforderungen fehlt leider doch noch was. Es ist sicherlich nicht sinnvoll bei Temperaturen von 16 bis 20 Grad während des Heizungsbetriebs (jetzt nicht der Heizkörper in dem betroffenen Raum) das Fenster Dauerzulüften. Auch hier kühlt die Bausubstanz aus und kann schlimmstenfalls neben einem Behaglichkeitsverlust auch zur Schimmelbildung an den typischen Kältebrücken führen, die sich leider nicht immer vermeiden lassen oder es kommt trotz Nichtheizen des dauergelüfteten Raums zu einem erhöhten Energieverbrauch.
Ein ganz krasses Beispiel: Das Fenster hat einen Abstand zur nächsten Raumseite von 30 cm oder weniger. Die Bausubstanz kühlt rund um das Fenster schön aus. Im Nachbarraum wird geduscht, gekocht oder die Luftfeuchte ist schön hoch, dann kondensiert im Nachbarraum in der Ecke das ausfallende Wasser aus der Luft. Man hat ja alles richtig gemacht. Tür zum nichtbeheizten Raum geschlossen, ... lüftet ...
Logischer weise fällt hierfür ja der HK-Thermostat im betroffenen Raum aus, da muss eine andere Messgröße her. Man könnte die Betriebsart des Heizkessels abfragen oder einen Thermostaten am/im Vorlauf oder Rücklauf des Heizkreises platzieren.
Also ich mache einen modify auf die Zeit des watchdog, abhängig von der Aussentemperatur.
Also, wenn Aussen_Temp > 16 Grad ist die Warnung völlig disabled.
Zwischen 12° und 15° modify auf 60min
Zwischen 9° und 12° modify auf 30min
Zwischen 6° und 9° modify auf 20min
Zwischen 3° und 6° modify auf 15min
Zwischen -2° und 3° modify auf 10 min
< -2 modify auf 5 min
Und dann unterscheide ich noch zwischen gekipped und ganz offen. 8)
Allerdings treibe ich den Aufwand nur in Badezimmer, weil ich dort das Fenster dort gerne vergesse.
Die anderen Fenster sind nicht so detailiert.
Zitat von: dieda am 07 September 2015, 12:11:24
Deinen Anforderungen fehlt leider doch noch was. Es ist sicherlich nicht sinnvoll bei Temperaturen von 16 bis 20 Grad während des Heizungsbetriebs (jetzt nicht der Heizkörper in dem betroffenen Raum) das Fenster Dauerzulüften...
Ich enable/disable die Fenster-Offen-Warnung mit meinem "Heizungsstatus". Nur wenn der auf "Auto" oder "FHEM" steht, kommt eine Ansage. Im Hochsommer fand ich das sonst zu nervig. ;D
ich würde gerne mit espeak sagen lassen, welches fenster zu lange offen ist. ausserdem sollte die lueftungsdauer abhaengig von der aussentemperatur sein.
ich komme wohl nicht daran herum ein watchdog pro fenster zu machen. die erlaubte lueftungsdauer wuede ich ueber eine funktion in myutils ermitteln, nur wie gebe ich eine funktion im watchdog an anstelle von timespec?
@ Mi.ke:
Deine Lösung interessiert mich sehr. Würdest Du deine Lösung posten?
Zitat von: FhemPiUser am 12 September 2015, 21:58:02
ich würde gerne mit espeak sagen lassen, welches fenster zu lange offen ist. ausserdem sollte die lueftungsdauer abhaengig von der aussentemperatur sein.
Ich habe es z.B. so gelöst:
define Bad_temp_alarm DOIF ([Hzg_Bad:measured-temp] < 17) (set nexus_webview ttsSay Das Bad hat nur noch 17 Grad. macht doch mal einer das Fenster wieder zu!)
Gruß
Zitat von: Mumpitz am 12 September 2015, 23:59:53
@ Mi.ke:
Deine Lösung interessiert mich sehr. Würdest Du deine Lösung posten?
Zitat von: mi.ke am 12 September 2015, 00:51:30
Also ich mache einen modify auf die Zeit des watchdog, abhängig von der Aussentemperatur.
Also, wenn Aussen_Temp > 16 Grad ist die Warnung völlig disabled.
Zwischen 12° und 15° modify auf 60min
Zwischen 9° und 12° modify auf 30min
Zwischen 6° und 9° modify auf 20min
Zwischen 3° und 6° modify auf 15min
Zwischen -2° und 3° modify auf 10 min
< -2 modify auf 5 min
Und dann unterscheide ich noch zwischen gekipped und ganz offen.
Du brauchst einen Dummy für
TempTime, in den Du bei jeder Aktualisierung der Aussentemperatur den aktuellen Wert schreibst.
Dann wird der Timespec des Watchdogs mit dem Wert des TempTime modifiziert.
modify Bad_Fenster_Status_wd OG_Fenster_Bad:(offen) ".(Value("TempTime")).";Der Rest ist dann nur "Aktustische Meldung und Sprachausgabe an und abschalten, bei Nachtruhe oder wenn ich nicht zu Hause bin"
define Bad_Fenster_Status_wd watchdog OG_Fenster_Bad:(offen) 01:00 OG_Fenster_Bad:(geschlossen|gekippt) {
my $Minuten = (ReadingsVal("TempTime","Minuten", 0));
if ((Value("MikeHandyS4") eq "zuHause") && (Value("Nachtruhe") eq "nein"))
{fhem ("set Pushover msg 'Fenster zu lange OFFEN' 'Das Badezimmer Fenster ist länger als $Minuten Minuten bei ".(Value("Aussentemperatur"))." geöffnet' 'Mike' 1 'Siren';
modify Bad_Fenster_Status_wd OG_Fenster_Bad:(offen) ".(Value("TempTime")).";
set ASure ttsSay Das Badezimmer Fenster kann geschlossen werden ;
trigger Bad_Fenster_Status_wd . ;")
}
elsif ((Value("MikeHandyS4") eq "zuHause") && (Value("Nachtruhe") eq "ja"))
{fhem ("set Pushover msg 'Fenster zu lange OFFEN' 'Das Badezimmer Fenster ist länger als $Minuten Minuten bei ".(Value("Aussentemperatur"))." geöffnet' 'Mike' 0 'Siren';
modify Bad_Fenster_Status_wd OG_Fenster_Bad:(offen) ".(Value("TempTime")).";
trigger Bad_Fenster_Status_wd . ")};
}
Zitat von: mi.ke am 14 September 2015, 14:29:30
Du brauchst einen Dummy für TempTime, in den Du bei jeder Aktualisierung der Aussentemperatur den aktuellen Wert schreibst.
Dann wird der Timespec des Watchdogs mit dem Wert des TempTime modifiziert.
modify Bad_Fenster_Status_wd OG_Fenster_Bad:(offen) ".(Value("TempTime")).";
Der Rest ist dann nur "Aktustische Meldung und Sprachausgabe an und abschalten, bei Nachtruhe oder wenn ich nicht zu Hause bin"
define Bad_Fenster_Status_wd watchdog OG_Fenster_Bad:(offen) 01:00 OG_Fenster_Bad:(geschlossen|gekippt) {
my $Minuten = (ReadingsVal("TempTime","Minuten", 0));
if ((Value("MikeHandyS4") eq "zuHause") && (Value("Nachtruhe") eq "nein"))
{fhem ("set Pushover msg 'Fenster zu lange OFFEN' 'Das Badezimmer Fenster ist länger als $Minuten Minuten bei ".(Value("Aussentemperatur"))." geöffnet' 'Mike' 1 'Siren';
modify Bad_Fenster_Status_wd OG_Fenster_Bad:(offen) ".(Value("TempTime")).";
set ASure ttsSay Das Badezimmer Fenster kann geschlossen werden ;
trigger Bad_Fenster_Status_wd . ;")
}
elsif ((Value("MikeHandyS4") eq "zuHause") && (Value("Nachtruhe") eq "ja"))
{fhem ("set Pushover msg 'Fenster zu lange OFFEN' 'Das Badezimmer Fenster ist länger als $Minuten Minuten bei ".(Value("Aussentemperatur"))." geöffnet' 'Mike' 0 'Siren';
modify Bad_Fenster_Status_wd OG_Fenster_Bad:(offen) ".(Value("TempTime")).";
trigger Bad_Fenster_Status_wd . ")};
}
Könntest Du den Code für den Dummy TempTime posten? Habs versucht nachzubauen bin dabei auf folgende Frage gestossen:
Was gibst Du für einen Wert ein wenn die Temperatur aussen höher als 15° Celsius ist? Dann sollte ja der Watchdog die öffnungszeit nicht mehr prüfen. Oder versteh ich das falsch?
Im Watchdog wird die Ansage/Pushmeldung ja erst nach 1 Stunde ausgeführt und mittels Ansage dann geagt das Fenster hätte nach 10 minuten geschlossen werden sollen?
Sollte der Watchdog nicht auch mit dem TempTimer Wert als Zeit für die Ansage genommen werden?
Für das Posten des ganzen Codes wäre ich Dir dankbar auch wenn dieser Thread schon etwas älter ist ;D
Vielen Dank
Der Thread ist über drei Jahre alt.
Hier gibt es eine Lösung für mehrere Fenster:
siehe: Verzögerte Fenster-offen-Meldung mit Wiederholung für mehrere Fenster:
https://fhem.de/commandref_DE.html#DOIF_Einfache_Anwendungsbeispiele_Perl