Verbrauchs-Messwerte über die S0-Schnittstelle auslesen

Ein wichtiger Punkt in Sachen Hausautomatisierung ist die Messung von Verbrauchswerten. Die Verbrauchsmessung einfacher Verbraucher geht zum Beispiel sehr einfach mit einer PCA301-Messsteckdose von ELV. Oft möchte man jedoch viel vorher mit der Messung beginnen. Eine Möglichkeit ist dabei der Einsatz von Messgeräten, welche direkt den Haupt-Wechselstromzähler abfragen. Hat man jedoch noch einen älteren Zähler (mechanische Ferraris-Wechselstromzähler) verbaut, kann die Abfrage sich etwas schwierig erweisen. Oft ist dann eine optische Messmethode erforderlich, welche die drehende Metallscheibe entsprechend beobachtet.

Bei neueren Wechselstromzählern gibt es jedoch eine sogenannte S0-Schnittstelle. Dies erleichtert das Auslesen enorm. Hat man jedoch noch einen alten Zähler, kann man auf einfache Wechselstromzähler für die Hutschiene ausweichen. Diese sind für ca. 20-40€ zu bekommen und lassen sich zum Beispiel im Sicherungskasten unterbringen.

Letzte Aktualisierung am 17.02.2018 / Affiliate Links / Bilder von der Amazon Product Advertising API

Ein weiterer Vorteil ist, dass diese Zähler erst nach dem Haupt-Zähler eingebaut werden und somit keine Abnahme des Energieversorgers nötig ist. Ein Einbau eines neuen und modernen Haupt-Wechselstromzähler kann nämlich nur vom Energieversorger vorgenommen werden und ist dementsprechend auch etwas teurer, wenn der Einbau privat bezahlt werden muss. 

In diesem Beitrag möchte ich euch zeigen, wie ihr diese S0-Schnittstelle mit Hilfe eines ESP8266-Baustein und ESP Easy auslesen könnt und die Messwerte in FHEM einbindet. 

Die S0-Schnittstelle

Die S0-Schnittstelle ist im Grunde ein einfacher Schalter, welcher pulsartig geschlossen und geöffnet wird. Die so entstandenen Impulse lassen sich messen. Der Hersteller gibt dann die Impulswertigkeit an. Zum Beispiel 1000 Impulse / 1 kWh. Liegt also eine Last von 1 kW an, so werden innerhalb einer Stunde 1000 Impulse ausgegeben. Je nach Verbrauch ändert sich also die Frequenz der Impulse. Dies erlaubt ein Berechnen der aktuellen Leistung. 

Misst man zum Beispiel innerhalb von 10 Minuten 50 Impulse. So erhält man eine Leistung von 300 Watt. 

Ich habe mach versucht die Berechnung etwas anschaulich darzustellen. Mit einem zusammengesetztem Dreisatz lässt sich dies relativ simpel berechnen. 

Die meisten Zähler führen diese Schnittstelle über zwei Kontakte nach Außen. Vereinzelt kann es vorkommen, dass die S0-Schnittstelle nur optisch über LED ausgegeben werden kann. Dieser Blogbeitrag wird das Auslesen über die Kontakte behandeln. 

Bevor ihr nun also weiter liest, solltet ihr euch zunächst mit eurem Zähler vertraut machen und herausfinden, an welchen Kontakten sich die S0-Schnittstelle befindet. Beim Zähler DRS115B von BG-etech (Affiliate-Link) sind es die Kontakte 21 und 20. 

ESP Easy mit Impuls Counter

Wie oben bereits erwähnt, verwende ich ESP Easy als Software für den ESP-Baustein. Als ESP-Baustein kommt ein WeMos D1 Mini Pro zum Einsatz. 

Letzte Aktualisierung am 17.02.2018 / Affiliate Links / Bilder von der Amazon Product Advertising API

Nachdem ihr euer ESP-Baustein mit der neusten Version von ESP Easy geflasht habt, könnt ihr mit der Konfiguration beginnen. Andernfalls liest ihr am besten auf meinem Blogbeitrag nach, wie ihr die neuste ESP Easy Version auf euer ESP-Baustein programmiert und konfiguriert. 

Für die folgenden Punkte, muss der ESP-Baustein bereits mit der neusten ESP Easy-Software geflasht und die Verbindung zu FHEM hergestellt sein. Wie dies geht, erfahrt ihr ebenfalls auf meinem Blogbeitrag.

ESP Easy bietet bereits ein entsprechendes Modul um die Impulse der S0-Schnittstelle auszulesen. Den sogenannten "Generic - Puls counter". Dieses Devices lässt über die ESP-Easy-Weboberfläche unter "Devices" einrichten.

Ich habe zu Beginn und zum Testen zunächst mit einem einfachen Button gearbeitet. Verwendet habe ich das Button-Shield von WeMos.

Letzte Aktualisierung am 17.02.2018 / Affiliate Links / Bilder von der Amazon Product Advertising API

Der Button ist am GPIO-0 (D3) angeschlossen. Den Puls Counter habe ich deswegen wie folgt definiert:

Den Delay könnt ihr beliebig festlegen. Es beschreibt die Zeit, nach der ESP Easy Daten an FHEM sendet. In diesem Fall also alle 60 Sekunden. Des Weiteren habe ich den Button als Device eingerichtet.

Nachdem beide Devices eingerichtet wurde, kann man durch Betätigen des Buttons testen, ob der Puls Counter funktioniert. 

In diesem Fall wurde der Button 15mal betätigt. Das Reading "Count" zeigt dieses an. Wartet man nun ein bisschen, geht das Reading "Count" wieder auf 0. Das Reading "Total" bleibt jedoch auf 15 und zeigt somit den gesamten Zählerstand an, wobei "Count" nur den aktuellen Stand anzeigt, bzw. die aktuelle Messung. Das Reading "Time" zeigt den Abstand der Impulse an. Somit ist später in FHEM möglich, den aktuellen Verbrauch in Watt zu berechnen. Dazu später mehr.

Die Konfiguration von ESP Easy ist nun abgeschlossen und es kann mit der Definition in FHEM begonnen werden.

Konfiguration innerhalb von FHEM

Das Anlegen der Devices geschieht in FHEM automatisch. Im Raum "ESPEasy" sollten sich nun zwei Devices befinden. Zum Einen der Button und zum Anderen der Puls Counter.

Für den Stromzähler ist nur das zweite Device von Bedeutung. Dieses kann nun umbenannt werden und in den gewünschten Raum verschoben werden.

rename ESPEasy_ESP_Easy_PulsCounter Stromzaehler; 
attr Stromzaehler room Zähler;

Als Reading erhält man nun die drei Readigns "Count", "Timer" und "Total". Das Reading "Count" erhält die Zahl an gemessenen Impulsen seit der letzen Übertragung vom ESP-Modul. "Time" gibt dabei die Zeit zwischen den letzten beiden Impulsen in ms an. Das Reading "Total" erhält die Anzahl an Impulsen seit dem letzten Neustart des ESP-Boards.

Die Verbindung zwischen dem ESP Easy-Board, dem S0-Wechselstromzähler und FHEM klappt nun also. Für die weitere Einrichtung in FHEM, kann man nun den Button vom ESP-Board entfernen und den S0-Wechselstromzähler anschließen.

Dazu einfach den "S-"-Anschluss vom Wechselstromzähler an GND des ESP-Boards anschließen. Der "S+"-Anschluss wird an einen freien GPIO-PIN angeschlossen. Um keine weiteren Konfigurationen auf der ESP-Easy-Weboberfläche vornehmen zu müssen, emfehle ich euch den GPIO0 (D3) zu verwenden. Des Weiteren muss ein 10kOhm-Pull-Up-Widerstand an den GPIO0 (D3) zu Vcc (5V) vom ESP-Board angeschlossen werden.

Um nun die Readings entsprechend zu Verarbeiten werden noch vier userReadings hinzugefügt. 

PulsZeit:Time.* {ReadingsVal("$name", "Time", 0)/1000 },StromverbauchAktuell:Time.* { my $zeit = ReadingsVal("$name", "Time", 0); if($zeit > 0){sprintf("%.2f",3600/ReadingsVal("$name", "PulsZeit", 0));} else {sprintf("0");}},TagesVerbrauch:Time.* { ReadingsVal("$name", "Total", 0)/1000 },ZaehlerStand:Time.* { ReadingsVal("$name", "Total", 0)/1000 + ReadingsVal("$name", "ZaehlerStandVortag", 0)}

Das Reading "PulsZeit" enthält den Abstand der Impulse in Sekunden. Das Reading "StromverbrauchAktuell" gibt den aktuellen Stromverbrauch an, welcher mit dem Pulsabstand berechnet wurde. Das Reading "TagesVerbrauch" enthält den Tagesverbrauch in "kWh". Das Reading "ZaehlerStand" gibt den gesamten Zählerstand an. Die if-Abfrage dient dazu, dass keine Fehlermeldung bezüglich Division durch Null erschein.

Das Reading "Time" enthält den Impulsabstand in ms. Teilt man dieses Reading durch 1000 erhält man den Abstand in Sekunden. Diese wird im Reading "PulsZeit" gespeichert. Um nun die Rechnung des aktuellen Stromverbrauches zu verstehen, schauen wir uns nochmal die Tabelle an. Teilt man nun nämlich 3600 (Sekunden) durch die PulsZeit erhält man den aktuellen Stromverbrauch in W. In der Tabelle wird 3600 durch die Zeit geteilt und danach noch mit der Anzahl der Impulse multipliziert. 

Da das Reading "PulsZeit" die Zeit zwischen zwei Impulsen beinhaltet, ist es sozusagen eine Multiplikation mit 1 und kann deswegen in der Berechnung weggelassen werden.

INFO: Je nach angelegter Last, kann es etwas dauern, bis die Leistung korrekt angezeigt wird. Der Grund ist der, dass das ESP-Board mindestens zwei Impulse gemessen haben muss, damit die Zeit zwischen diesen Impulsen gemessen werden kann.

Damit nun auch das Reading "TagesVerbrauch" richtig berechnet wird, ist noch eine weitere Anpassung notwendig. Aktuell beinhalten die Readings "TagesVerbrauch" und "ZahlerStand" den gleichen Wert, welcher vom Reading "Total" berechnet wird. 

Um 00:00 Uhr muss also das Reading "Total" zurückgesetzt werden. Das Reading "Total" wird automatisch bei einem Neustart vom ESP-Board auf Null gesetzt. 

Für den Reset wird ein einfaches at-Device eingerichtet.

define atStromzaehler at *00:00:00 set Stromzaehler reboot

Durch den Reset vom Reading "Total", wird nun der TagesVerbrauch jeweils um Mitternacht auf Null gesetzt. Dadurch, dass bei der userReading-Definition dem Reading "ZaehlerStand" der Zusatz "monotonic" hinzugefügt wurde, wird der "ZaehlerStand" nun automatisch immer aufaddiert. 

Um einen eventuellen Vorwert, welcher bereits vom Zähler, vor der Einrichtung in FHEM gemessen, wurde in FHEM zu übernehmen. Könnt ihr ein einfachen setreading-Befehl absetzen.

setreading Stromzaehler Total 390

Dadurch, dass "Total" nun kurzzeitig (bis zum nächsten Datenempfang) auf 390 gesetzt wird, werden zum Reading "ZaehlerTotal" 0.39 kWh hinzuaddiert. 

Nachdem man die userReadings definiert hat, erhält man alle wichtigen Readings vom Stromzähler. Den aktuellen Stromverbrauch in Watt (StromverbrauchAktuell), den Tagesverbrauch in kWh (TagesVerbrauch) und den aktuellen Gesamtzählerstand in kWh (ZaehlerStand). 

Ich hoffe ich konnte euch verständlich erklären, wie ihr euer S0-Stromzähler wireless in FHEM einbinden könnt.

Stromzähler-Device in meiner FHEM Live-Demo

Um einen besseren Einblick in das Stromzähler-Device zu bekommen, empfehle ich euch einen Besuch auf meiner FHEM Live-Demo. Im Raum "Stromzähler" befindet das hier definierte ESP-Easy-Device.

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
Fotos und Bilder
 
 
 
sonstiges Dateiformat
 
 
 
  Subscribe  
Benachrichtige mich zu: