RGB-Farbwechsel-Script nach 5.x migrieren

Moin,
ich hab seit ewigen Zeiten ein RGB Farbwechsler-Script im Webfront um mal für Partys ein bisschen buntes Licht zu machen. Mittlerweile habe ich auf die 5.x migriert und Halloween naht…
Leider funktioniert das alte Script so ohne weiteres nicht (hab die Nummer der RGBW-Instanz natürlich angepasst) und wirft mir „Undefined variable: IPS_SENDER in /var/lib/symcon/scripts/14593.ips.php on line xx“-Meldungen.
Könnte da mal jemand kurz schauen was ich ändern muss damit es auch unter 5.x läuft?
Merci und Gruß,
Der Hocky

<?
//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=17770 /*[Objekt #17770 existiert nicht]*/;
$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;
}
?>

Hi,
ich benutze $_IPS[‚SENDER‘] bin aber erst seit 5.1 dabei.

Ralf

Buah, das Script ist aber schon uralt und der Fehler findet sich zuhauf im Forum ;).

IPS_SENDER diese Schreibweise gibt es schon lange nicht mehr, du musst alle$IPS_… gemäß folgendem Muster anpassen:

$_IPS[‚SENDER‘]

Mein Namensvetter war schneller :).

Jaja, hab mein IPS auch schon lange nicht mehr angefasst… :rolleyes:

Das war schon mal gut, nun habe ich noch drei Meldungen:

Notice:  Undefined variable: IPS_SELF in /var/lib/symcon/scripts/14593.ips.php on line 21

Notice:  Undefined variable: IPS_SELF in /var/lib/symcon/scripts/14593.ips.php on line 22

Notice:  Undefined variable: IPS_SELF in /var/lib/symcon/scripts/14593.ips.php on line 23

Wie geschrieben „alle“!

Also dafür dann auch $_IPS[‚SELF‘] nehmen.

Da hat jemand die Migrationsanleitungen nicht gelesen :wink:

Die Schreibweise gibt es seit mindestens 2015 nicht mehr.

Versuche es hiermit:

<?php

//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=12345;
$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")){
   $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;
}

Jaa, mea culpa. :o
Komme von der 3.4, da muss man eine Menge Migrationsanleitungen lesen… :eek:
Mache daher einen kompletten Neuaufbau und migriere nicht direkt. Ab und zu stolpert man dann aber doch über liebgewordene Scripte für die es scheinbar in den neuen Versionen auch noch keine entsprechenden eingebauten Funktionen gibt.

@all
Vielen Dank für die Hilfe! Hab jetzt zumindest das Script eigenhändig umgebaut und es läuft. :slight_smile:

EDIT: Hab´s mal im Original-Thread (den ich mittlerweile auch gefunden habe :slight_smile: ) mal zugefügt als Info.