Hauptmenü

Warnmeldung bitte nur 1x

Begonnen von Markus Hermann, 22 Mai 2013, 10:22:25

Vorheriges Thema - Nächstes Thema

Markus Hermann

Hallo Forum,

ich möchte die KS300 Tempraturen und Windstärken bei bestimmten Werte als Warnung per HM-OU-CFM-PL ansagen lassen, also z. B.:
"Achtung Frostgefahr" oder "Auchtung Windgweschwindigkeit über 50km/h"

Dazu habe ich folgendes notify erstellt:

define Frost  notify KS300 {if ( ReadingsVal("KS300","temperature","keinWert") lt  0 )  { fhem("set mp3_play playTone 019,045")} }


Ich bekomme als angesagt, dass die Temperatur unter 0 ist. Aber leider alle 10 Minuten, nämlich immer dann wenn die KS300-Meldung eintrifft.

Wir kann ich es ereeichen, dass ich nur 1x diese Meldung bekomme oder nur 1x alle 2 Stunden und zwischen 23:00Uhr und 6:00Uhr gar nicht.

Gruß
Markus


CUL/CUL-RFR/HM-LAN an Cubietruck

FS20/FHT/TFK/UTS/KS300/HM-SEC-SC/HMS100/HM-OU-CFM-PL/HM-RC-SEC3/

FLOORPLAN auf Android-Tablet und VDR

MisterEltako

Am einfachsten notify in at umwandeln, das in bestimmten Zeitspannen abfragt.

define Frost  at +*00:02:00 {if ( ReadingsVal("KS300","temperature","keinWert") lt  0 )  { fhem("set mp3_play playTone 019,045")} }


und vielleicht noch isday() einfügen, sonst plappert das ganze auch nachts ;o):
define Frost  at +*00:02:00 {\
  if ((ReadingsVal("KS300","temperature","keinWert") lt  0) && (isday())) {\
      fhem("set mp3_play playTone 019,045")}}
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

justme1968

das ist nicht unbedingt optimal weil dann die warnung nicht sofort kommt wenn der wert unter- oder überschritten  wird sondern unter umständen erst zwei stunden später.

dir saubere lösung ist dir zu merken wann du die letzte warnung erzeugt hast und die neue nur dann zu erzeugen wenn der zeitraum verstrichen ist. das merken kannst du z.b. in einem dummy machen oder in einem reading deines devices. das hier ist ein beispiel das mir eine warnung versendet wenn die luftfeuchtigkeit um keller unter- oder überschritten wird.

define WarnHumidUSZ dummy
attr WarnHumidUSZ room Keller
define WarnHumidOSZ dummy
attr WarnHumidOSZ room Keller
define LastHumidWarnSZ dummy
attr LastHumidWarnSZ room Keller
                 
define n_humi_akcp_init notify global:INITIALIZED { \
  use DateTime;; \
  our $LastHumidWarnSZ = DateTime->new( year => 2013, month => 1, day => 1 );; \
  fhem("set LastHumidWarnSZ $LastHumidWarnSZ");; \
  fhem("set WarnHumidUSZ 31");; \
  fhem("set WarnHumidOSZ 64");; \
}                
                 
define n_humi_akcp notify akcp:.*humidity.* { \
  use DateTime;; \
  use DateTime::Duration;; \
  my $currTime = DateTime->now();; \
  my $interval = DateTime::Duration->new( days => 1, hours => 2, minutes => 0 );; \
  if( outof_interval($main::LastHumidWarnSZ,$currTime,$interval) ){\
    if( ReadingsVal("akcp","humidity",99) < Value("WarnHumidUSZ") || ReadingsVal("akcp","humidity",99) > Value("WarnHumidOSZ") ){ \
      prowl_andre("Keller", ReadingsVal("akcp","humidity",99)."%%", 0);; \
      fhem("set LastHumidWarnSZ $currTime");; \
      $main::LastHumidWarnSZ = $currTime;; \
    } \          
  } \            
}                


dazu gehört noch das hier in 99_myUtils.pmsub outof_interval {
    my ( $dt1, $dt2, $interval ) = @_;
 
    # Make sure $dt1 is less than $dt2
    ( $dt1, $dt2 ) = ( $dt2, $dt1 ) if $dt1 > $dt2;
 
    # If the older date is more recent than the newer date once we
    # subtract the interval then the dates are closer than the
    # interval
    if ( $dt2 - $interval < $dt1 ) {
        return 0;
    }  
    else {
        return 1;
    }  
}


das war meine erste zusammengeklaute benachrichtigung. inzwischen würde ich das alles ein wenig anders machen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

MisterEltako

Finde ich für diesen Zweck sind das allerdings ein wenig viel Codezeilen....

MfG, MisterEltako.

Vielleicht geht das auch so:

define Frost  notify KS300:temperature.* {if ( ReadingsVal("KS300","temperature","keinWert") lt  0 )  { fhem("set mp3_play playTone 019,045")} }

und beim KS300:

attr KS300 event-on-update-reading temperature
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

justme1968

zwei stunden spaeter zu erfahren das es gestürmt hat geht natürlich viel kürzer :). ist aber nicht das was gewünscht war und auch dafür war der vorschlag nicht zuverlässig geeignet.

ansonsten ist ein drittel für den zweiten grenzwert. kann also ersatzlos gestrichen werden.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus Hermann

Erst einmal vielen Dank für die Vorschläge.

Natürlich möchte ich eine kurzen übersichtlichen Code und es soll auch sofort eine Meldung geben, denn ich will ja auf eine Gefahr auch sofort gewarnt werden.
Ich werde mir mal den Code von justme1968 genauer anschauen und mal sehen in wie weit ich den kürzen kann.

Es sollen ja noch weitere Werte wie "israining" und "wind" abgefragt werden.

@MisterEltako:

Deinen letzten Vorschlag mit event-on-update teste ich gerade.

Gruß
Markus

CUL/CUL-RFR/HM-LAN an Cubietruck

FS20/FHT/TFK/UTS/KS300/HM-SEC-SC/HMS100/HM-OU-CFM-PL/HM-RC-SEC3/

FLOORPLAN auf Android-Tablet und VDR

MisterEltako

dann vielleicht so? ;o)

attr KS300 event-on-update-reading temperature,israining,wind

MfG, MisterEltako
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

Markus Hermann

Schade, aber KS300 kennt kein "event-on-update-reading".

Gruß
Markus
CUL/CUL-RFR/HM-LAN an Cubietruck

FS20/FHT/TFK/UTS/KS300/HM-SEC-SC/HMS100/HM-OU-CFM-PL/HM-RC-SEC3/

FLOORPLAN auf Android-Tablet und VDR

justme1968

event-on-update-reading geht nicht weil es sozusagen das gegenteil macht. es unterdrückt events für alle readings die nicht in der liste sind.
event-on-change-reading geht nicht weil es trozdem events erzeug wenn wenn der wert schwankt
event-min-interval geht nicht weil es events unterdrückt egal ob grenzwerte über- oder unterschritten werden.

wenn du sofort eine nachricht haben willst wenn das event eintritt ist notify auf jeden fall richtig. und du musst dir auf irgend eine art merken wann die letzte nachricht raus ist. entweder direkt wie in meinem beispiel oben oder indirekt z.b. in dem du deinem device ein user reading alarm verpasst und dafür das event-on-change-reading setzt:

attr <device> userReadings alarm {ReadingsVal($name,"temperature",1) <0 ? "ja", "nein"}
attr <device> event-on-change-reading alarm

jetzt kannst du an alarm ein notify hängen das nur aufgerufen wird wenn sich der wert ändert:define alarmieren notify alarm:ja {...}hier kannst du dann auch dein isDay() einbauen.

das geht natürlich nur wenn das device die event-* attribute kennt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

MisterEltako

Wenn das funktioniert, motze ich auch nicht mehr über die Länge der Codezeilen ;o)

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

justme1968

klar funktioniert das. bis auf den tipfehler im letzten notify :). da muss natürlich <device>:alarm stehen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus Hermann

Tja, wie schon erwähnt, event-on* wird bei der KS300 nicht unterstützt, userReadings jedoch schon.

Ist eine Implementierung der attribute event-on* geplant bzw. möglich, Frage an die Cracks?

Gruß
Markus
CUL/CUL-RFR/HM-LAN an Cubietruck

FS20/FHT/TFK/UTS/KS300/HM-SEC-SC/HMS100/HM-OU-CFM-PL/HM-RC-SEC3/

FLOORPLAN auf Android-Tablet und VDR

abc2006


define Frost notify KS300 {\
    my $alarm;;
   if ( ReadingsVal("KS300","temperature","keinWert") lt  0 )  {\
      $alarm=on;;\
     } else {\
      $alarm=off;;
     }
     if ($alarm eq "on") {\
        fhem("set mp3_play playTone 019,045");;
      }\
}


alternativ noch mit Uhrzeiten:


define Frost notify KS300 {\
    my $alarm;;
   my $now=sprintf("%%02d:%%02d",$hour,$min);;\
   if ( ReadingsVal("KS300","temperature","keinWert") lt  0 )  {\
      $alarm=on;;\
     } else {\
      $alarm=off;;
     }
     if (($alarm eq "on") && (($now gt 19:00) || ($now lt 06:00))) {\
        fhem("set mp3_play playTone 019,045");;
      }\
}


zusammengeklaut aus anderen threads, sieht aber sinnvoll aus ...

lg
stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Markus Hermann

Hallo Stephan,

ich erhalte diese Fehlermeldung:

2013.05.22 22:34:59.070 3: Frost return value: syntax error at (eval 45838) line 1, near "23:"
syntax error at (eval 45838) line 1, near "}}"
Bareword "on" not allowed while "strict subs" in use at (eval 45838) line 1.
Bareword "off" not allowed while "strict subs" in use at (eval 45838) line 1.


Was klemmt da?

Gruß
Markus
CUL/CUL-RFR/HM-LAN an Cubietruck

FS20/FHT/TFK/UTS/KS300/HM-SEC-SC/HMS100/HM-OU-CFM-PL/HM-RC-SEC3/

FLOORPLAN auf Android-Tablet und VDR

Markus Hermann

Habe es selbst rausgefunden:

Bei $alarm=on muss das on in Hochkomma stehen, richtig ist also $alarm="on", also muss es auch bei $alarm="off" heißen.

Aber letztendlich wird der MP3 File bei jeder KS300 Meldung, bei der die Temeratur < 0 ist, abgespielt.

Ich habe zum Test geprüft ob die Temperatur > 8 ist, also:

if ( ReadingsVal("KS300","temperature","keinWert") gt  8 )

Mit Stephans Lösung erhalte ich auch alle 3 Minuten eine Meldung:

Log der KS300:
2013-05-23_08:09:26 KS300 T: 8.0  H: 79  W: 1.1  R: 114.0  IR: no
2013-05-23_08:11:58 KS300 T: 8.0  H: 78  W: 2.2  R: 114.0  IR: no
2013-05-23_08:14:31 KS300 T: 8.3  H: 77  W: 1.3  R: 114.0  IR: no
2013-05-23_08:17:03 KS300 T: 8.3  H: 75  W: 2.7  R: 114.0  IR: no
2013-05-23_08:19:36 KS300 T: 8.4  H: 76  W: 2.2  R: 114.0  IR: no
2013-05-23_08:24:41 KS300 T: 8.5  H: 75  W: 3.6  R: 114.0  IR: no
2013-05-23_08:27:13 KS300 T: 8.4  H: 75  W: 5.0  R: 114.0  IR: no
2013-05-23_08:39:56 KS300 T: 8.9  H: 74  W: 0.8  R: 114.0  IR: no
2013-05-23_08:45:01 KS300 T: 8.8  H: 74  W: 2.5  R: 114.0  IR: no


CUL/CUL-RFR/HM-LAN an Cubietruck

FS20/FHT/TFK/UTS/KS300/HM-SEC-SC/HMS100/HM-OU-CFM-PL/HM-RC-SEC3/

FLOORPLAN auf Android-Tablet und VDR