Simon Szustkowski

Ein Blog über alles, was mir gerade so durch den Kopf geht

Dec 21, 2015

Smartmeter im Selbstbau

Ich bin ein Freund von schicken Graphen, die mir irgendwelche Größen anzeigen. So habe ich schon seit längerem eine Munin-Instanz, die alle möglichen Daten meiner Server sammelt, aufwertet und graphisch darstellt. Als größeres Projekt stand nun aber eine graphische Auswertung des Stromverbrauches meiner Wohnung an. Ähnlich wie die Smartmeter, die mittlerweile von den Stromversorgern an die Kunden ausgeliefert werden, aber doch bitte im Selbstbau und ohne, dass mein Stromversorger meinen Verbrauch detailliert mit auslesen kann.

Einen solchen Ansatz verfolgt das Volkszähler-Projekt. Ein Problem hierbei ist allerdings das Auslesen des Stromzählers. Ich habe noch einen älteren Ferraris-Zähler installiert, besser bekannt als das Modell, bei dem sich eine Scheibe mit einer Markierung dreht, und immer, wenn die Markierung an einem Sichtfenster vorbei kommt, wieder eine gewisse Menge an Strom verbraucht wurde. Diese Markierung muss nun ausgelesen werden. Im Volkszähler-Wiki gibt es dazu mehrere Projekte, und so war mein erster Versuch, mir einen Sensor zu besorgen, diesen mit einem Raspberry Pi anzusprechen, und die Daten auszulesen.

Erstes Problem: Ein Raspberry Pi braucht Strom. Glücklicherweise war in dem Schaltschrank hier in der Wohnung bereits eine Hutschienen-Steckdose installiert. Ansonsten hätte ich einen Elektriker beauftragen müssen, oder es selbst machen müssen. Durch meine Ausbildung als Elektrofachkraft dürfte ich das theoretisch, und eine Montage im Schaltschrank direkt neben dem Zähler ist etwas komplizierter, als eine Steckdose in einer vorhandenen Unterputzdose zu montieren.

Das zweite Problem, was aber noch viel ärgerlicher war, war die Tatsache, dass die Scheibe nicht komplett rund läuft, und leicht eiert. Dies führte dazu, dass der oben verlinkte Sensor keine verlässlichen Daten lieferte, und in 99% der Fälle die Markierung einfach nicht erkannte. Glücklicherweise war der Konstrukteur des Sensors so nett, und hat ihn wieder zurückgenommen.

Bei weiterer Recherche stieß ich schließlich auf den Homematic-Sensor ES-FER samt Zentraleinheit, mit der ich hoffentlich mittels variabler Empfindlichkeit des Sensors noch etwas Feintuning betreiben könnte. Die Zentraleinheit gibt es seit dem ersten Quartal 2015 bei ELV als Bausatz zu kaufen, und kann mittels verschiedener Sensorköpfe benutzt werden, um Ferrariszähler, moderne S0-Zähler mit LED, oder aber Gaszähler auszulesen. Die Zentraleinheit gibt es allerdings nur als Bausatz zu kaufen, ist aber sehr leicht aufzubauen. Insgesamt müssen 14 Lötstellen gesetzt werden, und 8 Schrauben eingeschraubt werden, also echt keine große Sache. Ich habe also alles nach Vorgabe montiert, und den Sensor mittels zweier Klebepads am Sichtfenster meines Zählers angebracht. Durch eine Einstellmöglichkeit der Intensität und der Auflösung des Zählers (sprich: Wieviele Umdrehungen der Zählerscheibe entsprechen einer Wattstunde) hatte ich bereits ein erstes Erfolgserlebnis: Auf dem kleinen Display der Einheit wurde mir der Momentanverbrauch meiner Wohnung in Watt angezeigt. Doch nun soll das ganze ja auch noch grafisch aufbereitet werden.

Hier kommt die Tatsache zum tragen, dass das gesamte Sensor-Setup über das Homematic-Funkprotokoll mit anderen Homematic-kompatiblen Geräten sprechen kann. Ähnlich wie andere Homematic-Sensoren arbeitet die Zentraleinheit übrigens auf Batteriebetrieb, und soll angeblich mit 4 AA-Batterien gute zwei Jahre durchhalten. Die Steckdose im Schaltschrank ist also nicht zwingend notwendig.

Bezüglich Homematic war es für mich von Vorteil, dass ich bereits eine Instanz von fhem auf meinem Homeserver laufen hatte, die bis jetzt nur eine Funkschaltsteckdose in Abhängigkeit des errechneten Sonnenauf- und Untergangs an- und abgeschaltet hat. Da fhem mittels bestimmter USB-Funkdongles auch Homematic sprechen kann, sollten die Daten dort erst einmal aggregiert und aufbereitet werden. Die Maintainer empfehlen hierfür den CUL von Busware, der eigentlich nur ein CC1101-Chip mit USB-Anbindung und Antenne ist. Da mir die knapp 80€ damals allerdings zu teuer waren, hatte ich mir seinerzeit einen CUL selbst gebaut, indem ich einen CC1101 und einen Arduino Nano mittels Steckkabel für Pfostensteckerleisten verbunden habe. Dies klappte auch auf 433MHz, der Frequenz für Funksteckdosen, aber irgendwie versagte die Kombination auf 868MHz, der Frequenz für Homematic-Komponenten.

Da ich den ganzen Kram jetzt aber schnellstmöglich zum laufen bringen wollte, habe ich einen HM-CFG-USB-Dongle benutzt, der eigentlich nur von USB auf Homematic adaptiert. Damit dieser Stick in fhem integriert werden kann, benötigt man hierfür eine Middleware, da fhem hierfür aus mir unverständlichen Gründen eine Netzwerkverbindung voraussetzt. Die Middleware adaptiert also von USB auf IP und zurück. Näheres steht im fhem-Wiki.

Mit der Middleware und dem Stick klappte das Pairing der Sensoreinheit mit fhem wunderbar, und ich konnte aus den übertragenen Rohdaten auch schon einen Wert auslesen, der mir die momentane Leistungsaufnahme anzeigte. Wobei: “Momentan” ist hierbei wieder relativ zu sehen. Der Sensor schickt alle 3 Minuten ein Datagramm an den Server, und so wird nur die exakte Leistungsaufnahme gesendet, die zum Zeitpunkt des Sendens vorhanden war - kein Mittelwert oder sonste Aggregationen.

fhem hat schon eine eingebaute Lösung, um gewisse Messwerte grafisch darzustellen, aber diese Lösung fand ich jetzt nicht sonderlich komfortabel, und da ich von Anfang an die Visualisierung im Volkszähler als finalen Status angestrebt hatte, musste ich mich nun noch darum kümmern, die Werte von fhem in den Volkszähler zu transferieren.

Hierbei bieten sich in fhem die Notify-Objekte an. Das sind im Grunde genommen kleinere bis größere Perlfunktionen, die getriggert werden, sobald eine gewisse Sensorgröße einen bestimmten Wert annimmt. Die Volkszähler-Instanz hat eine sehr simple API, die einfach durch GET-Requests mit Werten gefüttert wird, die dann visualisiert werden. Und daher sah mein Notify so aus:

Stromzaehler:power:.* { 
my $base_url = "http://myhost.tld/middleware.php";
my $watt = ReadingsVal("Stromzaehler", "power", 0);
my $uuid = "XXX-YYY-ZZZ";
my $update_url = $base_url . '/data/' . $uuid . '.json?operation=add&value=' . $watt;
my $param = {
  url => $update_url,
  timeout => 5,
  method => "GET"
};
HttpUtils_NonblockingGet($param);
}

Dieser Snippet wird also getriggert, sobald der Wert, der in Stromzaehler:power drin steht, aktualisiert wird, egal, was für ein Wert da letztendlich drin steht. Es wird eine URL für einen simplen GET-Request generiert, und aufgerufen. Der aktuelle Wert der Leistungsaufnahme wird an die Volkszähler-Instanz geschickt, und visualisiert.

That’s all. Eigentlich ziemlich simpel, sobald man sich ein bisschen in die Materie fhem und Volkszähler reingefuchst hat.