NEWS
Idee zum ablesen des Stromzählers.
-
Halli Hallo,
ich nutze einen MQTT Adapter um meinen Ferraris Zähler abzufragen bin aber nicht ganz zufrieden mit dem Ergebnis.Die Tatsächliche kWH und die gezählten driften mit der Zeit sehr auseinander und ich kriege es nicht wirklich hin.
Die Erfassung des Striches ist m.E. nach in Ordnung.Letztendlich fehlt eine Überprüfung auf den tatsächlichen Wert. Hat jemand sowas schonmal mit OCR via Webcam versucht?
Ansonsten anbei mein Code für evtl. Zerfetzen:
createState("javascript.0.EnergyCounter.Zaehlerstand", 0.0, {name: "Zaehlerstand Stromzähler", type: 'number', unit: 'kWh'}); on({id: 'mqtt.0.Stromzaehler.Zaehlerdiode.Total', change: "ne"}, function (obj) { //MQTT schickt alle 60s einen Zählerstand, je anchdem wie oft die scheibe gedreht hat ist das mehr oder weniger //2 Impulse sind eine Umdrehung. bei 1kWh/120U muss ich 240 Impulse haben bis ich eine kWh hochzähle var value = obj.state.val; var oldValue = obj.oldState.val; var diff = 205; if (getState("mqtt.0.Stromzaehler.Zaehlerdiode.Arbeitsvariable").val < diff) { setState("mqtt.0.Stromzaehler.Zaehlerdiode.Arbeitsvariable"/*Arbeitsvariable*/, (getState("mqtt.0.Stromzaehler.Zaehlerdiode.Arbeitsvariable").val + getState("mqtt.0.Stromzaehler.Zaehlerdiode.Count").val)); } else { var temp = getState("mqtt.0.Stromzaehler.Zaehlerdiode.Arbeitsvariable").val + getState("mqtt.0.Stromzaehler.Zaehlerdiode.Count").val; // unbedignt nochmal aufaddieren var howMany = Math.floor(temp/diff); // so oft ist er schon über 240 gelaufen\ temp = temp % diff; //rest setState("mqtt.0.Stromzaehler.Zaehlerdiode.Arbeitsvariable"/*Arbeitsvariable*/, temp); setState("mqtt.0.Stromzaehler.Zaehlerdiode.Zaehlerstand"/*Zaehlerstand*/, (parseFloat(getState("mqtt.0.Stromzaehler.Zaehlerdiode.Zaehlerstand").val) + howMany)); } //alternative berechnungsformel // dritter versuch, jedesmal wenn er größer als letztes erkennt, dann muss ich nicht auf 240 warten, jeder durchgang wird nur einmal erkannt var counter = 210* getState("javascript.0.EnergyCounter.Zaehlerstand").val; counter = counter+getState("mqtt.0.Stromzaehler.Zaehlerdiode.Count").val; var zaehlervalue = Math.round(100*counter/210)/100; setState("javascript.0.EnergyCounter.Zaehlerstand", (parseFloat(zaehlervalue))); });
LG
Nils -
@jmeister79 sagte:
//MQTT schickt alle 60s einen Zählerstand,
Was genau beinhaltet der Datenpunkt "mqtt.0.Stromzaehler.Zaehlerdiode.Total" (History-Tabelle) ?
@jmeister79 sagte in Idee zum ablesen des Stromzählers.:
setState("mqtt.0.Stromzaehler.Zaehlerdiode.Arbeitsvariable"/Arbeitsvariable/, temp);
Keine eigenen Datenpunkte unter "fremdem" Namensraum ("mqtt.0") verwenden !
-
@paul53 Total wird noch nicht aufgezeichnet. Habe das jetzt mal gemacht und melde mich dann.
Ich habe den Eindruck, dass in Abhänigkeit von der Geschwindigkeit ab und an Drehungen verschluckt werden.
So ein verhalten kenne ich von Gyros wenn man versucht Lagen aufgrund von Differenzen zu berechnen.
Da braucht man dafür einen Beschleunigungssensor um Absolutwerte zu berechnen.Den richtigen Zählerstand kann ich nicht erfassen da ich n Zähler von 1800 habe.
Würde auch gerne meinen Gaszähler ablesen, da stehe ich vor dem selben Problem.Nils
-
@jmeister79
Es gab schon mal einen Vorschlag: Einfach die Impulse zählen.
-
Hallo schaut euch mal diesen Post an.
Damit kann man nicht nur Wasser zähler auch elektro und Gas ablesen.
https://forum.iobroker.net/topic/36622/wasserzähler-version-2-all-in-device/141
-
@jmeister79
Kann es sein, dass nicht jeder Impuls gesendet wird, sondern die Zahl der Impulse (x 2) innerhalb des Sendezyklus (60 s) ? Dann muss man auf "wurde aktualisiert" triggern, da die Zahl der Impulse von Zyklus zu Zyklus gleich bleiben kann (wenn die Leistung konstant ist). Das Blockly dazu sollte dann so funktionieren: -
@ThaBam das ist n krasses ding. danke
-
@paul53 hier jetzt einmal die Wertetabelle des letzten Tages von mqtt.0.Stromzaehler.Zaehlerdiode.Count:
6 true 2020-09-29 09:47:28.456 7 true 2020-09-29 09:46:28.396 7 true 2020-09-29 09:44:29.069 6 true 2020-09-29 09:43:28.210 6 true 2020-09-29 09:42:28.149 5 true 2020-09-29 09:41:27.976 6 true 2020-09-29 09:40:27.915 5 true 2020-09-29 09:39:27.856 5 true 2020-09-29 09:38:27.811 6 true 2020-09-29 09:37:27.732 5 true 2020-09-29 09:36:27.650 5 true 2020-09-29 09:33:27.466 4 true 2020-09-29 09:32:27.403 5 true 2020-09-29 09:31:27.343 5 true 2020-09-29 09:29:27.224 4 true 2020-09-29 09:28:27.164 5 true 2020-09-29 09:27:27.098 5 true 2020-09-29 09:25:27.004 6 true 2020-09-29 09:24:26.919 6 true 2020-09-29 09:22:26.798 7 true 2020-09-29 09:21:26.731 6 true 2020-09-29 09:20:27.408 7 true 2020-09-29 09:19:26.612 7 true 2020-09-29 09:17:26.492 6 true 2020-09-29 09:16:26.431 7 true 2020-09-29 09:15:26.372 7 true 2020-09-29 09:14:26.338 6 true 2020-09-29 09:13:27.892 7 true 2020-09-29 09:12:27.239 6 true 2020-09-29 09:11:26.132 6 true 2020-09-29 09:09:26.011 5 true 2020-09-29 09:08:28.776 6 true 2020-09-29 09:07:29.121 6 true 2020-09-29 09:06:25.831 5 true 2020-09-29 09:05:25.833 5 true 2020-09-29 08:57:25.257 4 true 2020-09-29 08:56:25.195 5 true 2020-09-29 08:55:25.157 5 true 2020-09-29 08:50:24.833 4 true 2020-09-29 08:49:24.774 5 true 2020-09-29 08:48:25.479 6 true 2020-09-29 08:47:24.652 5 true 2020-09-29 08:46:24.630 5 true 2020-09-29 08:35:23.913 6 true 2020-09-29 08:34:23.853 5 true 2020-09-29 08:33:23.793 5 true 2020-09-29 08:26:23.353 7 true 2020-09-29 08:25:23.285 6 true 2020-09-29 08:24:23.224 7 true 2020-09-29 08:23:23.161
-
@paul53 said in Idee zum ablesen des Stromzählers.:
@jmeister79
Kann es sein, dass nicht jeder Impuls gesendet wird, sondern die Zahl der Impulse (x 2) innerhalb des Sendezyklus (60 s) ? Dann muss man auf "wurde aktualisiert" triggern, da die Zahl der Impulse von Zyklus zu Zyklus gleich bleiben kann (wenn die Leistung konstant ist). Das Blockly dazu sollte dann so funktionieren:ich werte aber ja den totalstand aus und nicht die anzahl der impulse, total wird im mqtt inkrementiert. gute idee, hatte auch kurz mich gefreut
-
Hi,
ich werde mal an der Wurzel anfangen.Mal sehen ob der Sensor überhaupt tut was er soll. Schließlich kann da ja auch ein Sfotware oder ableseproblem sein.
Ich habe mal den Stand von Total aufgeschrieben und den aktuellen tatsächlichen Zählerstand.Ichw erde das mal n paar tage laufen lassen.
Die Differenz muss ja wie folg berechnet sein
Diff(zähler) = Zählerstand(neu)-Zählerstand(alt)
Diff(mqtt) = [total(neu)-total(alt)]/(2*120U/kWh)die Zahlen müssten dann identisch sein. Wenn nicht, dann erfasse ich nicht richtig oder der Zähler ist nicht geeicht.
Letzteres kann man durch mehrmalige versuche ausschließen.Das hatte ich schonmal softwareseitig versucht aber dabei nicht auf total geachtet. Da waren die abwichungen total invariabel.
Ich habe die Vermutung, dass der Sensor bei sehr schnell drehender Scheibe ab und zu entweder beide oder eine Flanke verpasst, weil er den Roten Strich nicht sieht.
Nils
-
@jmeister79 sagte:
Diff(mqtt) = [total(neu)-total(alt)]/(2*120U/kWh)
Bei der Verwendung von "count" kann man sich das Merken des alten Wertes sparen (s. Script).
@jmeister79 sagte in Idee zum ablesen des Stromzählers.:
die Wertetabelle des letzten Tages von mqtt.0.Stromzaehler.Zaehlerdiode.Count:
Aus der Tabelle kann man entnehmen, dass die maximale Leistung ca. 1,6 kW (6 bis 7 counts / min) beträgt. Kann das passen ?
EDIT: Auffällig ist, dass nicht jede Minute ein Wert aufgezeichnet wird und dass Werte von 0 ... 3 nicht vorkommen. Hast Du etwa "Nur Änderungen aufzeichnen" aktiviert ?
-
@paul53 das kann durchaus sein, da ich unseren Pool geheizt haben. (Fuck erschreckend)
Ich zeichne alle Werte auf, auch gleiche.
Nils