RGB to HEX

Hallo,

versuche noch immer 3 EIB Steuergeräte (0-255) an einen RGB Slider zurück zu melden.

Hier mein Code Gedanke:


$hex= str_pad(dechex(getvalue(14855)), 2, "0", STR_PAD_LEFT);
$hex.= str_pad(dechex(getvalue(26599)), 2, "0", STR_PAD_LEFT);
$hex.= str_pad(dechex(getvalue(51931)), 2, "0", STR_PAD_LEFT);
setvalue(11050, $hex);
echo $hex;

14855 ist die Variable des roten Lichts, 26599 Grün, 51931 Blau und 11050 ist die Variable RGB Slider.

Es kommt immer der Fehler:

Warning: COuld not convert variant of type (String) into type (Boolean) in - on line…

11050 ist Integer…

Vielleicht hat ja jemand eine Idee :wink:

Danke schon einmal

Gruß Marc

Deine Variable $hex ist ein String. Du musst den String in Integer wandeln.

Hier mal ein Beispiel:

Code:
<?php
$str = „10“;
$num = (int)$str;
?>

Viel Erfolg,
Peter

Sent from my iPhone using Tapatalk

Hallo,

so weit war ich auch schon einmal:

$rgbtest = array();
$rgbtest[0] = dechex (getvalue(14855));
$rgbtest[1] = dechex (getvalue(26599));
$rgbtest[2] = dechex (getvalue(51931));
$hex= str_pad(dechex(getvalue(14855)), 2, "0", STR_PAD_LEFT);
$hex.= str_pad(dechex(getvalue(26599)), 2, "0", STR_PAD_LEFT);
$hex.= str_pad(dechex(getvalue(51931)), 2, "0", STR_PAD_LEFT);
echo $hex;
$inthex = (int)$hex;
setvalue(11050, $inthex);
echo $inthex;

$hex liefert beispielsweise bei 100% Rot, 0% Grün, 0% Blau: ff0000 (so will ich das haben)

$inthex liefert bei gleichem Slider: 0

Das Problem ist, ich habe 4 Slider:

1 Slider als Variable einer EIB Instanz (ROT GA2/1/1), hier steht im IPS Objektbaum: Träger Rot, EIB Group
Value Integer 100% (~Intensity.255)

1 Slider wie oben Grün GA2/1/2
1 Slider wie oben Blau GA2/1/3

11050 = 1 Slider Variable ~Hex.Color Typ Integer

Die 11050 kann ich mit z.B. 0 per Hand setzen, aber nicht ff0000.

Wenn ich also an dem EIB Slider Rot 100% setze, meldet $hex: ff0000
$inhex: 0

Jetzt war meine Überlegung mit Rot255255 + Grün*255 + Blau das rein auf integer Basis zu lösen, aber auch dann stimmen die Werte nicht überein.

Wenn ich aber den RGB Slider ziehe auf 100Rot,0Grün,0Blau steht im Objektbaum (Integer) ff0000, den Wert bekomme ich aber auf keinem Weg da rein geschrieben. Er lässt nur Zahlen aus Ziffern von 0-9 zu. Außer halt ich änder den Slider im Webfont per Hand.

Vielleicht kann das ja einer mal versuchen nachzustellen:

3 Slider einzeln als (Integer) mit Profil ~Intensity255 und eine Variable als Slider RGB mit Profil ~HexColor.

Bei Änderung von den 3 Einzelslidern soll sich der RGB Slider anpassen und andersherum.

Vielleicht ist es ja auch möglich, 3EIB Gruppenadressen anders auf einen RGB Slider zu bekommen.

Vielen Dank noch einmal.

Mal eine Blöde Frage, Integer hat doch nur zwei Byte hier: „FFFF“ oder ist das hier anders,
denn meiner Meinung nach müsste es doch ein DWord sein mit vier Byte „FFFFFFFF“
von dem wohl nur die letzten drei benutzt werde oder?!

Rot ist „FF0000“ = 255 * 256 * 256
Gün ist „FF00“ = 255 * 256
Blau ist „FF“ = 255

RGB ist „FFFFFF“ = (255 * 256 * 256) + (255 * 256) + (255)

oder liege ich da Falsch?!

Hallo Marc,

ich versteh Dein Problem auch nicht so richtig.
Wie Pikachu schon sagte ist es eine rein rechnerrische Sache:

<?
if ($_IPS['SENDER'] == "WebFront")
{
	SetValue($_IPS['VARIABLE'],$_IPS['VALUE']);
}
$r = GetValue(26009);
$g = GetValue(54431);
$b = GetValue(32046);
$rgb = $r*256*256 + $g*256 + $b;
SetValue(22533,$rgb);
?>

Dieses Script einfach als Aktionsscript an die 3 Variablen hängen und die ID’s anpassen.
Gruß

Danke, Eure Tipps haben zum Erfolg geführt:

Obwohl im Objektbaum FFFFFF angezeigt wird, erwartet IPS die Eingabe als Integer…

R256256+G*256+B

$rgbtest = array();
$rgbtest[0] = (getvalue(14855));
$rgbtest[1] = (getvalue(26599));
$rgbtest[2] = (getvalue(51931));
$r = ($rgbtest[0]*256*256);
$g = ($rgbtest[1]*256);
$b = ($rgbtest[2]);
$all = $r+$g+$b;
setvalue(11050, $all);

Ich weiß, geht auch kürzer :wink:

Juppi, ich freue mich