- Deutsch (de)
- English (en)
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.
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.
Will man mit eigenen Projekten ins WLAN so bietet sich immer erst ein Blick auf die ESP8266 Module an.
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.
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:
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.
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%
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.
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.
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:
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.
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.
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.
Wenn ihr meine Arbeit unterstützen wollt, so könnt ihr mir gerne einen Cappuccino oder so spenden: .