Ich habe insgesamt 3 Stunden mit Lesen und Trial and Error versucht mein Problem zu lösen.
Da ich aber verzweifel, versuche ich es nun so:
Ich habe einen Fibaro WallPlug 102. Diesen möchte ich nachts ausschalten, aber nur wenn er auch aus ist.
Ich weiß das ich diesen auch pauschal ausmachen könnte, aber ich möchte in der gleichen Anweisung eine Pushnotification absetzen "Achtung in 5 Minuten wird der Fernseher ausgeschaltet". Diese soll natürlich nur kommen, wenn dieser nicht bereits aus ist.
Weil ich aber überhaupt erst einmal das Grundszenario schaffen wollte, ist das in meinem Code noch nicht drinnen.
Findet jemand meinen Fehler?
define test6 at *01:00:00 { if ( ZWave_WallPlug1:on ) { ( fhem { set lampe1 off } ) } }
Um nicht immer auf die Uhrzeiten zu warten und diese umzustellen, habe ich es so probiert. Aber auch das ging nicht:
define test6 notify schalter1:off { if ( ZWave_WallPlug1:off ) { ( fhem { set lampe1 off } ) } }
So habe ich das mit der Pushnachricht gelöst, was dann in die Zeile integriert werden soll:
define ZWave_WallPlug1_off2 at *23:16:00 set push msg 'Haus' 'Der Fernseher wird in 5 Minuten ausgeschaltet' ;; sleep 300 ;; set lampe1 off
attr ZWave_WallPlug1_off2 room Wave
Ich bin auch gerne für charmantere Lösungen offen :D
Kann man den Status von Geräten (WallPlug) überhaupt so mit ":on" abfragen wie bei Schaltern?
define test6 at *01:00:00 { fhem "set lampe1 off" if( Value("lampe1") eq "on"); }
Bei nur einem set Befehl und einer Abfrage des selben Devices welches geschalten werden soll, kannst Du auch mit FILTER arbeiten.
define test6 at *01:00:00 set lampe1:FILTER=STATE!=off off
Zitat von: CoolTux am 16 Mai 2016, 08:23:24
define test6 at *01:00:00 { fhem "set lampe1 off" if( lampe1 eq "on"); }
Bei nur einem set Befehl und einer Abfrage des selben Devices welches geschalten werden soll, kannst Du auch mit FILTER arbeiten.
define test6 at *01:00:00 set lampe1:FILTER=STATE!=off off
Auch nach langem probieren habe ich es damit nicht zum laufen gebracht. Weder mit deinem Beispiel (fhem hat auch das letze ";" gestört), noch mit meinen weiteren Versuchen.
Damit ich schnell versuchen kann, habe ich mal ein Notify daraus gemacht:
define test6 notify schalter1:off { fhem "set lampe1 off" if( ZWave_WallPlug1:STATE eq "off")}
define test6 notify schalter1:off { fhem "set lampe1 off" if( "ZWave_WallPlug1:STATE" eq "off")}
define test6 notify schalter1:off { fhem "set lampe1 off" if( ZWave_WallPlug1:off)}
define test6 notify schalter1:off { fhem "set lampe1 off" if( "ZWave_WallPlug1:off")}
Alles funktionierte nicht. Hat noch jemand eine Idee was ich falsch mache?
Kann ich eigentlich irgendwie "debuggen" was da passiert? Im Log und im Event Monitor finde ich nichts dazu.
Sorry, war heute nicht mein Morgen
define test6 at *01:00:00 { fhem "set lampe1 off" if( Value("lampe1") eq "on"); }
Nähere Informationen zu Value oder ReadingsVal findest Du im Wiki oder im Einsteiger PDF
Nach weiterem probieren und suchen bin ich auf DOIF gestoßen.
define test64 DOIF ([schalter1] eq "off" and [ZWave_WallPlug1] eq "on") (set push msg 'Haus' 'Der Fernseher wird in 1 Minute ausgeschaltet';;sleep 60;; set ZWave_WallPlug1 off)
Damit funktioniert es.
Ich bin trotzdem noch immer auf der Suche nach meinem Fehler.
In der richtigen Form verwende ich es jetzt so:
define ZWave_WallPlug1_off DOIF ([01:00] and [ZWave_WallPlug1] eq "on") (set push msg 'Haus' 'Der Fernseher wird in 5 Minute ausgeschaltet';;sleep 300;; set ZWave_WallPlug1 off)
define test6 at *01:00:00 { fhem "set push msg 'Haus' 'Der Fernseher wird in 5 Minute ausgeschaltet'; sleep 300; set ZWave_WallPlug1 off" if( Value("ZWave_WallPlug1") eq "on"); }
So sollte es dann gehen.
Bei Deinem DOIF kannst Du auch das sleep weg lassen. Schau Dir dafür mal das Attribut wait an.
Danke. Das werde ich bei der nächsten Gelegenheit so umsetzen.