Die Datenbank ist bei mir auf der Platte inzwischen über 6GB groß. naja das System läuft jetzt auch schon 13 Jahre.
was passiert, wenn ich unter c:\ProgramData\Symcon\db einfach ältere Ordner aus vergangenen Jahren lösche beziehungsweise auf eine andere Platte auslagere. i9ch würde halt alles was vor 2023 war auf diese Weise „archivieren“.
Nimmt mir IPS das Übel und läuft dann irgendwas nicht mehr oder kann ich dann einfach in Diagrammen nicht mehr weiter zurück gehen?
Ich könnte es ja einfach ausprobieren, aber wenn es Probleme gibt habe ich dann den Ärger, also frag ich lieber.
Darfst du problemlos machen
paresy
… und ist auch sehr zu empfehlen. IPS dankt es dir mit deutlich schnellerer Startzeit.
Für was soll man sich den alten Datennmüll aufheben ? Mein IPS ist schon steinalt, hatte aber noch nie das Bedürfnis in altem Daten zu kramen. Historische Verbrauchsdaten gibts beim Versorger, Kliamdaten sicher auch irgendwo.
Und sonst ? Ob das Auto am 17.4.2014 in der Garage stand ist heute genauso belanglos wie die Temperatur im Kühlschrank am 2.9.2017.
greez
bb
jetz mal eine blöde Frage aber ist für sowas nicht die Funktion Verdichten vom Archiv super nützlich? alte werte älter als x löschen bzw detailgrat veringern?
gruß Stefan
Definitiv. Die löscht aber. Hier kannst du manuell „archivieren“ auf z.B. dein NAS oder Bandlaufwerk
paresy
Ja, allerdings bei vielen hundert geloggden Variablen etwas mühsam einzurichten.
Drum verwende ich das verdichten nur für Variablen welche mit hoher Frequenz gelogged werden. Standardkram wird jährlich gelöscht.
bb
Dafür kann man ein Script bauen, was das für einen macht
Du darfst deine Lösung (also das Script) gerne hier teilen.
Hier mein Script dazu.
Es können beliebige Ordner mit Variablen ergänz werden.
Wichtig: Das verdichten darf vorher noch nicht aktiv sein.
<?php
$stack = Array();
/*
id:
Sucht nach allen Variablen unterhalb dieser ID
compact:
KEY => Monat (-1 heißt sofort )
VALUE => Verdichtungstyp:
-1: Keine Verdichtung (also insbesondere bereits eingestellte wieder rückgängig machen),
0: 1 Minute
1: 5 Minuten
2: Stunde
3: Tag
4: Woche
5: Monat
6: Jahr
7: Löschen
*/
// Ordner auflisten die rekursiv durchlaufen werden.
array_push($stack, Array("id" => 12345/*Ordner mit Variablen*/, "compact" => [1 => 1,6 => 2,12 => 7]));
/* hier im Beispiel:
nach einem Monat auf 5 min verdichten
nach sechs Monaten auf stündlich verdichten
nach einem Jahr löschen
*/
foreach ($stack as &$object)
{
$ids = ( getChildVars(($object['id'])));
foreach ($ids as &$id)
{
SetCompaction($id,$object['compact'] );
}
}
function SetCompaction($id, $compactSettings)
{
$ArchiveID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0];
if(AC_GetLoggingStatus($ArchiveID, $id)) // Prüfen ob Variable überhaupt geloggt wird
{
$type = IPS_GetVariable($id)['VariableType']; // Variablentyp auslesen
foreach ($compactSettings as $key => $value)
{
if($type !=3 || $value == 7 || $value == -1 ) // bei String nur Löschen oder Verdichtung deaktivieren
{
if(! AC_SetCompaction( $ArchiveID, $id, $key, $value))
echo "Fehler bei Variable ".$id ." Monat: ".$key . " Wert: ".$value. "\r\n";
}
}
}
}
function getChildVars(int $id)
{
$childVars = Array(); // Leeres Array erstellen
if(IPS_GetObject ($id)['ObjectType']==2) // Prüfen ob Objekt selbst eine Variable ist.
{
array_push($childVars,$id); // eigene ID zum Array hinzufügen
}
$ids = IPS_GetChildrenIDs($id); // Untergeordnete Objekte abrufen
foreach ($ids as &$value)
{
$obj = IPS_GetObject ($value); // Objektinfos abrufen
if ($obj['HasChildren']) // wenn Objekt untergeordnete Objekte hat diese durchsuchen
$childVars = array_merge($childVars, getChildVars($value)); // Rekursiver Aufruf und Ergebnis ins Array aufnehmen
if ($obj['ObjectType']==2) // wenn vom Typ variable dann hinzufügen
array_push($childVars,$value);
}
return $childVars;
}
Danke für das Beispiel.
In deinem Fall ist der Algorithmus tatsächlich einfach, wenn du alle gleichartig zu verdichtenden Variablen jeweils unterhalb eines Ordners hast. Also quasi schon auf solche Scriptzwecke zugeschnitten.
Wenn man hingegen eine übergeordnete Struktur nach anderen Kriterien organisiert, z.B. nach Räumen, anstatt nach Meßwert-Kategorien, dann wird’s schon schwieriger. Zu meiner Datenstruktur würde es soweit passen, wenn ich unterhalb der Temperatur-Kategorie nun weitere Kategorien abtrenne und alleine nach Art der Werte organisere, ungeachtet der räumlichen Zuordnung.