Zuletzt angesehen: • stromzaehler
Inhaltsverzeichnis
MQTT Stromzähler / Verbrauchsmessung eines Ferraris-Stromzählers
Beschreibung
Ein Ferraris-Zähler erfasst die verbrauchte Energie bei mehrpahsiger Wechselspannung über eine kreisförmige Aluminiumscheibe (Drehscheibe) und zeigt den Verbrauch in Verbindung mit einem mechanischen Zählwerk an.
Der MQTT-Stromzähler erfasst per Infrarot-Messeinheit die umlaufende Aluminiumscheibe und erkennt anhand der roten Markierung die Anzahl der durchgeführten Umläufe.
Mittels der Zählerkonstante des Stromzählers, wird die aktuelle Leistung und der Zählerstand berechnet und im TASMOTA Webinterface angezeigt. Diese Werte können dann per MQTT Protokoll in der Hausautomation weiterverwendet werden.
WLAN
Die Einbindung in das lokale Netzwerk wird folgendermaßen durchgeführt.
Nach dem Einstecken der Stromversorgung meldet sich das Gerät mit der SSID Stromzahler-XXXXXX-XXXX, wobei XXXXXX-XXXX für eine alphanumerische Zahlenfolge steht.
Nach dem Verbinden wird man automatisch auf eine Webseite mit der IP: 192.168.4.1 weitergeleitet. Dort bitte das lokale WLAN wählen und das Passwort eingeben (am besten mit dem Haken sichtbar machen beim Eingeben).
Kurz nach dem Speichern meldet sich das Webinterface mit der über DHCP erworbenen IP-Adresse.
Ist dies nicht der Fall, bitte im lokalen Router nach dem Gerät suchen und die IP-Adresse ausfindig machen.
Der MQTT-Stromzähler ist nun über diese Adresse mittels Browser errereichbar.
Messeinheit
Zur Kontrolle der Zählungen wird die linke, grüne LED verwendet. Diese erlischt bei erkannter, roter Markierung auf der Drehscheibe, ansonsten leuchtet sie dauerhaft.
Über das Potentiometer wird der Sensor justiert .
Montage
Ganz entscheidend ist der Abstand zwischen dem Sensor und der Gehäuseglasscheibe des Stromzählers.
Je näher der Sensor an der Glasscheibe sitzt, desto genauer sind die Zählungen und desto geringer sind die Falschmeldungen.
Dementsprechend ist ein relativ dünnes, doppelseitiges Klebeband zu verwenden.
Mithilfe der Gehäuseausrichtung (Rechtecke links/rechts), wird die Messeinheit auf die Glasscheibe des Stromzählers geklebt.
Mit einem kleinen Schraubendreher wird den IR-Sensor so fein eingestellt, dass die linke, grüne LED bei laufender Drehscheibe gerade noch leuchtet.
Es muss so fein eingestellt sein, dass bei geringster Berührung die LED nicht mehr leuchtet. BITTE nicht verzweifeln. Es ist sehr, sehr ticky die richtige Position zu finden.
Danach ist zu kontrollieren, ob die LED erlischt, wenn die rote Markierung auf der Aluminium-Drehscheibe den Sensor erreicht. Beim verlassen des Sensors muss die LED wieder leuchten.
Der MQTT-Stromzähler zählt dann zwei Einheiten im TASMOTA Webinterface (Zähler1) hoch. Einmal beim Erreichen des Sensors und einmal beim Verlassen.
Nun muss man noch die Zählerkonstante notieren (hier 75 U/kWh) und weiter geht es mit der Konfiguration…
Quelle: https://www.kompf.de/tech/emeir.html
Video zur Einstellung des Poti
Konfiguration
Bitte TASMOTA nicht mit einer Standard Firmware updaten!
Die installierte Firmware enthält das Scripting Modul, welches in Standard Versionen nicht enthalten ist. Siehe am Ende dieser Wiki Seite, wie man ein Update oder eine Neuinstallation durchführt.
Gerät konfigurieren
MQTT-Einstellungen
Unter Host ist die IP-Adresse der Hausautomation einzutragen. ggf. auch user/password falls erforderlich.
Sonstige Konfiguration
Zählerstand einstellen
Der auf dem Stromzähler bereits erfasste Zählerstand wird folgendermaßen in TASMOTA per Konsole übertragen:
Kommando: Sensor53 c1 (ZS x ZK x 2)
Zunächst muss aber auch verstanden werden, wie der Sensor arbeitet. Beim Erfassen der roten Markierung wird die Anzeige Zähler1 um 1 erhöht. Ebenso wenn die rote Markierung den Sensor verlässt.
Somit werden für die Berechnung nicht 75 sondern 150 Zählungen pro kWh herangezogen (Bei Zählerkonstante 75 U/kWh). Also (ZS x ZK x 2)
ZS = Zählerstand (kWh)
ZK = Zählerkonstante (U/kWh)
Beispiel: 44717,3 kWH * 75 * 2
Sensor53 c1 6707595
Eine weitere Möglichkeit um den Stromzählerstand anzupassen, ist die Angabe einer Differenz anhand der Variable strominit im Script.
Diese kann man also mit dem aktuellen Zählerstand versehen und sie wird den neuen Zählungen hinzugefügt.
Beispiel:
strominit=45041.35
Weiterhin sind folgende Werte einzustellen.
Beim CounterDeBounce muss man ggf. etwas experimentieren. Dieser ist so einzustellen, dass pro Umlauf 2 Einheiten gezählt werden.
Werden 1 oder 3 Einheiten gezählt, muss man weiter optimieren. Bei 1 muss der Wert runter gesetzt werden und bei 3 entsprechend hoch, solange bis letztendlich nur 2 Einheiten gezählt werden.
TelePeriod 60 CounterDebounce 600 SaveData 60
Konsolen Script
In folgendem Script (Konsolen > Script konfigurieren) sind drei Variablenwerte zu ersetzen.
Der Strompreis, die Zählerkonstante, welche am Stromzähler aufgedruckt und mit der Einheit (U/kWh) angegegben ist und die Mindestumlaufzeit der Aluminium-Drehscheibe.
- sp (Strompreis in Cent)
- zk (Zählerkonstante)
- mu (Mindest Umlaufzeit der Scheibe)
Für den Wert mu am Besten einen oder mehrere hohe Verbraucher (Wasserkocher, Fön, etc.) einschalten und mit der Stoppuhr messen, wieviele Sekunden die Aluminium-Drehscheibe benötigt um eine Umdrehung zu erreichen.
Dieser Wert oder ggf. etwas weniger, ist für mu anzusetzen. Nochmal kontrollieren, ob CounterDebounce noch passt.
Der Default Wert ist mu=10 also 10 Sekunden für einen Umlauf. Das sind bereits 4800W Leistung. Alles was größer gemessen wird, bleibt unberücksichtigt und reduziert die Fehlmeldungen.
>D p:s1=0 p:g1=0 p:g2=0 p:m1=0 p:m2=0 p:m3=0 p:gesamt=0 p:power=0 p:c1old=0 p:c1=0 sp=27.59 zk=75 mu=10 c1ts=0 c1oldts=0 s1=0 h1=0 e1=0 e2=0 e3=0 sph1=0 spg1=0 spg2=0 spgs=0 spm1=0 spm2=0 spm3=0 hr=0 dy=0 sec=0 total=0 power=0 strominit=0 >B =>sensor53 l255 >S h1=c1-s1 e1=h1/(2*zk) e2=g1/(2*zk) e3=g2/(2*zk) sph1=e1*sp/100 spg1=e2*sp/100 spg2=e3*sp/100 spgs=gesamt*sp/100 spm1=m1*sp/100 spm2=m2*sp/100 spm3=m3*sp/100 ' Aktuelle Leistung c1ts=upsecs if c1>c1old and c1ts>(c1oldts+mu) then sec=c1ts-c1oldts power=3600000/(sec*zk) c1oldts=c1ts c1old=c1 else c1old=c1 endif ' Historische Werte hr=hours dy=day if chg[hr]>0 and hr==0 then s1=c1 g2=g1 g1=h1 m1=m1+e1 gesamt=gesamt+e1 if chg[dy]<2 and dy==1 then m3=m2 m2=m1 m1=0 endif svars endif ' MQTT if upsecs%tper==0{ =>Publish tasmota/%topic%/main/zk %zk% =>Publish tasmota/%topic%/main/electric_price %sp% =>Publish tele/%topic%/main/today_kwh %3e1% =>Publish tele/%topic%/main/today_money %2sph1% =>Publish tele/%topic%/main/yd_kwh %3e2% =>Publish tele/%topic%/main/yd_money %2spg1% =>Publish tele/%topic%/main/dbyd_kwh %3e3% =>Publish tele/%topic%/main/dbyd_money %2spg2% =>Publish tele/%topic%/main/actpower %0power% =>Publish tele/%topic%/main/energytotal %total% =>Publish tele/%topic%/json {"energytotal": "%total%", "today_kwh": "%3e1%", "today_money": "%2sph1%", "yd_kwh": "%3e2%", "yd_money": "%2spg1%", "dbyd_kwh": "%3e3%", "dbyd_money": "%2spg2%", "zk": "%zk%", "electric_price": "%sp%", "actpower": "%0power%"} } >T c1=Counter#C1 total=c1/(2*zk)+strominit >W Zählerstand: {m} %total% kWh aktuelle Leistung: {m} %0power% W ============ Strompreis: {m} %sp% Cent/kWh ============ Verbrauch: --------------------- Heute: {m} %3e1% kWh Kosten: {m} %2sph1% € --------------------- Gestern: {m} %3e2% kWh Kosten: {m} %2spg1% € --------------------- Vorgestern: {m} %3e3% kWh Kosten: {m} %2spg2% € --------------------- Aktueller Monat: {m} %2m1% kWh | %2spm1% € Letzter Monat: {m} %2m2% kWh | %2spm2% € Vorletzter Monat: {m} %2m3% kWh | %2spm3% € Gesamt: {m} %2gesamt% kWh | %2spgs% € #
Sieht dann in etwas so aus:
Konfiguration in FHEM
In FHEM ist dann noch das einmalige Anlegen eines Brokers erforderlich.
define myBroker MQTT2_SERVER 1883 global
Anschließend sollte sich der Stromzähler in FHEM nach kurzer Zeit folgendermaßen, aber mit abweichender Adresse (4F9216) melden (autocreate muss aktiviert sein):
Zusätzlich sind noch folgende Attribute von Vorteil.
attr MQTT2_DVES_4F9216 alias Stromzähler attr MQTT2_DVES_4F9216 group Strom attr MQTT2_DVES_4F9216 icon stromzaehler_icon attr MQTT2_DVES_4F9216 stateFormat {ReadingsVal($name,"LWT","") eq "Offline" ? "absent" : ReadingsVal($name,"energytotal","") . " kWh"}
Zusätzlich werden noch folgende dummies und eine Notification benötigt.
Stromverbrauch:
defmod StromVerbrauch dummy attr StromVerbrauch group Strom attr StromVerbrauch room 99_Zähler attr StromVerbrauch sortby 12
Stromverbrauch Letzte Abrechnung: (Im Alias steht das Datum der Abrechnung als Hinweis)
defmod ZaehlerStandLetzteAbrechnung dummy attr ZaehlerStandLetzteAbrechnung alias Stromzähler_20220522 attr ZaehlerStandLetzteAbrechnung group Strom attr ZaehlerStandLetzteAbrechnung room 99_Zähler attr ZaehlerStandLetzteAbrechnung sortby 110
Stromzählerstand letzte Abrechnung: (Im Alias steht das Datum der Abrechnung als Hinweis)
defmod ZaehlerStandLetzteAbrechnung dummy attr ZaehlerStandLetzteAbrechnung alias Stromzähler_20220522 attr ZaehlerStandLetzteAbrechnung group Strom attr ZaehlerStandLetzteAbrechnung room 99_Zähler attr ZaehlerStandLetzteAbrechnung sortby 110
Stromverbrauch Heute:
defmod StromVerbrauch_Heute dummy attr StromVerbrauch_Heute group Strom attr StromVerbrauch_Heute room 99_Zähler attr StromVerbrauch_Heute sortby 20
Stromverbrauch Gestern:
defmod StromVerbrauch_Gestern dummy attr StromVerbrauch_Gestern group Strom attr StromVerbrauch_Gestern room 99_Zähler attr StromVerbrauch_Gestern sortby 30
Stromverbrauch Vorgestern:
defmod StromVerbrauch_Vorgestern dummy attr StromVerbrauch_Vorgestern group Strom attr StromVerbrauch_Vorgestern room 99_Zähler attr StromVerbrauch_Vorgestern sortby 40
Notification:
defmod StromverbrauchNoti notify MQTT2_DVES_BE3FE3:energytotal.* {\ my $Zaehlerstand=round(ReadingsNum("MQTT2_DVES_BE3FE3","energytotal","0"),0);;\ my $ZaehlerStandLetzteAbrechnung=round(ReadingsNum("ZaehlerStandLetzteAbrechnung","state","0"),0);;\ my $Diff=$Zaehlerstand-$ZaehlerStandLetzteAbrechnung;;\ fhem("set StromVerbrauch $Diff kWh");;\ my $strom_db_yesterday=ReadingsNum("MQTT2_DVES_BE3FE3","dbyd_kwh","0");;\ my $strom_yesterday=ReadingsNum("MQTT2_DVES_BE3FE3","yd_kwh","0");;\ my $strom_today=ReadingsNum("MQTT2_DVES_BE3FE3","today_kwh","0");;\ fhem("set StromVerbrauch_Vorgestern $strom_db_yesterday kWh");;\ fhem("set StromVerbrauch_Gestern $strom_yesterday kWh");;\ fhem("set StromVerbrauch_Heute $strom_today kWh");;\ }
SVG_Stromzaehler.gplot: (DBLOG)
# Created by FHEM/98_SVG.pm, 2023-02-10 22:07:04 set terminal png transparent size <SIZE> crop set output '<OUT>.png' set xdata time set timefmt "%Y-%m-%d_%H:%M:%S" set xlabel " " set title 'Stromverbrauch' set ytics set y2tics set grid ytics set ylabel "Watt" set y2label "" set yrange [0:4300] set y2range [0:4300] #DBLOG MQTT2_DVES_4F9216:actpower::: plot "<IN>" using 1:2 axes x1y1 title 'Aktuell (Watt)' ls l0 lw 1 with lines,\ "<IN>" using 1:2 axes x1y1 title 'Aktuell (Watt)' ls l0 lw 1 with lines
Konfiguration Home Assistant
Bitte die Konfiguration in Anlehnung an die des Gaszählers vornehmen.
https://wiki.gorjup.de/doku.php?id=public:gaszaehler#konfiguration_im_home_assistant
Script:
mqtt: sensor: - name: "Stromzähler Zählerstand" unique_id: sensor.stromzaehler_zaehlerstand state_topic: "tele/Stromzaehler/json" value_template: '{{ value_json.energytotal }}' unit_of_measurement: 'kWh' payload_available: "Online" payload_not_available: "Offline" device_class: energy state_class: "total_increasing" - name: "Stromzähler Strompreis" unique_id: sensor.stromzaehler_strompreis state_topic: "tele/Stromzaehler/json" value_template: '{{ value_json.electric_price }}' unit_of_measurement: 'Cent/kWh' payload_available: "Online" payload_not_available: "Offline" device_class: energy state_class: "total_increasing" - name: "Stromzähler Aktuelle Leistung" unique_id: sensor.stromzaehler_aktuelle_leistung state_topic: "tele/Stromzaehler/json" value_template: '{{ value_json.actpower }}' unit_of_measurement: 'kWh' payload_available: "Online" payload_not_available: "Offline" device_class: energy state_class: "total_increasing" - name: "Stromzähler Verbrauch Energie heute" unique_id: sensor.stromzaehler_verbrauch_energie_heute state_topic: "tele/Stromzaehler/json" value_template: '{{ value_json.today_kwh }}' unit_of_measurement: 'kWh' payload_available: "Online" payload_not_available: "Offline" device_class: energy state_class: "total_increasing" - name: "Stromzähler Verbrauch Kosten heute" unique_id: sensor.stromzaehler_verbrauch_kosten_heute state_topic: "tele/Stromzaehler/json" value_template: '{{ value_json.today_money }}' unit_of_measurement: 'EUR' payload_available: "Online" payload_not_available: "Offline" device_class: energy state_class: "total_increasing" - name: "Stromzähler Verbrauch Energie gestern" unique_id: sensor.stromzaehler_verbrauch_energie_gestern state_topic: "tele/Stromzaehler/json" value_template: '{{ value_json.yd_kwh }}' unit_of_measurement: 'kWh' payload_available: "Online" payload_not_available: "Offline" device_class: energy state_class: "total_increasing" - name: "Stromzähler Verbrauch Kosten gestern" unique_id: sensor.stromzaehler_verbrauch_kosten_gestern state_topic: "tele/Stromzaehler/json" value_template: '{{ value_json.yd_money }}' unit_of_measurement: 'EUR' payload_available: "Online" payload_not_available: "Offline" device_class: energy state_class: "total_increasing" - name: "Stromzähler Verbrauch Energie vorgestern" unique_id: sensor.stromzaehler_verbrauch_energie_vorgestern state_topic: "tele/Stromzaehler/json" value_template: '{{ value_json.dbyd_kwh }}' unit_of_measurement: 'kWh' payload_available: "Online" payload_not_available: "Offline" device_class: energy state_class: "total_increasing" - name: "Stromzähler Verbrauch Kosten vorgestern" unique_id: sensor.stromzaehler_verbrauch_kosten_vorgestern state_topic: "tele/Stromzaehler/json" value_template: '{{ value_json.dbyd_money }}' unit_of_measurement: 'EUR' payload_available: "Online" payload_not_available: "Offline" device_class: energy state_class: "total_increasing" - name: "Stromzähler Zählerkonstante" unique_id: sensor.stromzaehler_konstante state_topic: "tele/Stromzaehler/json" value_template: '{{ value_json.db_zk }}' unit_of_measurement: 'U/kWh' payload_available: "Online" payload_not_available: "Offline" device_class: energy state_class: "total_increasing"
Neue TASMOTA Firmware für den MQTT Stromzähler
Neue TASMOTA Releases stehen zum Download unter folgendem Link zur Verfügung (Passwort = 10 stellige, aphanumerische Nummer auf dem Gerätelabel „unterste Zeile“)
Download TASMOTA Releases für Stromzähler
Troubleshooting
Es wurde eine Standard TASMOTA Firmware auf den MQTT-Stromzähler geflashed/geupdated
Solange kein blank_1MB.bin Image geflashed wurde, sind die Einstellungen noch vorhanden, aber das Script funktioniert nicht mehr.
In diesem Fall muss zuerst die tasmota-minimal_xxx.bin Firmware und anschließend wieder die scripting_tasmota_xxx.bin Firmware über das Webinterface geflashed werden. (Siehe „Neue TASMOTA Firmware für den MQTT Stromzähler“).
MQTT-Stromzähler meldet sich nicht mit seiner WLAN/SSID
Bitte prüfen, ob das 5V Stromkabel richtig tief eingesteckt wurde. Es kann sein, dass das Kabel nicht 100% Kontakt mit dem D1 Wemos Mini im inneren des Gehäuses hat.
Im Zweifelsfall bitte den Deckel öffen, den D1 Wemos Mini heraus nehmen und nochmal das Kabel einstecken. Wenn er sich immer noch nicht meldet, scheint die TASMOTA Software nicht geflashed oder korrupt zu sein.
Es kann auch sein, dass bei der WLAN Verbindung ein falsches Passwort eingegeben wurde und das Gerät jetzt permanent versucht sich mit falschem Passwort zu verbinden.
In diesem Fall muss das Gerät neu geflashed werden. Zuerst mit dem blank_1MB.bin und anschließend mit der scripting_tasmota_xxx.bin. (Siehe „Neue TASMOTA Firmware für den MQTT Stromzähler“).
Danach muss eine komplette Neukonfiguration gemäß dieser Wiki Anleitung durchgeführt werden.
MQTT-Stromzähler wird am USB-Port nicht erkannt
In diesem Fall handelt es sich bei dem verwendeten Kabel evtl. nur um ein reines Stromkabel und nicht um ein Datenkabel. Bitte ein anderes Micro-USB-Kabel verwenden.
Meistens ist beim Einstecken des MQTT-Stomzählers in den Computer-USB Port bei Verwendung eines Datenkabels ein Windows-Sound zu hören (Windows 10 oder höher).
MQTT-Stromzähler verhält sich seltsam und geht aus, wenn der Poti auf Anschlag gedreht wird
In diesem Fall liegen vermutlich die Lötpunkte des IR-Sensor blank auf dem Metallgehäuse (Chip) des D1-Mini und verursachen einen Kurzschluß.
Bitte daruf achten, dass die Rückseite des IR-Sensor mit Klebeband beklebt ist und somit kein Kurzschluß entstehen kann.
MQTT-Stromzähler zählt nicht / LED leuchtet dauerhaft grün
In diesem Fall ist der Sensor nicht richtig justiert. Bitte mit einem kleinen Schraubendreher den Poti so fein einstellen, dass die linke, grüne LED gerade noch leuchtet und bei leichtem Kontakt mit dem Schraubendreher diese wieder ausgeht.
Dann abwarten ob bei Ankunft der roten Markierung auf der Aluminiumscheibe die LED aus geht. Ist dies der Fall, ist der Sensor korrekt eingestellt. Andernfalls bitte weiter justieren.
Um die Funktion generell zu testen, kann man mit dem Finger oder einen Stift vorne vorbeistreichen um zu sehen, ob die die LED erlischt. Wenn ja, ist der Sensor generell in Ordnung.