Hauptmenü

[gelöst] if Anweisung

Begonnen von T3mplate, 16 Mai 2016, 08:06:09

Vorheriges Thema - Nächstes Thema

T3mplate

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?

CoolTux

#1

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

T3mplate

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.

CoolTux

#3
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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

T3mplate

#4
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)

CoolTux


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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

T3mplate

Danke. Das werde ich bei der nächsten Gelegenheit so umsetzen.