[gelöst] HSL in RGB umrechnen in FHEM?

Begonnen von Hi2Helmi, 04 Juni 2019, 21:33:07

Vorheriges Thema - Nächstes Thema

Hi2Helmi

Hallo, ich würde gerne ein Gradangabe von HSL in RGB umrechnen.
Gibt es da ein passendes Modul, oder eine Formel?
Also ich habe einen H Wert von z.B. 120, S bleibt immer gleich bei 100 und L bei 50 was in RGB ja 00ff00 ergeben würde
Oder bei einem H Wert von 180 in RGB 00ffff
MfG
Florian

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Hi2Helmi

Für mich nicht ganz verständlich.
Wie kriege ich da hier rein?
defmod wz_temp_vergleich DOIF ([wz_sensoren_luftdruck:temperatur] or [aussen_temp:temperature]){\
my $vergleich = (ReadingsNum("aussen_temp","temperature",0)) - (ReadingsNum("wz_sensoren_luftdruck","temperatur",0));;;;\
my $farbverschiebung = $vergleich * 10;;;;\
my $hsl = 120 - $farbverschiebung;;;;\
if ($hsl <   0) {$hsl = 0};;;;\
if ($hsl > 240) {$hsl = 240};;;;\
fhem ("setreading wz_temp_vergleich vergleich $vergleich");;;;\
fhem ("setreading wz_temp_vergleich farbverschiebung $farbverschiebung");;;;\
fhem ("setreading wz_temp_vergleich hsl $hsl");;;;\
}
attr wz_temp_vergleich do always
attr wz_temp_vergleich room Wohnzimmer

setstate wz_temp_vergleich cmd_1
setstate wz_temp_vergleich 2019-06-04 22:02:32 Device aussen_temp
setstate wz_temp_vergleich 2019-06-04 22:02:06 cmd 1
setstate wz_temp_vergleich 2019-06-04 22:02:06 cmd_event wz_sensoren_luftdruck
setstate wz_temp_vergleich 2019-06-04 22:02:06 cmd_nr 1
setstate wz_temp_vergleich 2019-06-04 22:00:17 e_aussen_temp_temperature 20.6
setstate wz_temp_vergleich 2019-06-04 22:02:06 e_wz_sensoren_luftdruck_temperatur 28.0
setstate wz_temp_vergleich 2019-06-04 22:02:06 farbverschiebung -74
setstate wz_temp_vergleich 2019-06-04 22:02:06 hsl 194
setstate wz_temp_vergleich 2019-06-04 20:44:43 mode enabled
setstate wz_temp_vergleich 2019-06-04 22:02:06 state cmd_1
setstate wz_temp_vergleich 2019-06-04 22:02:06 vergleich -7.4

MfG
Florian

amenomade

Hmm
Mit HSV wäre es {use Color; $rgb = hsv2rgb($hsv) }
Aber mit HSL weiss ich nicht.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Prof. Dr. Peter Henning

HSL ist ziemlich außer Mode gekommen, man sollte bei HSV bleiben. Umrechnung siehe z.B. Taschenbuch Multimedia, oder hier https://wisotop.de/hsv-und-hsl-farbmodell.php

LG

pah

Damian

Aus der Commandref:

ZitatDOIF_hsv ist eine DOIF-Funktion, bei der man den Farbverlauf definieren kann.

Syntax für die DOIF_hsv Funktion:

DOIF_hsv(<value>,<min_value>,<max_value>,<min_hsv>,<max_hsv>,<saturation>,<lightness>)

Es wird durch eine feste Vorgabe von saturation und lightness, linear ein Farbton (Hue) für value errechnet, dabei entspricht min_value min_hsv und max_value max_hsv.

Die gewünschten Werte für <min_hsv>,<max_hsv>,<saturation>,<lightness> können mit Hilfe eines Color-Pickers bestimmt werden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Hi2Helmi

Hallo,

ich habe auf HSV umgestellt, was auch nur so nebensache war.
Mein Lösung sieht nun so aus:
defmod wz_temp_vergleich DOIF ([wz_sensor_bwm:temperature] or [aussen_temp:temperature]){\
my $vergleich = (ReadingsNum("aussen_temp","temperature",0)) - (ReadingsNum("wz_sensor_bwm","temperature",0));;;;\
my $farbverschiebung = $vergleich * 12;;;;\
my $hue = 120 - ($farbverschiebung);;;;\
if ($hue <   0) {$hue = 0};;;;\
if ($hue > 240) {$hue = 240};;;;\
my $hex = Color::hsv2hex($hue,100,50);;;;\
fhem ("setreading wz_temp_vergleich hue $hue");;;;\
fhem ("setreading wz_temp_vergleich hex $hex");;;;\
fhem ("setreading wz_temp_vergleich vergleich $vergleich");;;;\
fhem ("setreading wz_temp_vergleich farbverschiebung $farbverschiebung");;;;\
}

Es funktioniert wie ich es wünsche.

Zur weiteren Erklärung, was ich damit vorhabe.
Ich berechne den Unterschied von der Innentemperatur und der Außentemperatur und stelle den Unterschied in einer RGB- LED dar.
Diese LED zeigt mir dann aufgrund ihrer Farbe, ob ich bei heißem Wetter das Fenster zum Lüften öffnen kann ohne dass die Temperatur im Wohnzimmer weiter ansteigt.
Blau bedeutet draußen ist kühler
Grün bedeutet draußen ist ca. gleich warm
Rot bedeutet draußen ist wärmer.

Den RGB-HEX Wert schicke ich per MQTT an die LED (welche im Moment nur den Hex wert versteht)

Danke für die Tips, ohne diese wäre ich nicht auf meine Lösung gekommen.
MfG
Florian