notify nur in bestimmten Abstand ausführen

Begonnen von Charity, 12 November 2013, 19:07:06

Vorheriges Thema - Nächstes Thema

Charity

Hallo,

ich habe mir gerade folgendes


define ntfHumidity_AZ notify TFATS34C_2:humidity.* { \
    my $AZ_Hum = ReadingsVal("TFATS34C_2","humidity","");;\
if (ReadingsVal("TFATS34C_2","humidity","") > 75) { \
{ DebianMail('email@@email.at',"FHEM Luftfeuchtigkeit Arbeitszimmer", "Im Arbeitszimmer wurde der Luftfeuchtigkeitsalarm mit $AZ_Hum %% Luftfeuchtigkeit ausgeloest") }}}


zusammengebastelt.
Um eine Benachrichtigung zu erhalten wenn die Luftfeuchtigkeit über 75% ist.
Das funktioniert auch sehr gut. Aber damit erhalte ich im 30 Sekundentakt Emails.

Wie kann ich das auf einen bestimmten Zeitrahmen, zb. alle 3 Stunden eingrenzen ?

Hat jemand einen guten Tipp ?

Danke

Zrrronggg!

#1
Ideenskitze:

Dummy definieren, der "verzoegert" oder so heisst.

Wenn nun die Luftfeuchte >75% ist machst du folgendes:

set verzoegert true
Gleichzeitig testest du vor dem Senden, ob verzoegert true ist. Wenn ja, wird keine Mail gesendet (d.h. man teste besser auf not equal: ne "true")

Und dann noch ein define der Art
define verzoegert_resett notify verzoegert:true define plus3stunden at +03:00:00 set verzoegert false

Nachteil ist allerdings, das es eine Menge Fehlermeldunge im Log gibt, weil du dann im 30 Sekunden Takt Fehlermeldungen bekommst, weil das Konstrukt verzoegert_resett alle 30 Sekunden ausgelöst wird und plus3stunden anlegen will... das aber schon existiert. Das ist aber nur ein optisches Problem.

Zur vermeidung der Fehlermeldungen kann man entweder vorher abfragen (if exist) ob plus3stunden noch definiert ist oder den Loglevel von verzoegert_resett auf 0 setzen (bin nicht ganz sicher ob das geht)


(nur als Idee, ist nicht ausformuliert. Wenn das als "Brocken hinwerfen" nicht reicht, sag bescheid, dann versuche ich das zu coden...)


Eine Andere Möglichkeit wäre vielleicht
attr event-min-interval   (siehe commeandref)
für den Feuchtesensor zu verwenden. Da muss man aber aufpassen, ob das nicht Nebeneffeckte auf andere stellen hat wo man den Sensor auswertet.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Charity

He, danke für den Tipp.

Ich werde das morgen ausprobieren. Sollte ich nicht weiterkommen melde ich mich.

Wenn's funktioniert schreib ich hier die Lösung.

bugster_de

Hi,

asl Alternative könnte ich mir vorstellen das Attribut event-on-change-reading zu setzen, wenn der notifiy zuschlägt. Im notify dann den Timer wie oben beschrieben und nach Ablauf der 3-Stunden das attribut wieder löschen. Ist jetzt mal auf die Schnelle hingeschrieben und bin mir nicht ganz sicher, was passiert, wenn Feuchtigkeit innerhalb der 3 Stunden von 75% auf 76% geht

Puschel74

Hallo,

Zitatwenn Feuchtigkeit innerhalb der 3 Stunden von 75% auf 76% geht

... oder auf 74% runter geht.

Dann ändert sich das reading und das event wird wieder ausgelöst und das notify triggert erneut.

Grüsse
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.

Charity

Danke für eure Tipps, ich bastle da mal herum und wenn ich es so habe dass es brauchbar funktioniert poste ich die Lösung.

Charity

Hallo,

ich bin nun endlich dazu gekommen, da ein wenig damit herum zu basteln.

Ich habe das Problem nun gelöst, wenn nun auch für ein anderes Gebiet, aber mit der selben Problematik.

Die Benachrichtigung das es unter 0 Grad hat soll nur alle 6 Stunden kommen ( ursprünglich die Nachricht, dass die Luftfeuchtigkeit über 75% liegt - ist aber gleich zu lösen).


define MsgTemp dummy

define OutTempAlarm notify TFA_WIND_22:temperature.* { \
if (ReadingsVal("TFA_WIND_22","temperature",20) < 0) { \
if ( Value("MsgTemp") eq "nein" ) {\
fhem ("set MsgTemp ja;;define alarm_OutTemp at +06:00:00 set MsgTemp nein") };;\
}}

define ntfZeroDegree notify MsgTemp:ja { \
my $OutSideTempCurrent = ReadingsVal("TFA_WIND_22","temperature",20);;\
fhem "set myPushOver msg 'Aussentemperatur' 'Es wurde soeben die Nullgrad Temperatur unterschritten -> $OutSideTempCurrent °C' '' 0 ''" }


Erst definiere ich einen einfachen Dummy

Dann wird mittels notify jener Wert abgefragt dessen Status interessant ist, dabei erfolgt eine "negativ" Prüfung auf den Dummy Wert

if ( Value("MsgTemp") eq "nein" )


und mit einem weiteren notify prüfe ich die Wert Änderung des Dummies, erst wenn diese auf "ja" gesetzt wird erhalte ich meine Nachricht.

Somit bekomm ich max. alle 6 Stunden eine Nachricht !

Damian

oder etwas kürzer:

Es wird benachrichtigt nur dann, wenn die Null-Grad-Grenze unterschritten wird:

define TH_TempAlarm THRESHOLD TFA_WIND_22:temperature:0:0 ||set myPushOver msg 'Aussentemperatur' 'Es wurde soeben null Grad  unterschritten'|

Gruß

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