Ist es möglich bei geloggten Variablen Werte zu ändern und das logging zu verhindern?

Hallo,

ich erfasse die Daten von meinen Wechselrichtern - nun habe ich gesehen, das zwischendurch Fehlerhafte Werte geloggt sind (ich vermute mal, das ist eine Zahl welche für „keine Werte“ steht) - ist es möglich diese im Nachhinein zu löschen oder zu verändern?

Wäre es auch möglich, diese zu Erfassung zu verhindern oder zu verändern? Oder muss ich mir dazu was basteln (z.B. eine neue Variable vom selben Typ und auf der echten Variablen ein Script mit einem on Change Ereignis, welches den Wert überträgt auf die neue Variable und wenn der Wert der entsprechende Fehlerwert ist - dann einfach den letzten Wert oder 0 übertragen?

Oder gibt es bessere Ansätze (Hintergrund ist, das ich diese Werte schon in einigen Modulen weiterverwende und ich dann alles anpassen müsste und ich dann auch vermutlich nicht mehr die alten Werte habe.

Danke für eure Unterstützung :slight_smile: .

Hallo
Ich hab ähnliches beim E-Auto. Da kommen vom Modul auch hin und wieder Phantasiewerte. Ich hab mir da ein Skript geschrieben, welches diese Werte aus dem Archiv löscht. Das kann man entweder immer bei Änderung der Variable aufrufen oder in einem beliebigen Zeitintervall. Du könntest es auch über eine zweite Variable lösen. Bei Änderung der Variable vom Wechselrichter startest du ein Skript welches den Wert in die von dir erstellte reinschreibt, aber nur dann, wenn die Werte plausibel sind. Und die Werte von dieser zweiten Variable kommen ins Archiv.

@hfichtinger: Danke für deine schnelle Antwort - dann ist es so, wie ich mir das gedacht habe. Bei den neuen Variablen würde ich das dann mti der „Behelfsvariable“ lösen, die bestehenden jedoch würde ich dann mit dem Script bereinigen.

Könntest du mir das Script bereitstellen?

Danke dir für deine Mühen.

Sicher

function Archiv_loeschen($ID_Var)
{
	$ID_Archiv	= 46307;
    $fehler=false;
	//Werte für heute aus dem Archiv holen
	$werte= AC_GetLoggedValues ($ID_Archiv, $ID_Var,strtotime("today 00:00"), time(), 0);
	//Array abarbeiten
	foreach($werte as $wert) 
	{
		//Wenn der Wert im Archiv 0 ist, dann wird gelöscht
		if($wert['Value'] == 0)
		{
			//Wert aus Archiv löschen
			AC_DeleteVariableData($ID_Archiv, $ID_Var, $wert['TimeStamp'], $wert['TimeStamp']);
            $fehler=true;
		}
	}
	//Wurde ein Fehler festgestellt, muss neu aggregiert werden
	if ($fehler) AC_ReAggregateVariable($ID_Archiv, $ID_Var);
}
Archiv_loeschen(46936);
Archiv_loeschen(29609);
Archiv_loeschen(49331);
Archiv_loeschen(30123);
Archiv_loeschen(25830);

Das Skript wird bei mir immer dann aufgerufen, wenn die Daten vom Auto geholt werden.

1 „Gefällt mir“

Danke dir vielmals, kannst du mir auch auf die schnelle sagen, wo ich die ID vom Archiv sehe? Hat jede Variabel ihr eigenes Archiv oder gibt es nur ein Archiv?

Habe mich bis jetzt wenig damit beschäftigt.

In den „Kerninstanzen“. Es gibt nur eine Archiv-Instanz. Diese ID musst du verwenden.
image

Hi,
seit 6.4 (?) braucht man auf 0 eigentlich nicht mehr vergleichen dafür gibt es eine Option „ignoriere geloggte Nullen und negative Werte“.

Bei Zählern überprüfe ich die Werte ob sie Wert1 < Wert2 < Wert3 beachten. Ich hatte nämlich mal Steckdosen die blödsinnig hohe Werte lieferten.

Ralf

Funktioniert aber nur bei Zähler. In meinem Fall ist es der Akkustand. Das ist kein Zähler. Ansonsten hast du natürlich recht.

Hi,
wo stellt man das denn ein?
Das kenne ich noch gar nicht und finde es nicht.
Gruß Michael

Hier. Wie gesagt, der Typ muss auf Zähler stehen.
image

Danke das hab ich natürlich verdrängt :innocent:

Ich würde so eine ähnliche Funktion, wie es sie bei den Zähler-Loggs gibt, für das normale Logging benötigen:
Ich logge den Speicherfüllstand in % von meinen Solaredge-Batterieen (werden über Modbus ausgelesen).
Jeden Tag um 5:00 h und um fast genau 19:00 h gibt es einen Ausreißer mit einem riesigen negativen Wert im Bereich von Billionen (was normalerweise nicht möglich ist).

Muss ich mir so etwas mit einem Hilfsscript + einer Hilfsvariable lösen (wenn Wert negativ, dann nicht speichern…), oder gibt es dafür eine „Systemlösung“ ?
Das Profil von den Float-Variablen ist auf % 0-100 eingestellt.

Danke, Werner

Hi,
hast Du „Ignoriere geloggte Nullen und negative Werte“ aktiviert? Das soll es eigentlich verhindern. Ansonsten gibt es das Modul ArchivdatenAnomalien das Ausreißer versucht zu löschen.

Ralf

Wäre natürlich toll, wenn Symcon hier mehr Optionen neben „Ignoriere geloggte Nullen und negative Werte“ ermöglichen würde.

-Geloggte Werte sollten nur innerhalb des Profils möglich sein z.B. 0-100% oder 0-3680Watt usw…
-Bei Zählern sollten nur aufsteigende Werte möglich sein

Das natürlich immer nur als Option zum aktivieren, da es ja auch andere Anwendungsfälle gibt dass z.B. flüchtige Zähler bei Messsteckdosen immer wieder bei 0 anfangen.

Grüße
Stefan

1 „Gefällt mir“

So etwas ähnliches hätte ich mir eben erwartet. Es handelt sich bei mir wie beschrieben eben um keine Zählervariable, bei der negative und 0er Werte ignoriert werden können.

Das besagte Profil geht von 0-100 und Werte außerhalb dieses Profiles sollten nicht geloggt werden. Es ist ja keine Lösung, jeden Tag die 2 falschen (mehr falsche gibt es nicht) Werte über das Archiv zu löschen, da sonst die ganze Grafik nicht funktioniert.

Werde im Moment den Weg mit einer Hilfsvariablen und einer If-Abfrage einschlagen.

LG. Werner

Ist es immer der gleiche Wert? Wie hoch ist er genau?

1 „Gefällt mir“

Entschuldige die späte Antwort…

Nein, es ist nicht immer der gleiche Wert und ich habe auch keine Ahnung, woher dieser kommt. Aber es ist eigenlich von allen Werten, welche ich aus der PV-Anlage auslese, der einzige mit diesen Ausreißern.
Ich habe das Problem jetzt ganz einfach gelöst:
Nachdem der Batteriestand sowieso mittels Skript aus 2 Batterien zusammengezählt und in eine eigene Variable geschrieben wird, habe ich eine einfache „If-Abfrage“ eingebaut, so dass der Wert nur gesetzt wird, wenn er >= 0 ist. Da hätte ich natürlich auch früher draufkommen können :banghead:.
Nachfolgend noch ein Ausschnitt aus den Loggingdaten mit einem der täglichen Ausreißer.

LG. und danke fürs mitdenken, Werner