Logging Werte extreme Ausreisser?

Guten Morgen,
ich habe bei meinen Logging Werten des Z-Wave Energiezähler des öfteren extreme Ausreisser?
Anbei ein Screenshot.

Liegt das am Qubino?
Hat jemand eine Idee wie ich dieses Problem beheben kann?

Danke für die Info!

Das Problem kenne ich.
Ich habe folgendes Skript unterhalb der kWh-Zähler Variable liegen.

$maxchange = 2.0; // Maximale zuname des Wertes
$delnegchange = FALSE; // Lösche Wert der kleiner ist als die vorherige
$debug = FALSE; // Debug Ausgabe - echo
$setvalue = FALSE; // Variable wird auf alten Archivwert gesetzt - dabei wird ein neuer Archiveintrag erzeugt
$corcounter = TRUE; // Zähle wie oft korrigiert wurde

// ------------------ Ende Config ---------------------------------------------------------

$ArchiveList = IPS_GetInstanceListByModuleID("{43192F0B-135B-4CE7-A0A7-1475603F3060}"); // Archivinstanzen abrufen
$ArchiveID = $ArchiveList[0]; // !!! Es wird die erste gefundene Archivinstanz verwendet
$Start = new DateTimeImmutable('Now');
$Start = $Start->modify('-1 day');
$starttime = strtotime($Start->format('Y-m-d H:i:s'));
$endtime = strtotime('Now');
$VariableID = IPS_GetParent($_IPS['SELF']) /* ID der Variablen im Archive */;

// Datensätze gestern bis jetzt abfragen
$logData = AC_GetLoggedValues($ArchiveID, $VariableID,  $starttime,$endtime, 0); 

// Anzahl der Werte
$entries = count($logData);

if($debug){
    echo "Werte: ".$entries.PHP_EOL;
    echo "Archiv 0: ".$logData[0]['Value'].PHP_EOL;
    echo "Archiv 1: ".$logData[1]['Value'].PHP_EOL;
    echo "Aktuell: ".GetValueFloat($VariableID).PHP_EOL;
    }

if ($entries > 1){
    $diff = $logData[0]['Value']-$logData[1]['Value'];
    if($debug){echo "Differenz: ".$diff.PHP_EOL;}
    if ($diff>$maxchange){
        echo "Wertänderung zu groß - Lösche Wert";
        AC_DeleteVariableData($ArchiveID, $VariableID,$logData[0]['TimeStamp'] ,$logData[0]['TimeStamp']);
        AC_ReAggregateVariable ($ArchiveID, $VariableID);
        if($setvalue){SetValueFloat($VariableID,$logData[1]['Value']);}
        // Korrekturzähler
        if ($corcounter){
            $corrections = ReadInteger("Korrekturen");
            $corrections ++;
            WriteInteger("Korrekturen",$corrections);
        }
    }
    if ($delnegchange === TRUE and $diff < 0 ){
        echo "Wertänderung negativ - Lösche Wert";
        AC_DeleteVariableData($ArchiveID, $VariableID,$logData[0]['TimeStamp'] ,$logData[0]['TimeStamp']);
        AC_ReAggregateVariable ($ArchiveID, $VariableID);
        if($setvalue){SetValueFloat($VariableID,$logData[1]['Value']);}
        // Korrekturzähler
        if ($corcounter){
            $corrections = ReadInteger("Korrekturen");
            $corrections ++;
            WriteInteger("Korrekturen",$corrections);
        }
    }
}

function ReadInteger($Name)
    {
    $result = preg_replace("/[^a-zA-Z0-9]+/", "", $Name);
	$varID = @IPS_GetObjectIDByIdent($result, $_IPS['SELF']);
    if ($varID == FALSE){
        WriteInteger($Name,0);
        $value = 0;
    }
    else{
    $value = GetValueInteger($varID);
    }
    return $value;
    }

function WriteInteger($Name, $Value)
	{
    $result = preg_replace("/[^a-zA-Z0-9]+/", "", $Name);
	$varID = @IPS_GetObjectIDByIdent($result, $_IPS['SELF']);
 	
 	if ($varID == FALSE){
		$varID = IPS_CreateVariable(1); //Integer
 		IPS_SetName($varID, $Name); // Variable benennen
		IPS_SetParent($varID, $_IPS['SELF']); // Variable einsortieren unter dem Objekt mit der ID "12345"
		IPS_SetIdent ($varID, $result);
   	}

	SetValueInteger($varID,$Value);
}

Auf dem Skript liegt dann ein Ereigniss, welches das Skript bei jeder Änderung der Variable startet.

Ich hätte solche Filter gerne nativ in Symcon aber bis es sowas gibt, behelfe ich mir so.

Grüße
Stefan

Hi Michl,
ich habe vor 3-4 Wochen meine letzten beiden Z-Wave Strommesssteckdosen rausgeschmissen weil die es auch gemacht haben. Ich hatte vorher auch eine Filterroutine drin die einmal Nachts die Werte kontrollierte. Das Script hatte ich auch im Forum gepostet und müsste mit dem Suchbegriff Median zu finden sein.

Ich weiß nicht ob es an Z-Wave selbst oder an schlechter Firmware der Steckdosen liegt/lag.

Ralf

Danke für die Info.
Ich werde das Script testen.

Ich muss das Thema nochmals hervor holen.
Ist es möglich die Firmware vom Qubino Smartmeter auszuessen? Bzw. die aktuellste Firmware aufzuspielen?

Ob du das Qubino updaten kannst weiß ich nicht.
Das Problem liegt aber wohl eher nicht an der Firmware, sondern am schwachen CRC des Übertragungsprotokolls. Siehe auch die seitenlangen Dikusionen bzgl. Geistervariablen.
Solange IPS keine automatische Validierung von Variablen anbietet (sehr sehr alter Wunsch) kannst dir nur selbst helfen.

Schalte das logging der Qubino variablen ab.
Baue dann ein kleines Script welches durch Änderungen deiner Qubino Variablen getriggert wird. Im Script kannst du dannüberprüf ob die Werte in einem realistischen Bereich sin und wenn Ja dann diesen dann in eine neue Variable schreiben.
Die neue Variable loggst du und nimmst sie für weitere Berechnungen.

Fertig, Script ist nur ein 5 Zeiler

gruß
Bernhard

Danke dir, ich habe trotzdem auch mal ein Ticket bei Qubino gelöst mit der Frage ob das Probleme bei denen bekannt ist.

Auch ist mir ein anderer Gedanke gekommen:
Anhand der aktuellen Leistung (Watt) , der ja auch ausgesen wird, den Verbrauch zu errechnen?