Table of Contents

PowerMeter

Motivation

Die jährliche Stromabrechnung kann überraschend sein wenn man zum Beispiel als Singlehaushalt mit über 3500KWh abschliesst. Den Anbieter wechseln hilft eventuell auch die Kosten zu drücken, besser ist aber natürlich den Verbrauch zu senken. Doch wie kommt man an den Verbrauch ohne hinter jedes Gerät einen Strommesser zu schalten?
Ein Verfahren ist direkt in den Verteiler einen Drehstromzähler einzubauen. Die gibt unter anderem hier preiswert für unter 50€,

Der Elektriker des Vertrauens hilft beim Einbau in den Sicherungskasten, wenn man sich das nicht selber zutraut.
Der von mir ausgewählte zeigt den aktuellen und den akkumulierten Stromverbrauch summiert für alle Phasen an. Vielen dieser elektronischen Stromzähler ist gemeinsam, dass sie den aktuellen Verbrauch auch über eine potentialfreie S0 Schnittstelle ausgeben (nicht zu verwechseln mit ISDN S0-Bus). Wikipedia erklärt die Funktionsweise. Will man die gelieferten Werte aufzeichnen und später auswerten bedarf es einem Logger. Im Folgenden stelle ich mal meine Lösung vor.

S0 Signal

Die erste Aufgabe ist das S0 Interface auszuwerten und dann im heimischen WLAN für die Auswertung zur Verfügung zu stellen. Schauen wir uns dazu mal das S0 Signal an, was von einem Drehstromzähler kommt:

Es kommen also Impulse von ca. 44ms und der Abstand zwischen den Impulsen gibt den aktuellen Verbrauch wieder. In dem Beispiel sind es 19.25 Sekunden. Gemäss der Gerätespezifikation können wir 1000imp/KWh erwarten. Dies ist auch auf dem Zähler vorne vermerkt. Daraus ergibt sich die Berechnungsformel für den Verbrauch von:

W [Watt] = 3600 / X [sec]
W = 3600 / 19.25 = 187 Watt

Für die Ermittlung des Verbrauchs brauchen wir also eine Zeitmessung im Zehntelsekundenbereich.

Aufbau

Will man mit eigenen Projekten ins WLAN so bietet sich immer erst ein Blick auf die ESP8266 Module an.

ESP-07

Eine der einfachsten Ansätze ist ein ESP-07 mit der Open-Source Firmware ESP Easy. Tatsächlich schaffen wir es ohne eigene Programmierung die oben gestellte Aufgabe umzusetzen.
Doch zuerst zum elektrischen und mechanischen Aufbau. Der Schaltplan ist sehr übersichtlich und ähnelt dem Bett Sensor Projekt hier an anderer Stelle. Die Schaltung hat drei S0 Eingänge falls man die Phasen einzeln auswerten möchte. Ich habe nur eine in meiner Installation verwendet, da ich ja schon bekanntlich den Summenverbrauch geliefert bekomme.

Die internen Pullups versorgen den Optokoppler im Drehstromzähler und so lässt sich der Impuls an den jeweiligen Pins erkennen. Die Dioden D1-D3 dienen nur dem Verpolungsschutz und sind nicht unbedingt nötig. Natürlich kann man die S0 Leitungen auch direkt an das Modul anschliessen und umgeht so die Platine mit einer Freiverdrahtung. Für meine Lösung habe ich allerdings ein PCB erstellt.

Der Anschluss der S0 Leitungen erfolgt über Schraubklemmen. Die Spannungsversorgung ist auch steckbar mit einer 5.5/2.1mm Hohlbuchse. Hierzu findet man sehr preiswerte Steckernetzteile mit stabilisiertem 3.3V Gleichspannungsausgang. Mehr drahtgebundene Konnektivität benötigt das PowerMeter nicht.

Mit einem 3D Drucker lässt sich dann noch ein unauffälliges Gehäuse verwirklichen was man leicht mit doppelseitigen Klebeband ausserhalb des Sicherungskastens befestigen kann.

Programmierung (ESPEasy)

Nachdem die Hardware erstellt ist müssen wir noch das ESP Modul programmieren. Wir schon erwähnt basiert das PowerMeter auf ESPEasy. Im Link findet man auch Anleitungen wie die ESPEasy Firmware auf das Modul aufgespielt wird. Um in den Programmiermodus zu gelangen, muss beim Reset Release der Jumper SJ1 geschlossen sein. Die Programmierung erfolgt seriell über JP1 (USB-Serial Wandler).

Wenn alles geklappt hat und das Modul im heimischen WLAN eingebunden ist, kann die gesamte weitere Einstellung über das Webinterface erfolgen. Dazu benötigen wir:

Controler Setup

In meinem Fall sende ich die Daten zur Aufzeichnung und Auswertung an meinem Volkszähler. Dies wird als JSON Format über HTTP gemacht. Deshalb brauche ich einen HTTP Controller.
Um den aktuellen Verbrauchswert zum Beispiel auf einem Panel (ich nutze Home Assistant) anzuzeigen, kann man den Wert auch über MQTT übertragen. Dafür ist dann der MQTT Controller.

HTTP

Die grauen Stellen sind die Anonymisierung der Hosts und der UUID des Volkszählers. Dort dann einfach die eigenen Werte eintragen. Natürlich kann mann auch jedes andere Format senden. An den Wert kommt man mit %val3%. Die komplette Zeile bei Publish sieht bei mir so aus:

middleware.php/data/<uuid>.json?operation=add&value=%val3%

MQTT

Jetzt wählen wir MQTT aus und tragen die entsprechende Daten ein. Dazu gehören u.a. die IP Adresse des MQTT Servers sowie die Account Daten für die Anmeldung. Das Resultat sollte ähnlich dem folgenden Beispiel aussehen. Hier ist nur die IP des eigenen MQTT Servers anonymisiert und muss entsprechend angepasst werden.

Hardware Setup

Auf diesem Reiter müssen wir nur die Pull-Ups an den verwendeten Eingängen einschalten.

Device Setup

Als nächstes brauchen wir ein Device was den Zeit zwischen den Pulsen misst und speichert. Das lässt sich über den Reiter Devices erreichen. Für jeden S0 Input braucht es ein eigenes Device. Hier ist wie in meiner Lösung nur eins gezeigt.

Device Setup

Die grünen Zahlen rechts geben übrigens die aktuellen Messwerte wieder. In dem Beispiel liegt die Zeit bei 25991ms was einem Verbrauch von 138.5 Watt entspricht. Hier die Einstellungen für den Pulse Counter:

 Pulse Counter

Rules

Nun haben wir eine Anbindung an den MQTT Server und wir können den Verbrauch ermitteln. Was fehlt ist die Ablaufsteuerung für MQTT. Innerhalb des ESPEasy gibt es dafür die Rules: Dazu den folgenden Code in das Rules Set 1 kopieren.

On S0Pulse#Time do
  publish /home-assistant/%sysname%/powerflat,[S0Pulse#Time]   
endon

Bei jedem beendeten Messintervall wird das berechnete Ergebnis an den MQTT Server geschickt.

Programmierung (ESPHome)

Das PowerMeter lässt sich auch einfach über ESPHome in Home Assistant integrieren. Hier der zugehörige Beispielcode:

esphome:
  name: powermeter

esp8266:
  board: esp01_1m
 
# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "---key---"

ota:
  password: "---password---"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
 
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Powermeter Fallback Hotspot"
    password: "--password--"

captive_portal:

time:
  - platform: sntp
    id: my_time

sensor:
  - platform: pulse_counter
    pin: 
      number: GPIO14
      inverted: true
      mode:
        input: true
        pullup: true
    unit_of_measurement: 'kW'
    name: 'Power Meter Flat'
    id: powermeter_flat
    internal_filter: 10us
    filters:
      - multiply: 0.06  # (60s/1000 pulses per kWh)

  - platform: total_daily_energy
    name: "Total Daily Energy"
    power_id: powermeter_flat

Anstatt die Zeit zwischen den Pulsen zu messen wird hier die Anzahl der Pulse pro Zeiteinheit gezählt.

Fazit

Das PowerMeter läuft jetzt bei mir seit mehr als einem Jahr ohne Probleme und übermittelt die Daten. Ein typischer Verbrauchsverlauf sieht so aus (Screen shot aus meinem //Volkszähler//):

Die Peaks sind unter anderem der Backofen, der Herd und der Wasserkocher. Die regelmässigen Pulse kommen von der Kühl/Gefrierkombination. Meine Grundlast liegt so bei 150 Watt und ist sicher auch den Automatisierungen geschuldet.

Downloads

Spenden

Wenn ihr meine Arbeit unterstützen wollt, so könnt ihr mir gerne einen Cappuccino oder so spenden: .