[Modul] Energierechner

Seit ein paar Tagen oder seit der Version 7.1 bekomme ich folgende Warnung ins Log

14.04.2024 00:05:34 | 44160 | MESSAGE | Energierechner       | Einstellungen gespeichert
14.04.2024 00:05:34 | 44160 | WARNING | Energierechner       | Buffer 'Periods' is over 256kB

Kann ich da etwas erhöhen?

Auszug aus der Doku:

Der Buffer besitzt ein Softlimt von 256kB und ein Hardlimit von 1024kB. Das heißt ab 256kB größe wirft IP-Symcon eine „Warning“ in die Meldungen und die maximale Größe des Buffers beträgt 1024kB. Daten größer als 1024kB werden abgeschnitten.

Ich glaube das man das nicht anpassen kann.
Wenn ich wieder mehr Zeit habe, kann ich mal schauen, ob ich das auch anders lösen kann.
Der Fall tritt aber auch nur bei dir auf, weil du so viel Inhalt in der Liste wegen aWATTar hast.

Grüße,
Kai

Das mit der Menge an Einträgen in meiner Instanz hab ich mir auch gedacht. Jedoch tritt es nicht immer auf.
Ich habe mir die letzten Tage angesehen und es tritt nur bei der Berechnung nach Mitternacht auf


Kann es sein, dass das mit meiner Automatik zum deaktiveren/aktivieren der Energierechnerinstanzen.
Das habe ich irgendwann eingeführt, weil die das brauchen damit das mit den Preisen passt - glaube ich. Dieses Skript wird um Mitternacht aufgerufen. Ich bau da noch mehr logging ein.
Da gab es auch einen Beitrag hier im Forum.

<?php
function reload($id)
{
	IPS_SetProperty($id, "Active", false);
	IPS_ApplyChanges($id);
	IPS_SetProperty($id, "Active", true);
	IPS_ApplyChanges($id);
}

$er_id=array(
				57354,
				18894,
				44160,
				22902,
				45025,
				19573,
				40729,
				16012,
				45752,
				10511,
				52772,
				56934,
				23037

);

foreach($er_id as $id)
{
	reload($id);
}

Moin Kai,

ich kriege

30.05.2024, 06:55:53 | TimerPool | Energierechner (ER_UpdateCalculation):
Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in /var/lib/symcon/modules/.store/schnittcher.info.ips.energierechner/Energierechner/module.php:446
Stack trace:
#0 /var/lib/symcon/modules/.store/schnittcher.info.ips.energierechner/Energierechner/module.php(522): Energierechner->getPrice(1717041600)
#1 /var/lib/symcon/modules/.store/schnittcher.info.ips.energierechner/Energierechner/module.php(195): Energierechner->calculate(1717020000, 1717044953)
#2 /var/lib/symcon/scripts/__generated.inc.php(14831): Energierechner->updateCalculation()
#3 /-(1): ER_updateCalculation(34794)
#4 {main}
thrown in /var/lib/symcon/modules/.store/schnittcher.info.ips.energierechner/Energierechner/module.php on line 446

es handelt sich dabei um eine Instanz in der Einheit „Liter“, die zugehörige Var ist ein S0 Impuls, der natürlich als Zähler eingerichtet ist.

Grüße,
Tom

Hallo zusammen,
Ich habe ein komisches Phänomen, bei einer Instanz des energierechner wird seit dem 1.6. der Wert nicht mehr aktualisiert hattet ihr das auch mal oder kennt jemand eine Lösung dazu?
Viele Grüße
Dominik

Ändere mal was an der Konfiguration und Speicher das. Manchmal hilft das.

Gruß
Stephan

Hallo Stephan,
Danke für den Hinweis, nachdem ich nachgedacht habe liegt es an einem Skript was ich umgebaut hatte :thinking:

Viele Grüße
Dominik

Hast du dein Problem in den Griff bekommen?

Grüße,
Kai

Hast du die aktuelle Beta Version installiert?

Grüße,
Kai

Die Warnung ist noch immer da, macht aber sonst keine Probleme. Am Tag kommt diese Warnung nicht.

Das versuche ich gerade. Leider hängt das irgendwie aber verdächtig lange - also ich sehe nur dieses animierte symcon-Logo. „Erneut installieren“ läuft zum gleichen Problem.

Irgendwann kommt ein „Connection lost“

Hallo,
kann es sein das zuviele Einträge im Archiv der Energierechner da ein Problem mit hat?
Ich habe eine variable die alle 30 Sekunden aktualisiert wird. Im Energierechner habe ich komischerweise fast den vierfachen Wert und wenn ich eine neue Instanz anlege mit der gleichen Variable kommt das gleiche dabei raus.
Danke für eure Hilfe.
Viele Grüße Dominik

Ich schätze mal du hast „fehlerhafte“ Einträge im Archiv. Die Aggregation muss auf „Zähler“ gestellt sein.

Auf Zähler steht es, funktioniert ja bei allen anderen auch super. Aber ich denke auch das irgendwas am Archiv schief ist, da muss ich mal tiefer reinschauen. Danke

Hallo, ich habe nochmal das Archiv angeschaut, das sieht auch ok aus. Eine einfache Prüfung
Wert von gestern Abend



Mit dem von heute verglichen und das wären rund 30 kWh
Im Graphen und im Energierechner stehen über 40 kWh

Habe ich da Denkfehler?
Viele Grüße Dominik

Leider nicht ganz OK.
Beim Zahler darf der Wert nicht Höher und dann niedriger werden,
sondern IMMER erhöht in Zeitverlauf werden.
14:07:00 20270,68
14:08:00 20270,62<- Verboten! Bei Zähler

LG Willi

Schitt, da hast du recht und mir ist es garnicht aufgefallen. Aber das zieht sich durch da muss ich mal schauen wie ich das abfangen kann und die vergangenen Einträge bereinigt bekomme.
Danke & Gruss
Dominik

Abfangen geht nur, mit einer 2. Zählervariable, die nur die richtigen Zählerwerte aufzeichnet.

Im Nachhinein, gbt’s ein kleines Hilfsmittel.
Ein Skript, dass z.B. von gestern bis Jetzt die Daten einer Zähler Variable kontrolliert.
Anfangs, war ich vorsichtig und habe kontrolliert gelöscht.
Jetzt mach ich dies Automatisch, wenn ein Fehler erkannt wird.
Hier das Skript:

<?php

// Automatisches Korrigieren bei Zählerfehler ( alle 10Minuten )
$zähler_fehler_merker=51315;
$summeID = 23720 /* ID der Variablen im Archive */;
filter_variable(51452, $summeID) /* ID der Archive-Instanz */;

function filter_variable($ArchiveID, $VariableID) 
{

//Alle Datensätze ab Startzeitpunkt oder der letzten Stunden abfragen ( gestern 0Uhr bis jetzt ) Maximal 21000 Einträge ca. 5 Tage Spezialschalter!!!!!!!
 //   $start = mktime(0, 0, 0, 1, 1, 2022);   /* Stunde, Minute, Sekunde, Monat, Tag, Jahr */
 //   $end   = mktime(0, 0, 0, 9, 1, 2022);
    //echo "DELTA seit letzter Aktualisierung (sekunden): ".$Delta."\n";
    //WFC_PushNotification(51609, 'VID', $VariableID.' '.$changes.'. Time start:'.$start.'. Time end:'.$end, '', 0);
    $logData = AC_GetLoggedValues($ArchiveID, $VariableID,  strtotime("yesterday 00:00"), time(), 0); //55554 ist die ID der Variable, 12345 vom Archiv Control: der letzten Stunden abfragen ( gestern 0Uhr bis jetzt )
//    $logData = AC_GetLoggedValues($ArchiveID, $VariableID,  $start, $end, 0); //55554 ist die ID der Variable, 12345 vom Archiv Control

// Anzahl der Werte
    $entries = count($logData);
    //echo "VID ".$VariableID." ".$entries." ". Einträge ".$Delta."\n";
// Macht erst ab 3 Werten Sinn
    if ($entries < 2) return;

// Anzahl der Fehler protokolieren
    $changes = 0;
    for ($i = 2; $i < $entries; $i++)
    {

// Differenz Wert2-Wert1
        $diff1 = $logData[$i - 1]['Value'] - $logData[$i - 2]['Value'];

// Differenz Wert3-Wert2
        $diff2 = $logData[$i]['Value'] - $logData[$i - 1]['Value'];

// Wenn der mittlere Wert entweder der größte oder kleinste Wert ist stimmt was nicht
        if ((($diff1 < -0.1) && ($diff2 > 0.1)) ||
            (($diff1 > 0.1) && ($diff2 < -0.1)))
            { 

// lösche mittleren Wert
            AC_DeleteVariableData ($ArchiveID, $VariableID, $logData[$i - 1]['TimeStamp'] - 1, $logData[$i - 1]['TimeStamp'] + 1);

// Fehler in Logfile eintragen
            $time = $logData[$i - 1]['TimeStamp'] ;
            IPS_LogMessage("Medianfilter", $VariableID.' '.$changes.'. diff1:'.$diff1.' $diff2:'.$diff2); 
            //WFC_PushNotification(51609, 'VID', $VariableID.' '.$changes.'. Time:'.$time, '', 0);

// eine Änderung mehr
            $changes++;
            }
    }

// Wenn es Änderungen gab
    if ($changes > 0)
    {
// Variable neu aggregieren
        AC_ReAggregateVariable ($ArchiveID, $VariableID);
// Anzahl der Fehler ins Logfile
        IPS_LogMessage("Medianfilter", $VariableID.': Fehlerhafte Werte:'.$changes); 
        //WFC_PushNotification(51609, 'VID', $VariableID.': Fehlerhafte Werte:'.$changes, '', 0);
    }
    else
    {
        IPS_LogMessage("Medianfilter", $VariableID.': Alles OK'); 
        WFC_PushNotification(51609, 'VID', $VariableID.': Alles OK:'.$changes, '', 0);
    }
}
SetValueBoolean($zähler_fehler_merker, false);  // Fehler Merker zurücksetzten


Mal Vorsichtig anwenden und kontrolliert löschen.
Sollte kein Programierfehler vorhanden sein und Du sicher bist,
kannst es auch automatisch machen.

LG Willi

Schau dir mal das Modul Entkoppler an. Damit kannst du solche Sachen Filtern.

Gruß
Stephan

1 „Gefällt mir“

du hast in deiner Variablen aber 2x die Zeit drin, einmal über die Uhrzeit und dann nochmal die Std in kWh