Hallo allerseits,
Ich weiß nicht, ob ich das Konzept von notify noch nicht verstanden habe, aber irgendwie habe ich Probleme damit.
Ich nutze notify z.B. schon erfolgreich für das Mappen von Tastern auf Rolläden, kein Problem.
Nun möchte ich das aber gerne auch für andere Sachen nutzen, wie zum Beispiel für eine Meldung, wenn meine Boilertemperatur zu tief sinkt.
Dafür brauche ich dann - anders als bisher - auch einen Wert, die Temperatur.
Zum Testen hab ich also erstmal folgendes notify ausprobiert:
define testNotify notify boiler_temp:temperature {Log 3, %;;}
Keine Logeinträge.
Gehe ich jedoch den Umweg und schreibe stattdessen
define testNotify notify boiler_temp:temperature {\
my $temp=ReadingsVal("boiler_temp","temperature","999.9");;\
Log (3, $temp);;\
}
dann bekomme ich die Einträge.
Daher die Vermutung, dass an boiler_temp:temperature vermutlich etwas falsch ist. Komme aber nicht drauf, was das ist.
Gruß,
Julian
Darauf bin ich eben auch gestossen:
(aus der Webanzeige)
WetterTest2:
DEF gdsBrk {myWetter();} geht: ergibt 12 Aufrufe bei "get gdsBrk conditions Frankfurt/M-Flh."
2014.02.23 10:19:48 5: Triggering Wetter_Test
2014.02.23 10:19:48 4: Wetter_Test exec set Wetterdummy gdsBrk g_weather: stark bewölkt
2014.02.23 10:19:48 5: Triggering Wetter_Test
2014.02.23 10:19:48 4: Wetter_Test exec set Wetterdummy gdsBrk g_pressure-nn: 1024.2
Wetter_Test:
DEF gdsBrk:* set Wetterdummy @ % geht!
DEF gdsBrk:*_w* set Wetterdummy @ % geht nicht: liefert keine Ereignisse im "Event monitor"
wobei gdsBrk vom Typ GDS ist.
Wie kann ich nur auf das Ereigniss: "gdsBrk c_weather" reagieren?
Ich habe das Problem folgendermassen umgangen:
DEF gdsBrk {myWetterTest("%");}
Dabei analysiere ich die Ereignisse in der Unterroutine.
Joachim
@gubbl
Ja, den Eindruck könnte man bekommen 8)
Aber das macht nix, jeder hat mal angefangen.
Was du brauchst, ist eine if Konstruktion in deinem Notify.
Logfiles sind i.d.R. (außer für Forensiker und SVG Plots) Vergangenheitsbewältigung.
Dein Notify sollte etwa den Aufbau haben:
Reagieren wenn sich die Temperatur geändert hat, dann prüfen ob ein Sollwert unterschritten wird, und dann, wenn er unterschritten ist, etwas tun.
@gubbl
Versuch mal:
{Log 3, "%";;}
Besser aber:
{Log 3, $EVENT;;}
Gruß
Hans
???
Ich weiß immer noch nicht, was das mit den Logfiles soll. Klärt mich mal wer auf?
Ein
list boiler_temp
erschiene mir hilfreicher. Dann könnte man nämlich prüfen, ob das Reading stimmt.
Zitat von: Rince am 23 Februar 2014, 13:43:45
Ich weiß immer noch nicht, was das mit den Logfiles soll.
Dient wohl nur zur Syntaxprüfung. Mach' ich als Anfänger auch ständig.
Gruß
Hans
Nun ja.
Wenn ihr dann die Logeinträge habt, können wir mit dem list weitermachen und der benötigten if Konstruktion. ::)
Hallo,
Wie Hans richtig vermutet hat, nehme ich den Log-Befehl einfach immer nur, um zu prüfen ob ein notify ausgelöst wird.
Da bei
define testNotify notify boiler_temp:temperature {Log 3, %;;}
und auch bei
define testNotify notify boiler_temp:temperature {Log 3, "hallo";;}
keine Logmeldung auftaucht, bei
define testNotify notify boiler_temp {Log 3, "hallo";;}
aber schon, kann es eigentlich nur daran liegen, dass kein notify für boiler_temp:temperature ausgelöst wird.
Die spätere Anwendung wäre etwa so:
define testNotify notify boiler_temp:temperature {\
if(%<45){\
<sende Email>
}\
}
Gruß, Julian
Wenn du dann mal Zeit hast das obige list auszuführen, könnten wir uns um den spannenden Teil vom Notify kümmern.
Da ich leider immer nur am Wochenende daheim beim fhem bin, schreib ich erst jetzt zurueck.
Das Problem war ein viel simpleres, durch einfaches Ausprobieren gefunden:
Statt
define checkBoiler notify boiler_temp:temperature [...]
haette ich einfach nur
define checkBoiler notify boiler_temp:temperature.* [...]
schreiben muessen.
Dumm gelaufen, trotzdem danke fuer die Antworten!
Gruss,
Julian