Hallo, ich wollte mich von fhem benachrichtigen lassen, wenn ein Thermostat eine ungewöhnliche Temperatur (idR zu niedrig) misst. Dafür habe ich Folgendes notify (mit einer Bedingung, die hier überall erfüllt ist, zum Test) erstellt:
.*:measured-temp {
if ( "$EVTPART1" gt "18") {
fhem ("set Pushbullet message Temperaturwarnung $NAME | Temperatur im $NAME beträgt $EVTPART1")
}
}
Der Event-Monitor zeigt auch viele passende Einträge à la
2015-01-24 09:45:34 CUL_HM Hzg_Gaestebad measured-temp: 21.2
2015-01-24 09:45:34 CUL_HM Hzg_Gaestebad_Clima measured-temp: 21.2
2015-01-24 09:46:15 CUL_HM Hzg_Schlafzimmer measured-temp: 22.7
2015-01-24 09:46:29 CUL_HM Hzg_WC measured-temp: 22.3
Aber der notify scheint nicht anzuspringen. Was mache ich falsch?
Reine Spekulation, aber ist ein Stringvergleich hier richtig?
Moin,
1) $EVTPART ist eine Variable, und kein String, daher gehört er nicht in Klammern
2) Wie schon gesagt, ist ein mathematischer Vergleich sinnvoller
also:
if ($EVTPART1 > 18)
Um die die Klammern zu sparen, kannst du auch
fhem ("set Pushbullet message Temperaturwarnung $NAME | Temperatur im $NAME beträgt $EVTPART1") if ($EVTPART1 >18);
schreiben.
lg, Ici
Danke, habe den Vergleich umgestellt. Es passiert aber nichts.
Ich habe mal die zusätzlichen Klammern gelassen und einen Log-Eintrag hinzugenommen:
.*:measured-temp {
{ Log 1, ("notify aufgerufen, name $NAME, evtpart1 $EVTPART1")}
if ($EVTPART1 >18) {
fhem ("set Pushbullet message Temperaturwarnung $NAME | Temperatur im $NAME beträgt $EVTPART1")
}
}
Irgendwas scheint an der Definition am Anfang des Notify nicht zu stimmen.
Problem: Es kommt auch nix im Log an...?! Events kommen weiter:
2015-01-24 11:24:41 CUL_HM Hzg_Gaestebad measured-temp: 21.6
2015-01-24 11:24:41 CUL_HM Hzg_Gaestebad_Clima measured-temp: 21.6
2015-01-24 11:24:41 CUL_HM Hzg_Gaestebad_Weather measured-temp: 21.6
2015-01-24 11:24:46 CUL_HM Hzg_Eingang measured-temp: 21.7
2015-01-24 11:24:46 CUL_HM Hzg_Eingang_Clima measured-temp: 21.7
2015-01-24 11:24:46 CUL_HM Hzg_Eingang_Weather measured-temp: 21.7
2015-01-24 11:25:37 CUL_HM Hzg_Wohnzimmer1 measured-temp: 22.7
2015-01-24 11:25:37 CUL_HM Hzg_Wohnzimmer1_Clima measured-temp: 22.7
2015-01-24 11:25:37 CUL_HM Hzg_Wohnzimmer1_Weather measured-temp: 22.7
Spontan hätte ich
.*:measured-temp.*
anstelle von
.*:measured-temp
gemacht. So mache ich meine Notifies zumindest.
VG!
Boris
Guter Tipp, danke, mit .* dahinter funktioniert es. Was auch immer noch an Zeichen dahinter sein mag, solange es klappt, bin ich zufrieden. :)
IMHO wäre ein threshold hier besser als ein notify sonst kriegst du jedesmal eine Nachricht wenn die Temperatur sich oberhalb von 18°C befindet. Was man zwar mit einem Event on change reading etwas eindämmen könnte. Aber ein Threshold ist hier eleganter.
THRESHOLD habe ich vorher probiert. Da ist das Problem, dass er nicht mit .*:measured-temp[.*] klarkommt, sondern man die devices jeweils einzeln anlegen muss. Das geht zwar, ist aber 'ne Menge Tipparbeit (auch wenn sie zugegebenermaßen nur einmal je device durchgeführt werden müsste).
Die 18 Grad war natürlich nur der Testcase, ob es überhaupt funktioniert.
Ich muss nochmal schauen, wo ich was über Variablen und deren Gültigkeit (bleibt der Inhalt über mehrere Aufrufe eines Notifys erhalten, lassen sich Variablen definieren, die über mehrere Notifys hinweg funktionieren, etc.) finde. Damit ließen sich sicher auch nette Lösungen basteln.