MQTT 2R-Stromzähler (Zweirichtung) / Verbrauchsmessung eines Ferraris-Stromzählers

In einigen Haushalten findet sich noch ein Ferraris-Stromzählers, welcher bei verwendung eines Balkonkraftwerkes oder eine Mini-PV-Analage auch mal rückwärts laufen kann.
Dies führt in der Regel zu einer Verfälschung der Verbrauchsanzeige. Dieser 2R-Stromzähler hat zwei Sensoren und kann durch das intelligente Script erkennen, in welche Richtung der Zähler dreht.

:!: Bitte beachten, dass hier ein anlaloges Zählwerk in eine digetale Anzeige mit Hilfe von IR-Sonsoren gewandelt wird.
Es kann immer mal zu Abweichungen kommen. Bedeutet, dass gelegentlich die Richtung des Zähler falsch interpretiert werden kann und man den Wert des Zählerstandes auch hin und wieder anpassen muss.



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 jeweils 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 werden die beiden IR-Sensoren so fein eingestellt, dass jeweils 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 jeweils erlischt, wenn die rote Markierung auf der Aluminium-Drehscheibe den Sensor erreicht. Beim verlassen des Sensors muss die LED wieder leuchten.
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 (hier einfacher MQTT-Stromzähler) - Beide Sensoren müssen justiert werden



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.


Bei Auslieferung ist die folgende Konfiguration bereits vorhanden.

Gerät konfigurieren (Einstellungen > Gerät)

MQTT-Einstellungen (Einstellungen > MQTT)

Unter Host ist die IP-Adresse der Hausautomation einzutragen. ggf. auch user/password falls erforderlich.

Ereiterte Konfiguration (Einstellungen Erweitert)



Desweiteren sollte man als Datenschutz die Weboberfläche mit einem kryptischen Passwort schützen:
Der Benutzername lautet: admin
Beispiel:



Grundeinstellungen

Folgende Grundeinstellungen sind bereit bei Auslieferung vorgenommen.
TelePeriod = Intervall für das Senden von MQTT-Nachrichten
CounterDebounce = Zeit in Millisekunden, die vergehen müssen, um ein Prellen der Sensoren zu verhindern.

TelePeriod 120
CounterDebounce 10000

Konsolen Script

In folgendem, bereits vorhandenen, Script (Konsolen > Script konfigurieren) sind folgende Variablenwerte anzupassen.

  1. zk
  2. pmax
  3. latitude
  4. longitude


Für zk ist standardmäßig ein Wert von 75 U/kWh hinterlegt. Bitte diesen Wert mit der Angabe auf dem eigenen Stromzähler abgleichen.
Für pmax ist die Maximalleistung bei Vollast - ist mit 4 KW voreingestellt.
Für latitude Ist der Breitengrad des Standortes anzugeben.
Für longitude Ist der Längengrad des Standortes anzugeben.

Aus den Koordinaten wird ermittelt, ob gerade die Phase Tag/Nacht herrscht. Dadurch wird sichergestellt, dass der Zähler nachts nicht rückwärts zählt.

Script:

>D
p:zs=0 
p:s1=0
p:total=0
pmax=4
mu=0
p:e2=0
p:e3=0
fl1=0
fl2=0
rt="unbekannt"
ph="unbekannt"
lrt=""
c1=0
c2=0
c1old=0
c2old=0
c1ts=0
c2ts=0
c1tsold=0
c2tsold=0
zk=75
hr=0
dy=0
sec=0
power=0
h1=0
e1=0


>B
=>sensor53 l255
latitude 50.0555
longitude 8.8008

>F
h1=zs-s1
e1=h1/(2*zk)
mu=3600/(pmax*zk)

if sunrise>0 
   and sunset>0 
   and time>sunrise 
   and time<sunset
   then
     ph="Tag"
   else
     ph="Nacht"
     fl2=0
endif

if fl1==1  
   and upsecs>(c1ts+19)
   then
   fl1=0
endif

if fl2==1  
   and upsecs>(c2ts+mu)
   then
   fl2=0
endif


// links
if c1!=c1old
   then 
    c1ts=upsecs
    if fl2==1
       and time>sunrise 
       and time<sunset
       then
        zs=zs-1
        rt="← rückwärts"
        lrt=rt
        fl2=0
       else
        fl1=1
   endif 
endif

// rechts
if c2!=c2old
   then 
    c2ts=upsecs
    if fl1==1
       then
        zs=zs+1
        rt="vorwärts →"
        lrt=rt
        fl1=0
       else
        fl2=1
    endif
endif


' Aktuelle Leistung
if c1>c1old 
   and upsecs>(c1tsold+mu)
   then
     c1ts=upsecs
     if rt==lrt
        then
        sec=c1ts-c1tsold
        if rt=="vorwärts →"
           and sec>0
           then
              power=3600000/(sec*zk)
           else 
              power=(3600000/(sec*zk))*-1
        endif
     endif
    c1tsold=c1ts
endif

c1old=c1
c2old=c2


>S
' Historische Werte
hr=hours
dy=day
if chg[hr]>0
 and hr==0
  then
   s1=zs
   e3=e2
   e2=e1
   svars
endif

' MQTT
if upsecs%tper==0{
=>Publish tele/%topic%/main/energytotal %total%
=>Publish tele/%topic%/main/actpower %0power%
=>Publish tele/%topic%/main/today_kwh %2e1%
=>Publish tele/%topic%/main/yd_kwh %2e2%
=>Publish tele/%topic%/main/dbyd_kwh %2e3%
=>Publish tele/%topic%/json {"energytotal": "%total%", "actpower": "%0power%", "today_kwh": "%2e1%", "yd_kwh": "%2e2%", "dbyd_kwh": "%2e3%",}
}


>T
c1=Counter#C1
c2=Counter#C2
total=zs/zk

>W
ZS: {m} %0zs%
Zählerstand: {m} %total% kWh
Richtung: {m} %rt%
Min-Umlauf: {m} %0mu% sek/U
Ltz-Umlauf: {m} %0sec% sek/U
Leistung: {m} %0power% W
Sensor L/R: {m} %0fl1% %0fl2%
Phase   : {m} %ph%
=========
Verbrauch:
Heute     : {m} %2e1% kWh
Gestern   : {m} %2e2% kWh
Vorgestern: {m} %2e3% kWh

Zählerstand einstellen

Der auf dem Stromzähler bereits erfasste Zählerstand wird folgendermaßen in TASMOTA per Konsole übertragen:
Kommando: script >zs= (ZS x ZK)

Die Berechnung richtet sich nach der im Skript definierten Zählerkonstante (zk), die angibt, wie viele Zählerumdrehungen einer verbrauchten Kilowattstunde entsprechen.

ZS = Zählerstand (kWh)
ZK = Zählerkonstante (U/kWh)

Beispiel: 44717,3 kWH * 75

script >zs=3353797,5


Im Hauptmenü sollte es dann in etwas so aussehen:

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 Aktuelle Leistung"
      unique_id: sensor.stromzaehler_aktuelle_leistung
      state_topic: "tele/Stromzaehler/json"
      value_template: '{{ value_json.actpower }}'
      unit_of_measurement: 'W'
      payload_available: "Online"
      payload_not_available: "Offline"
      device_class: power
      state_class: "measurement"
    - 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 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 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"

Dashboard Energie

Grafik:

Konfiguration:


Navigation
Eigene Werkzeuge