Beschreibung

Ziel dieses Projektes ist es, die Informationen eines digitalen Stromzählers in FHEM darzustellen. Bei mir ist ein ISKRA MT631 im Einsatz.

 

Für das Projekt müssen vorab folgende Schritte ausgeführt werden:

Für die Anforderung wird folgende Hardware benötigt:

Bei dem Fototransistor bzw. bei dem Widerstand, würde ich Euch empfehlen diese Ware bei z.B. https://www.reichelt.de/ zu bestellen. 

 

Wenn Ihr alles genauso konfiguriert wie ich, dann sieht das Ergebnis später ungefähr so aus. Grundvoraussetzung ist natürlich, dass Ihr einige Tage Daten gesammelt habt.

Vorbereitungen

Damit Ihr später alle Daten von Eurem elektrischen Stromzähler abrufen könnt, solltet Ihr bei Eurem Netzbetreiber den PIN des Stromzählers anfordern. In meinem Fall, hat hier eine einfache Mail mit der Anschrift und der Zähler-Nummer ausgereicht. Der PIN wurde mir dann per Post zugeschickt. Ohne den PIN, wird der Stromzähler nur den Gesamtverbrauch liefern. 

 

Über eine Taschenlampe könnt Ihr dann, mit dem entsprechenden PIN, die erweiterten Funktionen freischalten. Wie das alles funktioniert, steht in der jeweiligen Anleitung Eures Stromzählers.

Schaltplan

 

Der Schaltplan ist recht einfach aufgebaut. Wichtig ist nur, dass der Fototransistor richtig verkabelt wird.

Gehäuse

Für das Gehäuse des Fototransistors habe ich aus dem 3D Drucker ein zweiteiliges Gehäuse gedruckt. In das Gehäuse wird zum einen der Neodym-Magnet und der Fototransistor eingebaut. Den Widerstand habe ich direkt am NodeMcu verbaut. Auch für das NodeMCU wurde aus dem 3D Drucker ein zweiteiliges Gehäuse gedruckt. Das NodeMCU wurde, zum Schluss, mit einem langen Kabel mit dem Fototransistor verbunden.

In diesen Teil des Gehäuses wird der Neodym-Magnet und der Fototransistor eingebaut. 

Download
Stromzähler Teil 1
stromzaehler_digital_teil_1.stl
Text Dokument 242.0 KB

Dieses Teil wird als Deckel verwendet. Hier ist auch die Kabeldurchführung. Wer möchte kann den Deckel mit dem Gehäuse verkleben.

Download
Stromzähler Teil 2
stromzaehler_digital_teil_2.stl
Text Dokument 458.0 KB

Dieses Gehäuse kann für eine NodeMCU V2 oder V3 verwendet werden. Damit das NodeMCU V3 in das Gehäuse passt, müssen die Zapfen für die V2 Variante abgeschnitten werden. 

Download
NodeMCU V2 und V3 Gehäuse
NodeMCU_V2_und_V3_Gehause.stl
exe File 112.0 KB

Dieses Teil wird als Deckel verwendet. Hier ist auch die Kabeldurchführung. Wer möchte kann den Deckel mit dem Gehäuse verkleben.

Download
NodeMCU V2 und V3 Deckel
NodeMCU_V2_und_V3_Deckel.stl
Text Dokument 44.0 KB

Montage

 

Bei der Montage des Sensors gilt es zu beachten, dass der Fototransistor über dem entsprechenden Server fixiert wird. 

 

In der Regel befinden sich zwei Teile hinter dem Fenster. Das eine Teil ist fürs Senden zuständig, während das andere für den Datenempfang zuständig ist. Wenn man genau hinschaut, kann man das sendende Teil in regelmäßigen Abständen blicken sehen. Genau hier muss dann der Sensor fixiert werden.

 

Das Ganze sollte dann ungefähr so aussehen.

ESPEasy Konfiguration

Wie immer basiert diese erweitere Konfiguration auf der bereits vorab getätigten Firmware Installation mit anschließender Grundkonfiguration.

 

Folgende Devices werden benötigt:

  • Communication - Serial Server
  • Registerkarte "Device" auswählen
  • Über "Add" ein neues Device hinzufügen

 

Wir legen ein "Communications - Serial Server" Gerät an. Folgende Konfiguration muss hierfür gemacht werden:

  1. Device = Communications - Serial Server
  2. Name = Kann frei vergeben werden
  3. Enabled = Haken setzten, damit der Server auch aktiv ist
  4. TCP Port = 23
  5. Baud Rate = 9600
  6. Data bits = 8
  7. Parity = No parity
  8. Stop bits = 1
  9. Reset target after boot = None
  10. RX Receive Timeout (mSec) = 0
  11. Event processing = None
  12. Speicher der Konfiguration mit "Submit"
  13. Beende der Konfiguration mit "Close"

Damit ist die komplette Konfiguration abgeschlossen.

FHEM Konfiguration

Um auf die Daten des elektronischen Stromzählers zugreifen zu können, muss zuerst ein neues FHEM Device angelegt werden. Mein ESPEasy hat die IP-Adresse 10.10.2.3, Ihr müsst dann natürlich eure IP-Adresse verwenden.

 

Über folgendes FHEM Command könnt Ihr den elektronischen Stromzähler hinzufügen:

define haus.stromzaehler OBIS 10.10.2.3:23 SML

Nach dem das FHEM Device angelegt wurde, müssen noch folgende Attribute gesetzt werden:

attr haus.stromzaehler alias Stromzähler
attr haus.stromzaehler event-on-change-reading .*
attr haus.stromzaehler interval 30
attr haus.stromzaehler room ZZ_Strom
attr haus.stromzaehler stateFormat {sprintf("%.0f kWh", (ReadingsVal($name,"total_consumption",0) / 1000) ) . " / ". sprintf("%.0f W", ReadingsVal($name,"power",0)). " / ".ReadingsVal($name,"state",0)}

 

Das fertig konfigurierte FHEM Device sieht dann ungefähr so aus.

 

Im Bereich der Readings solltet ihr dann die Readings:

  • power
  • total_consumption

sehen.

 

 

OBIS Modul BUG

Nachdem ich FHEM Daten vom Stromzähler erfassen lasse, ist das Stromzähler Device in unregelmäßigen Abständen stehen geblieben. Am Anfang hatte ich das NodeMCU im Verdacht. Der Verdacht hat sich aber nicht bestätigt. Aktuell liegt meine Vermutung da, dass die Übertragung, sporadisch, nicht immer 100% vollständig ist. Hier scheint dann das OBIS Modul auf die fehlenden Daten zu warten, leider ohne Erfolg. 

 

Mit folgendem FHEM Command konnte ich das Device wieder dazu bringen Daten zu sammeln: 

modify haus.stromzaehler 10.10.2.3:23 SML

Da ich dies nicht jedes mal manuell machen wollte, habe ich mir ein Überwachungs-Device in FHEM angelegt. Diese prüft alle 10 Sekunden wie alt das Reading "power" ist. Wenn es älter als 65 Sekunden ist, wird davon ausgegangen, dass die Datensammlung wieder nicht funktioniert. Wenn dies erreicht wurde, wird der Modifybefehl ausgeführt. 

 

Über folgende Befehle könnt Ihr ein solches Überwachungs-Device anlegen:

define haus.strom.at at +*00:00:10 {}

Damit das neue Überwachungs-Device auch etwas tun kann, müsst Ihr den Bereich DEF noch abändern. Hierfür könnt Ihr folgendes Skript verwenden:

+*00:00:10 { 
        my $PowerAge = ReadingsAge("haus.stromzaehler","power",0);
        if ($PowerAge >= 65) {
                Log3 "watchdog",3,"haus.stromzaehler start SML! ReadingAge=$PowerAge";
                fhem "modify haus.stromzaehler 10.10.2.3:23 SML";
        }
}

Statistics Modul

Um Tages-, Monats- und Jahreswerte in einer Readings-Group anzeigen zu können, könnt Ihr Euch noch ein Statistics-Device für den Stromzähler anlegen. Zum Anlegen diese Devices müsst Ihr folgende Befehle ausführen:

define haus.strom statistics haus.stromzaehler
attr haus.strom deltaReadings total_consumption
attr haus.strom singularReadings haus.stromzaehler:total_consumption:Delta:(Year|Month|Hour|Day)

Sobald Daten vom Stromzähler kommen, werden in dem Stromzähler Device die entsprechenden Statistics Readings abgelegt. Diese könnt Ihr dann später in einer Readings-Group darstellen.

Readings-Group Modul

Damit der Verbrauchs-Preis angezeigt werden kann, muss für jeden angezeigten Verbrauch ein Preis am Stromzähler-Device hinterlegt werden. In meinem Fall musste ich folgende Befehle ausführen:

setreading haus.stromzaehler statTotal_consumptionDayLastPrice 0.2711
setreading haus.stromzaehler statTotal_consumptionDayPrice 0.2711
setreading haus.stromzaehler statTotal_consumptionMonthPrice 0.2711
setreading haus.stromzaehler statTotal_consumptionYearPrice 0.2711
setreading haus.stromzaehler total_consumptionPrice 0.2711

Über folgenden Befehl lässt sich dann das Readings-Group Device anlegen:

defmod haus.strom.rg readingsGroup haus.stromzaehler:statTotal_consumptionDay,statTotal_consumptionDayPrice\
haus.stromzaehler:statTotal_consumptionDayLast,statTotal_consumptionDayLastPrice\
haus.stromzaehler:statTotal_consumptionMonth,statTotal_consumptionMonthPrice\
haus.stromzaehler:statTotal_consumptionYear,statTotal_consumptionYearPrice\
haus.stromzaehler:total_consumption,total_consumptionPrice\

attr haus.strom.rg alias Verbrauch
attr haus.strom.rg cellStyle { \
"r:1,c:0"=>'style="font-weight:bold"',\
"r:2,c:0"=>'style="font-weight:bold"',\
"r:3,c:0"=>'style="font-weight:bold"',\
"r:4,c:0"=>'style="font-weight:bold"',\
"r:5,c:0"=>'style="font-weight:bold"',\
"r:6,c:0"=>'style="font-weight:bold"'\
}
attr haus.strom.rg group Stromverbrauch
attr haus.strom.rg mapping {\
if    ($ROW == 1) {return "Verbrauch Heute"}\
elsif ($ROW == 2) {return "Verbrauch Gestern"}\
elsif ($ROW == 3) {return "Verbrauch Monat"}\
elsif ($ROW == 4) {return "Verbrauch Jahr"}\
elsif ($ROW == 5) {return "Gesamtverbauch"}\
}
attr haus.strom.rg noheading 1
attr haus.strom.rg notime 1
attr haus.strom.rg room ZZ_Strom
attr haus.strom.rg valueFormat {\
my $NewValue = $VALUE / 1000;;\
if ($READING =~ m/Price/) {\
        my $Price    = ReadingsVal($DEVICE,substr($READING, 0,-5),0);;\
        my $NewPrice = $NewValue * $Price;;\
        return sprintf("%.2f €", $NewPrice )\
}\
else {return sprintf("%.0f kWh", $NewValue )}\
}

 

Das Fertige FHEM Device sieht dann ungefähr so aus.

SVG Plots

Zum krönenden Abschluss könnt Ihr noch die entsprechenden SVG Plots anlegen. Voraussetzung ist natürlich, dass Ihr die entsprechenden Daten auch in einer Datenbank oder einer Datei speichert. In meiner FHEM Umgebung läuft eine Maria SQL DB. Daher basiert diese Anleitung auch darauf. Auf folgenden Seiten habe ich die Konfiguration der Maria SQL DB beschrieben https://mwinkler.jimdo.com/smarthome/datenbank/

 

Über das entsprechende DBLog Device könnt Ihr Euch über den Button "Create SVG plot from DBLog" erstellen. Ich habe mir hierüber zwei SVG Plots erstellt.

  • Für die aktuelle Leistungsabnahme
  • Für den täglichen Gesamtverbrauch.

Für die aktuelle Leistungsabnahme muss nur folgendes angepasst werden:

In dem Feld "Device:Reading" muss folgendes stehen "haus.stromzaehler:power::"

 

Danach sollte das SVG Plot ungefähr so aussehen:

Für den täglichen Gesamtverbrauch sieht das Ganze etwas anders aus.

In dem Feld "Device:Reading" muss folgendes stehen: "haus.stromzaehler:total_consumption::delta-d:$val=($val/1000)". Über diesen Eintrag werden dann nur Delta Werte angezeigt, welche zusätzlich noch durch 1000 geteilt werden. Über folgendes Attribut, des SVG Plots, könnt Ihr Euch dann eine feste Tagesanzeige definieren.

 

attr haus.strom.svg fixedrange 30days

Danach sollte das SVG Plot ungefähr so aussehen:

Kommentar schreiben

Kommentare: 3
  • #1

    Enrico Roga (Dienstag, 26 Mai 2020 13:38)

    Hi,
    wie bekommst Du im Plot für den Verbrauch den Wert
    "haus.stromzaehler:total_consumption::delta-d:$val=($val/1000)"
    eingetragen?
    Ich kann da nur aus einer Liste auswählen und die enthält nur "haus.stromzaehler:total_consumption" und nicht die Möglichkeit das Feld zu editieren bzw zu erweitern.

  • #2

    Michael Winkler (Mittwoch, 27 Mai 2020 09:43)

    Hi,
    den Wert musst Du einfach in das Feld manuell reinkopieren. Meine Anleitung basiert aber auf DBLog! Mit einem FileLog kann es ggf. anders sein. Falls Du nicht weiterkommst, kannst Du mich auch über das Kontaktformular anschreiben.
    Gruß
    Michael

  • #3

    Jörg Seitz (Mittwoch, 22 Juli 2020 14:09)

    Hallo,
    ich habe auch das Problem das ich den Eintrag "haus.stromzaehler:total_consumption::delta-d:$val=($val/1000)" nicht eingeben kann. Verwende auch nur FileLog.
    Für eine Info wäre ich sehr Dankbar. :-)