Status von Events abfragen

Der Validator der Website und die IPS Funktion MC_GetModule haben doch gar keine Beziehung zueinander.
Der Validator ist vermutlich nicht aktuell, und kann nur bis 5.3 prüfen.
Hast doch selber geschrieben:

Somit ist es kein Fehler der JSON.
Die wird auch nicht beim öffnen der Konfig einer Instanz geladen oder geprüft.
Sondern nur wenn das Modul geladen wird (LogFile, Meldung im MC) oder wenn du halt MC_GetModule benutzt.

Wenn die Meldung mit Fehler in Zeile 165 in /demel42.symcon.integrity/libs/common.php beim öffnen der Konfig kommt, dann musst du ja PHP Code haben welche diese Zeile durch GetConfigurationForm erreicht.
Welches Modul jetzt aber betroffen ist, weiß du nicht, da alle Module in der Foreach Schleife durchlaufen werden.
Michael

Ok, das macht Sinn.

du hast natürlich recht, ich hatte überlesen, das der Fehler in common.php auftritt
ja, und ich sehe das Problem, ich habe in meinem git-Verzeichnis Mist stehe …
wie doof & vielen Dank
das muss ich in meiner Funktion abfangen, kann man ja nicht verhindern und darf nicht zu einem Absturz führen …

@GerhardBS: morgen fixe ich das

demel

@demel42 Habe die Validierung mal gefixt. Kommt dann mit dem nächsten Update der Webseite online! Danke für den Fund!

paresy

@GerhardBS: ich habe eine neue Version in den Modulstore/Beta eingestellt.
Der Grund war (vermutlich), das du in deinem Git-Verzeichnis Verzeichnisse hast, die keine IPS-Module sind.
Die müssten auch unter KernModule angemeckert werden.
Das wird nun abgefangen.
Bitte Info nach Test, damit ich das wieder als stabile übernehmen kann
demel

Hallo demel,

es der Integrity-Test funktioniert wieder und unter Kern → Module Control war tatsächlich noch ein angefangenes Modul mit Fehler. Das ist jetzt auch wieder weg.

Danke, Gerhard

Hi Demel42,
ich hätte da vielleicht eine Idee für ein neues Modul a la ccCleaner oder BleachBit. Einige Module erzeugen Variablen oder Profile die vielleicht nie gebraucht werden. Ich habe mal ein Script geschrieben das alle unbenutzten Variablen bzw. Profile listet. Bei mir habe ich 322 unbenutzte Variablen und 250 unbenutzte Profile gefunden.

Als unbenutzte Variable gilt wenn es kein Aktualisierungsdatum und keine Aktionsroutine gibt.

Als unbenutztes Profil gilt wenn es keiner Variablen zugewiesen ist und nicht mit ‚~‘ anfängt, da es vermutlich Standardprofile sind.

Für Benutzer die „nur“ die Basic- oder Professional-Version von IPS benutzen könnte speziell die Variablenprüfung sehr interessant sein.

Hier mal das Script:

<?php
// unbenutzte Variablen suchen
$VariableIDs = IPS_GetVariableList();
$VariableCount = count($VariableIDs);
$UnusedVariables = 0;

for ($i = 0; $i < $VariableCount; $i++){
    $Variable = IPS_GetVariable($VariableIDs[$i]);
    if (($Variable['VariableUpdated'] == 0) && ($Variable['VariableAction'] == 0)){
        $UnusedVariables++;
        echo $VariableIDs[$i] . ':' . IPS_GetName($VariableIDs[$i]) . PHP_EOL;
    }
}
echo PHP_EOL . 'Anzahl unbenutzter Variablen:' . $UnusedVariables . PHP_EOL . PHP_EOL;

// unbenutzte Profile suchen
//$VariableIDs = IPS_GetVariableList();
//$VariableCount = count($VariableIDs);

$UsedProfiles = array();
for ($i = 0; $i < $VariableCount; $i++){
    $Variable = IPS_GetVariable($VariableIDs[$i]);
    if (isset($UsedProfiles[$Variable['VariableProfile']])) $UsedProfiles[$Variable['VariableProfile']]++;
    else $UsedProfiles[$Variable['VariableProfile']] = 1;
    if (isset($UsedProfiles[$Variable['VariableCustomProfile']])) $UsedProfiles[$Variable['VariableCustomProfile']]++;
    else $UsedProfiles[$Variable['VariableCustomProfile']] = 1;
}
$Profiles = IPS_GetVariableProfileList();
echo 'Anzahl unbenutzter Profile:' . (count($Profiles) - count($UsedProfiles)) . PHP_EOL . PHP_EOL;
foreach ($Profiles as $Profile){
    if ($Profile[0] != '~'){
        if (!isset($UsedProfiles[$Profile])) echo $Profile . PHP_EOL;
    }
}
?>

Ralf

Das ist aber die Anzahl benutzter Profile, oder?

Gruß Heiko

Hi,
stimmt scheint so. Script sollte anfangs anders aussehen aber ich bin immer wieder auf die Meldung gestoßen das ich, warum auch immer, > 1048576(0?) Byte haben möchte und das nicht geht.

Edit: habs oben geändert. Ich habe jetzt nur 250 ungenutzte Profile.

Ralf

Anzahl unbenutzter Variablen:91

Anzahl unbenutzter Profile:696 (!!!)

Hilfe und Danke für das Skript.
Wie kann ich sie maschinell löschen?

<?php
$variablen=IPS_GetVariableList();
foreach (IPS_GetVariableProfileList() as $profil)
{
    $gefunden=false;
    foreach ($variablen as $variable)
    {
        if ($profil == IPS_GetVariable($variable)["VariableProfile"] or $profil == IPS_GetVariable($variable)["VariableCustomProfile"]) $gefunden=true;
    }
    if (!$gefunden and substr($profil,0,1)!="~")
    {
        var_dump($profil." ".$gefunden);
        IPS_DeleteVariableProfile($profil);
    }
}

Für die Profile hab ich mir was gebastelt. Aber ohne Gewähr und Pistole :wink:

Hast du es denn schon getestet? :stuck_out_tongue:

Damit ich das Skript verstehe: Wo überprüfst du denn ob es benutzt wird?

Danke und lg
Chri

Ja, ich hab es getestet und meine Profile bereinigt.
Die Überprüfung erfolg hier

if ($profil == IPS_GetVariable($variable)["VariableProfile"] or $profil == IPS_GetVariable($variable)["VariableCustomProfile"]) $gefunden=true;

Jedes Profil wird in jeder Variable gesucht. Einmal wird überprüft ob es als sog. Custom Profile (von dir definiert) verwendet wird, oder ob es als Variable Profile (von einem Modul zugewiesen) verwendet wird. Wird es entweder da oder dort gefunden, dann wird die Variable $gefunden auf true gesetzt und das Profil wird nicht gelöscht.

Vielen Dank!
Dieser Beitrag ist zu kurz.

Hi,
zusätzlich werden die Grundprofile von IPS, starten mit ~, nicht gelöscht denn zukünftig installierte Module könnten sich darauf verlassen das es sie gibt.

Ralf

Das stimmt natürlich. Die bleiben auf jeden Fall. Vielen Dank für den Hinweis.

Und die von Modulen eingerichtet Profile auch (sofern diese im Create() oder ApplyCharges() angelegt werden) …

Hallo Ralf,
sorry, das ich nicht reagiert hatte, war mit anderen Angelegenheiten sehr beschäftigt.
klar, kann ich das in das Integrity-Modul einbauen
demel

1 „Gefällt mir“

Heißt das, es kommt ein Modul zum löschen der unbenutzten Variablen?

Moin Demel,
kein Problem. War nur so eine Idee von mir weil schon fast alles überprüft wird was man überprüfen kann und die 2 Sachen sind mir noch eingefallen.

Automatisch löschen ist gefährlich und 100te von Warnung ausgeben könnte von richtigen Problemen ablenken. Bisher beschränkte sich das ganze ja auf wenige Meldungen.

Wie Du auch entscheidest ich finde es OK.

Ralf

@HarmonyFan
ich habe mal gerade den Check eingebaut.
Bei mir kommen da ein paar 100 Variablen … aber das sind alles Variablen von Instanzen (gerne HmIP) - wenn ich die löschen würde, kämen die ja bei nächsten Reboot oder einer Änderung anders jew. Instanz schwuppdiwupp wieder
Wenn ich zusätzlich auf Vorhandensein eines ObjectIdent prüfen (was ja vornehmlich bei Modulen gesetzt wird), sind das bei mir 0 Variablen.
Dann habe ich mal eine Variable von Hand angelegt … die ist gleich Aktualisiert, denn die wird ja initialisiert. Mit „Trick 17“ habe ich dann mal eine nicht initialisierte Variable angelegt (beim erzeugen der Variable den Standardwert gelöscht - gibt zwar eine Fehlermeldung, die Variable ist aber angelegt). Und die wird dann angezeigt.

Die Ausbeute ist aber dann ja gering …

Bei deinem Script prüfst du übrigens nur auf VariableAction == 0 … wäre nicht VariableCustomAction == 1 ebenfalls wichtig?

oder verstehe ich das Ziel nicht so ganz?

@cbeham: auto. Löschen sehe ich erstmal (noch) nicht, die Gefahr was falsches zu löschen ist ja doch nicht zu unterschätzen.