Wie Loxone RGB Werte in Hex RGB für FHEM umrechnen

Begonnen von neonnt, 18 Februar 2018, 23:59:32

Vorheriges Thema - Nächstes Thema

neonnt

Hallo,

ich versuche mit dem Script von lewej die Loxone RGB Werte in Hex RGB für FHEM umzurechnen, um meine Hue und Lightify LEDs anzusteuern. Leider bringt das Script bei mir in FHEM einige Fehler, wodurch scheinbar auch keine LED geschalten wird.

Der von Loxone ausgegebene RGB Wert setzt sich wie folgt zusammen:

Weiß
R= 100
G= 100
B= 100
= 100100100

in der Reihenfolge:
BBBGGGRRR

Der Wert 100100100 wird dann an Fhem übermittelt und das Script soll diesen Wert in Hex umrechnen.

Wenn ein Farbwert geändert wird, kann ggf. auch sowas wie 80100080 herauskommen, es fehlt somit die erste Stelle am Anfang weil diese 0 ist.

Errorlog:
substr outside of string at ./FHEM/99_myUtils.pm line 250.
substr outside of string at ./FHEM/99_myUtils.pm line 251.
Use of uninitialized value $g in multiplication (*) at ./FHEM/99_myUtils.pm line 253.
Use of uninitialized value $b in multiplication (*) at ./FHEM/99_myUtils.pm line 253.

Hier noch die Zeilen aus meiner 99_myUtils.pm:
243 # Loxone RGB in HEX-RGB umrechnen
244 sub percent2rgb($)
245 {
246 my($percent) = @_;
247
248 # my($r,$g,$b) = ($percent =~ m/(\d\d\d)(\d\d\d)(\d\d\d)/);
249 my $r = substr $percent, -3;
250 my $g = substr $percent, -6, 3;
251 my $b = substr $percent, -9, 3;
252
253 return sprintf( "%02X%02X%02X", $r*2.55+0.5, $g*2.55+0.5, $b*2.55+0.5 );
254}

Kann mir evtl. einer von euch sagen wo hier der Fehler liegt und was schief läuft? Ich bin leider nicht so gut in perl und würde das gern zum Laufen bekommen :-(

reibuehl

substr bring dir nur was, wenn es immer fixe Längen sind. Die einzelnen Werte können aber hier ja zwei oder dreistellig sein - vielleicht auch einstellig?

Bekommst Du immer auf 10er gerundete Prozentwerte von Loxone? Dann könntest Du mit einer RegEx auf die 0 triggern:

my($r,$g,$b) = ($percent =~ m/(\d+0)(\d+0)(\d+0)/);

Sonst müsste man das vermutlich komplizierter als Schleife machen, die sich die Stellen anschaut, und so lange probiert, bis drei Zahlen <= 100 raus kommen.
Reiner.

neonnt

naja wenn eine Farbe gewählt wird die irgendwas ohne null generiert wird das wohl problematisch. Ich gehe mal von den Standardfarben und möchte es ja erstmal überhaupt zum laufen bekommen.

ich habe das jetzt entsprechend eingefügt (substr ist auskommentiert) aber der Fehler kommt immernoch :-(

2018.02.19 22:46:34 1 : PERL WARNING: Use of uninitialized value $r in multiplication (*) at ./FHEM/99_myUtils.pm line 264.
2018.02.19 22:46:34 1 : PERL WARNING: Use of uninitialized value $g in multiplication (*) at ./FHEM/99_myUtils.pm line 264.
2018.02.19 22:46:34 1 : PERL WARNING: Use of uninitialized value $b in multiplication (*) at ./FHEM/99_myUtils.pm line 264.

reibuehl

Bei Perl Funktionen nehme ich gerne bei der Fehlersuche erst mal die ganze FHEM Komplexität raus und lasse das ganze mal als einfaches Perl Script laufen. So was wie das hier:

#!/usr/bin/perl -w
use strict;

# Loxone RGB in HEX-RGB umrechnen
sub percent2rgb($) {
  my($percent) = @_;

  my($r,$g,$b) = ($percent =~ m/(\d+0)(\d+0)(\d+0)/);

  return sprintf( "%02X%02X%02X", $r*2.55+0.5, $g*2.55+0.5, $b*2.55+0.5 );
}

print percent2rgb(8010080);


Das gibt bei mir "CCFFCC" aus und keine Fehlermeldung. Wenn die gleiche Funktion sich dann in FHEM anders verhält, liegt es vermutlich am Eingangswert.
Reiner.

neonnt

ok, FHEM bringt immernoch Fehler. Ich schaue mir mal im log an was da genau geschickt wird an den Eingang.

neonnt

Ich bin jetzt endlich mal dazu gekommen das mitzuloggen.

Das sind die Werte die ausgegeben werden:
2018-02-27 16:47:15;FHEM Logger;0
2018-02-27 16:48:02;FHEM Logger;25100100
2018-02-27 16:48:08;FHEM Logger;50050100
2018-02-27 16:48:09;FHEM Logger;100100050
2018-02-27 16:48:10;FHEM Logger;25100025
2018-02-27 16:48:14;FHEM Logger;16065016
2018-02-27 16:48:17;FHEM Logger;6025006
2018-02-27 16:48:20;FHEM Logger;2010002
2018-02-27 16:48:23;FHEM Logger;0


Der entsprechende Wert wird dann im Link bei v eingesetzt:
http://192.168.120.12:8083/fhem?XHR=1&cmd.HUEGroup9=set%20HUEGroup9%20RGB%20{(percent2rgb('<v>'))}

Kann es sein dass an dem Link etwas falsch ist?

Das Script ist momentan so:
# Loxone RGB in HEX-RGB umrechnen
sub percent2rgb($)
{
  my($percent) = @_;       

  my($r,$g,$b) = ($percent =~ m/(\d+0)(\d+0)(\d+0)/);

  return sprintf( "%02X%02X%02X", $r*2.55+0.5, $g*2.55+0.5, $b*2.55+0.5 );
}


Der Fehler kommt aber trotzdem noch:
2018.02.27 16:48:00 1 : PERL WARNING: Use of uninitialized value $r in multiplication (*) at ./FHEM/99_myUtils.pm line 260.
2018.02.27 16:48:00 1 : PERL WARNING: Use of uninitialized value $g in multiplication (*) at ./FHEM/99_myUtils.pm line 260.
2018.02.27 16:48:00 1 : PERL WARNING: Use of uninitialized value $b in multiplication (*) at ./FHEM/99_myUtils.pm line 260.

Morgennebel

Die RegExp matcht auf Zahlentupel mit 0 am Ende, also 120, 230, 420, 990, 320, 430, 342342340, 2345242234234200000 - und das dreimal. Außerdem matcht Perl immer maximal, nicht minimal...

Das hast Du aber nicht. Wir können auch nur vermuten, was da kommuniziert wird.

Beispiel: 2010002 - ist das 20, 100, 02 oder 201, 00, 02?

Ich bin beinahe am vermuten, daß die letzten drei Ziffern immer eine Zahl sind, also bei Deinem Log: 100, 100, 050, 025, 016, 006, 002.

Bleiben dann noch vier Zahlen, sind die beiden anderen Zahlen zwei-stellig. Also

6025006 wird zu 60, 25, 6.
2010002 wird zu 10, 10, 2

Sind sie fünfstellig, sind die beiden anderen Zahlen einmal zwei-, einmal dreistellig. Welche welche ist, bleibt nur zu vermuten.

Also 16065016 - die 016 haben wir, bleibt 160 und 65 oder 16 und 65.
Also 25100025 - die 025 haben wir, bleibt 251 und 00 oder 25 und 100.

Doku gibts nicht?

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

neonnt

nicht so richtig. Ich habe nur festgestellt dass der erste wert um die erste Stelle gekürzt wird wenn eine Null dort steht. Also 050100100 = 50100100 bzw BBBGGGRRR = BBGGGRRR

Morgennebel

Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Morgennebel

Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

reibuehl

Probier es mal mit der Funktion:

# Loxone RGB in HEX-RGB umrechnen
sub percent2rgb($) {
  my($percent) = @_;
  my $r = ($percent - $percent % 1000000) / 1000000;
  $percent = $percent - $r * 1000000;
  my $g = ($percent - $percent % 1000) / 1000;
  $percent = $percent - $g * 1000;
  my $b = $percent;
  return sprintf( "%02X%02X%02X", $r*2.55+0.5, $g*2.55+0.5, $b*2.55+0.5 );
}
Reiner.

neonnt

#11
@Morgennebel
Das Script kenne ich, allerdings funktioniert es nicht richtig mit Lightify Lampen und man ist auf eine gewisse Menge an Programmbausteinen begrenzt. Deshalb nutze ich FHEM, weil hiermit wenigstens das Dimmen funktioniert wie es soll :-)


25100025
BBBGGRR
BBGGGRR
BBGGRRR


nein nicht ganz, BBGGGRRR

@reibuehl
Danke für das Script, die Fehler kommen jetzt nicht mehr. Allerdings tut sich auch nicht wenn man die Werte ändert :-(
Ich versuche nochmal mitzuloggen was dort genau bei FHEM ankommt.

EDIT: Es funktioniert mit dem Script. Der Link war falsch, es darf nicht RGB drin stehen, sondern es muss rgb heissen. Bei den Hue Lampen kommt die gewünschte Farbe heraus, nur bei den Lightify kommt irgendwas heraus das völlig abweicht.

Vielen Dank für eure Hilfe :-)

Morgennebel

Zitat von: neonnt am 27 Februar 2018, 22:30:10
Das Script kenne ich, allerdings funktioniert es nicht richtig mit Lightify Lampen und man ist auf eine gewisse Menge an Programmbausteinen begrenzt. Deshalb nutze ich FHEM, weil hiermit wenigstens das Dimmen funktioniert wie es soll :-)

Es geht ja auch nur um die Funktionsweise. Ist die klar, läßt es sich einfach nach FHEM übertragen...

Zitat von: neonnt am 27 Februar 2018, 22:30:10


25100025
BBBGGRR
BBGGGRR
BBGGRRR


nein nicht ganz, BBGGGRRR

Und wie bildest Du Blau-Werte mit 0...255 (als Byte) oder 0...100 (als Prozent) ab? BBBGGGRRR funktioniert bei 9-stelligen Werten, alles andere ist nur anhand des Skriptes oben ersichtlich...

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

reibuehl

Die Werte für die erste Farbe werden immer ohne führende Null angegeben, die weiteren Farbwerte mit 0-2 führenden Nullen um immer auf mindestens 7 Stellen zu kommen.

In meinem Skript-Ausschnitt muss man evtl. noch die Reihenfolge der Farben anpassen, ich bin von (RR)RGGGBBB ausgegangen. 
Reiner.

neonnt

Hab ich gemacht, danke dir nochmal. Ich habe nur gerade festgestellt, dass es nur bei Hue Lampen funktioniert. Die Lightify haben HSL Farbraum, da kommt stellenweise was völlig anderes raus. Aber Hue läuft super :-)