IPSLight

Das mache ich mit den DMX-Befehlen die IPS zur Verfügung stellt. http://www.ip-symcon.de/service/dokumentation/modulreferenz/dmx-lichttechnik/

DMX_SetValue
boolean DMX_SetValue ( integer $InstanzID , integer $Kanal , integer $Wert )

DMX_Fade
boolean DMX_Fade ( integer $InstanzID , integer $Kanal , integer $Wert , float $Überblendzeit )

DMX_SetBlackout
boolean DMX_SetBlackout ( integer $InstanzID , boolean $Status )

Tom

Mir ist aber nach wie vor nicht klar, wie man mit diesen Funktionen einen bestimmten RGB Strahler
a.) ein- und ausschaltet
b.) einen Farbwert setzt

DMX_SetValue(12345, 1, 255); //Den ersten Kanal der Instanz auf 255 schalten
So ist das setzen eines Wertes pro Kanal möglich. z.B. bei RGB im Beispiel für den Kanal 1 Rot.

Mit DMX_SetValue(12345, 0, 255); wir der Wert auf alle Kanäle gesetzt.

Oder meinst Du etwas anderes?

Tom

OK, hab mal eine neue Komponente IPSComponentRGB_DMX online gestellt.


'Ambiente' => array('Ambiente','Erdgeschoss,All', 'RGB','IPSComponentRGB_DMX,36525'),

Optional könnte man auch noch die einzelnen Kanäle für R,G und B angeben.

Gib bitte Bescheid, ob das Teil funktioniert, konnte es nur begrenzt testen …

Hallo Andreas, lieben Dank!! Jetzt kann ich das ganze schon mal ansprechen. Jedoch bringt An/Aus nichts da bei An das Level für die Helligkeit 0 bleibt und auch keine Farbe (Kanal) gesetzt wird. Wenn ich mir #Color und #Level im WebFront anzeigen lasse kann ich hier einen Wert wählen und die Stripes leuchten. Oder mache ich da etwas falsch?

Wie kann ich das mit „Optional könnte man auch noch die einzelnen Kanäle für R,G und B angeben.“ machen? Und gibt es noch die Möglichkeit so auch RGBW-Stripes anzusprechen die per DMX angebunden sind? Diese haben dann ja noch einen vierten Kanal (W). Ich habe RGB-Stripes und auch RGBW-Stripes im Einsatz.

Tom

IPSLight merkt sich immer den letzten Wert von RGB und Dimmer, danach kann man das Licht immer mit dem Switch auf den letzen Status schalten.

Die Kanäle kannst Du hinter der InstanzID angeben:


'Ambiente'=> array('Ambiente','Erdgeschoss,All', 'RGB', 'IPSComponentRGB_DMX,36525,1,2,3'),

Ansteuerung des W Kanals, kannst Du über die DMX Dimmer Komponente machen:


'WellnessWand' => array('Wandleuchte',  'Kellergeschoss,All,Wellness', 'Dimmer', 'IPSComponentDimmer_DMX,54254,4'),

Danke für die Infos! Dann werde ich mich jetzt mal ransetzen und alles so einbinden.

Tom

Ich komme mit dem Ansprechen eines Programms aus einem Script nicht zurecht. Ein Programm z.B. „Stimmungen“ hat mehrere Unterprogramme z.B. „Aus“, „Stimmung1“, „Stimmung2“ usw. Wie kann ich z.B. „Stimmung1“ schalten?

Mit function IPSLight_SetProgram($programId, $value) gelingt mir das nicht. Ich muss ja zur ID des Hauptprogrammes noch den Wert „Stimmung1“ mitgeben. Stehe da etwas auf dem Schlauch.

Tom

Hallo Tom,

mit dem Value ist der Wert aus dem entsprechendem Profil des Programms gemeint.

einfach ist vermutlich für Dich die Verwendung von


	/**
	 * Setzt den Wert eines Programms anhand des zugehörigen Namens
	 *
	 * @param string $programName Name des Programms
	 * @param bool $value Neuer Wert des Programms
	 */
	function IPSLight_SetProgramName($programName, $value) {
..

Hallo Andreas, vielen Dank für den Tipp. Auch eine gute Variante. Ich war mit meinen Versuchen schon auf dem richtigen Weg. Jedoch wiedermal mit einem fehlenden „;“. Anfängerfehler aber ehe man das manchmal sieht…

Tom

Vielleicht moechte mal jemand das Testen.
IPSComponentSwitch_Plugwise.class.zip (1.48 KB)

Hallo Zusammen,

ich hab hier auch 2 Instanzen für IPSLight und Enocean.

IPSLight_Enocean.zip (2.18 KB)

Einmal ComponentSwitch und einmal ComponentDimmer

Damit funktioniert schonmal das Ansteuern.

Für die Rückmeldung ist eine ganze Ecke mehr an Skripten von Nöten. Dafür muss ich erstmal noch ne Anleitung aufsetzen.

Gruß
Maze

Hab die Komponenten mal in die Library integriert…

Hallo, gibt es schon Erfahrungen mit der Einbindung von Philips Hue Leuchten? Ich habe es mal mit der IPSComponentRGB versucht, was leider nicht geht.

Einzelne Leuchten schalte ich hiermit:

INCLUDE ("hue_include.ips.php");

// hue_SendLampCommand(1,'"on":true');

$lamp_no= 1; // Hier die Nummer der Leuchte die geschaltet werden soll

$json_url = 'http://'.$hue_bridge_ip.'/api/'.$hue_key.'/lights/'.$lamp_no.'/state';

$json_string = '{"bri":254, "ct":467, "hue":13122, "sat":211, "on":true}'; // "bri" = Helligkeit (0-254) "on" = ein/aus (true/false)

$ch = curl_init( $json_url );
// Configuring curl options
$options = array(
               CURLOPT_RETURNTRANSFER => true,
               CURLOPT_CUSTOMREQUEST => 'PUT', // -X
               CURLOPT_HTTPHEADER => array('Content-type: application/json') ,
               CURLOPT_POSTFIELDS => $json_string
               );


// Setting curl options
curl_setopt_array( $ch, $options );

// Getting results
$result =  curl_exec($ch);

Tom

Servus,

1.) kannst Du auch noch die „hue_include.ips.php“ bereitstellen.

2.) Gibt es auch eine Möglichkeit zur Ansteuerung mit RGB

function hue_SendLampCommand($lampID, $cmd)
{
	$hue_bridge_ip 	= 'XXX'; //muss eingetragen werden
	$hue_key			= 'XXX'; //muss eingetragen werden

	$json_url = 'http://'.$hue_bridge_ip.'/api/'.$hue_key.'/lights/'.$lampID.'/state';
	$json_string = '{'.$cmd.'}';
	// "bri" = Helligkeit (0-254) "on" = ein/aus (true/false)

	$ch = curl_init( $json_url );
	// Configuring curl options
	$options = array(
	               CURLOPT_RETURNTRANSFER => true,
	               CURLOPT_CUSTOMREQUEST => 'PUT', // -X
	               CURLOPT_HTTPHEADER => array('Content-type: application/json') ,
	               CURLOPT_POSTFIELDS => $json_string
	               );

	// Setting curl options
	curl_setopt_array( $ch, $options );

	// Getting results
	$result =  curl_exec($ch);

};

Das kann ich leider nicht genau sagen da mir das Wissen dazu fehlt. Hier habe ich etwas dazu gefunden: https://github.com/peter-murray/node-hue-api. Es gibt auch eine offizielle API (http://developers.*meethue.*com

Tom

Hallo,

leider konnte ich noch keine Integration der Digitalstrom-Klemmen für IPS Light finden.
Was genau müsste ich denn tun, um das anzupassen?

Meine Forschung hat ergeben, dass ich als Basis die Datei IPSComponentSwitch_Homematic.class.php nehmen würde, und überall die Homematic-Befehle durch Digitalstrom-Befehle austauschen würde.

Reicht das, oder ist da noch mehr zu tun?

Gruß
Christian

Hallo Christian,

Folgende Vorgehensweise:

[ul]
[li]IPSComponentSwitch_Homematic.class.php auf IPSComponentSwitch_DS.class.php kopieren
[/li][li]Alle Vorkommen von Homematic durch DS ersetzen
[/li][li]Homematic Befehle durch DS Befehle ersetzen
[/li][li]fertig
[/li][/ul]

Funktionierende Klasse dann hier posten oder an mich senden …

@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) …

Herzlichen Dank! Hätte da noch folgende Fragen dazu:

Wo muss ich die Datei anlegen? In der „IPSComponentRGB_PhilipsHUE.class.php“ selbst muss ich nichts mehr anpassen? Muss ich diese dann noch irgendwie in die Library integrieren? Wenn ja, wie mach ich das?

„xyxyxyxyxyxy“ ist der HueKey der Bridge? „1“ währe die die Lampe Nr. 1?

Tom