[Modul] Symcon Integrity Check

Es handelt sich um ein Modul von Ch. Damsky.

Es ist ein super Tool zur Überprüfung der Integrität der Symcon Konfiguration.
Auflistung aller Inkonsistenzen (wie fehlende Objekte, Scripte, etc) als Fehler, Warnung bzw. Information.

Hallo,
ich habe ein Problem mit der aktuellen Version des Moduls.
Folgenden Zeilen im Script:

Zeile 14: $zeit = $zeit + (86400 * $DaysToAddToGetSunday); //mktime(12,0,0,1,2,2018);
Zeile 15: //$zeit = $zeit + (86400 * 0); //mktime(12,0,0,1,2,2018);

Produzieren folgende Fehlermeldungen:

#10476(Visualization\Steckdosen\Ein / Aus\0 - KG\Technikraum\Steckdose Zirkulation\SteckdoseZirkulationInnerhalbZeitfenster\CalcDateOfSpecificDayInCurrentWeek): Zeile 14 - ein Objekt mit ID 86400 existiert nicht

#10476(Visualization\Steckdosen\Ein / Aus\0 - KG\Technikraum\Steckdose Zirkulation\SteckdoseZirkulationInnerhalbZeitfenster\CalcDateOfSpecificDayInCurrentWeek): Zeile 15 - ein Objekt mit ID 86400 existiert nicht

Kann man da was dagegen machen?
Danke euch !

in der Instanz-Konfiguration kann man Objekt-ID’s angeben, die nicht moniert werden sollen („zu ignorierende Elekemente“, rechte Tabelle) Das wäre eine schnelle Hilfe.
Einziger, eher hypothetischer Nachteil: diese ID wird dann nie als Fehler moniert.
Oder man kann bestimmte Zeilen ausnehmen, indem man im Code einen speziellen Kommentar (weiter unten in der Konfig) schreibt.

Die Erkennung von ID‘s ist etwas Raterei. Ich muss mal prüfen, ob ich das verbessern kann.

Hi,
86400 deutet auf einen Tag in Sekunden hin. Wenn Du statt dessen 24*3600 schreibst sollte es auch weg sein. 5stellige Zahlen könnten auch IPS IDs sein und die kann man nicht von normalen Zahlen unterscheiden.

@demel42,
ist IPS immer noch auf Wort, also 10000…65535, bei IDs beschränkt? Wenn ja könnte man ja schon mal Zahlen >65535 ausschließen.

Ralf

ich schliesse nur Zahlen <10000 aus, das es eine Grenze nach oben gibt, ist mir nicht bekannt.
Neulich hatte ich auch ein Beitrag von @paresy gelesen, wo stand, das die Grenze von 50.000 ID’s nicht technischer Natur ist, es geht auch mehr, wird aber unhandlich.
Ich schau mir den Parser nochmal an, ob ich da mehr Logik rein packen kann, da ja semantische klar ist, das in dieser Berechnung die Zahl keine ID sein kann. Aber ist tricky.
Ansonsten ist den Vorschlag der Berechnung auf jeden Fall sinnvoll.

Das mit 24 * 3600 ist natürlich eine gute Idee.

@demel42
Könnte man sich des Parserteils der Pro-Console „bedienen“?
Die kriegen ja sehr genau raus ob eine Zahl nun eine Zahl oder eine ID ist (und auch ob missing).
Da wären mir noch keine Falschmeldungen aufgefallen.

den Parserteil der Konsole sicherlich nicht, wie der (bestimmt) in der Console abläuft. Aber vielleicht gibt es ja systemintern etwas, das die Referenzen erkennt, kann ich ja mal fragen

@paresy : hat ihr eine Interne Funktion, mit der ihre PHP-Code passt und die ID’s heraus bekommt, die darin codiert sind?
Ich bräuchte aber eine Funktion, der ich beliebigen PHP-Code übergeben kann (nicht ein ein IPS-Sc riet), da ich ja auch Code aus Aktionen sowie String-Code in Variablen (in eigenen Modulen) prüfen.

Nur Heuristiken per RegEx. Du könntest sowas verwenden, wenn du es genauer machen willst: GitHub - nikic/PHP-Parser: A PHP parser written in PHP

paresy

1 „Gefällt mir“

Erst mal Danke für das Modul !

Es wäre hilfreich, wenn auskommentierte Zeilen nicht reklamiert würden.
Im Script
//$kompstart=GetValueString(26929);
//$kompstop=GetValueString(50424);
liefert dann immer, dass Zeile xx Objekt 26929 und 50424 nicht existiert.
Was ja richtig ist, aber eben auskommentiert ist.

Verstehe ich das richtig, dass
//$kompstart=GetValueString(26929); /NO_ID_CHECK/
oder
GOeCharger_SetCurrentChargingWatt( 21276,11000,6 ); //Soll-Watt /NO_ID_CHECK/
keine Fehlermeldung liefern würde?
Das wäre vielleicht einfacher und sicherer, statt die ID’s in NoCheck aufzunehmen.

Ansonsten habe ich auch immer wieder das Thema mit Zahlen wie habre das beschreibt.
Aber ich kann damit leben.

Ja, stimme ich absolut zu. Aber Kommentare zu erkennen ist echt kompliziert, weil diese ja auch mehrzeilig sein können und andererseits eventuell nur Teile einer Zeile.
Hab mir da schon die Zähne dran ausgebissen.

Ja, so ist es, allerdings nur fast richtig - der Standard ist ja /*NO_ID_CHECK*/ (nicht /NO_ID_CHECK/).
Den String kann man in der Konfiguration beliebig einstellen, Hauptsache eindeutig.

Ich erhalte diese Instanzenmeldung:
referenziertes Objekt mit der ID 1 existiert nicht

image

Weis jemand, was das Objekt mit der ID 1 ist?
Ich kenne nur 5stellige Objekte…

oh, da prüfe ich vermutlich was nicht richtig ab.
du hast 6.3 im einsatz?
ab 6.3 ist die ID1 verwendet für NULL-Id (also nicht gesetzt) vorher war das 0
ich dachte zwar, ich hätte alles angepasst …
welche version vom Integritycheck (Konfig->Information)?

Ich habe diese Version aus dem Modul Store:
image

Hallo
Beim Translate gibt es eine Fehlermeldung
Im Script
$s = $this->Translate(‚ist fehlerhaft‘);

fuehrt zu Fehlermeldung :

Translate | unable to translate „ist fehlerhaft“

Hi,
was auch recht einfach ist wäre Konstanten, hier 11000, anders darzustellen also z.B. 110*100. Für mich einfache als /NO_IDCHECK/

Ralf

@mb-stenr
ist gefixed und im Modulstore/Beta eingereicht. Bitte Info, wenn es ok ist, damit ich das in Stable einreiche

@Dr.Niels
n.z.I: in einer Virtualisierungsinstanz wird eine nicht gesetzte ID (Wurzelverzeichnis für Mobile) als Referenz abgelegt. Weis nicht, ob das so gewollt ist, nehme aber eher an, das das noch nicht krrigirrt wurde.

@1007
ist gefixed (Modulstore/Beta)

danke, funktioniert…
die Fehlermeldung ist verschwunden…
vielen Dank

1 „Gefällt mir“

eine Frage zur Ausgabe des Moduls: kann man solche ungenutzten Skripte Bedenkenlos löschen?
grafik

naja, „Bedenkenlos“ vielleicht nicht, aber ich bin mir schon ziemlich sicher, das die nirgendwo referenziert werden.
Es gibt aber Lücken, an denen ich nicht vorbei komme: wenn die zB. von einer Instanz benutzt werden, aber der Modulentwickler diese Scripte nicht als Instanz-Referenz registriert (durch RegisterReference()) werden, weil der Integrity-Check genauso wenig wie die Kontext-Funktion (Referenzen anzeigen).

Von daher ist ein Blick in das Script und Quercheck nicht falsch. Nun ist es aber ja auch so, das gelöschte Scripte nicht weg sind, es gibt im in Script-Ordner ein Verzeichnis deleted, hier stehen die Skripte noch eine gewisse Zeit zur Verfügung.
Und wenn man ganz unsicher ist:
man kann die Skripte ja von den Meldungen ausnehmen (zu ignorierende Objekte /Verzeichnis). Und wenn man in dem Script am Anfang direkt zB ein Syntax-Fehler einbaut, würde es garantiert auffallen, wenn die doch mal aufgerufen werden.
Ach ja, es ist ja auch bekannt, wann das Skript das letzte Mal aufgerufen wurde.

Ein „IPS_Sleep(10000);“ in einem Script führt zu einer Falschinterpretation „…ein Objekt mit ID 10000 existiert nicht“.