Bei der Renovierungsplanung unseres Hauses war schnell klar dass hier einige Dinge automatisiert werden “müssen”. Dinge wie eine automatische Rolladensteuerung oder die Steuerung der Dachfenster bei Regen sind wohl selbstverständlich. Dazu kam nun aber die Frage ob es nicht auch möglich sei den Stromverbrauch überwachen zu können. Hintergrund ist hier im Kern der angeschaffte Whirlpool und die Frage wie viel Energie dieser wohl so verbraucht. Glücklicherweise war dies mit der eingesetzten FHEM ein Kinderspiel. Dieser Artikel soll die dafür eingesetzten Scripte sammeln.
technische Voraussetzungen
Damit das, was ich hier nun beschreibe, funktioniert, müssen einige technische Voraussetzungen erfüllt sein. Zum ersten benötigen wir eine lauffähige FHEM Installation. Bei mir läuft diese auf einem Raspberry PI*. Damit die FHEM nun mit den Homematic Komponenten kommunizieren kann setze ich selbst auf das HM-MOD-RPI-PCB HomeMatic Funkmodul* welches einfach auf den PI aufgesteckt wird (Konfigurationsanleitung siehe Wiki). Zu eigentlichen Steuerung und Überwachung der zu messenden Geräte setze ich auf eine schaltbare Steckdose mit Leistungsmessung von Homematic*.
Wie man nun eine FHEM installiert beschreibe ich hier nicht, dazu gibt es eine echt gute Anleitung im FHEM-Wiki. Sobald die Installation läuft, das HomeMatic Funkmodul eingerichtet und die Steckdose angelernt ist, kann es auch schon losgehen.
Stromverbrauch überwachen – Einrichtung der Channels
Die HomeMatic Funksteckdose verfügt insgesamt über 6 Channels welche alle unterschiedliche Informationen ausliefern. Der “channel_02” ist, für die von uns geplante Überwachtung des Stromverbrauches, der Channel der Wahl. Ich habe diesen in meinem Fall erstmal umbenannt und diesem einen für mich sprechenden Namen gegeben:
rename <DEVICE_ID>.channel_02 <Zielname>
-> rename <DEVICE_ID>.channel_02 strom.whirlpool.pwr
Als nächstes schauen wir uns einmal die Readings von unserem neuen Device an und sehen, dass alle gewünschten Parameter direkt ersichtlich sind:
In meinem Fall liegt der aktuelle Stromverbrauch bei 5,19 Watt. Die Anzeige verändert sich, sobald das Gerät an der Steckdose seinen Verbrauch ändert. Schaltet sich nun als eine Pumpe oder die Heizung des Whirlpools ein, so schnellt der Stromverbrauch hoch und wir können erkennen was hier passiert.
Stromverbrauch protokollieren – Umleiten in Logfile
Damit wir den Verbrauch nun auswerten können benötigen wir ein Protokoll. Auch dies ist mit FHEM ein absolutes Kinderspiel, wir legen einfach ein neues Logfile an und lassen die gewünschten Werte dort rein protokollieren. Auch hier gibt die Commandref von Wiki wieder Hilfestellung. Der von mir genutzte Befehl hierzu lautete wie folgt:
define FileLog_Strom.Whirlpool.Verbrauch FileLog ./log/Strom.Whirlpool.Verbrauch-%Y-%m.log strom.whirlpool.pwr:eState:.*
Der Befehl erzeugt ein neues Logfile mit dem Namen ‘Strom.Whirlpool.Verbrauch-%Y-%m.log’ wobei das %Y durch das aktuelle Jahr und das %m durch das aktuelle Monat ersetzt wird. Sobald sich nun der Stromverbrauch an der Funksteckdose ändert wird ein Eintrag in die neu angelegte Logdatei geschrieben. Das Ergebnis sieht nun ungefähr so aus:
Verbrauchskosten in Übersicht darstellen
Das nun angelegte Protokoll ist schonmal eine schöne Sache doch so richtig bringt uns das natürlich nicht weiter. Ich selbst wollte gerne auf einen Blick sehen wie hoch mein Stromverbrauch heute und im aktuellen Monat bisher so war.
Der Aufbau dieser Anzeige war nicht ganz so trivial und benötigte neben 2 Dummys zur Anzeige auch noch einen AT-Trigger welche jede Minute in das Logfile schaut und den aktuellen Wert berechnet.
Legen wir uns zuerst einmal die benötigten Dummys und den leeren AT-Trigger an.
define WhirlpoolStromkostenTag dummy
define WhirlpoolStromkostenMonat dummy
define atWhirlpoolStromkosten at +*00:01:00 test
Nun ist noch nicht viel passiert. Wir haben 2 leere Dummys für die Stromkosten des Tages und des Monates und einen AT welcher jede Minute läuft und das Command “test” ausführt.
Das Command ist natürlich noch absoluter Quatsch und muss “leicht” angepasst werden. Wir öffnen selbiges, klicken auf “DEF” und tragen hier folgendes Command ein:
+*00:01:00 {
my $oldVerbrauchVortag = (ReadingsVal("WhirlpoolStromkostenTag","VerbrauchVortag",0));
my $neuerVerbrauch = (ReadingsVal("strom.whirlpool.pwr","energy",0));
my $a = ($neuerVerbrauch / 1000) - $oldVerbrauchVortag;
fhem("setreading WhirlpoolStromkostenTag Verbrauch $a");
fhem("setreading WhirlpoolStromkostenMonat Tagesverbrauch $a");
if(($hour==0) && ($min==0)){
my $neuerVortagesverbrauch = $oldVerbrauchVortag + $a;
fhem("setreading WhirlpoolStromkostenTag VerbrauchVortag $neuerVortagesverbrauch ");
fhem("setreading WhirlpoolStromkostenTag Verbrauch 0")
}
if(($hour==0) && ($min==0) && ($mday==1)){
fhem("setreading WhirlpoolStromkostenMonat Verbrauch 0")
}
}
Stromverbrauch überwachen – was tut das Script?
Im Grunde genommen ist das Script recht einfach. Der Dummy für den Tagesverbrauch bekommt ein zusätzliches Reading für den Verbrauch des Vortages sowie den aktuellen Verbrauch. Wir lesen zuerst den Vortagesverbrauch und anschliessend den aktuellen Verbrauch aus und berechnen nun den aktuellen Verbrauch welchen wir sowohl in das Tages als auch das Monatsreading setzen.
Ist es gerade 0 Uhr so setzen wir den Vortagesverbrauch auf 0, gleiches tun wir beim Monatsreading am Start eines neuen Monates.
Stromverbrauch in lesbarer Form anzeigen
Somit verfügen die einzelnen Dummys nun also über den aktuellen Stromverbrauch (je Einheit) in KW. Was nun noch fehlt ist die Anzeige und die “Übersetzung” in die realen Kosten. Dies kann über die Attribute der jeweiligen Dummys angepasst werden.
attr WhirlpoolStromkostenTag stateFormat {sprintf("%.2f kWh - %.2f €",ReadingsVal("WhirlpoolStromkostenTag", "Verbrauch",0), ReadingsVal("WhirlpoolStromkostenTag","Kosten",0))}
attr WhirlpoolStromkostenTag userReadings Kosten {ReadingsVal("WhirlpoolStromkostenTag","Verbrauch",0)*0.2507}
attr WhirlpoolStromkostenMonat stateFormat {sprintf("%.2f kWh - %.2f €",ReadingsVal("WhirlpoolStromkostenMonat", "Verbrauch",0), ReadingsVal("WhirlpoolStromkostenMonat","Kosten",0))}
attr WhirlpoolStromkostenMonat userReadings Verbrauch monotonic {ReadingsVal("WhirlpoolStromkostenMonat","Tagesverbrauch",0)},Kosten {ReadingsVal("WhirlpoolStromkostenMonat","Verbrauch",0)*0.2507}
Das Ergebnis ist in diesem Post bereits einmal vorweg genommen worden. Wir erhalten eine Anzeige des aktuellen Tagesverbrauches sowie des Verbrauches im aktuellen Monat. Hierbei gehen wir davon aus dass die KWh bei 0.2507 EUR liegt.
Natürlich ist es ohne weiteres Möglich diese Auswertung auch noch auf Monats- oder Jahresbasis durchzuführen oder die Verbräuche in einem Diagram anzuzeigen. Hier sind den eigenen Wünschen und Ideen fast keine Grenzen gesetzt.
Danke! Leicht zu verstehen und gut umzusetzen z.B. für den Ertrag meines Balkonkraftwerks. Vorhandene Statistikmodule produzieren mir zu viel Overhead und müssen doch umgerechnet und formatiert werden für eine vernünftige Übersicht.
Freut mich, dass meine Scripte Dir helfen konnten …