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: