PhilIPS hue LED-Leuchten

Aha… 3 einzelne Hie kosten 180€ zusammen! Wo ist das Feature eines 2. Starterpakets?!

  1. Das Leute für eine HUE-Bridge bei Ebay bis EUR 80 bezahlen
  2. Ersatz-Bridge bei defekt, gibt es (noch?) nicht einzeln.

Und wieder was dazu gelernt! Ist es kompliziert die Hue von der Bridge zu trennen?!

Hat jemand Lightlink bzw. LivingColor Lampen in rein weiss für etwa €20 gesehen? Finde bei Philips nichts, hatte aber im Netz davon gelesen.

Moin Axel,

ich habe eben mal wieder etwas mit den HUE spielen können und wenn Du folgendes an eine der HUE sendest sollte Dein Problem eigentlich gelöst sein.


$json_string = '{"bri":25,"xy":[0.4091,0.518],"on":true}';

Du kannst das „on“:true und „bri“:25 auch weg lassen, je nach dem ob Du die Helligkeit ändern und den die Lampe einschalten möchtest.

Ich habe das so eben mal bei mir probiert und die angesteuerte HUE nimmt genau die Farben der anderen HUE-Leuchte an von der ich die xy-Werte genommen habe.

Gruß,
Peter

Tatsächlich mache ich es jetzt auch mit xy. Mein Denkfehler war, dass die box bspw. hue der Lampen einstellt, wenn man über die App die Farben einstellt. Szenen hab ich jetzt, was mir noch fehlt ist ein sauber funktionierender RGB-Slider bzw. eine Möglichkeit, Farben anzupassen.

Ist es kompliziert die Hue von der Bridge zu trennen?!

Nein , das Trennen geht von alleine…
Spannend ist nur die Verbindung von Lampen aus einem Starterset mit einer vorhandenen Bridge.
Im Internet kursieren einige Anleitung mittels dee FB der LivingColors, aber es geht mit dem Tool „Lampstealer“ ganz einfach. Lampstealer starten, Lampe anschalten, danach mit der App nach neuen Lampen suchen und fertig. Wichtig: Die Lampe muss gaaaanz dicht an der Bridge sein („touch“).
http://www.everyhue.com/?page_id=167
-Udo

Moin…

… ich hab eben mal bissel probieren können und mit folgenden Skript kann man die Werte vom RGB-SLIDER ( INTEGER VARIABLE mit HEX-COLOR-PROFIL ) in einen HUE-WERT umrechnen und anschl. per „hue“: $wert an eine Lampe übergeben.
Das Problem an der Sache ist nur, das die HUE-Leuchten nicht den normalen RGB-Farbraum wiedergeben können.
Aber zum Probieren und als Ansatz für weitere Experimente nutzbar:

Gruß,
Peter


<?



   $hex = GetValueFormatted(12345/*INTEGER VARIABLE MIT HEXCOLOR PROFIL*/);
   $h = NEW Lux_Color();
   $hsl = $h->hex2hsl("$hex");
   $hsl = $hsl['0']*360*182;
   $hsl = (int)$hsl;
   SetValue(56789 /*AUSGABE VARIABLE DES FARBWERTES ALS HUE/,$hsl); // 


/**
 *
 * Color values manipulation utilities. Provides methods to convert from and to
 * Hex, RGB, HSV and HSL color representattions.
 *
 * Several color conversion logic are based on pseudo-code from
 * http://www.easyrgb.com/math.php
 *
 * @category Lux
 *
 * @package Lux_Color
 *
 * @author Rodrigo Moraes <rodrigo.moraes@gmail.com>
 *
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 *
 * @version $Id$
 *
 */
class Lux_Color
{
    /**
     *
     * Converts hexadecimal colors to RGB.
     *
     * @param string $hex Hexadecimal value. Accepts values with 3 or 6 numbers,
     * with or without #, e.g., CCC, #CCC, CCCCCC or #CCCCCC.
     *
     * @return array RGB values: 0 => R, 1 => G, 2 => B
     *
     */
    public function hex2rgb($hex)
    {
        // Remove #.
        if (strpos($hex, '#') === 0) {
            $hex = substr($hex, 1);
        }

        if (strlen($hex) == 3) {
            $hex .= $hex;
        }

        if (strlen($hex) != 6) {
            return false;
        }

        // Convert each tuple to decimal.
        $r = hexdec(substr($hex, 0, 2));
        $g = hexdec(substr($hex, 2, 2));
        $b = hexdec(substr($hex, 4, 2));

        return array($r, $g, $b);
    }

    /**
     *
     * Converts hexadecimal colors to HSV.
     *
     * @param string $hex Hexadecimal value. Accepts values with 3 or 6 numbers,
     * with or without #, e.g., CCC, #CCC, CCCCCC or #CCCCCC.
     *
     * @return array HSV values: 0 => H, 1 => S, 2 => V
     *
     */
    public function hex2hsv($hex)
    {
        return $this->rgb2hsv($this->hex2rgb($hex));
    }

    /**
     *
     * Converts hexadecimal colors to HSL.
     *
     * @param string $hex Hexadecimal value. Accepts values with 3 or 6 numbers,
     * with or without #, e.g., CCC, #CCC, CCCCCC or #CCCCCC.
     *
     * @return array HSL values: 0 => H, 1 => S, 2 => L
     *
     */
    public function hex2hsl($hex)
    {
        return $this->rgb2hsl($this->hex2rgb($hex));
    }

    /**
     *
     * Converts RGB colors to hexadecimal.
     *
     * @param array $rgb RGB values: 0 => R, 1 => G, 2 => B
     *
     * @return string Hexadecimal value with six digits, e.g., CCCCCC.
     *
     */
    public function rgb2hex($rgb)
    {
        if(count($rgb) < 3) {
            return false;
        }

        list($r, $g, $b) = $rgb;

        // From php.net.
        $r = 0x10000 * max(0, min(255, $r));
        $g = 0x100 * max(0, min(255, $g));
        $b = max(0, min(255, $b));

        return strtoupper(str_pad(dechex($r + $g + $b), 6, 0, STR_PAD_LEFT));
    }

    /**
     *
     * Converts RGB to HSV.
     *
     * @param array $rgb RGB values: 0 => R, 1 => G, 2 => B
     *
     * @return array HSV values: 0 => H, 1 => S, 2 => V
     *
     */
    public function rgb2hsv($rgb)
    {
        // RGB values = 0 ÷ 255
        $var_R = ($rgb[0] / 255);
        $var_G = ($rgb[1] / 255);
        $var_B = ($rgb[2] / 255);

        // Min. value of RGB
        $var_Min = min($var_R, $var_G, $var_B);

        // Max. value of RGB
        $var_Max = max($var_R, $var_G, $var_B);

        // Delta RGB value
        $del_Max = $var_Max - $var_Min;

        $V = $var_Max;

        // This is a gray, no chroma...
        if ( $del_Max == 0 ) {
           // HSV results = 0 ÷ 1
           $H = 0;
           $S = 0;
        } else {
           // Chromatic data...
           $S = $del_Max / $var_Max;

           $del_R = ((($var_Max - $var_R) / 6) + ($del_Max / 2)) / $del_Max;
           $del_G = ((($var_Max - $var_G) / 6) + ($del_Max / 2)) / $del_Max;
           $del_B = ((($var_Max - $var_B) / 6) + ($del_Max / 2)) / $del_Max;

           if ($var_R == $var_Max) {
               $H = $del_B - $del_G;
           } else if ($var_G == $var_Max) {
               $H = (1 / 3) + $del_R - $del_B;
           } else if ($var_B == $var_Max) {
               $H = (2 / 3) + $del_G - $del_R;
           }

           if ($H < 0) {
               $H += 1;
           }
           if ($H > 1) {
               $H -= 1;
           }
        }

        // Returns agnostic values.
        // Range will depend on the application: e.g. $H*360, $S*100, $V*100.
        return array($H, $S, $V);
    }

    /**
     *
     * Converts RGB to HSL.
     *
     * @param array $rgb RGB values: 0 => R, 1 => G, 2 => B
     *
     * @return array HSL values: 0 => H, 1 => S, 2 => L
     *
     */
    public function rgb2hsl($rgb)
    {
        // Where RGB values = 0 ÷ 255.
        $var_R = $rgb[0] / 255;
        $var_G = $rgb[1] / 255;
        $var_B = $rgb[2] / 255;

        // Min. value of RGB
        $var_Min = min($var_R, $var_G, $var_B);
        // Max. value of RGB
        $var_Max = max($var_R, $var_G, $var_B);
        // Delta RGB value
        $del_Max = $var_Max - $var_Min;

        $L = ($var_Max + $var_Min) / 2;

        if ( $del_Max == 0 ) {
            // This is a gray, no chroma...
            // HSL results = 0 ÷ 1
            $H = 0;
            $S = 0;
        } else {
            // Chromatic data...
            if ($L < 0.5) {
                $S = $del_Max / ($var_Max + $var_Min);
            } else {
                $S = $del_Max / ( 2 - $var_Max - $var_Min );
            }

            $del_R = ((($var_Max - $var_R) / 6) + ($del_Max / 2)) / $del_Max;
            $del_G = ((($var_Max - $var_G) / 6) + ($del_Max / 2)) / $del_Max;
            $del_B = ((($var_Max - $var_B) / 6) + ($del_Max / 2)) / $del_Max;

            if ($var_R == $var_Max) {
                $H = $del_B - $del_G;
            } else if ($var_G == $var_Max) {
                $H = ( 1 / 3 ) + $del_R - $del_B;
            } else if ($var_B == $var_Max) {
                $H = ( 2 / 3 ) + $del_G - $del_R;
            }

            if ($H < 0) {
                $H += 1;
            }
            if ($H > 1) {
                $H -= 1;
            }
        }

        return array($H, $S, $L);
    }

    /**
     *
     * Converts HSV colors to hexadecimal.
     *
     * @param array $hsv HSV values: 0 => H, 1 => S, 2 => V
     *
     * @return string Hexadecimal value with six digits, e.g., CCCCCC.
     *
     */
    public function hsv2hex($hsv)
    {
        return $this->rgb2hex($this->hsv2rgb($hsv));
    }

    /**
     *
     * Converts HSV to RGB.
     *
     * @param array $hsv HSV values: 0 => H, 1 => S, 2 => V
     *
     * @return array RGB values: 0 => R, 1 => G, 2 => B
     *
     */
    public function hsv2rgb($hsv)
    {
        $H = $hsv[0];
        $S = $hsv[1];
        $V = $hsv[2];

        // HSV values = 0 ÷ 1
        if ($S == 0) {
            $R = $V * 255;
            $G = $V * 255;
            $B = $V * 255;
        } else {
            $var_h = $H * 6;
            // H must be < 1
            if ( $var_h == 6 ) {
                $var_h = 0;
            }
            // Or ... $var_i = floor( $var_h )
            $var_i = floor( $var_h );
            $var_1 = $V * ( 1 - $S );
            $var_2 = $V * ( 1 - $S * ( $var_h - $var_i ) );
            $var_3 = $V * ( 1 - $S * ( 1 - ( $var_h - $var_i ) ) );

            switch($var_i) {
                case 0:
                    $var_r = $V;
                    $var_g = $var_3;
                    $var_b = $var_1;
                    break;
                case 1:
                    $var_r = $var_2;
                    $var_g = $V;
                    $var_b = $var_1;
                    break;
                case 2:
                    $var_r = $var_1;
                    $var_g = $V;
                    $var_b = $var_3;
                    break;
                case 3:
                    $var_r = $var_1;
                    $var_g = $var_2;
                    $var_b = $V;
                    break;
                case 4:
                    $var_r = $var_3;
                    $var_g = $var_1;
                    $var_b = $V;
                    break;
                default:
                    $var_r = $V;
                    $var_g = $var_1;
                    $var_b = $var_2;
            }

            //RGB results = 0 ÷ 255
            $R = $var_r * 255;
            $G = $var_g * 255;
            $B = $var_b * 255;
        }

        return array($R, $G, $B);
    }

    /**
     *
     * Converts HSV colors to HSL.
     *
     * @param array $hsv HSV values: 0 => H, 1 => S, 2 => V
     *
     * @return array HSL values: 0 => H, 1 => S, 2 => L
     *
     */
    public function hsv2hsl($hsv)
    {
        return $this->rgb2hsl($this->hsv2rgb($hsv));
    }

    /**
     *
     * Converts hexadecimal colors to HSL.
     *
     * @param array $hsl HSL values: 0 => H, 1 => S, 2 => L
     *
     * @return string Hexadecimal value. Accepts values with 3 or 6 numbers,
     * with or without #, e.g., CCC, #CCC, CCCCCC or #CCCCCC.
     *
     */
    public function hsl2hex($hsl)
    {
        return $this->rgb2hex($this->hsl2rgb($hsl));
    }

    /**
     *
     * Converts HSL to RGB.
     *
     * @param array $hsv HSL values: 0 => H, 1 => S, 2 => L
     *
     * @return array RGB values: 0 => R, 1 => G, 2 => B
     *
     */
    public function hsl2rgb($hsl)
    {
        list($H, $S, $L) = $hsl;

        if ($S == 0) {
            // HSL values = 0 ÷ 1
            // RGB results = 0 ÷ 255
            $R = $L * 255;
            $G = $L * 255;
            $B = $L * 255;
        } else {
            if ($L < 0.5) {
                $var_2 = $L * (1 + $S);
            } else {
                $var_2 = ($L + $S) - ($S * $L);
            }

            $var_1 = 2 * $L - $var_2;

            $R = 255 * $this->_hue2rgb($var_1, $var_2, $H + (1 / 3));
            $G = 255 * $this->_hue2rgb($var_1, $var_2, $H);
            $B = 255 * $this->_hue2rgb($var_1, $var_2, $H - (1 / 3));
        }

        return array($R, $G, $B);
    }

    /**
     *
     * Support method for hsl2rgb(): converts hue ro RGB.
     *
     * @param
     *
     * @param
     *
     * @param
     *
     * @return int
     *
     */
    protected function _hue2rgb($v1, $v2, $vH)
    {
        if ($vH < 0) {
            $vH += 1;
        }

        if ($vH > 1) {
            $vH -= 1;
        }

        if ((6 * $vH) < 1) {
            return ($v1 + ($v2 - $v1) * 6 * $vH);
        }

        if ((2 * $vH) < 1) {
            return $v2;
        }

        if ((3 * $vH) < 2) {
            return ($v1 + ($v2 - $v1) * (( 2 / 3) - $vH) * 6);
        }

        return $v1;
    }

    /**
     *
     * Converts hexadecimal colors to HSL.
     *
     * @param array $hsl HSL values: 0 => H, 1 => S, 2 => L
     *
     * @return array HSV values: 0 => H, 1 => S, 2 => V
     *
     */
    public function hsl2hsv($hsl)
    {
        return $this->rgb2hsv($this->hsl2rgb($hsl));
    }

    /**
     *
     * Updates HSV values.
     *
     * @param array $hsv HSV values: 0 => H, 1 => S, 2 => V
     *
     * @param array $values Values to update: 0 => value to add to H (0 to 360),
     * 1 and 2 => values to multiply S and V (0 to 100). Example:
     *
     * {{{code:php
     *     // Update saturation to 80% in the provided HSV.
     *     $hsv = array(120, 0.75, 0.75);
     *     $new_hsv = $color->updateHsv($hsv, array(null, 80, null));
     * }}}
     *
     */
    public function updateHsv($hsv, $values)
    {
        if (isset($values[0])) {
            $hsv[0] = max(0, min(360, ($hsv[0] + $values[0])));
        }

        if (isset($values[1])) {
            $hsv[1] = max(0, min(1, ($hsv[1] * ($values[1] / 100))));
        }

        if (isset($values[2])) {
            $hsv[2] = max(0, min(1, ($hsv[2] * ($values[2] / 100))));
        }

        return $hsv;
    }

    /**
     *
     * Updates HSL values.
     *
     * @param array $hsl HSL values: 0 => H, 1 => S, 2 => L
     *
     * @param array $values Values to update: 0 => value to add to H (0 to 360),
     * 1 and 2 => values to multiply S and V (0 to 100). Example:
     *
     * {{{code:php
     *     // Update saturation to 80% in the provided HSL.
     *     $hsl = array(120, 0.75, 0.75);
     *     $new_hsl = $color->updateHsl($hsl, array(null, 80, null));
     * }}}
     *
     */
    public function updateHsl($hsl, $values)
    {
        if (isset($values[0])) {
            $hsl[0] = max(0, min(360, ($hsl[0] + $values[0])));
        }

        if (isset($values[1])) {
            $hsl[1] = max(0, min(1, ($hsl[1] * ($values[1] / 100))));
        }

        if (isset($values[2])) {
            $hsl[2] = max(0, min(1, ($hsl[2] * ($values[2] / 100))));
        }

        return $hsl;
    }
}


?>

Hi Peter,

ich bekomme fast immer nur 0 für $hsl - ist das bei dir auch? Manchmal kommen auch Farben, aber eben eher selten.

Habe dein Skript so abgeändert:

	INCLUDE ("hue_include.ips.php");
   $hex =  $_IPS['VALUE']; // GetValueFormatted(57519 /*[System\Hardware\Hue\Lights\Sofa\RGB]*/);
   $h = NEW Lux_Color();
   $hsl = $h->hex2hsl("$hex");
   $hsl = $hsl['0']*360*182;
   $hsl = (int)$hsl;
   // SetValue(56789 /*AUSGABE VARIABLE DES FARBWERTES ALS HUE/,$hsl); //
   hue_SendLampCommand(5, '"on":true,"hue":'.$hsl);
   echo "Hex:".$hex."
"."HSL:".$hsl;

Danke & Gruß, Axel

Für die, die es interessiert: http://www.heise.de/newsticker/meldung/API-fuer-vernetzte-LED-Lampe-von-Philips-1820268.html

Cool… die haben die API überarbeitet! Bin auf die kommenden Updates und Funktionen gespannt! Da geht noch einiges!! :slight_smile:

Reachable wird trotzdem noch nicht ausgewertet…

Stimmt… denke das kommt aber bald. Ganz up-to-date ist die API auch nicht. Die Group-Funktion geht schon! Ist ganz praktisch. Ich habe z.B 2 HUE in den Esstischlampen. Die als Gruppe werden dann nur über einen Befehl angesprochen.

MyDealz meldet das „Philips LivingWhites Starterkit + 5 extra Glühbirnen“ für knapp 67 EUR inkl. Versand.

Grüße
galleto

Wow - aber halt keine LEDs. Denke die laufen dann bald aus…

Da ich leider programmiertechnisch nicht so bewandert bin die Frage ob Du dazu eventuell einen Script bereitstellen könntest. Ich möchte auch mehrere Lampen gleichzeitig steuern. Wäre schön wenn man so auch Szenen festlegen könnte.

Tom

Moin Tom…

Kann ich machen! Bin aber erst spät zuhause und werd dann mal mein Skript posten. Schalten etc. klappt aber oder hast noch gar nix mit den HUE’s und IPS versucht!?

Gruß,
Peter

PS: Hast Dir mal die neue API-Seite von Philips zur HUE angeschaut? Wenn schalten, dimmen etc. klappt ist es mit der Group-Funktion-Doku eigentlicht selbsterklärend! Die sagen zwar das die nicht funktioniert, stimmt aber nicht! :slight_smile:

Hallo Peter, schon mal danke für die Hilfe.

Dank deiner super Anleitung und der Scripte habe ich die HUE´s schon eingebunden und Schalten geht auch!

Angesehen ja aber verstanden nicht wirklich :-)…

Hmm… ich seh auch gerade das eine Gruppe erstellen und eine Lampe zu einer Gruppe hinzufügen garnicht in der API ( auf der Philips-Website ) vorhanden ist, weil es ja angeblich noch nicht geht. Tut es aber. :smiley:
Wie gesagt, ich stelle heute Abend oder Morgen mein Skript dafür online!

Group geht bei mir auch, damit schaltet man aber alle mit den gleichen Parametern. Unter Szene verstehe ich hier was anderes, nämlich dass eine Lampe bspw. Rot leuchten soll, eine andere Orange. Ich mache das aktuell mit mehreren einzelnen Befehlen, welche nacheinander von einem Skript aufgerufen werden - passt sehr gut!