Lampe mit Fernbedienung dimmen

Begonnen von Olli.R, 18 Mai 2021, 20:07:16

Vorheriges Thema - Nächstes Thema

Olli.R

Hallo,

vielleicht klingt mein Problem etwas banal, aber ich versuche hier schon stundenlang eine Zigbee-Lampe über eine z-Wave Fernbedienung zu dimmen.
Problem ist, dass ich bei der Programmierung des DOIF den aktuellen Wert der Lampe (brightness) benötige um bei Tastendruck den Wert um z.B. 5 zu erhöhen.
Hier mal meine DOIF-DEF:

([ZWave_WALL_CONTROLLER_10:cSceneSet] == 1)
(set MQTT2_zigbee_0x00158d00031daed4 on)
DOELSEIF
([ZWave_WALL_CONTROLLER_10:cSceneSet] == 2)
(set MQTT2_zigbee_0x00158d00031daed4 off)
DOELSEIF
([ZWave_WALL_CONTROLLER_10:cSceneSet] == 3)
(set MQTT2_zigbee_0x00158d00031daed4 brightness ([MQTT2_zigbee_0x00158d00031daed4:brightness] + 5))


Das DOIF funktioniert soweit, die cmds werden bei Tastendruck auf der Fernbedienung (ZWave_WALL_CONTROLLER_10) richtig ausgewertet. Also auf 1 geht die Lampe an auf 2 geht die Lampe aus.
Nun müsste beim Drücken von 3 zu brightness 5 addiert, und in Summe gesetzt werden.
Ähnlich danach natürlich auch zum runterdimmen...

Leider habe ich schon viel recherchiert, habe aber nichts in der Art gefunden. Kann jemand helfen?

TomLee

#1
Schau dir die Funktionen minNum() und maxNum() an.

Mit Perl sähe das so aus um 5 zu addieren, das musst halt auf die DOIF-Syntax ändern.

Für die Kommandozeile, zum nachvollziehen was die Funktion macht:
{minNum(ReadingsNum('MQTT2_zigbee_0x00158d00031daed4','brightness','0')+5,255)}

Gruß

Thomas

Olli.R

Hallo,

danke für deine Antwort, leider kann ich zu der Funktion nichts finden. Das wäre ja dann wohl Perl. Da kenne ich mich gar nicht aus und benutze in Fhem bisher kein Perl. Ich konnte im Netz zu miNum in Perl nichts finden, da habe ich nur minimum gefunden.
@TomLee: Dein geposteter Code hat leider nicht funktioniert.

Vielleicht kennt ja noch jemand einen anderen Weg mit einer Taste eine Wert hochzuzählen? Ich könnte ja den Wert immer in einem Dummy speichern und der wird dann höher oder niedriger gezählt. Hätte auch den Voreteil den letzten wert darin zu speichern und wieder aufrufen zu können.

Gruß Olli

TomLee

#3
Sicher dass das Beispiel, in der Kommandozeile ausgeführt,  nicht den aktuell eingestellten brightness-Wert +5 zurückgibt,  kann ich mir irgendwie nicht vorstellen ?

Ich hab mich mal an einem Beispiel für DOIF versucht, weiß aber nicht ob das so korrekt umgesetzt ist, es klappt auf jedenfall wie ich es mir vorgestellt habe.

defmod di_test DOIF ($SELF eq "on") (set MQTT2_WLED_TV brightness {(minNum(ReadingsNum('MQTT2_WLED_TV','brightness','255')+5,255))} )\
DOELSEIF\
($SELF eq "off") (set MQTT2_WLED_TV brightness {(maxNum(ReadingsNum('MQTT2_WLED_TV','brightness','0')-5,0))})
attr di_test cmdState on|off
attr di_test do always
attr di_test room Test
attr di_test setList on off

TomLee

Hab die DEF, die du oben gezeigt hast, einfach mal wie ich mir das vorstelle das es klappen sollte ergänzt :

([ZWave_WALL_CONTROLLER_10:cSceneSet] == 1)
(set MQTT2_zigbee_0x00158d00031daed4 on)
DOELSEIF
([ZWave_WALL_CONTROLLER_10:cSceneSet] == 2)
(set MQTT2_zigbee_0x00158d00031daed4 off)
DOELSEIF
([ZWave_WALL_CONTROLLER_10:cSceneSet] == 3)
(set MQTT2_zigbee_0x00158d00031daed4 brightness {(minNum(ReadingsNum('MQTT2_zigbee_0x00158d00031daed4','brightness','0')+5,255))})
DOELSEIF
([ZWave_WALL_CONTROLLER_10:cSceneSet] == 4)
(set MQTT2_zigbee_0x00158d00031daed4 brightness {(maxNum(ReadingsNum('MQTT2_zigbee_0x00158d00031daed4','brightness','0')-5,0))})