Hallo zusammen,
ich möchte bei meinem Heizkörperthermostat (HM-CC-RT-DN) eine SMS-Benachrichtigung erhalten, sobald die gemessene Temperatur (measured-temp) über 25° steigt.
Folgenede Versuche sind leider gescheitert:
define WZTempDummy dummy
attr WZTempDummy event-on-change-reading state
define WZTemp notify WZ_Heizung_Clima:T.* { if(ReadingsVal("WZ_Heizung_Clima","T","") > 25.0) { fhem("set WZTempDummy zuwarm");;}}
define WZTempAlert notify WZTempDummy:zuwarm {system ('sudo /opt/fhem/pushbullet.sh&');;}
oder :
define WZTempDummy dummy
attr WZTempDummy event-on-change-reading measured-temp
define WZTemp notify WZ_Heizung_Clima:measured-temp.* { if(ReadingsVal("WZ_Heizung_Clima","measured-temp","") > 25.0) { fhem("set WZTempDummy zuwarm");;}}
define WZTempAlert notify WZTempDummy:zuwarm {system ('sudo /opt/fhem/pushbullet.sh&');;}
Kann mir jemand helfen, vielen Dank im Voraus !
Gruß
sam
Wird das notify getriggert? Wenn ja, wird die if Bedingung durchlaufen? Gibt es eine Fehlermeldung im fhem-log, wenn das notify getriggert wird?
Ja notify wird getriggert und obwohl ich mehrmals in die Logfile reingeschaut habe, habe diese Zeile übersehen :
PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 872) line 1.
Gruß
sam
Versuch es mit gt statt >
Jetzt gibt es keine Fehlermeldung mehr, aber auch keine Benachrichtigung, das Skript pushbullet.sh funktioniert ...
Gruß
Wird die if Bedingung durchlaufen?
Nein, ich glaube nicht, in der Logfile gibt es keinen Hinweis darauf !
Gruß
sam
Es sieht so aus, als hätte dein Device WZ_Heizung_Clima kein Reading T. Und wenn du einen numerischen Wert auswerten möchtest, macht es zum einen Sinn, ReadingsNum und wenn ReadingsVal, dann als Fallback-Wert keinen String zu verwenden.
Zitat von: marvin78 am 29 November 2015, 12:06:55
ReadingsNum
Definitiv besser, hatte ich nicht dran gedacht.
Mit ReadingsNum funktioniert die if-Anweisung auch nich, falls der Syntax mit ReadingsNum stimmt :)
define WZTempDummy dummy
attr WZTempDummy event-on-change-reading state
define WZTemp notify WZ_Heizung_Clima:T.* { if(ReadingsNum("WZ_Heizung_Clima","T","") gt 20.0) { fhem("set WZTempDummy zuwarm");;}}
define WZTempAlert notify WZTempDummy:zuwarm {system ('sudo /opt/fhem/pushbullet.sh&');;}
Bei WZ_Heizung_Clima unter Readings steht z.B. :
state T: 24 desired: 22.0 valve: 0
measured-temp 24.0
Wenn ReadingsNum, dann auch wieder ">" statt "gt". Versuch auch besser auf measured-temp zu triggern als auf T, was vermutlich eher reading "state" als "T" ist. Mit Log oder Log3 kannst Du das auch selbst gut debuggen.
Leider keine Änderung :
define WZTempDummy dummy
attr WZTempDummy event-on-change-reading state
define WZTemp notify WZ_Heizung_Clima:measured-temp.* { if(ReadingsNum("WZ_Heizung_Clima","measured-temp","") > 20.0) { fhem("set WZTempDummy zuwarm");;}}
define WZTempAlert notify WZTempDummy:zuwarm {system ('sudo /opt/fhem/pushbullet.sh&');;}
In der Log 5 steht :
Triggering WZ_Heizung_Clima (9 changes)
Notify loop for WZ_Heizung_Clima ValvePosition: 0
Triggering WZTemp
WZTemp exec { if(ReadingsNum("WZ_Heizung_Clima","measured-temp","") > 20.0) { fhem("set WZTempDummy zuwarm");;}}
Cmd: >{ if(ReadingsNum("WZ_Heizung_Clima","measured-temp","") > 20.0) { fhem("set WZTempDummy zuwarm");}}<
Cmd: >set WZTempDummy zuwarm<
dummy set WZTempDummy zuwarm
dummy set WZTempDummy zuwarm
das notify funktioniert doch.
vielleicht fehlt deinem dummy das attr setList.
Verständnis-Frage:
Warum mit einem notify einen Dummy setzen und mit einem notify auf diesen Dummy dann eine Aktion ausführen?
Kann man nicht direkt measured-temp: 25.0 als Bedingung nehmen und dann die Nachricht schicken?
@Hollo
Es war sehr einfach ohne dummy zu lösen :)
Gruß
sam