FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Hi2Helmi am 04 Juni 2019, 21:33:07

Titel: [gelöst] HSL in RGB umrechnen in FHEM?
Beitrag von: Hi2Helmi am 04 Juni 2019, 21:33:07
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
Titel: Antw:HSL in RGB umrechnen in FHEM?
Beitrag von: amenomade am 04 Juni 2019, 21:48:26
Das Modul Color.pm stellt Funktionen zur Verfügung: https://wiki.fhem.de/wiki/Color#Routinen_um_zwischen_Farbr.C3.A4umen_und_Darstellungen_zu_konvertieren

Titel: Antw:HSL in RGB umrechnen in FHEM?
Beitrag von: Hi2Helmi am 04 Juni 2019, 22:04:22
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

Titel: Antw:HSL in RGB umrechnen in FHEM?
Beitrag von: amenomade am 04 Juni 2019, 23:02:16
Hmm
Mit HSV wäre es {use Color; $rgb = hsv2rgb($hsv) }
Aber mit HSL weiss ich nicht.
Titel: Antw:HSL in RGB umrechnen in FHEM?
Beitrag von: Prof. Dr. Peter Henning am 05 Juni 2019, 20:59:47
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
Titel: Antw:HSL in RGB umrechnen in FHEM?
Beitrag von: Damian am 06 Juni 2019, 08:21:15
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.
Titel: Antw:HSL in RGB umrechnen in FHEM?
Beitrag von: Hi2Helmi am 06 Juni 2019, 21:36:32
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.