Farb-Fade für IPS-RGBW

Hallo alle zusammen,

klein aber fein. Ein Farb-Fade Script zur Vorweihnachtszeit.

Geändert werden muss die RGBW-Instanz ID.

Dashboard:

Das Script hinter einer Taste legen mit der „IPSYMID“ „FarbFade“.

Webfront:
Das Script einfach über das Webfront starten.


//Hier bitte die ID der RGBW-Instanz ändern!!
$id 				= 	57093 /*[Schäferweg\Erdgeschoss\Wohnzimmer\.RGBW-868 (Stripe)]*/;


$id_ActColor   = 	IPS_GetVariableIDByName("Color", $id);
$ActColor      =  GetValueInteger($id_ActColor);
$ActColor_hex  =  dechex($ActColor);

if (!isset($IPS_COMPONENT))    $IPS_COMPONENT   ="";
if (!isset($IPS_SENDER)) 		 $IPS_SENDER  		="";
if($IPS_COMPONENT == "FarbFade" or $IPS_SENDER == "WebFront")
{
	$ScriptTimer =	IPS_GetScriptTimer($IPS_SELF);
	if($ScriptTimer == 0)
	{
		IPS_SetScriptTimer($IPS_SELF, 20);

		$Rot = 255;
		$Zeit_Rot = 20;

		$Gruen = 0;
		$Zeit_Gruen = 20;

		$Blau = 0;
		$Zeit_Blau = 20;

	}
	else
	{
		IPS_SetScriptTimer($IPS_SELF, 0);
		return;
	}
	PJ_DimRGBW($id,$Rot,$Zeit_Rot,$Gruen,$Zeit_Gruen,$Blau,$Zeit_Blau,0,0);
	return;
}

if($IPS_SENDER == "TimerEvent")
{
	switch($ActColor_hex)
	{
	
		case "ff0000":
			$Rot = 0;
			$Zeit_Rot = 20;

			$Gruen = 255;
			$Zeit_Gruen = 20;

			$Blau = 0;
			$Zeit_Blau = 20;
		break;
		
		case "ff00":
			$Rot = 0;
			$Zeit_Rot = 20;

			$Gruen = 0;
			$Zeit_Gruen = 20;

			$Blau = 255;
			$Zeit_Blau = 20;
		break;
		
		case "ff":
			$Rot = 255;
			$Zeit_Rot = 20;

			$Gruen = 0;
			$Zeit_Gruen = 20;

			$Blau = 0;
			$Zeit_Blau = 20;

	}
}

PJ_DimRGBW($id,$Rot,$Zeit_Rot,$Gruen,$Zeit_Gruen,$Blau,$Zeit_Blau,0,0);

Hallo Martin,

dank Deines Kick-off Besuchs bei mir gehts auch langsam voran.

Und nun stolpere ich über dein Fader-Script. Sowas schickes würde ich mir
auch für meine EIB-Dali-RGB Umgebung wünschen - meinst Du das lässt sich
(viel)leicht adaptieren ?

vg

Johann

Hierüber klappt die Ansprache wunderbar:
$wert1 = 56;
$wert2 = 245;
$wert3 = 156;

$data = array($wert1, $wert2, $wert3);
$rgb = array(25135, 23492, 18271);

for($i=0; $i<count($rgb) && count($data); $i++)
{
EIB_Scale($rgb[$i], $data[$i]);
}

Hallo Johann,

probier das mal:


<?
/*=============================================
FarbFade - Martin Heinzel - 03.12.2010
Version: 1.1

Beschreibung:
Dieses Script generiert eine Farb-Fade für RGB-Strips.
(für meinen Freund Johann und seine bezaubernde Frau ;-) ).


Änderungen
04.12.2010 von Version 1.0 -> 1.1

Berschreibung:
Script vereinfacht.
Fehler bei der Ausgabe auf EIB entfernt.

Änderungen
tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------
// ID's
//---------
//ID's der LED-Strips
$id_arr_rgb    =  array(25135, 23492, 18271);
//ID's der Zwischenspeicher für rot, grün, blau
$id_Rot = 	@IPS_GetVariableIDByName("RGB_Rot", $IPS_SELF);
if($id_Rot === false)
{
	//erzeugen des Stack für Rot
	$id_Rot = IPS_CreateVariable(1);
   IPS_SetName($id_Rot, "RGB_Rot");
	IPS_SetParent($id_Rot, $IPS_SELF);

	$id_Rot_Master = IPS_CreateVariable(1);
   IPS_SetName($id_Rot_Master, "RGB_Rot_Master");
	IPS_SetParent($id_Rot_Master, $IPS_SELF);

	//erzeugen des Stack für Grün
	$id_Gruen = IPS_CreateVariable(1);
   IPS_SetName($id_Gruen, "RGB_Gruen");
	IPS_SetParent($id_Gruen, $IPS_SELF);

	$id_Gruen_Master = IPS_CreateVariable(1);
   IPS_SetName($id_Gruen_Master, "RGB_Gruen_Master");
	IPS_SetParent($id_Gruen_Master, $IPS_SELF);

	//erzeugen des Stack für Blau
	$id_Blau = IPS_CreateVariable(1);
   IPS_SetName($id_Blau, "RGB_Blau");
	IPS_SetParent($id_Blau, $IPS_SELF);

	$id_Blau_Master = IPS_CreateVariable(1);
   IPS_SetName($id_Blau_Master, "RGB_Blau_Master");
	IPS_SetParent($id_Blau_Master, $IPS_SELF);
}
else
{
   $id_Rot_Master    =  IPS_GetVariableIDByName("RGB_Rot_Master", $IPS_SELF);
   $id_Gruen  			= 	IPS_GetVariableIDByName("RGB_Gruen", $IPS_SELF);
   $id_Gruen_Master  =  IPS_GetVariableIDByName("RGB_Gruen_Master", $IPS_SELF);
	$id_Blau	  			= 	IPS_GetVariableIDByName("RGB_Blau", $IPS_SELF);
	$id_Blau_Master	= 	IPS_GetVariableIDByName("RGB_Blau_Master", $IPS_SELF);
}

// Variablen
//--------------
$Rot 				= 	GetValueInteger($id_Rot);
$Rot_Master    =  GetValueInteger($id_Rot_Master);
$Gruen  			= 	GetValueInteger($id_Gruen);
$Gruen_Master  =  GetValueInteger($id_Gruen_Master);
$Blau	  			= 	GetValueInteger($id_Blau);
$Blau_Master	= 	GetValueInteger($id_Blau_Master);

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

if (!isset($IPS_COMPONENT))    $IPS_COMPONENT   ="";
if (!isset($IPS_SENDER)) 		 $IPS_SENDER  		="";
if($IPS_COMPONENT == "FarbFade" or
	$IPS_SENDER 	== "WebFront" or
	$IPS_SENDER 	== "Execute")
{
	$ScriptTimer =	IPS_GetScriptTimer($IPS_SELF);
	if($ScriptTimer == 0)
	{
		IPS_SetScriptTimer($IPS_SELF, 1);

		$Rot_Master 	= 	252;
      $Rot           = 	0;
		$Gruen_Master 	= 	0;
		$Gruen         =  0;
		$Blau_Master	= 	0;
		$Blau          =  0;
	}
	else
	{
		IPS_SetScriptTimer($IPS_SELF, 0);
		return;
	}
}

if($Rot_Master != 0 and $Rot >= $Rot_Master)
{
	$Rot_Master 	= 	0;
	$Gruen_Master 	= 	252;
	$Blau_Master	= 	0;
}

if($Gruen_Master != 0 and $Gruen >= $Gruen_Master)
{
	$Rot_Master 	= 	0;
	$Gruen_Master 	= 	0;
	$Blau_Master	= 	252;
}

if($Blau_Master != 0 and $Blau >= $Blau_Master)
{
	$Rot_Master 	= 	252;
	$Gruen_Master 	= 	0;
	$Blau_Master	= 	0;
}

$Colors  		=  array($Rot, $Gruen, $Blau);
$Color_Master  =  array($Rot_Master, $Gruen_Master, $Blau_Master);

foreach($Colors as $key => $Color)
{
	if($Colors[$key] <= $Color_Master[$key])
	{
	   $Colors[$key]  =  $Colors[$key] +12;
	   if($Colors[$key] > $Color_Master[$key])
	   {
			$Colors[$key]  =  $Color_Master[$key];
		}
	}
	else
	{
	   $Colors[$key]  =  $Colors[$key] -12;
	   if($Colors[$key] <= 0)
	   {
			$Colors[$key]  =  0;
		}
	}
	
   EIB_Scale($id_arr_rgb[$key], $Colors[$key]);
}

SetValueInteger($id_Rot_Master, $Rot_Master);
SetValueInteger($id_Rot, $Colors[0]);
SetValueInteger($id_Gruen_Master, $Gruen_Master);
SetValueInteger($id_Gruen, $Colors[1]);
SetValueInteger($id_Blau_Master, $Blau_Master);
SetValueInteger($id_Blau, $Colors[2]);

//------------------------ Main ENDE --------------------------

?>

Hab das Script noch mal überarbeitet!!

Bitte denke daran das diese Art des fadens Ressourcen frisst. Das Script wird jede Sekunde aufgerufen!!
Die IPS_RGBW’s haben ein „zeitliches dimmen“ im Bauch.

Eventuell kann der Dali das auch. Schau mal nach.

hallo martin, herzlichen dank für deine mühen !!!

die erste version hat folgenden fehler gebracht:

Notice: Undefined variable: rgb in C:\IP-Symcon\scripts\59483.ips.php on line 181

Warning: eib_scale: Instance #0 not found! in C:\IP-Symcon\scripts\59483.ips.php on line 181

Notice: Undefined variable: rgb in C:\IP-Symcon\scripts\59483.ips.php on line 181

Warning: eib_scale: Instance #0 not found! in C:\IP-Symcon\scripts\59483.ips.php on line 181

Notice: Undefined variable: rgb in C:\IP-Symcon\scripts\59483.ips.php on line 181

Warning: eib_scale: Instance #0 not found! in C:\IP-Symcon\scripts\59483.ips.php on line 181

die 1.1er version bringt keine fehler.
aber es fadet auch nichts :frowning:

wo kann ich die fade zeit beeinflussen ?
meine veränderungen am IPS_SetScriptTimer($IPS_SELF, 1); bringen nur nicht nachvollziehbare änderungen :slight_smile:

Hallo Johann,

unter dem Script sind Variablen.

RGB_Rot, RGB_Gruen, RGB_Blau. Diese Variablen müssen jeweils von 0-252 laufen.

Wenn Du das Script händisch startet wird der Script-Timer gesetzt und das Script wird jede Sekunde aufgerufen. -> Der „Fade“ läufte.

Wenn Du das Script nochmals händisch startest wird der Script-Time auf 0 gesetzt. ->„Fade stop“

Beim ersten Aufruf werden alle benötigten Variablen erzeugt.

Am Ende werden lediglich die Werte auf den EIB geschrieben.

In der Baumansicht müsstest Du eigendlich sehen wie sich die Variablen unter dem Script verändern.

also Martin, das script hängt sich unabhängig von den angesprochenen geräten/kanälen sowie zeitintervallen wohl aufgrund der hochen rechen-last nach ca. 1,5 minuten auf - evtl. liegts auch an der hohen bus-last richtung eib…

ich werd mal mit den geräte internen dimmzeiten und größeren intervallen beim script spielen…

bericht folgt.