[Modul] Symcon Integrity Check

Das ist keine Fehlinterpretation :wink: , du kannst es umgehen mit 10*1000 im Sleep.

Zahlen mit 5 Ziffern werden als ID betrachtet.

Aah, von hinten durch die Brust ins Auge.
Ich dachte auch Module werden weiterentwickelt…

Und dadurch sind 5 stellige Zahlen auf einmal keine mögliche ObjektID mehr? :face_with_peeking_eye:

Irgendwie muss ein sleep(10000) ja auch bestraft werden😇

Keine Ahnung was Du damit meinst. Ich bin Anwender und kein Entwickler. Wenn es keine Möglichkeit gibt einen Funktionsparameter zu unterscheiden, dann muss man wohl damit leben. Ich finde eine zusätzliche Rechenoperation unnötig nur um das Modul nutzen zu können.

Dann lass dir das hier gesagt sein:

Und er hat Recht :rofl:
10 Sekunden ein Script anhalten ist eine so richtig schlechte Idee.
Gibt mehrere, für Anwender, bessere Lösungen; z.b. den Ablaufplan.
Michael

Ich glaube wir kommen hier wohl ein wenig vom Thema ab. Fakt ist doch, dass es eine Fehlinterpretation ist. Der Fehlertext sagt es doch oder etwa nicht.

hmm, woher soll das Modul wissen, wann eine Ziffernfolge keine ID ist sondern „nur“ eine Zahl?
Es ist ja völlig normal, das auch an Funktionen ID’s übergeben werden. Um zu wissen, das IPS_Sleep() keine ID sondern eine Wartezeit übergeben wird, setzt voraus, das das Modul die Bedeutung jedes Parameters jeder Funktion, einschliesslich der Funktionen, die jemand in einem Script erstellt hat, kenn. Nur so könnte man solche „Fehlinterpretationen“ vermeiden.
Das sprengt doch die Möglichkeit eines solche Moduls.
Weil es gewissermassen immer eine Raterei ist, gibt es ja sowohl die Möglichkeit bestimmte Zahlen auszuschliessen („zu ignorierende Zahlen“) oder eine Zeile als zu ignorieren zu kennzeichnen („PHP-Zeile mit diesem Kommentar nicht prüfen“).

Aber wenn du eine bessere Idee hast, gerne. Ich freue mich immer über gute Vorschläge.

1 „Gefällt mir“

Moin Demel,
(mindestens) eine kleine Lücke in der Prüfung gibt/gab es noch. Wenn man PHP-Code direkt in Aktionsroutinen z.B. von Instanzen einbaut werden die nicht analysiert. Das selbe könnte vielleicht auch für Ablaufpläne, die ich nicht benutze, gelten.

Mit folgenden, kleinen Code-Schnipsel bekommt man den Quelltext von Aktionsroutinen und kann schauen wie es mit den IDs darin aussieht. Ich habe es mit der Instanz Anrufmonitor getestet.

<?php
// Alle Instanzen auf Aktionen prüfen
$Instances = IPS_GetInstanceList();
foreach ($Instances as $Instance){

// Konfiguration der Instanz als Array holen
    $Config = IPS_GetConfiguration($Instance);
    $ConfigArray = json_decode($Config, true);

// Gibt es Aktionen =
    if (isset($ConfigArray['Actions'])){

// Aktionen als Array
        $ActionsArray = json_decode($ConfigArray['Actions'], true);
        foreach ($ActionsArray as $Action){

// Aktion auf PHP-Code prüfen
            $Parameter = json_decode($Action['action'], true);
            if (isset($Parameter['parameters']['SCRIPT'])){

// PHP Quellcode der Aktion holen
                $Script = $Parameter['parameters']['SCRIPT'];
                var_dump($Script);
                echo PHP_EOL;
            }
        }
    }
}
?>

Vielleicht könnte Symcon es bei der Referenzsuche auch benutzen denn da gibt es auch die Lücke.

Ralf

Aber doch nur, denn das Property mit einer Aktion Actions heisst?
Das Property vom Typ SelectAction kann doch beliebig heissen und auch eventuell in einer Liste verschachtelt sein.
Oder bin ich da auch dem falschen Dampfer?

1 „Gefällt mir“

Und wird auch nur dort funktionieren, weil die Eigenschaft dort ‚Actions‘ heißt und das eine Liste ist.
Hat die Eigenschaft einen anderen Namen, oder ist keine Liste, wird es nicht funktionieren.
Michael

Ich kann das Modul gar nicht hinzufügen.

richimaint

welches Modul? das SymconIntegrity-Modul?
Ich habe das gerade nochmal hinzugefügt in meinem Testsystem, ging ohne Probleme

Hi,
gibt es da keine Vorgaben von IPS? Es gibt noch IPS_GetActions() mal sehen ob man damit was machen kann.

Ralf

Ja das Modul welches im Titel beschrieben wurde.

https://github.com/nikic/PHP-Parser

richimaint

Das ist doch kein Symcon Modul …

Dann habe ich was verpeilt. :woozy_face:

richimaint

Nein. Warum auch.

Nur das Target wird als Referenz registriert. Den Inhalt einer Action nicht. Ob das Symcon intern lösen kann, weiß ich nicht. Vielleicht hier wünschen: Funktionswünsche

Hatte ich mir schon gewünscht. Gerade in meinen Anfängen, die ja noch nicht so lange her sind, bin ich da schon reingefallen. Script gelöscht aber in Aktion aufgerufen und den Fehler konnte ich so nicht finden. Bei IPS_GetActions wird der Anrufmonitor anscheinend nicht gelistet.

Bei Ablaufplan sollte es aber möglich sein mit:

<?php
$Scripts = IPS_GetScriptList();
foreach ($Scripts as $Script){
    if (strpos(IPS_GetScriptFile($Script), '.ips.json') > 0){
        $ScriptInfo = json_decode(IPS_GetScriptContent($Script), true);
        foreach ($ScriptInfo['actions'] as $Action){
            $Parameters = $Action['parameters'];
            if (isset($Parameters['SCRIPT'])){
                $Script = $Parameters['SCRIPT'];
                var_dump($Script);
                echo PHP_EOL;
            }
        }
    }
}
?>

Mich stört es wenn man etwas nicht automatisch prüfen kann :frowning_face:

Ralf