Simples Random-Farb-Script für den RGBW-868 Stripe

Hallo,

wer es mal auf die schnelle schön bunt haben will:

<?

// Installation:
//1. Bei $LEDid die ID der RGBW-868 Instanz eintragen.
//2. Script mit dem Ausühren-Button oder Runscript starten.
//3. Alles so schön bunt hier!

//An-Ausschalten mit:
//1. "Ausführen" Button im Editor oder
//2. IPS_runscript (diese Script-ID) oder
//3. direktes Ändern der Variablen "Aktiv" auf true oder false


$LEDid=32126 /*[RGBW-868 (Stripe)]*/;
$fade=7; //Fadetime / Zeit bis zur nächsten Farbe in Sek.

if(($IPS_SENDER == "Runscript")or($IPS_SENDER == "Execute")or($IPS_SENDER == "WebFront")){
   $aktivid = @IPS_GetVariableIDByName("Aktiv", $IPS_SELF);
   if($aktivid===false) {
      $aktivid = IPS_CreateVariable(0);
      IPS_SetParent($aktivid, $IPS_SELF);
      IPS_SetName($aktivid, "Aktiv");
   }
	$eid = @IPS_GetEventIDByName("Aktiv-Event", $IPS_SELF);
   if($eid===false) {
      $eid = IPS_CreateEvent(0);
      IPS_SetEventTrigger($eid, 1, $aktivid);
      IPS_SetParent($eid, $IPS_SELF);
      IPS_SetName($eid, "Aktiv-Event");
      IPS_SetEventActive($eid, true);
   }
   SetValue ($aktivid, (GetValue($aktivid) ? false:true));
	}

if($IPS_SENDER == "Variable")	{
   $aktivid = @IPS_GetVariableIDByName("Aktiv", $IPS_SELF);
   $aktiv=GetValue($aktivid);
	if($aktiv){
   	IPS_SetScriptTimer($IPS_SELF, 1);
		}
	else{
	   IPS_SetScriptTimer($IPS_SELF, 0);
	   PJ_DimRGBW($LEDid,0,0,0,0,0,0,0,0);
	   }
	}

if($IPS_SENDER == "TimerEvent"){
	$rot=rand(0,255);$gruen=rand(0,255);$blau=rand(0,255);
	PJ_DimRGBW($LEDid,$rot,$fade,$gruen,$fade,$blau,$fade,0,0);
	IPS_SetScriptTimer($IPS_SELF, $fade);
	}

?>

Hier noch eine ‚extendet‘ Version mit Dimmzeit und Helligkeitseinstellung im Objektbaum :).


<?

// Installation:
//1. Bei $LEDid die ID der RGBW-868 Instanz eintragen.
//2. Script mit dem Ausühren-Button oder Runscript starten.
//3. Es ist alles so schön bunt hier!

//An-Ausschalten mit:
//1. "Ausführen" Button im Editor oder
//2. IPS_runscript (diese Script-ID) oder
//3. direktes Ändern der Variablen "Aktiv" auf true oder false

//Zu Hell? Helligkeit im Objektbaum einstellbar (1-255)
//Dimmzeit im Objektbaum einstellbar

$LEDid=32126 /*[RGBW-868 (Stripe)]*/;


if(($IPS_SENDER == "Runscript")or($IPS_SENDER == "Execute")or($IPS_SENDER == "WebFront")){
   $aktivid =LEDCreateVariableByName($IPS_SELF, "Aktiv", 0);
	$maxlumid=LEDCreateVariableByName($IPS_SELF, "Helligkeit (1-255)", 1);
	$fadetimeid=LEDCreateVariableByName($IPS_SELF, "Dimmzeit (Sek.)", 1);
	$eid = @IPS_GetEventIDByName("Aktiv-Event", $IPS_SELF);
   if($eid===false) {
      $eid = IPS_CreateEvent(0);
      IPS_SetEventTrigger($eid, 1, $aktivid);
      IPS_SetParent($eid, $IPS_SELF);
      IPS_SetName($eid, "Aktiv-Event");
      IPS_SetEventActive($eid, true);
   }
   SetValue ($aktivid, (GetValue($aktivid) ? false:true));
	}

if($IPS_SENDER == "Variable")	{
   $aktivid = @IPS_GetVariableIDByName("Aktiv", $IPS_SELF);
   $aktiv=GetValue($aktivid);
	if($aktiv){
   	IPS_SetScriptTimer($IPS_SELF, 1);
		}
	else{
	   IPS_SetScriptTimer($IPS_SELF, 0);
	   PJ_DimRGBW($LEDid,0,0,0,0,0,0,0,0);
	   }
	}

if($IPS_SENDER == "TimerEvent"){
   $maxlumid=LEDCreateVariableByName($IPS_SELF, "Helligkeit (1-255)", 1);
	$fadetimeid=LEDCreateVariableByName($IPS_SELF, "Dimmzeit (Sek.)", 1);
	$maxlum=GetValue($maxlumid);
	if (($maxlum>=256)or($maxlum<=0)){
		$maxlum=255;
		SetValue($maxlumid,$maxlum);
		}
   $fade=GetValue($fadetimeid);
	if ($fade<=0){
		$fade=10;
		SetValue($fadetimeid,$fade);
		}
	PJ_DimRGBW($LEDid,rand(0,$maxlum),$fade,rand(0,$maxlum),$fade,rand(0,$maxlum),$fade,0,0);
	IPS_SetScriptTimer($IPS_SELF, $fade);
	}

function LEDCreateVariableByName($id, $name, $type)	{  //Variablen auslesen bzw. erstellen
   $vid = @IPS_GetVariableIDByName($name, $id);
   if($vid===false) {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
   }
   return $vid;
}
?>

Bunte Grüße
Smudo

Danke - perfekt - aber was macht das erste Skript anders :confused:

Edit:

Lesen sollte man können: Random :rolleyes:

MST

Hallo Smudo,

einfach perfekt. Habe die Skripte ausprobiert und Sie laufen!!! :smiley:

Danke

Lutz

Hallo Smudo,
super Script.
Danke.

mfg.
Jürgen

Herzlichen Dank an Smudo und Steiner!

Funktioniert perfekt!

Habe das Script heute mal probiert, bei manchen Farbwerten ist bei mir ein Flackern warzunehmen. Origanal RGB Starter Set von Steiner im Einsatz. Jemand eine Idee?

Beim manuellen Rumprobieren mit den unterschiedlichen Werten und Fadezeiten hab ich auch schon mal gedacht, daß es kurz mal geflackert hat.
Wenn das Script aber so gleichmäßig vor sich hin läuft, und das tut es im Moment eigentlich dauernd :), hab ich noch nichts derartiges bemerkt.
Vielleicht bei bestimmten Fadezeiten?

Erstmal Danke an Smudo für die Scripte.
Mir sind die Random Scripte etwas zu „weiß“. Das kommt davon dass meist alle drei RGB Ausgänge angesteuert werden. Wie müsste der Dim_RGBW aussehen wenn nur jeweils zwei Ausgänge angesteuert werden? Natürlich wieder durch einen rand Befehl. Hat jemand eine Idee?

Könnte in etwa so aussehen:


<?
//return;
// Installation:
//1. Bei $LEDid die ID der RGBW-868 Instanz eintragen.
//2. Script mit dem Ausühren-Button oder Runscript starten.
//3. Es ist alles so schön bunt hier!

//An-Ausschalten mit:
//1. "Ausführen" Button im Editor oder
//2. IPS_runscript (diese Script-ID) oder
//3. direktes Ändern der Variablen "Aktiv" auf true oder false

//Zu Hell? Helligkeit im Objektbaum einstellbar (1-255)
//Dimmzeit im Objektbaum einstellbar

$LEDid=32126 /*[RGBW-868 (Stripe)]*/;
$kanaele=3; //1 -> 1 Kanal / 2 -> Max 2 Kanäle / 3 -> Max 3 Kanäle / 4 -> immer 2 Kanäle / 5 -> immer 3 Kanäle
$minlum=0;

if(($IPS_SENDER == "Runscript")or($IPS_SENDER == "Execute")or($IPS_SENDER == "WebFront")){
   $aktivid =CreateVariableByName($IPS_SELF, "Aktiv", 0);
	$maxlumid=CreateVariableByName($IPS_SELF, "Helligkeit (1-255)", 1);
	$fadetimeid=CreateVariableByName($IPS_SELF, "Dimmzeit (Sek.)", 1);
	$eid = @IPS_GetEventIDByName("Aktiv-Event", $IPS_SELF);
   if($eid===false) {
      $eid = IPS_CreateEvent(0);
      IPS_SetEventTrigger($eid, 1, $aktivid);
      IPS_SetParent($eid, $IPS_SELF);
      IPS_SetName($eid, "Aktiv-Event");
      IPS_SetEventActive($eid, true);
   }
   SetValue ($aktivid, (GetValue($aktivid) ? false:true));
	}

if($IPS_SENDER == "Variable")	{
   $aktivid = @IPS_GetVariableIDByName("Aktiv", $IPS_SELF);
   $aktiv=GetValue($aktivid);
	if($aktiv){
   	IPS_SetScriptTimer($IPS_SELF, 1);
		}
	else{
	   IPS_SetScriptTimer($IPS_SELF, 0);
	   PJ_DimRGBW($LEDid,0,0,0,0,0,0,0,0);
	   }
	}

if($IPS_SENDER == "TimerEvent"){
	$aktiv=GetValue(@IPS_GetVariableIDByName("Aktiv", $IPS_SELF));
	if ($aktiv==false){
	   IPS_SetScriptTimer($IPS_SELF, 0);
	   PJ_DimRGBW($LEDid,0,0,0,0,0,0,0,0);
	   return;
	   }
   $maxlumid=CreateVariableByName($IPS_SELF, "Helligkeit (1-255)", 1);
	$fadetimeid=CreateVariableByName($IPS_SELF, "Dimmzeit (Sek.)", 1);
	$maxlum=GetValue($maxlumid);
	if (($maxlum>=256)or($maxlum<=0)){
		$maxlum=255;
		SetValue($maxlumid,$maxlum);
		}
   $fade=GetValue($fadetimeid);
	if ($fade<=0){
		$fade=10;
		SetValue($fadetimeid,$fade);
		}
	switch ($kanaele)
		{
		case "1":
		$colors=rand(1,3);
		break;
		case "2":
		$colors=rand(1,6);
		break;
		case "3":
		$colors=rand(1,7);
		break;
		case "4":
		$colors=rand(4,6);
		break;
		case "5":
		$colors=7;
		break;
		}

	switch ($colors)
		{
		case "1":
		$r=rand($minlum,$maxlum);$g=0;$b=0;
		break;
		case "2":
		$r=0;$g=rand($minlum,$maxlum);$b=0;
		break;
		case "3":
		$r=0;$g=0;$b=rand($minlum,$maxlum);
		break;
      case "4":
		$r=rand($minlum,$maxlum);$g=rand($minlum,$maxlum);$b=0;
		break;
		case "5":
		$r=rand($minlum,$maxlum);$g=0;$b=rand($minlum,$maxlum);
		break;
		case "6":
		$r=0;$g=rand($minlum,$maxlum);$b=rand($minlum,$maxlum);
		break;
		case "7":
		$r=rand($minlum,$maxlum);$g=rand($minlum,$maxlum);$b=rand($minlum,$maxlum);
		break;
		}

	PJ_DimRGBW($LEDid,$r,$fade,$g,$fade,$b,$fade,0,0);
	IPS_SetScriptTimer($IPS_SELF, $fade);
	}

function CreateVariableByName($id, $name, $type)	{  //Variablen auslesen bzw. erstellen
   $vid = @IPS_GetVariableIDByName($name, $id);
   if($vid===false) {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
   }
   return $vid;
}
?>

Grüße
Smudo

perfekte Scripts. Wenn ich die Helligkeit runterschraube, leuchten die LED’s nicht mehr. Sind da bestimmte Werte einzuhalten?

Die Werte, die du einhalten musst, sind im Script angegeben. Bei falschen Eingaben werden diese aber durch das Script automatisch korrigiert.
Wenn du niedrige Helligkeitswerte einstellst, kann es natürlich vorkommen, das zufällig die Werte so gering sind, dass es kaum zu sehen ist. Dafür gibt es im Script auch den Wert ‚minlum‘ den du einstellen kannst um eine gewisse Mindesthelligkeit zu erzielen.

Gruß
Smudo

über den Objektbaum startet das Script wunschgemäss. Im WF tut sich nichts. Habs direkt und als Link probiert. Dienst habe ich auch neu gestartet, brachte keinen Erfolg. Was mach ich da falsch?

Füge mal zur ersten Zeile das WebFront dazu, dann sollte es klappen …


if(($IPS_SENDER == "Runscript")or($IPS_SENDER == "Execute")or($IPS_SENDER == "WebFront")){

lg
Andreas

das wars. Besten Dank

Ah, ich nutze selber kein Webfront, deshalb hab ich das nicht berücksichtigt. Ich werde es aber dann auch mal oben rein-editieren.

seit 2 Wochen teste ich alle Möglichkeiten das Randomscript bzw. das RGB Modul per Timer auszuschalten. Per Webinterface, Iphone oder direkt ausschalten funktioniert. Einschalten per Timer funktioniert auch immer.
Das Merkwürdige ist wenn ich einen Timer erstelle der 2 Minuten später ausschalten soll, funktioniert auch. Nur per Astrotimer und ein Timer um 22:01 Uhr funktioniert nicht ( Andere Zeiten auch probiert).
Was habe ich versucht.
Per Script die Variable auf False gesetzt. Die Variable wird gesetzt aber das Script nicht beendet.
Der Variable ein Profil zugewiesen und mit dem Randomscript verknüpft
Per Script das RGB Modul auf Aus. Funktioniert nicht.
Mein erstes Modul mit einer festen Farbe zu schalten klappt auch.
Ich bin jetzt mit meinem Latein am Ende. Über einen Hinweis würde ich mich freuen!
mfg
Armin

Erstmal Danke an Smudo für das Tolle Script.

Perfekt wäre es wenn man noch

  • Dimmezeit
  • Helligkeit
  • Aus / Ein
    im Webfront schalten könnter

Gruß wibo

Könnte ich damit auch irgendwie ein Pulsieren realisieren?

Wie würde ich das machen?
Eine Schleife im PHP macht ja kein Sinn, da nach 30s der Timeout greift.
Wahrscheinlich müsste ich am Ende des Scripts, das Script selbst wieder starten.

Keiner eine Idee oder kleinen Hinweis?

mfg
Armin

Pefektes Skript. Vielen Dank.

Jetzt habe ich aber noch eine (wahrscheinlich dumme) Frage.

Aber das habe ich bisher noch nie ausprobiert.

Wie kann ich mit einem HM Wandsender ein Script ausführen und beenden.

Im konkreten Fall würde ich gerne einen 2fach HM Wandsender in Küche hängen und dann eben auf Knopfdruck das Script hier starten und auch wieder so beenden.

Ich habe den Wandsender an IPS angelernt.

Es gibt 5 Variablen.

  1. Install Test
  2. Press_Cont
  3. Press_Long
  4. Press_Long Release
  5. Press_Short

Ich müsste doch jetzt wahrscheinlich noch ein Script bauen, wo ich die PressShort Variable mit dem RandomFarbScript verbinde oder?

Wie müsste das ausschauen? Besten Dank.