Hallo,
ich versuche mit Hilfe eines eventMap einen übergebenen Wert zu prüfen, zu ändern und anschließend zu setzen. Allerdings scheitere ich am verändern des Wertes.
Was habe ich vor - Bei meiner Zipato Bulb 2 (Zwave) kann über "wcrgb" die Lichtfarbe gesteuert werden. Warm und Kalt-Weiß werden über zwei getrennte Werte definiert. Im FTUI möchte ich den Wechsel zwischen kalt und warm-Weiß über einen Slider abbilden und nutze dafür den Wertebereich -250 bis 250.
Mir ist es gelungen ein eventMap zu erstellen, welche den Wert prüft und je nach positiv oder negativ damit Warm oder Kaltweiß setzt.
eventMap { usr=>{'c_temp(.*)'=>'".(($1 + 0) gt 0 ? "wcrgb$1 0 0 0 0" : "wcrgb 0$1 0 0 0")."' }}
Was nun natürlich nicht funktioniert ist, der Birne einen negativen Wert für kalt-Weiß (else block) zu übergeben. Das minus muss also weg - aber daran scheitere ich.
Mit Perl dürfte abs() genau das tun, aber ich bekomm es so nicht zum laufen. gleiches gilt für Ansätze mittels Regex
{ usr=>{'c_temp(.*)'=>'".(($1 + 0) gt 0 ? "wcrgb$1 0 0 0 0" : "wcrgb 0abs($1) 0 0 0")."' }}
Das ausgefallene und mehrzeilige Konstrukte funktionieren, habe ich hier (
https://forum.fhem.de/index.php/topic,88904.msg814161.html#msg814161) schon gesehen.
Allerdings gelingt es mir nicht die dortige Lösung für meinen Fall zu adaptieren
{ usr=>{'c_temp(.*)'=>'".(my $ww=0, my $cw=0; ($1 + 0) gt 0 ? ($ww=$1) : ($cw=abs($1))); "wcrgb $ww %cw 0 0 0"."' }}
Mehrzeiliger Perl-Code in userReadings funktionieren bei mir jedoch problemlos.
Was Perl angeht, kratze ich sowieso schon nur an der Oberfläche. Was alles angepasst/maskiert werden muss um es fhem "unter zu jubeln" übersteigt meinen Horizont...
Hab z.B. keine Ahnung warum der Code am Anfang und Ende einen Punkt ( '".(...)."' ) braucht - ohne funktionierts aber nicht.
hat jemand eine Idee wie der Code aussehen müsste oder ist eventMap für mein Vorhaben der falsche Ansatz?
Danke!
Marcus