Status von Events abfragen

Hallo,

ja ich sehe, habe ich schlampig kodiert, ich habe nicht abgefragt, ob IPS_GetReferenceList() ein gültiges array liefert.

das dürfte alle Fälle korrekt abfangen:

            $refIDs = IPS_GetReferenceList($instanceID);
            if ($refIDs != false) {
                foreach ($refIDs as $refID) {
                    if (!IPS_ObjectExists($refID)) {
                       addEnt($errorList, 'Instanzen', $instanceID, 'referenziertes Objekt mit ID ' . $refID . ' ist unbekannt', $SymconHealth_Error);
                    }
                }
            }

danke für den Hinweis.
demel

ps: ich mache da übrigens gerade aus dem Script ein Modul, denn ich denke, das kann auch anderen Anwender nutzen, die ggfs mit Skripten überfordert sind. Und Inkonsistenzen können immer mal entstehen, egal ob es Altlasten sind oder man mal was gelöscht hat ohne die Referenzen vorher abzuklären.
In IPS 6 kommt auf jeden Fall mit den Ablaufplänen weitere Stellen hinzu - Ablaufpläne werden in …/scripts als .ips.json gespeichert und zu mindestens Variablen-ID stehen (optional) dann in diesen Dateien. Und natürlich gibt es dann sicherlich - analog zu den Scripts - ein entsprechende Objekt im IPS.

Ich werde vermutlich auch einbauen, das man ein eigenes Script für zusätzliche Prüfungen einbauen kann, die dann mit in die Übersicht einfliessen.

Hi,
bin gespannt. Son Konsistenzcheck kann bestimmt auch bei den ältesten IPS Hasen noch etwas zu Tage bringen. Hast Du bei dir zweifelhafte Stellen gefunden?

Ralf

aktuell nein, aber ich hatte das Script ja seinerzeit erstellt, weil ich nicht erst durch einen Fehler im Ablauf drauf kommen wollte.
Insofern habe ich schon länger aufgetretene Dinge gleich abgearbeitet.
von den neu von dir hinzugefügten Prüfung habe ich keine Meldung hatte ich nicht vorliegen
demel

Hi,
son bißchen beim Ablaufplan geht sogar schon.

#15936(Test): Datei "15936.ips.json" fehlt

Ralf

hallo,

ich habe noch keine Doku der internen Objekte der Ablaufsteuerung gesehen, die kommen ja meines Wissens nach erst, wenn 6.0 released wird

Zählt die Ablaufsteuerung zum Event oder ist das komplett was neues?

ich habe mich ehrlicherweise dieses mal noch gar nicht wirklich mit der neuen Version beschäftigt, beruflich haben mich die letzten 18 Monate voll absorbiert.

demel

Hi,
aus dem Ablaufplan wird im Hintergrund ein Script erstellt. Während unserer Spielereien hier hatte ich mal die Meldung von der Ablaufinstanz das das dazugehörende Script fehlt. Lassen wir uns überraschen.

Ralf

ja, ich sehe in der settings.json auf meinem Tessystem

        "ID57241": {
            "position": 0,
            "readOnly": false,
            "ident": "",
            "hidden": false,
            "disabled": false,
            "type": 3,
            "name": "Plan",
            "info": "",
            "icon": "",
            "parentID": 24129,
            "data": {
                "lastUpdate": 1625676914,
                "isBroken": false,
                "lastExecute": 1626134761,
                "type": 1,
                "file": "57241.ips.json"
            }
        },

ist ein Objekt mit „type“ (=ObjectType) 3(=Script) und in „data“ steht der „type“ (= ScriptType) mit der Wert 1 (bisher gab es nur 0=php).

Wer Augen hat … sieht man auch in der Konsole, das es ein Script ist :cry:

Ja, dann ist schon etwas klarer, was ich da anpassen für IPS 6 müsste …

demel

Moin,
ich habe aktuell eine Instanz mit Status 105 (Instanz wurde nicht erstellt) und die wird nur als Warnung angezeigt. Ich bin der Meinung das 105 eher ein Fehler ist oder?

Ralf

Ja, könnte man so sehen, der Teil müsste dann so aussehen.

$instanceList = IPS_GetInstanceList();
$instanceCount = count($instanceList);
foreach ($instanceList as $instanceID) {
    if (in_array($instanceID, $ignoreIDs)) {
        continue;
    }
    $instance = IPS_GetInstance($instanceID);
    $instanceStatus = $instance['InstanceStatus'];
    if ($instanceStatus == 102) {
        continue;
    }
    if (isset($instanceStatusCodes[$instanceStatus])) {
        $msg = $instanceStatusCodes[$instanceStatus];
    } else {
        $msg = 'Status ' . $instanceStatus;
    }
    switch ($instanceStatus) {
        case 101:
        case 103:
            $lvl = $SymconHealth_Warn;
            break;
        case 104:
            $lvl = $SymconHealth_Info;
            break;
        case 105:
            $lvl = $SymconHealth_Error;
            break;
        default:
            $lvl = $SymconHealth_Info;
            break;
    }
    addEnt($errorList, 'Instanzen', $instanceID, $msg, $lvl);
}

demel

Hi,
sieht so auch schöner (übersichtlicher) aus finde ich.

Ralf

Hallo,

Ich habe nun das Script in ein Modul gegossen und im Modulstore unter Symcon Integrity-Check als Beta eingestellt.

Über ein Feedback würde ich mich freuen

demel

Mit genau dem Begriff zu finden, aber das ist ja immer noch ein Problem vom Store.

Beim manuellen Ausführen:

Use of undefined constant SCRIPTTYPE_FLOWCHART - assumed 'SCRIPTTYPE_FLOWCHART' (this will throw an Error in a future version of PHP) in /var/lib/symcon/modules/.store/demel42.symcon.integrity/IntegrityCheck/module.php on line 325

Warning: Use of undefined constant SCRIPTTYPE_FLOWCHART - assumed 'SCRIPTTYPE_FLOWCHART' (this will throw an Error in a future version of PHP) in /var/lib/symcon/modules/.store/demel42.symcon.integrity/IntegrityCheck/module.php on line 363
[gaanz oooft]
Warning: Use of undefined constant SCRIPTTYPE_FLOWCHART - assumed 'SCRIPTTYPE_FLOWCHART' (this will throw an Error in a future version of PHP) in /var/lib/symcon/modules/.store/demel42.symcon.integrity/IntegrityCheck/module.php on line 478

Die Variablen werden aber gefüllt.

Ui… da habe ich ja noch einiges mehr zum Aufräumen, im Vergleich zum Script.

Moin,
dein Wunsch ist mir Befehl:

„Output-Buffer exceeds Limit“ läuft bei mir gar nicht.
FlowChart von IPS ist 147KB groß.

Ich habe 19 AddMessageEntries weil ich einige Instanzen deaktiviere wenn die Steckdose dazu aus ist.

Ralf

Ups, ich hatte zwar V6 rudimentär vorbereitet aber nicht auf V6 getestet.

Bitte updaten

@paresy: wird es in der IPS 6 auch eine Konstante für den ScriptTyp „Ablaufplan“ geben, analog zu SCRIPTTYPE_PHP?

demel

1 „Gefällt mir“

much better :-), kurz etwas Party und keine Fehlermeldungen vom Modul mehr.

Aber du hast irgendwo noch ein echo oder so drin vom debuggen ;-):

15.07.2021, 15:47:08 | Integrity Check      | 115 Fehler, 0 Warnungen und 392 Informationen gefunden

Hi,
jupp jetzt besser:-)

Ralf

habe das modul gerade auch auf meinem IPS-6-testsystem installiert
Ja, habe die Prüfung der Ablaufplan-Scripte hakt noch. habe ich erstmal deaktiviert.
bitte nochmal probieren

aber ein „echo“ oder so habe ich da nicht drin?

demel

ps: hatt vergessehn, das im store zu veröffentlichen, jetzt gemacht

Hi Demel,

gerade Update gemacht und schon viel besser :slight_smile:

Bekomme jetzt noch folgende Meldungen:

Parameter for ID is not inside of the specified bounds (0..60000) in /var/lib/symcon/modules/.store/demel42.symcon.integrity/IntegrityCheck/module.php on line 295

Warning: Parameter for ID is not inside of the specified bounds (0..60000) in /var/lib/symcon/modules/.store/demel42.symcon.integrity/IntegrityCheck/module.php on line 295

Warning: Parameter for ID is not inside of the specified bounds (0..60000) in /var/lib/symcon/modules/.store/demel42.symcon.integrity/IntegrityCheck/module.php on line 295

Warning: Parameter for ID is not inside of the specified bounds (0..60000) in /var/lib/symcon/modules/.store/demel42.symcon.integrity/IntegrityCheck/module.php on line 295

Cool wäre wenn man IDs hinterlegen könnte (ähnlich zu ignorierende Objekte) die ignoriert werden.

Habe in ganz vielen Skripten mein PLZ drin und würde nur ungern alle durchgehen und den Kommentar reinkopieren, Danke!

Gruß Heiko

Moin,
„ungenutzte Scripte“ ist ziemlich hart. Einige Instanzen erzeugen Scripte um die Benutzung der Geräte zu vereinfachen diese Scripte werden aber oft nie benutzt und erzeugen Warnungen. Ich habe einige Scripte die ich manuell aufrufen um z.B. Sachen zu testen und die werden auch als ungenutzt angesehen.

Ralf

schau ich mir nachher an

du meinst, das diese ID‘s, wenn sie in scripten gefunden werde, ignoriert werden sollen?

demel