Falsche Werte vom Zähler

Falsche Werte, ….

Ich habe heute eine ESP8266 mit einen IR-Lesekopf verbunden, Tasmota wurde erfolgreich installiert und mein GS303 Stromzähler spuckt auch fleißig Werte aus. Nur leider sind diese ab-und-zu extrem daneben/falsch. Mittels MQTT werden die Daten an meinen Raspi (ioBrokker) gesendet und da in Influx gespeichert. Normalerweise sollte Grafan diese grafisch darstellen, aber so macht das keinen Sinn.

Hat wer das gleiche Problem / gibt es schon Lösungen!?
Beispiel: (gelbe Werte passen nicht)

das ist imho ein lese/empfangsproblem der ir-schnittstelle. Ich hatte das bei mir auch und war erst verschwunden als ich auf die Drahtgebundene RS485 Schnittstelle des Zählers umgeschwenkt bin.
Du wirst die falschen Werte per Skript abfangen müssen. Da diese unrealistisch hoch sind ist das ja einfach möglich.

Hi,
willkommen. Falsche Zählerwerte liefern leider sehr viele Sensoren. Bei mir auch Steckdosen.

Da Du leider nicht alleine bist gibt es schon einige Ansätze im Forum:

oder

um nur 2 zu nennen.

Ralf

Danke erst mal für die schnellen Antworten. Versteh ich das richtig, mein digitaler Hausanschlussstromzähler vom Netzbetreiber bringt schon die falschen Werte?

jain. Die Übertragung auf optischen Weg mittels IR-Lesekopf ist (vermutlich hier) fehlerbehaftet. Der Zähler selbst schickt schon die richtigen Werte allerdings gibt es wohl Lesefehler.

Anbei meine Motivation und mein Problem noch einmal genauer erklärt.

Seit mehreren Jahren hängt an meinem Stromzähler ein ESP8266 mit einem TCRT5000 IR-Sensor. (im Bild die blaue Kurve) Bis April 2022 wurde am Ferrariszähler die Drehscheibe getrackt, was wunderbar funktionierte. Nach der Umstellung (im April) auf den jetzigen digitalen Zähler (GS303), wurde die blinkende LED (links oben) ausgelesen. Auch dies klappt tadellos und die Daten werden mittels MQTT an meinen Raspi gesendet. Der Raspi läuft auch seit Jahren und ist mit ioBroker und Grafana bestückt.

Nachdem ich Anfang August mein 600W Balkonkraftwerk in Betrieb genommen habe, musste ich feststellen, dass die LED am Zähler auch blinkt, wenn ich Strom in das öffentliche Netz geht.

Da nur das Blinken ausgelesen wird, wird nicht unterschieden aus welcher Richtung der Strom kommt.

Daher habe ich nun meinen Stromzähler vom Netzbetreiber freigeschalten, sodass die IR-Schnittstelle (am Zähler rechts unten „Smart Meter Interface“) ausgelesen werden kann. Dies geschieht mit einem zweiten ESP8266 und einen „ttl ir lesekopf lese-schreib-Kopf EHZ Volkszähler Hichi“ Sensor (gekauft bei eBay) . (im Bild die gelbe Kurve)

Wenn nicht die vielen unrealistischen Werte wären, wäre ich sehr zufrieden. Zu mindestens sehe ich nun „grob“, wenn Strom ins Netz einspeist wird. (im Bild der grüne Kreis – gelbe Kurve / rote Punkte = falsche Werte)

Was mir an dem Sensor aufgefallen ist, die beiden Dioden (IR & Lese) sind sehr klein und sitzen recht weit hinten im Sensor.

Hier meine Frage, würde es eine Besserung geben, wenn die Dioden ganz vorn säßen, oder größer wären?

An der Position Sensor-Zähler hab ich verschieden Einstellungen getestet, leider ohne Erfolg.

Was zeigt die Kurve mit den Außreißern? Das muss eigentlich dein Sensor sein der das Blinken auswertet da SML getrennte Werte für Verbrauch und Einspeisung liefert. Waren die Ausreißer auch schon drin bevor Du Hitchi hattest? Ich habe rein zufällig auch gerade Hitchi in Betrieb genommen und mein Zähler liefert leider nur ganze KWh Werte über SML da kann es dann auch keine so kleinen Ausreißer geben.

Ralf

wenn der Zähler SML liefert, dann gibt es auch eine Prüfsumme, die man auswerten kann. In meinem Modul passiert das auch. Auf diese Weise werden fehlerhafte Datensätze direkt verworfen. Aber ich gehe davon aus, dass du gar kein IP-Symcon hast, richtig?
Grüße
Jürgen

Die Werte vom blinkenden LED-Sensor sind blau und liegen genau dahinter. Im folgenden Bild hab ichs mal umgekehrt, da sieht man es besser. Also meine "Blinkwerte", passen wie die Faust aufs Auge, nur das diese nicht ins negative gehen, sondern bei Einspeisung positiv werden.
Die gelben SML-Werte zeigen schön die Ausreißer.
Mein Stromzähler hatte auch nur ganze KWh angezeigt, das musste im Zähler unter Einstellungen separat aktiviert werden, macht sich mit den zwei Tasten natürlich nicht so gut …

IP-Symcon, „klingt interessant“, kann ich das einfach zusätzlich in Tasmota (mit Visual Studio Code) reinpacken? … sorry, bin unerfahren mit Tasmota (hab eigentlich von allem 0 Ahnung) :thinking:

Du bist hier im Symcon-Forum gelandet…
guckst du

ohhhhhh…:see_no_evil::speak_no_evil:…hhhhhhhh…

aber seeeehr empfehlenswert, solltest du mal ioBroker über haben. :sunglasses:

… nimm dir mal das SML Telegram vor und zerplück es nach den OBIS Kennzahlen… dann die Werte anschaun…

Warum ?.. die analyse SW die das macht mag vielleicht nicht den FNN Stand des SML Protokolls haben oder die SML-Implementierung des Zählerherstellers abbilden… und dann kanns zu solchen Phänomenen kommen.

Also: rein in den code und einen SML Telegram Monitor schreiben… dann das Telegram „händisch“ zerlegen und die Werte anschaun.

Hab jetzt erst Zeit gefunden und mir einen kleinen Skript geschrieben, der die fehlerhaften Werte aussortiert. Klappt wunderbar.

var Intervall, StromTotal01, StromTotal02, StromTotalMittelwert, StromTotalRund01, StromTotalRund02, StromTotalMittelwertRund;


Intervall = setInterval(async function () {
  StromTotal01 = getState("sonoff.0.Stromsensor.GS303_Total_in").val;
  console.log(('Wert1 = ' + String(StromTotal01)));
  await wait(30000);
  StromTotal02 = getState("sonoff.0.Stromsensor.GS303_Total_in").val;
  console.log(('Wert2 = ' + String(StromTotal02)));
  StromTotalMittelwert = parseFloat((parseFloat(StromTotal01) + StromTotal02)) / 2;
  StromTotalRund01 = Math.round(StromTotal01);
  StromTotalRund02 = Math.round(StromTotal02);
  StromTotalMittelwertRund = Math.round(StromTotalMittelwert);
  console.log((['--> Mittelwert = ' + String(StromTotalMittelwert),'/// Rundwert01 = ' + String(StromTotalRund01),'/// Rundwert02 =' + String(StromTotalRund02),'/// MittelwertRund =' + String(StromTotalMittelwertRund)].join('')));
  if (StromTotalMittelwertRund == (StromTotalRund01 && StromTotalRund02)) {
    setState("javascript.0.scriptEnabled.Eigene_Datenpunkte.Eigene_Datenpunkte.bereinigter_Stromverbrauch"/*bereinigter_Stromverbrauch*/, StromTotal01);
    console.log('Werte passen, Datenpunkt geschrieben!');
  } else {
    console.log('Falsche Werte !');
  }
}, 60000);