Dies ist eine alte Version des Dokuments!


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.


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.
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


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 Zähler1 um eine 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


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 Aliminium-Drehscheibe.

  1. sp (Strompreis in Cent)
  2. zk (Zählerkonstante)
  3. mu (Mindest Umlaufzeit der Scheibe)


Für den Wert mu am Besten einen oder mehrere hohen 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ößert 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
sp=52.15
zk=75
mu=10
c1=0
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

>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 %2sp%
=>Publish tele/%topic%/main/today_kwh %2e1%
=>Publish tele/%topic%/main/today_money %2sph1%
=>Publish tele/%topic%/main/yd_kwh %2e2%
=>Publish tele/%topic%/main/yd_money %2spg1%
=>Publish tele/%topic%/main/dbyd_kwh %2e3%
=>Publish tele/%topic%/main/dbyd_money %2spg2%
=>Publish tele/%topic%/main/value %2c1%
=>Publish tele/%topic%/main/actpower %0power%
=>Publish tele/%topic%/main/energytotal %2total%
=>Publish tele/%topic%/json {"energytotal": "%2total%", "value": "%2c1%", "today_kwh": "%2e1%", "today_money": "%2sph1%", "yd_kwh": "%2e2%", "yd_money": "%2spg1%", "dbyd_kwh": "%2e2%", "dbyd_money": "%2spg2%", "zk": "%zk%, "electric_price": "%2sp%", "actpower": "%0power"}
}

>T
c1=Counter#C1
total=c1/(2*zk)

>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% €

#

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:

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:

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:value.* {\
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");;\
}

Danach sollte es in FHEM ungefähr so aussehen:
stromzaehler_20.jpg

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


Navigation
Eigene Werkzeuge