[gelöst]RGB Werte berechnen und nutzen

Begonnen von matze1999, 17 Juli 2022, 16:57:27

Vorheriges Thema - Nächstes Thema

matze1999

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

Otto123

#1
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

matze1999

#2
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

Otto123

#3
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 )}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

matze1999

#4
hab gerade mitbekommen, das es manchmal geht (?), aber dann springt es wieder, keine Ahnung.

matze1999

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

matze1999


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 )}

matze1999

#8
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

Otto123

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?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

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 ?

alanblack

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
FHEM 6.0 auf raspi3&ODROID XU4 mit HMLAN und HM-MOD-RPI-PCB, LaCrosse via JeeLink, COC868 und CUL433, Xiaomi Aqara+div. Zigbee via deCONZ, Dooya via SIGNALDuino, ZWave mit Danalock
Jeder Witz kann ein Einzeiler sein mit genügend Semikolons

matze1999

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

Otto123

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? :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)