EHZ nach bestimmter Zeit auslesen

Ausgangs Situation:

EHZ-Zähler über COM-Port -> Cutter -> Register Variable -> Script -> Datenbank

Funktioniert Problemlos jedoch liefert mir der EHZ zwischen 1 und 3 Sekunden ständig die neuen bzw. atualisierte Werte.
Das schreibt mir natürlich die Datenbank schön voll.

Es würde ja reichen die Daten ca. alle 15 - 30 Minuten zu speichern.

Hat jemand schon mal ein Script oder Funktion erstellt um dies zu relisieren?
TimerEvent etc.

Im voraus schon mal Danke

ja, ich mache sowas: ich bekomme daten im 3sec Intervall und mache daraus innerhalb von IPS 1-Minuten Durchschnittswerte.

Funktioniert so:
Rohdaten kommen in der Var „ADAM 6017 CH06 Rohdaten (°C)“ an. Durch aktualisierung wird das Script „Rohdatenverarbeitung nach Martins Schablone“ ausgeführt und sammelt die ankommenden Daten (aufintegriert) in der tem-Var ‚S+S °C (temp)‘. Gleicdhzeitig wird der Datensatz-Zähler ‚‘ um 1 hochgesetzt. Nach 60 Sekunden (entspricht 20 Intervallen) wird aus dem Wert in der temp-Var ein Durchschnitt (Wert/Anzahl Intervalle) gebildet, in die geloggte Var (nicht im Bild) geschrieben sowie der Datensatzzähler auf 0 gesetzt.

Das Spiel beginnt von vorn. Läuft seit 9 Monten an ca 8 Meßstellen sehr zuverlässig

Danke für die Antwort Rocketsnail,

werde ich mal ausprobieren.

Habe zwischenzeitlich einen anderen Ansatz unter Post EHZ auslesen,
gesehen COM-Port nach Zeit An- Abschalten (Triggern), ist auch ein Ansatz.

Hi wibo,

So mache ich das mit meinem ehz auch - geht ja primär nur um den Zählerstand. Wichtig ist nur, das der ehz in Temp-Variable schreibt und erst nach Abschluss des Lesevorgangs in die richtige geschrieben wird. Ich prüfe im Script an der Regvar noch, ob sich tatsächlich was geändert hat (3 Stellen genau bei kwh) und schreibe nur geänderte Werte in db…

macht IPS /IPS SQLite von hause aus auch nicht viel anders. Nur das der aktuelle Timestamp gesetzt wird -> was wiederum bei grafischen Auswertungen von Vorteil ist;)

Jein - IPS schreibt die Werte schon periodisch in die DB. Wenn ein Schwall eHZ-Datensätze reinkommt, dann sind das bei mir gerne knapp 30. Da ich minütlich auslese, sammeln sich über die Zeit mehrere hunderttausend Einträge in der DB.

Deshalb prüfe ich im Skript auf Änderungen, bevor die überhaupt in die DB kommen:

$var = 38752 /*[Bereiche\Keller\Hager eHZ Stromzähler\Zähler\Stromzähler]*/;
$wert = (hexdec(strtohex($IPS_VALUE))/10000);

$oldvalue = GetValue($var);

If ($wert < ($oldvalue + 50) and $wert > ($oldvalue + 0.1)) {
		SetValue ($var, $wert);
}

function strtohex($x) {
  $s='';
  foreach(str_split($x) as $c) $s.=sprintf("%02X",ord($c));
  return($s);
}

Danke & Gruß, Axel

ok, dann nochmal etwas präziser::wink:

IPS schreibt nur dann einen weiteren Datensaz in die DB, wenn der Neue vom vorherigen Wert abweicht. Ist der neue Wert identisch, wird nur der Timestamp in der DB geändert. Man hat aber nach wie vor nur einen Datensatz in der DB.

Echt? Ich hatte die älteren Datensätze immer gelöscht, da waren aber immer haufenweise welche auf der gleichen Sekunde…

jetzt muss ich mich selbst nochmal korrigieren, hab eben nochmal den AH auf Links gedreht:

der Timestamp wird nicht neu gesetzt, es wird nur dann ein komplett neuer Datensatz geschrieben, wenn der Wert nicht identisch mit dem vorhergehenden ist.


Im ersten Bild die Variable „Dauer“: wird jede Minute aktualisiert. Da es heute nacht 0:57 Uhr letztmalig geregnet hat, ha sich seit dem der Wert nicht mehr geändert (der TimeStamp im Objektbaum schon).


Im 2. Bild die selbe Variable und die dazugehörigen Datensätze: 0:57 Uhr der letzte Datensatz

Archiv-Handler Datensatz-Beispiel.png

Demnach würde eine Rundung auf 2 Stellen hier für den Zählerstand vollkommen ausreichen, bei Leistung aber bald die DB explodieren…

nö, bezogen auf die Db bin ich entspannt. Ich logge aussergewöhnlich viel, seit 1,5 Jahren und meine DB ist aber lediglich 845 MB groß.

Mistest Du aus oder verdichtest Du? Bin jetzt bei 3.2GB in rund zwei Jahren - und wenn ich mir ansehe was manche hier so protokollieren bin ich eher harmlos.

ich miste regelmässig aus, lösche Nachts bestimmte Daten löschen (die ich z.B. nur 4 Tage -4Wochen vorhalten will, der Rest sind Langzeitdaten). Genauer habe ich mein Konzept hier beschrieben: klick