Hallo,
ich hab eine Tradfri remote control und möchte an einem LED Band die RGB Werte durch Tastendruck um einen definierten Wert (z.B. #00000F) erhöhen oder verringern. Dazu habe ich folgendes notify angelegt, um den RGB Wert zu erhöhen:
defmod Lichtband.Farbe.up notify HUESensor55:5002 { my $currentVal = (ReadingsVal("HUEDevice14","rgb",0));; if (hex($currentVal) < 16777215) { fhem "set HUEDevice14 rgb " . (hex(hex($currentVal) + 15))}}
Soll bedeuten, wenn der RGB Wert kleiner als #FFFFFF ist soll er bei Tastendruck um F erhöht werden.
Das funktioniert soweit, wenn ich auf die Taste drücke ändert sich die Farbe, aber der RGB Wert wird nicht um "F" erhöht, sondern irgendwie anders.
Wo liegt mein Fehler?
matze1999
Hi,
Du willst doch am Ende wieder hex setzen? Mit hex(hex()) wird das nichts :)
Sie den letzten Satz https://perldoc.perl.org/functions/hex
Als Beispiel zum Test in der FHEM Kommandozeile
{my $num=15;; my $ret = sprintf "%0x",$num ;; return $ret}
Oder als FHEM Befehl in kurzer Form mit set magic:
set HUEDevice14 rgb {(sprintf "%0x",hex(ReadingsVal("HUEDevice14","rgb",0)) + 15 )}
Gruß Otto
Hallo,
das ist sicher richtig, aber ich hatte mir vorgestellt, dass man immer um "F" erhöhen kann, aber sicher habe ich da falsche Vorstellungen, mit den o.g. Vorschlag:
HUESensor55:5002 set HUEDevice14 rgb {(sprintf "%0x",hex(ReadingsVal("HUEDevice14","rgb",0)) + 15 )}
wird der RGB Wert allerdings um 200F2 kleiner und nicht ganz so wie ich es vor hatte:
2022-07-17 18:57:40 HUEDevice HUEDevice14 rgb: f87058
2022-07-17 18:57:47 HUEDevice HUEDevice14 rgb: f66f66
2022-07-17 18:57:51 HUEDevice HUEDevice14 rgb: f46e74
Ich hatte die Vorstellung, wenn ich zu F87058 F addiere kommt F87067 heraus.
Aber so kommen "hoch" und "runter" jetzt wenigstens die gleichen Werte und es springt nicht so wild durch die Farben.
matze1999
versteh ich nicht - folgendes Beispiel
{(sprintf "%0x",hex('2000') + 15 )}
ergibt 200f
und {(sprintf "%0x",hex('200f') + 15 )}
ergibt 201e
Aber ok, das geht nur bis ffff :) für große Zahlen braucht es mehr Stellen :)
{(sprintf "%06x",hex('200f') + 15 )}
hab gerade mitbekommen, das es manchmal geht (?), aber dann springt es wieder, keine Ahnung.
matze1999
siehe mein Edit ;)
Hallo, ja mit edit "6"
matze1999
hier mal das log:
2022-07-17 19:53:47 HUEDevice HUEDevice14 rgb: ed0000
2022-07-17 19:53:53 HUEDevice HUEDevice14 rgb: eb000f
2022-07-17 19:53:59 HUEDevice HUEDevice14 rgb: e6002d
2022-07-17 19:54:01 HUEDevice HUEDevice14 rgb: e4003b
2022-07-17 19:54:02 HUEDevice HUEDevice14 rgb: e20049
2022-07-17 19:54:04 HUEDevice HUEDevice14 rgb: e00057
ausgeführt mit:
defmod Lichtband.Farbe.up notify HUESensor55:5002 set HUEDevice14 rgb {(sprintf "%06x",hex(ReadingsVal("HUEDevice14","rgb",0)) + 15 )}
es wird noch verrückter:
Basis ED0000
gebe ich das in der Kommandozeile ein:
{(sprintf "%06x",hex(ReadingsVal("HUEDevice14","rgb",0)) + 15 )}
ist das Ergebnis: ED000F völlig korrekt, wie beabsichtigt
und jetzt mit dem notify ergibt sich:
2022-07-17 20:09:46 HUEDevice HUESensor55 5002
2022-07-17 20:09:46 HUEDevice HUEDevice14 rgb: eb000f
aber auch mit set HUEDevice14 rgb {(sprintf "%06x",hex(ReadingsVal("HUEDevice14","rgb",0)) + 15 )}
in der Kommandozeile
EB000F - verrückt?
matze1999
naja, liegt es ev. daran, dass es ja drei Werte sind? also 3 mal 0-255 in Hex? Man kann es nicht als eine hex Zahl verwenden? Die Lampe macht daraus etwas anderes?
Bin nicht wirklich dabei, bei Licht ist meine erste Reaktion immer => Abstand halten, ist zu hoch für dich.
Trotzdem ins Blaue gefragt, hilft hier die Routine hex2rgb evtl. weiter ? Also erstmal umrechnen und dann erst addieren ?
Mal eine Zwischenfrage: welchen Lichteffekt möchtest du denn mit <RGB>+=0Fx erreichen? Vielleicht gibt es ja eine "funktionierendere" Lösung.
Ansonsten können meiner Erfahrung nach keine (wenige?) HUE-RGB-Lights die 16777216 verschiedenen Farben abbilden. Wenn du die Farben per Hex-Wert setzt, sucht der Treiber in der Lampe den am nächsten passenden aus, setzt den und melden diesen an die Bridge zurück. "Du willst mehr Blau? OK, dann mache ich aber auch weniger Rot."
Schlimmstenfalls kannst Du die RGB-Hex-Werte separat laufen lassen - also in einer eigenen Variablen -, einfach in die Lampe scheiben und die Rückmeldung ignorieren.
Grüße
Zitat von: alanblack am 17 Juli 2022, 21:49:15
Mal eine Zwischenfrage: welchen Lichteffekt möchtest du denn mit <RGB>+=0Fx erreichen? Vielleicht gibt es ja eine "funktionierendere" Lösung.
ich möchte eigentlich nur auf Tastendruck durch die Lichtfarben "wandern", hoch und runter, also rgb um einen bestimmten Wert erhöhen und verringern.
matze1999
ich teile auch die Theorie von Alanblack :) und die Frage ist nun macht es denn was Du willst, obwohl die Werte komisch springen? Dann wäre ja alles gut? :)
Zitat von: alanblack am 17 Juli 2022, 21:49:15
Ansonsten können meiner Erfahrung nach keine (wenige?) HUE-RGB-Lights die 16777216 verschiedenen Farben abbilden. Wenn du die Farben per Hex-Wert setzt, sucht der Treiber in der Lampe den am nächsten passenden aus, setzt den und melden diesen an die Bridge zurück. "Du willst mehr Blau? OK, dann mache ich aber auch weniger Rot."
Kann ich bestätigen.
Ich habe auch lang rumgebastelt, bis ich RGB-Werte gefunden habe (über versch. Lampen) die gleich aussehen, weil dieselben RGB-Werte nicht von allen Lampen genommen wurden.
Es gibt auch versch. Farbmodelle, evtl. können oder nehmen nicht alle Lampen RGB sondern sind (nur) per eines der anderen Farbmodelle steuerbar:
https://wiki.fhem.de/wiki/Hue
https://wiki.fhem.de/wiki/Hue#Grundlagen_-_Farbmodelle
https://wiki.fhem.de/wiki/Color
Gruß, Joachim
Hallo,
eigentlich ist das Thema für mich gelöst, da ich auf Tastendruck andere Farben einstellen kann.
Vielen Dank für eure Hilfe, auf alle Fälle wieder was gelernt (hex<->dec/sprintf).
matze1999