FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: m8ichael am 25 Oktober 2016, 18:29:34

Titel: Schaltung eines Dimmers per Dummy
Beitrag von: m8ichael am 25 Oktober 2016, 18:29:34
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
Titel: Antw:Schaltung eines Dimmers per Dummy
Beitrag von: m8ichael am 25 Oktober 2016, 19:19:35
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.   :)