Erinnerung nach 10 Minuten Fenster auf

Begonnen von Invers, 21 Juli 2014, 17:05:15

Vorheriges Thema - Nächstes Thema

Invers

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.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Brockmann

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.

Invers

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.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Invers

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.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

fiedel

...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. ;)
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Invers

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.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

bergadler

#8
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ß
aktuelles FHEM auf Raspberry B+, FHEM von fhem.de V.5.7, CUL868 V1.57, (6x FHT80B+ FHTTK, div. IT,div. FS20,Harmony Hub)

Invers

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.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Mitch

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.
FHEM im Proxmox Container

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Mitch

Immer noch Watchdog  ;D

Pseudocode:
define FensterAuf watchdog Fenster:open 00:10 Fenster:closed {if(ReadingsVal("Aussentemperatur", "state", "") < "16"){fhem("set pushover "blablabla")}}
FHEM im Proxmox Container

Damian

#14
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


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF