Schaltung eines Dimmers per Dummy

Begonnen von m8ichael, 25 Oktober 2016, 18:29:34

Vorheriges Thema - Nächstes Thema

m8ichael

Hallo,

ich nutze einen Z-Wave-Dimmer, der grundsätzlich per Dummy angesteuert werden soll ("wenn sich der Wert des Dummies ändert, dann schalte den Aktor entsprechend"). Gleichzeitig soll jedoch auch ein manueller Schaltvorgang den Dummy entsprechend einstellen. Als dritte Möglichkeit gibt es noch "spezielle" Schaltvorgänge per Perl-Code direkt am Aktor, um bspw. die Dim-Dauer zu verlängern (spezieller Z-Wave-Befehl dimWithDuration). Da ich diese drei Möglichkeiten nicht per notify abgebildet bekomme (ohne, dass sich diese gegenseitig "behaken"), habe ich hier im Forum den Tipp bekommen, hierfür ein DOIF zu erstellen. Ich habe hierzu das folgende DOIF erstellt:


(["og.sz.Hauptbeleuchtung:reportedState:.*"])
(({
if (Value("og.sz.Hauptbeleuchtung") =~ /dim\s(.*)/) {
fhem("setreading dm.og.sz.Hauptbeleuchtung state $1");;
}
elsif (Value("og.sz.Hauptbeleuchtung") =~ /dimWithDuration\s(.*?)\s/) {
fhem("setreading dm.og.sz.Hauptbeleuchtung state $1");;
}
elsif (Value("og.sz.Hauptbeleuchtung") eq "on") {
fhem("setreading dm.og.sz.Hauptbeleuchtung state 99");;
}
elsif (Value("og.sz.Hauptbeleuchtung") eq "off"){
fhem("setreading dm.og.sz.Hauptbeleuchtung state 0");;
}
}))
DOELSEIF (["dm.og.sz.Hauptbeleuchtung"])
(set og.sz.Hauptbeleuchtung dim $EVENT)


Der untere Teil "DOELSEIF" zündet bei einer manuellen Änderung des Dummy-Wertes auch, allerdings mit der Wirkung, dass anschließend auch noch der obere Teil durchlaufen wird - das soll möglichst vermieden werden. Der obere Teil wird jedoch bei manueller Betätigung des Dimmers nicht ausgelöst (bisher hat die Abfrage auf og.sz.Hauptbeleuchtung:reportedState:.* per notify funktioniert. Wo ist mein Denkfehler?

Viele Grüße

Michael

m8ichael

Sooo,

habe es jetzt hinbekommen:


(["og.sz.Hauptbeleuchtung:reportedState:.*"])
(({
if (Value("og.sz.Hauptbeleuchtung") =~ /dim\s(.*)/) {
fhem("setreading dm.og.sz.Hauptbeleuchtung state $1");;
}
elsif (Value("og.sz.Hauptbeleuchtung") =~ /dimWithDuration\s(.*?)\s/) {
fhem("setreading dm.og.sz.Hauptbeleuchtung state $1");;
}
elsif (Value("og.sz.Hauptbeleuchtung") eq "on") {
fhem("setreading dm.og.sz.Hauptbeleuchtung state 99");;
}
elsif (Value("og.sz.Hauptbeleuchtung") eq "off"){
fhem("setreading dm.og.sz.Hauptbeleuchtung state 0");;
}
fhem("set di.Schlafzimmer initialize");;
}))
DOELSEIF (["dm.og.sz.Hauptbeleuchtung:.*"])
(set og.sz.Hauptbeleuchtung dim $EVENT)


(wobei ich als Attribut noch "do resetwait" gesetzt habe.   :)