Für das Projekt Stromzähler müssen vorab folgende Schritte ausgeführt werden.

Zusätzlich wird folgendes benötigt:

Bilder der benötigten Bauteile

  • Schaltplan

 

Da ich zwei Stromzähler im Schrank habe, habe ich gleich zwei von den Sensoren an das NodeMCU angeschlossen.

 

  • Montage des Pulse Counters

 

Für die spätere Konfiguration und Auswertung des Verbrauches ist es wichtig zu wissen wie viele Umdrehungen der Zähler pro kWh macht. Mein Zähler z.B. macht 75 U/kWh.

 

Die Montage des Pulse Counters ist recht einfach. Ich habe das Gehäuse mit einem Powerstripe befestigt. 

 

Für das perfekte Ausrichten sind links und rechts zwei Schlitze. Damit ist es möglich die Drehscheibe genau in die Mitte zu setzen.

 

Über den blauen Regler(1) kann später die Empfindlichkeit es Pulse Counters eingestellt werden.

 

Der Pulse Sensor wird gemäß Schaltplan an dem NodeMCU angeschlossen. 

 

  • Konfiguration der ESPEasy Firmware

 

  • Registerkarte "Device" auswählen
  • Über "Edit" ein neues Device hinzufügen

 

Folgende Konfiguration wurde von mir gemacht

  1. Device = Pulse Counter
  2. Name = Kann frei vergeben werden
  3. Enabled = Haken setzten damit der Pulse Counter auch aktiv ist
  4. 1st GPIO = Hier GPIO-14(D5) einstellen (siehe auch Schaltplan)
  5. Debounce Time = Hier habe ich den Wert 1000 verwendet. Das hat zur Folge das ein Impuls nur alle 1000msek. auch als solcher gewertet wird.
  6. Counter Type = Delta (Standard)
  7. Mode Type = Change (Standard)
  8. Send to Controller = Hier muss der Haken gesetzt sein, damit auch die ermittelten Pulse an FHEM gesendet wird
  9. Delay = 60 Sekunden. Hier wird definiert dass nur alle 60 Sekunden die Werte an den Controller gesendet werden.
  10. Alle Werte auf 0 setzen, da der Pulse Counter nur ganze Zahlen liefert.
  11. Speicher der Konfiguration mit "Submit"
  12. Beende der Konfiguration mit "Close"

 

Die Konfiguration des zweiten Pulse Counters habe ich hier nicht mehr dokumentiert. Der einzige Unterschied zum ersten Pulse Counter wäre der "Name" bzw. der "1st GPIO".

 

Wenn die beiden Pulse Counter sauber arbeiten wird diese in der Übersicht in Bereich "Values" angezeigt. Da mein zweiter Stromzähler gerade nicht arbeitet, werden hier gerade keine Werte angezeigt.

 

ACHTUNG: Das ESPEasy speicher keine Werte wenn es stromlos ist! Aus diesem Grund müsst Ihr dafür sorgen dass der FHEM Server die Werte speichert.

 

Jetzt können die beiden neuen Devices in FHEM angepasst werden. Sobald das Device zum ersten mal Daten an den Controller sendet, erscheint das Device in dem FHEM Raum "ESPEasy"

Folgende Attribute wurden von mir noch angepasst

 

  • Attribut Icon
  • Attribut room

Im Anschluss habe ich dann das Device über ein FHEM rename noch entsprechend umbenannt.

 

Zusätzlich habe ich für jeden der beiden Pulse Counter folgende FHEM Devices angelegt

  • Dummy: Für den visuellen Zählerstand
  • Notify: Zum Auswerten der Daten

Für die visuelle Darstellung des Zählerstandes auf dem FHEM Webfrontend wird noch ein Dummy Device benötigt. Mit folgenden Befehlen könnt Ihr das Dummy Device dafür anlegen:

define POWER001 dummy
attr POWER001 alias Hauptzähler
attr POWER001 group Stromzähler
attr POWER001 icon measure_power_meter
attr POWER001 readingList energy
attr POWER001 room ZZ_Haus
attr POWER001 setList energy
attr POWER001 stateFormat energy

Für die Auswertung der Pulse wird ein Notify Device angelegt. Mit folgenden Befehlen könnt Ihr das Notify dafür anlegen:

define Haus.Hauptstrom.Counter notify HNMWESP01_Hauptstrom:Count.* {}
attr Haus.Hauptstrom.Counter room ZZ_Extras
attr Haus.Hauptstrom.Counter group Haus

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

HNMWESP01_Hauptstrom:Count.* { 

        my $Strom_Count = ReadingsVal("HNMWESP01_Hauptstrom", "Count", ""); 
        my $Strom_Total = ReadingsVal("HNMWESP01_Hauptstrom", "Total", ""); 
        my $Haus_Energy = ReadingsVal("POWER001", "energy", ""); 

        if ($Strom_Total == 150) { 
                $Haus_Energy = $Haus_Energy + 1; 
                fhem "sleep 0.1;setreading HNMWESP01_Hauptstrom Total $Strom_Count";     
                fhem "setreading POWER001 energy $Haus_Energy";  
        } 
        elsif($Strom_Total > 150) { 
                $Haus_Energy = $Haus_Energy + 1; 
                $Strom_Total = $Strom_Total - 150 + $Strom_Count; 
                fhem "sleep 0.1;setreading HNMWESP01_Hauptstrom Total $Strom_Total";     
                fhem "setreading POWER001 energy $Haus_Energy";  
        }else{ 
                $Strom_Total = $Strom_Total + $Strom_Count; 
                fhem "sleep 0.1;setreading HNMWESP01_Hauptstrom Total $Strom_Total";     
        } 
         
} 

Da mein Stromzähler 75 U/kWh macht und der Pulse Counter pro Puls immer zwei Pulse anzeigt, muss der rot markierte Wert auf 150 gesetzt werden.

 

Hier das fertige Ergebnis.

Kommentar schreiben

Kommentare: 19
  • #1

    Thomas (Freitag, 07 September 2018 10:30)

    Hi,
    Danke für diesen Artikel. Habe es so nachgebaut und lasse mir die Daten zu Thingspeak schicken.
    Statt des 3D-Gehäuses geht auch erstmal etwas Kinderknete.
    Gruß
    Thomas

  • #2

    Thomas (Montag, 17 September 2018 09:38)

    Ich nochmal..
    Zwei Anmerkungen:
    Die Auswahl von "change" und einer debouncetime von "1000" war für mich problematisch. Läuft der Zähler langsam, z.B nachts, wird jeder Impuls doppelt gezählt, da "an" und "aus" länder als eine Sekunde auseinander liegen. Läuft der Zähler schnell, nur einfach.
    Teste gerade mit "rising" und "falling", das sieht besser aus.

    Mein Sensor passte nicht gut in Dein Gehäuse, hier hat der Chinese wohl Streuungen. Ich musste den Lichauslass unten vergrößern, und auch der Kalibiererstrich passte damit nicht.

    Gruß
    Thomas

  • #3

    Buster (Montag, 01 Oktober 2018 20:33)

    Hallo,
    danke für den tollen Artikel, würde das Ganze auch gerne nachbauen, Teile sind schon bestellt :-)
    Würdest Du anstatt der FHEM Listings auch die entsprechenden Teile Deiner fhem.cfg in entsprechender Syntax bereit stellen ? Bin noch neu in FHEM und das würde es doch erheblich vereinfachen.

    Merci

  • #4

    Uwe (Samstag, 06 Oktober 2018 12:28)

    Hallo ist genau meine Anlage habe auch einen doppelt und einfach Tarif Zäher. Habe mir auch schon alles bestellt ganz toller Beitrag , gibt es auch die Möglichkeit den Täglichen verbrauch darzustellen und am Anfang wäre ein stündlicher ganz toll da könnte man Beobachten wen der meiste Stromverbrauch ist und die Ursache klären

  • #5

    Uwe (Montag, 18 Februar 2019 18:31)

    Bei mir tritt das Problem auf das in EspEasy die GPIO 12 und 13 funktionieren. Aber GPIO 5 nicht. Auch die anderen GPIO zählen die Impulse nicht. Hat irgendjemand eine Idee ?

  • #6

    Uwe (Montag, 18 Februar 2019 18:46)

    Hat sich erledigt. Das Problem konnte behoben werden durch Ändern der Reihenfolge in ESPEasy unter Devices. Verstehe zwar nicht warum aber es geht nun mit 3 TCRT5000 Sensoren
    Fehler war:
    Bei mir tritt das Problem auf das in EspEasy die GPIO 12 und 13 funktionieren. Aber GPIO 5 nicht. Auch die anderen GPIO zählen die Impulse nicht. Hat irgendjemand eine Idee ?

  • #7

    Niels (Montag, 25 Februar 2019 21:32)

    danke für deinen sehr gut nachvollziehbaren Artikel. Mein Aufbau ist möglichst ähnlich mit einem TCRT5000 Sensor als ESPEasy Device am GPIO-14 und als FHEM Server läuft ein Raspberry 3. Wenn ich die Lichtschranke auslöse, erhöht sich der Value 'Count' um 2.
    Beim FHEM-Server wird das ESPEasyDevice mit dem Namen 'ESPEasy_StromWG1' angezeigt. Der Wert Cou: 0 ändert sich wenn ich die Lichtschranke betätige.
    Unter ZZ_Haus ist in der group 'Stromzähler' ein Eintrag 'Hauptzähler energy'. Dieser Wert ändert sich nicht.
    An welcher Stelle könnte ich denn am Besten beobachten, warum sich da nichts ändert? Ich würde erwarten, dass der Wert ändert wenn der Wert 'Total' auf 150 hochgezählt hat.

  • #8

    Michael Winkler (Dienstag, 26 Februar 2019 08:18)

    Im Event Monitor und/oder im FHEM Log sollte etwas sichtbares stehen. Bist Du Dir auch sicher dass du die Gerätenamen alle richtig geschrieben hast? Auch auf die Groß- und Kleinschreibung achten!

  • #9

    Niels (Dienstag, 26 Februar 2019 21:50)

    In dem LogFile steht vom heutigen Tag:
    2019.02.25 18:45:10 2: ESPEasy ESPBridge: Autocreate ESPEasy_ESP_Easy_StromWG1 ESPEasy 192.168.178.156 80 ESPBridge ESP_Easy_StromWG1
    2019.02.25 18:45:10 2: ESPEasy ESPBridge: Structural changes saved.
    2019.02.25 18:52:53 2: ESPEasy ESPEasy_StromWG1: Device ESPEasy_ESP_Easy_StromWG1 renamed to ESPEasy_StromWG1
    In dem Macro 'StromWG1_Hauptstrom:Count.* {} habe ich den Code eingefügt aber für Testzwecke die Werte 150 auf 10 geändert, um schneller durch eingehende Impulse eine Änderung zu erzeugen.
    Kann ich vielleicht in diesem Programm eine Zeile einfügen, um einen Eintrag im LogFile zu erzeugen. Dann wüsste ich, dass dieses Programm aufgerufen wird. Kannst du mir bitte dabei helfen.

  • #10

    Niels (Dienstag, 26 Februar 2019 21:57)

    Im EventMonitor ist folgendes zulesen:
    2019-02-26 21:53:33 ESPEasy ESPEasy_StromWG1 Count: 0
    2019-02-26 21:53:33 ESPEasy ESPEasy_StromWG1 Cou: 0
    2019-02-26 21:53:35 ESPEasy ESPEasy_StromWG1 Count: 1
    2019-02-26 21:53:35 ESPEasy ESPEasy_StromWG1 Cou: 1
    2019-02-26 21:53:37 ESPEasy ESPEasy_StromWG1 Count: 0
    2019-02-26 21:53:37 ESPEasy ESPEasy_StromWG1 Cou: 0
    2019-02-26 21:53:39 ESPEasy ESPEasy_StromWG1 Count: 0
    2019-02-26 21:53:39 ESPEasy ESPEasy_StromWG1 Cou: 0
    2019-02-26 21:53:41 ESPEasy ESPEasy_StromWG1 Count: 0
    2019-02-26 21:53:41 ESPEasy ESPEasy_StromWG1 Cou: 0
    2019-02-26 21:53:43 ESPEasy ESPEasy_StromWG1 Count: 1
    2019-02-26 21:53:43 ESPEasy ESPEasy_StromWG1 Cou: 1
    Der Count ändert sich auf 1 wenn ich die Lichtschranke auslöse.

  • #11

    Michael Winkler (Mittwoch, 27 Februar 2019 08:14)

    Dein Notify "StromWG1_Hauptstrom:Count.* {}" solltest Du in "ESPEasy ESPEasy_StromWG1:Count.* {} " ändern, erst dann reagiert es auch auf die Counts von Deinem Zähler

  • #12

    Marcel (Montag, 04 März 2019 00:38)

    Ich habe das ganze nachgebaut. Und bekomme auch die Counts sauber rein, möchte das ganze aber wo anders einbinden.
    Der rot markierte Wert 150 woher beziehst du ihn?
    Muss ich nicht zum berechnen wissen viele „Zacken“ die Scheibe hat?
    Ich gehe davon aus du hast 150zacken/75U/kWh, 11250counts = 1kwh

    Ist meine Rechnung richtig ?

  • #13

    Michael Winkler (Montag, 04 März 2019 08:15)

    Steht eigentlich in der Beschreibung "Da mein Stromzähler 75 U/kWh macht und der Pulse Counter pro Puls immer zwei Pulse anzeigt, muss der rot markierte Wert auf 150 gesetzt werden."

    Auf Deinem Zähler müsste ein Hinweis stehen wie viele Umdrehungen 1 kWh sind.

  • #14

    Marcel (Montag, 04 März 2019 12:08)

    Meiner steht auf 96U/kWh.
    Würde ich dann mit 192 counts eine Umdrehung der scheibe haben?

  • #15

    Michael Winkler (Montag, 04 März 2019 14:40)

    ja

  • #16

    Frank (Dienstag, 07 Mai 2019 22:10)

    Hallo Michael, vielen Dank für deinen schönen Beitrag.
    Ich habe es entsprechend der Beschreibung nachgebaut.
    Bei einer debounce Zeit von 8000 (8sec) läuft es zu 95% perfekt.
    Lediglich in der Nacht zählt er teilweise doppelt (Markierung braucht für Durchlauf >8sec), am Tag
    ist die Scheibe gelegentlich so schnell unterwegs, dass die Markierung nur ca. 7sec. benötigt (<8sec) und nur jeder zweite Durchlauf somit gezählt wird.
    MEine Frage hierzu ist: kann ich eine Regel im ESPeasy einstellen (on Clock#Time), die mir über eine Zeitsteuerung unterschiedliche Einstellungen aufruft (ggfs. Device 1 von bis, Device 2 von bis).
    Wie könnte ich die Counterwerte übergeben?
    Ich habe folgende Software für dieses Projekt eingesetzt: ESPeasy (Openhab MQTT) > Pi_Zero>telegraf>influxdb>grafana
    Gruß
    Frank

  • #17

    Olaf (Mittwoch, 07 August 2019 15:14)

    Vielen Dank für die tolle Ausführung , würde nun gerne mit den Werten eine Tages- bzw.Monatsauswertung hinbekommen .
    FG Olaf

  • #18

    Guido (Freitag, 27 September 2019 13:31)

    Hallo.
    Vielen Dank für den tollen Beitrag. Ich habe mich direkt daran gemacht, es auch so umzusetzen. Aber leider werden bei mir weder in der ESPEasy-Weboberfläche, noch in FHEM (via MQTT) die Zähler hochgezählt (obwohl die linke led des Pulsgebers immer schön leuchtet, wenn man einen Impuls triggert). Die Daten (sowohl die MQTT gelieferten, als auch die in der WEb-GUI) lieferen immer nur "0" als Zählwert.
    Ich habe den Pulszähler noch an "D0" angeschlossen (so wie es soll). Was kann ich tun, um das Problem zu analysieren ? Vielleicht mal auf "A0" (ist auf meinem Pulszähler so aufgedruckt)

    Vielen Dank

  • #19

    Guido (Freitag, 27 September 2019 14:08)

    Sorry für meinen Post von eben. Ich Honk hatte es falsch an der NodeMcu angesteckt (D6 statt D5).
    Mal wieder saß der Fehler vor dem Bildschirm.
    Schönes WE