eventMap? Set-Parameter von RGB nach HSV "Ummappen"

Begonnen von kuwagei, 11 Juni 2024, 15:55:40

Vorheriges Thema - Nächstes Thema

kuwagei

Da meine FBDECT-Lampen keinen Wert für rgb ausgeben, habe ich mir diesen als userReading definiert:
attr Lichterkette userReadings rgb {Color::hsv2hex(ReadingsNum($name,"hue",0)/360, ReadingsNum($name,"saturation",0)/255, ReadingsNum($name,"level",0)/255)}
Nun möchte ich die Lampenfarbe auch über den Hex RGB-Wert einstellen können und bräuchte einen entsprechenden Set-Befehl. Aus einem RGB-Wert per eventMap die 3 Eingaben für hue, saturation und dim (den level gibt es nur als Reading) zu machen überfordert jedoch meine derzeitigen FHEM- und Perl-Fähigkeiten.

Könnte mir da jemand helfen?

Fritz: Box5590, Rep.1200AX+2400, SmartGW, 2xPL546E, 3xDECT200, 3x302, 3x440, RolloTronDECT,
Raspberrymatic-, FHEM-, deConz-Docker auf Raspi3B, HB-Docker auf Tinkerboard, div. Zigbee-Geräte
3xHM-LC-Sw1-FM,3xHM-LC-Sw1PBU-FM,3xHM-LC-Sw2-FM,2xHM-CC-RT-DN, HM-LC-Sw1PBU-FM,HM-Sec-...
DUOFERN+9x Rollotron

kuwagei

Zitat von: kuwagei am 11 Juni 2024, 15:55:40Nun möchte ich die Lampenfarbe auch über den Hex RGB-Wert einstellen können und bräuchte einen entsprechenden Set-Befehl. Aus einem RGB-Wert per eventMap die 3 Eingaben für hue, saturation und dim (den level gibt es nur als Reading) zu machen überfordert jedoch meine derzeitigen FHEM- und Perl-Fähigkeiten.

Könnte mir da jemand helfen?
Ich habe es folgendermaßen versucht:

eventMap /rgb .*:{my@hsv=Color::hex2hsv($1);;fhem ("set $name hue "."$hsv*255");;fhem ("set $name saturation "."$hsv[1]*255");;fhem ("set $name dim "."$hsv[2]*100")}/

aber das führt zu "Unknown Argument rgb ...". Ich weiß auch nicht, wie ich den aus dem Colorpicker stammenden RGB-Hexadezimalwert in das Mapping hineinbekomme, ob das mit $1 richtig ist.

Hier die komplette Definition des Gerätes:
defmod Lichterkette FBDECT fb1:Z8418260000CAAED003 HANFUNUnit,switch,dimmer,colorswitch,lightSwitch
attr Lichterkette devStateIcon {Color::devStateIcon($name,"rgb","rgb","state")}
attr Lichterkette eventMap /rgb .*:{my@hsv=Color::hex2hsv($2);;;;fhem ("set $name hue "."$hsv[0]*255");;;;fhem ("set $name saturation "."$hsv[1]*255");;;;fhem ("set $name dim "."$hsv[2]*100")}
attr Lichterkette fp_Haus 303,2,2,Lichterkette,
attr Lichterkette group Beleuchtung
attr Lichterkette room F3->Dachzimmer,SYS->FBDECT
attr Lichterkette userReadings rgb {Color::hsv2hex(ReadingsNum($name,"hue",0)/360, ReadingsNum($name,"saturation",0)/255, ReadingsNum($name,"level",0)/255)},\
hsv {ReadingsVal($name,'hue','0').','.ReadingsVal($name,'saturation','255').','.ReadingsVal($name,'dim','100')}
attr Lichterkette webCmd rgb
attr Lichterkette widgetOverride rgb:colorpicker,rgb

Fritz: Box5590, Rep.1200AX+2400, SmartGW, 2xPL546E, 3xDECT200, 3x302, 3x440, RolloTronDECT,
Raspberrymatic-, FHEM-, deConz-Docker auf Raspi3B, HB-Docker auf Tinkerboard, div. Zigbee-Geräte
3xHM-LC-Sw1-FM,3xHM-LC-Sw1PBU-FM,3xHM-LC-Sw2-FM,2xHM-CC-RT-DN, HM-LC-Sw1PBU-FM,HM-Sec-...
DUOFERN+9x Rollotron

betateilchen

Das Modul Color.pm stellt doch jede Menge Hilfsmittel zur Verfügung.
Das Modul selbst scheinst Du ja zu kennen, denn Color::devStateIcon() verwendest Du ja schon.
Seit drei Tagen frage ich mich, warum Dir die darin enthaltene Funktion rgb2hsv() nicht weiterhelfen sollte?

Es wäre in den Anfängerfragen aber auch die falsche Stelle für Fragen zu Color.pm.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

kuwagei

Zitat von: betateilchen am 14 Juni 2024, 12:34:00Es wäre in den Anfängerfragen aber auch die falsche Stelle für Fragen zu Color.pm.
Zitat von: betateilchen am 14 Juni 2024, 12:34:00Das Modul Color.pm stellt doch jede Menge Hilfsmittel zur Verfügung.
Das Modul selbst scheinst Du ja zu kennen, denn Color::devStateIcon() verwendest Du ja schon.
Seit drei Tagen frage ich mich, warum Dir die darin enthaltene Funktion rgb2hsv() nicht weiterhelfen sollte?

Es wäre in den Anfängerfragen aber auch die falsche Stelle für Fragen zu Color.pm.
Ja, natürlich ich verwende Color::hsv2hex, um das Reading rgb zu erzeugen, weil ich den rgb-Wert hexadezimal und nicht als 3 Zahlenwerte benötige und das funktioniert ja auch. Umgekehrt würde ich zum Setzen des rgb-Wertes hex2hsv verwenden, da wird intern im Modul Color.pm ja als Zwischenschritt hex2rgb und dann rgb2hsv aufgerufen. Nur weiß ich nicht, wie ich das fehlende Attribut erzeugen kann.
Das FBDECT-Device erkennt im Gegensatz zum HUEDevice kein Setting für rgb.

"set <devicename> rgb FEA528", was bei den HUE-Birnen funktioniert, führt daher bei den FBDECT-Lampen zu  "Unknown argument rgb, choose one of color colortemperature dim hue off on raw satindex saturation toggle on-till-overnight on-for-timer off-for-timer intervals blink off-till-overnight on-till off-till"

Wie kann ich das umgehen, per widgetOverride oder eventMap oder Kombination aus beiden?

Insbesondere komme ich mit der Syntax nicht klar, wie man ein Kommando "set <devicename> rgb <HEX-Wert> in die 3 Kommandos "set <devicename> hue <Zahlenwert>, set <devicename> saturation <Zahlenwert>, set <devicename> dim <Zahlenwert>" 
umdefinieren kann, denn auch ein hsv-Attribut gibt es nicht bei den FBDECT-Settings.
Fritz: Box5590, Rep.1200AX+2400, SmartGW, 2xPL546E, 3xDECT200, 3x302, 3x440, RolloTronDECT,
Raspberrymatic-, FHEM-, deConz-Docker auf Raspi3B, HB-Docker auf Tinkerboard, div. Zigbee-Geräte
3xHM-LC-Sw1-FM,3xHM-LC-Sw1PBU-FM,3xHM-LC-Sw2-FM,2xHM-CC-RT-DN, HM-LC-Sw1PBU-FM,HM-Sec-...
DUOFERN+9x Rollotron