compatibility.php - oder IPS aufräumen

Hallo

ich wollte mal mein IPS ein wenig aufräumen und dabei auch die obsoleten nur mehr über die compatibility.php unterstützen Befehle updaten.

Gibst irgendwo ein Script welches mir alle veralteten Befehle in meinen Scripten sucht und auflistet ?
So könnte man im laufenden Betrieb aktualisieren

Probeweises hartes Abschalten der Kompatiblitätsfunktionen war keine gute Idee. Es funktionierte fast gar nichts mehr, und das Error log war komplett zu.

schönen Danke
bb

Abend!

Da gab es mal ein Skript hier im Forum, welches die ganzen Systemvariablen usw. prüft…nur leider kann ich es grad nicht finden :frowning:

Den Thread finde ich nicht, aber das Skript habe ich grad noch bei mir gefunden :slight_smile:

<?
$search = Array('$IPS_SENDER', '$IPS_SELF', '$IPS_VALUE', '$IPS_VARIABLE', '$IPS_INSTANCE',
                      '$IPS_EVENT', '$IPS_TRIGGER', '$IPS_OLDVALUE', '$IPS_TARGET', '$IPS_LINK',
                     '$IPS_REMOTE_ADDR', '$IPS_DIRECTION', '$IPS_DURATION', '$IPS_COMPONENT',
                     '$IPS_REMOTE_HOST', '$IPS_STATUS', '$IPS_STATUSTEXT' );


$eventIDs = IPS_GetEventList();
$found = false;
$anzahl = 0;

foreach($eventIDs as $id)
{
    if ($id != $IPS_SELF)
   {
      $event = IPS_GetEvent($id);
      $data = $event['EventScript'];
      foreach($search as $befehl)
      {
         if(!(strpos($data, $befehl) === false))
            {
            $found = true;
            $anzahl++;
            echo "Event: ".IPS_GetName($id)." #".$id.", Systemvariable: ".$befehl.", gefunden.
";
         }
      }
    }
}

echo "\rEs sind noch ".$anzahl." Änderungen bei den Events zu machen!

";

$scriptIDs = IPS_GetScriptList();
$found = false;
$anzahl = 0;

foreach($scriptIDs as $id)
{
    if (($id != $IPS_SELF) AND ($id != "39106"))
   {
       $script = IPS_GetScript($id);
      $data = file_get_contents(IPS_GetKernelDir()."/scripts/".$script['ScriptFile']);
      foreach($search as $befehl)
      {
         if(!(strpos($data, $befehl) === false))
            {
            $found = true;
            $anzahl++;
            echo "Script: ".IPS_GetName($id)." #".$id.", Systemvariable: ".$befehl.", gefunden.
";
         }
      }
    }
}
echo "\rEs sind noch ".$anzahl." Änderungen bei den Scripts zu machen!

";
?>

Meintest du sowas, oder habe ich dich falsch verstanden? Wenn du so Dinge wie WWWReader oder CSCK meinst, dann kannst du das Skript hier sicher noch erweitern.

Grüße,
Chris

Hallo Chris

Ja danke, genau das suchte ich.
War leider in der Vergangenheit etwas nachlässig und hab nur mit den alten Variablen und Funktionsnamen gearbeitet.
Für 4.0 möchte ich aber alles geradeziehen und dann die compatibility.php rauswerfen.

Hast du eine Ahnung ob ich einfach global mit Suchen&Ersetzen arbeiten kann? Oder bringt das unabsehbare Risiken und besser alles händisch nachziehen.

… das Script hat mir eben 376 Beanstandungen gefunden.

gruß
bb

376 :eek: Das is ja nix :smiley:

Ich habe mit „Suchen und Ersetzen“ gearbeitet…aber man sollte gut kontrollieren. Denn bei „Global“ muss die Systemvariable dahinter anders geschrieben werden! Um nur mal ein doofes Beispiel zu nennen.

Aber ist sicher weniger Arbeit automatisch ersetzen zu lassen und danach die „Problemfälle“ zu fixen :slight_smile:

Grüße,
Chris

Ja genau. Hab eben alle durch. Schon interessant wie oft wir hier voneinander abgeschrieben haben.
Die „CreateVariableByName“ ist ja ein Dauerbrenner. Hab die zig mal gefunden, in eigenen und in vielen fremden Scripten.
immer mit Global deklariertem $IPS_SELF, und dann einem daraus entstandenem Folgefehler.

gruß
bb

Und da dran bin ich gescheitert.

global $IPS_SELF;

Jetzt hab ich eine halbe Stunde gesucht und bin nicht vorwärts gekommen.
Wie muss den das jetzt geschrieben werden?

global $_IPS['SELF'];

geht niicht

Ganz einfach so :slight_smile:

Global ${$_IPS['SELF']};

Grüße,
Chris

$_IPS ist eine global. Die Zeile kann also komplett weg.

paresy

Danke dir!
Werde es gleich einbauen.

Noch besser.

@paresy: War das unter IPS 3.4 auch schon so? Weil da gibt es einige Skripte (nicht von mir) in denen das eingebaut ist :confused: Oder war das unter 3.4 auch schon überflüssig? Oder gibt es einen Sinn, warum das eingebaut war? :confused:

Grüße,
Chris

Hemmungsloses Copy & Paste, - bzw. gelebte Community :slight_smile:

Suche auch danach
„This script was created by“ oder "this variable was created by "

Das kommt auch sehr oft vor. Wenn IPS_Self gelöscht wurde funktioniert die Zeile nicht mehr.
So ist sie dann richtig:

IPS_SetInfo($ScriptID, "This script was created by: #".$_IPS['SELF']."#");  

gruß
bb

Doch noch was unklar:

        IPS_SetInfo($vid, "this variable was created by script #$_IPS['SELF']");

erzeugt:

Parse error: syntax error, unexpected ‚‘ (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in [1-Wire Controller E-Service Online\Temp\Temp] on line 136
Abort Processing during Fatal-Error: syntax error, unexpected ‚‘ (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)
Error in Script C:\Program Files\IP-Symcon\scripts\16404.ips.php on Line 136

Siehe 1 Post über dir :smiley: :smiley: :smiley:

-Chris-

Danke, Bernhards Lösung funktioniert.
Hat sich überschnitten