Verdichtung von Archivwerten auf 15min

Hallo,

Ich Nehmen mal an das ist vielleicht für @Dr.Niels.

Ich fände eine Verdichtungsvorgabe für 15 min sehr hilfreich, da 15min Mittelwerte in der Abrechnung der Elektroenergie das Maß der Dinge sind. Aus der Sicht wäre das ein sehr sinnvoller Wert.

Danke und Gruß
cervicor

1 „Gefällt mir“

Ich war auch etwas enttäuscht, dass die Verdichtungs-Intervalle fest vorgegeben sind und man dann nur Monatsweise weiter verdichten kann. Oder habe ich das was übersehen? Ich würde gerne auch Tages und Wochenweise verdichten…

image
Was bedeutet denn Nach XXX Monate ?

  • von Anfang mit Offset XXX Monate
  • vom Ende bis - XXX Monate zurück

image
… und was bedeutet die Fehlermeldung ?

Danke !!!

Bei Verdichtung nach 1 Monate würde Werte, die mehr als 1 Monat alt sind, gemäß den Einstellungen verdichtet.

Oder um es präzise zu schreiben, weil die Regel auf vollen Monaten basiert: Die Werte des aktuellen Monats sowie des Vormonats bleiben unangetastet, ältere Werte werden verdichtet.

~~
Deine Fehlermeldung bedeutet vermutlich, dass deine Regeln/Zeiträume nicht passen und länger zurückliegende Werte weniger verdichtet werden als jüngere Werte. Das geht aber nicht, weg ist weg.


Danke !!! Ich habe ne Weile gebraucht um festzustellen, dass man die Monatsangabe und das hinzufügen der Verdichtungswerte mit Monaten gar nicht braucht, sondern dass er ohne die Monatsangabe einfach alle Daten dieser Variable verdichtet … und genau das wollte ich. Wenn man näher hinsieht, dann steht da Verdichtung nach Monatsende (optional) … wer lesen kann ist echt im Vorteil :slight_smile:
Gruß Fritz

Wir planen eher die 15 Minuten als neue Aggregationstufe zu bringen. Dann würde diese aber auch automatisch als Möglichkeit zur Verdichtung auftauchen. Dies ist jetzt nichts, was sofort kommt, aber sich in der Planungsphase befindet.

paresy

1 „Gefällt mir“

Hi Paresy,

wenn ich auch einen Wunsch haben dürfte :slight_smile: ich würde gern Variablen - bei denen bisher keine Verdichtung eingerichtet ist - gern per Script mehrere Verdichtungen verpassen (z.B. 1Monat=1Min, 3Monate=Stunde, 12Monate=löschen) - kann ich dies irgendwie tun??

Ciao
HerbertF

Klar. Schau dir mal die AC_SetCompaction Funktion an.

paresy

Hi Paresy,

besten Dank - genau was ich gesucht habe. Hinsichtlich Doku habe ich vermutlich den Wald vor lauter Bäumen nicht gesehen - Funktion geht aber prima. Die Perioden habe ich ausprobiert (//0-Wert pro Minute, 1-Wert pro 5 Minuten, 2-Wert pro Stunde, 3-Wert pro Tag, 4-Wert pro Woche,… 7-Werte löschen) - hier hätte ich nur die BITTE, dass -falls ihr den zusätzlichen Wünschen entsprecht (15Min …?)- nicht die Nummerierung ständig anpasst. Auf deutsch: Es wäre schön wenn die 0 für Minute bleibt und die 7 für Löschen… :grinning:
Beste Grüße
HerbertF

Hi Paresy,

ich habe noch ein kleines Problem. Das bei String-Variablen ein klassisches Verdichten keinen Sinn macht mag sein, aber die Werte löschen - Funktion sollte doch funktionieren oder ???

Ciao
HerbertF

ja, fände auch die 15 Min als Aggregationsstufe sinnvoll (wenn damit die Auswahlmöglichkeit in den Graphen gemeint ist).
DANN aber bitte auch gleich das Quartal mit reinnehmen.
Denn der Sprung von Monat auf Jahr ist oft viel zu grob um zu sehen was einen interessiert.
Danke! Seppm

Warum nicht gleich frei wählbar?

  • xxx Stunden
  • xxx Tage
  • xxx Wochen
  • xxx Monate
  • xxx Jahre

ui, da fällt mir noch ein Punkt ein zur Aggregationsstufe aus der Schulung die ich gestern gab.
Da kam die Idee ob man bei einem Graphen 2 Punkte markieren könnte als Start- und Ende-Zeitraum um dann genau den markierten Bereich zu vergrössern.
Das fände ich in der Tat sehr hilfreich weil man manchmal eben genau einen Bereich sehen will der grad nicht in die Woche/Monat passt und auch mit kontinuierlich/laufend nicht passend wird.

Ist jetzt nicht mehr wirklich Archivwerte, gibt es einen besseren Platz dafür?

cheers
Seppm

Hi,

ich hätte auch zwei Wünsche

  • ich fände es super, wenn man direkt vom Archiv Control die Verdichtung einstellen könnte. Ich bin gerade dabei meine ganzen Archive anzupassen. Derzeit muss ich im Archiv Control erst auf Variable bearbeiten, das Menü öffnen und alles einstellen…
  • dazu passend fände ich es klasse wenn man „profile“ erstellen und diese bei Bedarf auswählen kann.
    Bspw.
    Profilname „Leistungsdaten“,
    keine Verdichtung,
    1 Monate auf 5 min Verdichten
    6 Monate auf 1std Verdichten

Profilname „Temperaturdaten“,
Auf einen Wert von 5 min verdichten
1 Monate auf 15 min Verdichten
6 Monate auf 1std. Verdichten

VIele Grüße

2 „Gefällt mir“

Jupp, genau sowas ähnliches haben wir auch geplant :slight_smile:

paresy

1 „Gefällt mir“

Finde ich auch sehr hilfreich. Die Verdichtung ist super hilfreich, aber ich konfigurier mir da einen Wolf. Klar kann man mehr Variablen auf 1x machen, aber dann willst was ändern und garantiert erwischt Du eine Variable dabei die eine etwas andere Verdichtung hat und dann wirfst die für alle weg und fängst komplett bei 0 an.
Ich hab ja auch nur vlt. 3 Vorgehen je nach Variablenart.
Das als quasi Vorlage wäre super hilfreich.
Wenn man eine Vorlage ändert wäre natürlich top wenn man auf Wunsch angeben kann ob die damit verbundenen Verdichtungen sich updaten oder nicht.

Danke und Gruss Seppm

Für den Fall dass mal wer ‚schnell‘ checken will welche Variablen mit welchen Einstellungen verdichtet werden …

Hier ein kleines Script welche diese Info einfach in der Skript Ausgabe ausgibt

<?php
$AC_HANDLER_ID = @IPS_GetInstanceIDByName("Archive Handler", 0);

$myVarArr = [];

echo " ..:: Verdichtete Variablen und deren Setting ::..\n\n";

$aggregatedVariablesArr = AC_GetAggregationVariables($AC_HANDLER_ID, true);
foreach($aggregatedVariablesArr as $aggregatedVariableArr) {

    $varId = $aggregatedVariableArr["VariableID"];
	if(array_key_exists("Compaction", $aggregatedVariableArr)) {
		$compactionArr = $aggregatedVariableArr["Compaction"];
		$compactionArrCnt = count($compactionArr);
		if($compactionArrCnt > 0) {
            $myVarArr[$varId]["varId"] = $varId;
            $myVarArr[$varId]["location"] = IPS_GetLocation($varId);
            $myVarArr[$varId]["compaction"] = $compactionArr;
		}
	}
}

$col = array_column( $myVarArr, "location" );
array_multisort( $col, SORT_ASC, $myVarArr );

foreach($myVarArr as $key => $dataArr) {
       $compactionSetting = "";
    foreach($dataArr["compaction"] as $key => $valueArr) {
        $compactionSetting .= sprintf("%s : %s | ", GetMonatsVersatz($valueArr["MonthOffset"]), GetVerdichtungsTyp($valueArr["CompactionType"]));
    }
    $location = str_pad($dataArr["location"], 130, " "); 
    echo sprintf("%s : %s . %s\r\n", $dataArr["varId"], $location, $compactionSetting);
}

function GetMonatsVersatz(int $monatsVersatz) {
    $monatsVersatzStr = "";
    switch($monatsVersatz) {
        case -1:
            $monatsVersatzStr = "direkt";
            break;
        case 0:
            $monatsVersatzStr = "nach Monat";
            break;
        case 1:
            $monatsVersatzStr = "1 Monat";
            break;
        default:
            $monatsVersatzStr = sprintf("%d Monate", $monatsVersatz);
            break;
    }
    $monatsVersatzStr = str_pad($monatsVersatzStr, 9, " ");
    $monatsVersatzStr = sprintf("%s {%d}", $monatsVersatzStr, $monatsVersatz);            
    return $monatsVersatzStr;
}

function GetVerdichtungsTyp(int $typeId) {
    $compactionType = "";
    switch($typeId) {
        case -1:
            $compactionType = "deaktiviert";
            break;
        case 0:
            $compactionType = "1 Minute";
            break;
        case 1:
            $compactionType = "5 Minuten";
            break;
        case 2:
            $compactionType = "Stunde";
            break;
        case 3:
            $compactionType = "Tag";
            break;
        case 4:
            $compactionType = "Woche";
            break;
        case 5:
            $compactionType = "Monat";
            break;
        case 6:
            $compactionType = "Jahr";
            break;
        case 7:
            $compactionType = "löschen";
            break;
        default:
            $compactionType = "UNKNOWN";
            break;                                                                                                                        
    }
    $compactionType = sprintf("%s {%d}", $compactionType, $typeId);
    return str_pad($compactionType, 15, " ");
}

?>
1 „Gefällt mir“

SUPER - Danke - extrem hilfreich!

Gleich probiert! Kleiner Hinweis, bei neueren Systeme lautet die erste Zeile wohl so (bei mir jedenfalls):

$AC_HANDLER_ID = @IPS_GetInstanceIDByName("Archiv", 0);

Klappt super - tolle Hilfe!

Cheers Seppm

„ByName“ ist sehr unsicher. Der Name kann ja beliebig geändert werden.

Sicher ist

$AC_HANDLER_ID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0];
1 „Gefällt mir“

perfekt, Danke Dir!
Cheers
Seppm