Analog zu dem Beitrag „Toggle Switch für Dimmer“ gibt es auch bei RGB Instanzen die Möglichkeit einen Toggle Switch zu realisieren.

Auch hier hat man dadurch den Vorteil, dass der letzte gewählte RGB Wert erhalten.

Realisieren kann man so einen Switch mit dem folgenden Skript:

<?
	/**
	 * @file          IPSView_RGBSwitch.ips.php
	 * @author        brownson
	 * @version
	 *   Version 1.0, 2015-04-12 brownson: Initiale Version<br/>
	 *
	 * Skript um eine Switch Variable für einen RGB zu realisieren
	 *
	 * Konfiguration Einstellungen:
	 *   DEVICE_RGB_ID        ... ID der Variable zum Setzen des RGB Wertes
	 *
	 */

	/*
	 * Konfiguration:
	 * -------------------------------------------------------------------------
	 */

	define ('DEVICE_RGB_ID', 12345);

	/*
	 * Programmlogik:
	 * -------------------------------------------------------------------------
	 */
	$scriptID     = $_IPS['SELF'];
	$sender       = $_IPS['SENDER'];
	$parentID     = IPS_GetParent($scriptID);

	$variableIDSwitch  = CreateVariable('IPSView_Switch',  0, $parentID, 10,
	                                    '~Switch',   $scriptID);
	$variableIDRGB     = CreateVariable('IPSView_RGB',     1, $parentID, 20,
	                                    '~HexColor', $scriptID);

	if ($sender=='Execute') {
	   // Only create Variables in manuell Mode
	} else {
		$variableId   = $_IPS['VARIABLE'];
		$value        = $_IPS['VALUE'];
		switch ($variableId) {
			case $variableIDRGB:
			   RGB_SetDeviceValue($value);
			   SetValue($variableIDSwitch, ($value > 0));
			   SetValue($variableIDRGB, $value);
		      break;
			case $variableIDSwitch:
			   if ($value)
			   	RGB_SetDeviceValue(GetValue($variableIDRGB));
				else
			   	RGB_SetDeviceValue(0);
			   SetValue($variableId, $value);
		      break;
			default:
		      break;
		}
	}
	
	/*
	 * Funktionen:
	 * -------------------------------------------------------------------------
	 */

	function RGB_SetDeviceValue($value) {
		$instanceID = IPS_GetParent(DEVICE_RGB_ID);
		$ident      = IPS_GetObject(DEVICE_RGB_ID)['ObjectIdent'];
		IPS_RequestAction($instanceID, $ident, $value);
	}

	function CreateVariable ($name, $type, $parentId, $position=0, $profile="",
	                         $action=null, $referenceID=null) {
		$variableId = @IPS_GetObjectIDByIdent($name, $parentId);
		if ($variableId === false) {
 			$variableId = IPS_CreateVariable($type);
			IPS_SetParent($variableId, $parentId);
			IPS_SetName($variableId, $name);
			IPS_SetIdent($variableId, $name);
			IPS_SetPosition($variableId, $position);
  			if ($referenceID != null) {
  			   $variable = IPS_GetVariable($referenceID);
  			   $profile  = $variable['VariableProfile'];
			}
  			IPS_SetVariableCustomProfile($variableId, $profile);
 			IPS_SetVariableCustomAction($variableId, $action);
		}
		return $variableId;
	}

?>

 

Nach dem erstmaligen Ausführen werden 2 neue Variablen angelegt – eine boolean Variable für den Schalter und eine Integer Variable für die Speicherung des RGB Wertes.

Bei der Kategorisierung der Variablen in IPSView werden diese beiden Variablen als Schalter bzw. RGB Wert kategorisiert.

Probleme und Anregungen zu dem Skriptbeispiel können gerne im IP-Symcon Forum gepostet werden.