FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Charity am 12 November 2013, 19:07:06

Titel: notify nur in bestimmten Abstand ausführen
Beitrag von: Charity am 12 November 2013, 19:07:06
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
Titel: Antw:notify nur in bestimmten Abstand ausführen
Beitrag von: Zrrronggg! am 12 November 2013, 21:45:24
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.
Titel: Antw:notify nur in bestimmten Abstand ausführen
Beitrag von: Charity am 12 November 2013, 22:39:59
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.
Titel: Antw:notify nur in bestimmten Abstand ausführen
Beitrag von: bugster_de am 13 November 2013, 08:30:36
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
Titel: Antw:notify nur in bestimmten Abstand ausführen
Beitrag von: Puschel74 am 13 November 2013, 11:25:53
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
Titel: Antw:notify nur in bestimmten Abstand ausführen
Beitrag von: Charity am 13 November 2013, 16:15:49
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.
Titel: Antw:notify nur in bestimmten Abstand ausführen
Beitrag von: Charity am 05 Januar 2014, 18:01:01
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 !
Titel: Antw:notify nur in bestimmten Abstand ausführen
Beitrag von: Damian am 10 Januar 2014, 21:10:15
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