@timloe
hab mal was gebastelt, folgende Vorgehensweise:
[ul]
[li]Datei mit Namen „IPSComponentRGB_PhilipsHUE.class.php“ anlegen
[/li][li]Konfiguration anpassen
[/li][li]testen …
[/li][/ul]
<?
/**@addtogroup ipscomponent
* @{
*
*
* @file IPSComponentRGB_PhilipsHUE.class.php
* @author Andreas Brauneis
*
*
*/
/**
* @class IPSComponentRGB_PhilipsHUE
*
* Definiert ein IPSComponentRGB_PhilipsHUE Object, das ein IPSComponentRGB Object für PhilipsHUE implementiert.
*
* @author Andreas Brauneis
* @version
* Version 2.50.1, 28.01.2014<br/>
*/
IPSUtils_Include ('IPSComponentRGB.class.php', 'IPSLibrary::app::core::IPSComponent::IPSComponentRGB');
IPSUtils_Include ("IPSLogger.inc.php", "IPSLibrary::app::core::IPSLogger");
class IPSComponentRGB_PhilipsHUE extends IPSComponentRGB {
private $bridgeIP;
private $lampNr;
private $hueKey;
/**
* @public
*
* Initialisierung eines IPSComponentRGB_PhilipsHUE Objektes
*
* @param string $bridgeIP IP Addresse der HUE Lampe
* @param string $hueKey Key zum Zugriff auf die Lampe
* @param string $lampNr Nummer der Lampe
*/
public function __construct($bridgeIP, $hueKey, $lampNr=1) {
$this->bridgeIP = $bridgeIP;
$this->hueKey = $hueKey;
$this->lampNr = $lampNr;
}
/**
* @public
*
* Function um Events zu behandeln, diese Funktion wird vom IPSMessageHandler aufgerufen, um ein aufgetretenes Event
* an das entsprechende Module zu leiten.
*
* @param integer $variable ID der auslösenden Variable
* @param string $value Wert der Variable
* @param IPSModuleRGB $module Module Object an das das aufgetretene Event weitergeleitet werden soll
*/
public function HandleEvent($variable, $value, IPSModuleRGB $module){
}
/**
* @public
*
* Funktion liefert String IPSComponent Constructor String.
* String kann dazu benützt werden, das Object mit der IPSComponent::CreateObjectByParams
* wieder neu zu erzeugen.
*
* @return string Parameter String des IPSComponent Object
*/
public function GetComponentParams() {
return get_class($this).','.$this->bridgeIP.','.$this->hueKey.','.$this->lampNr;
}
/**
* @private
*
* Ansteuerung der HUE Lampe
*
*/
private function hue_SendLampCommand($cmd) {
$json_url = 'http://'.$this->bridgeIP.'/api/'.$this->hueKey.'/lights/'.$this->lampNr.'/state';
$json_string = '{'.$cmd.'}';
// Configuring curl
$ch = curl_init($json_url);
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => array('Content-type: application/json') ,
CURLOPT_POSTFIELDS => $json_string
);
curl_setopt_array($ch, $options);
IPSLogger_Inf(__file__, 'Send PhilipsHUE: JsonURL='.$json_url.', Command='.$json_string);
// Execute
if ($this->bridgeIP <> '') {
$result = curl_exec($ch);
}
}
/**
* @private
*
* Cmd aus RGB zusammensetzen
*
*/
private function getHSLCmdFromRGB($red, $green, $blue, $level) {
$h = 0;
$s = 0;
$l = 0;
$r = $red / 255;
$g = $green / 255;
$b = $blue / 255;
$min = min($r, $g, $b);
$max = max($r, $g, $b);
$delta = $max - $min;
$add = $min + $max;
if ($min === $max) {
$h = 0;
} else if ($r === $max) {
$h = ((60 * ($g - $b) / $delta) + 360) % 360;
} else if ($g === $max) {
$h = (60 * ($b - $r) / $delta) + 120;
} else {
$h = (60 * ($r - $g) / $delta) + 240;
}
$l = 0.5 * $add;
if ($l === 0) {
$s = 0;
} else if ($l === 1) {
$s = 1;
} else if ($l <= 0.5) {
$s = $delta / $add;
} else {
$s = $delta / (2 - $add);
}
$h = round($h);
$s = round($s * 100);
$l = round($l * 100);
return '{"bri":'.$level.', "ct":'.$l.', "hue":'.$h.', "sat":'.$s.', "on":true}';
}
/**
* @public
*
* Zustand Setzen
*
* @param boolean $power RGB Gerät On/Off
* @param integer $color RGB Farben (Hex Codierung)
* @param integer $level Dimmer Einstellung der RGB Beleuchtung (Wertebereich 0-100)
*/
public function SetState($power, $color, $level) {
if (!$power) {
$cmd = '{"bri":255, "ct":0, "hue":0, "sat":0, "on":false}';
} else {
$red = floor($color/256/256);
$green = floor(($color-$red*256*256)/256);
$blue = floor(($color-$red*256*256-$green*256));
$cmd = $this->getHSLCmdFromRGB($red, $green, $blue, $level);
}
$this->hue_SendLampCommand($cmd);
}
}
/** @}*/
?>
'Ambiente' => array('Ambiente', 'Erdgeschoss,All', 'RGB', 'IPSComponentRGB_PhilipsHUE,192.168.0.100,xyxyxyxyxyxy,1'),
Konnte es aber nur sehr begrenzt testen, bitte um Rückmeldung falls es funktioniert (oder auch nicht) …