Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. [Tutorial] PZEM-004T 3 Phasen Überwachung

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

[Tutorial] PZEM-004T 3 Phasen Überwachung

Scheduled Pinned Locked Moved Praktische Anwendungen (Showcase)
pzem-004t-v30monitoringüberwachungmessunghow-totutorial
283 Posts 37 Posters 78.9k Views 41 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ice77I Offline
    ice77I Offline
    ice77
    wrote on last edited by
    #169

    Hallo Leute,
    mal eine kurze Frage. Ich will in kürze die 3 PZEM 004 V3 an einem D1 Mini in Betrieb nehmen und habe gesehen dass hier die TX mit einer Diode bestückt wird. Nirgends wird aber der genaue Typ der Diode beschrieben. In der Elektronik Grabbelkiste hab ich Dioden des Typs ZPD 5,6 gefunden. Würden diese funktionieren? 5,6 deutet ja auch 5,6V hin. Passt das?

    Johannes BauerstatterJ B 2 Replies Last reply
    0
    • ice77I ice77

      Hallo Leute,
      mal eine kurze Frage. Ich will in kürze die 3 PZEM 004 V3 an einem D1 Mini in Betrieb nehmen und habe gesehen dass hier die TX mit einer Diode bestückt wird. Nirgends wird aber der genaue Typ der Diode beschrieben. In der Elektronik Grabbelkiste hab ich Dioden des Typs ZPD 5,6 gefunden. Würden diese funktionieren? 5,6 deutet ja auch 5,6V hin. Passt das?

      Johannes BauerstatterJ Offline
      Johannes BauerstatterJ Offline
      Johannes Bauerstatter
      wrote on last edited by
      #170

      @ice77 ich benutze BAT43 Dioden von Ama...

      ice77I 1 Reply Last reply
      0
      • Johannes BauerstatterJ Johannes Bauerstatter

        @ice77 ich benutze BAT43 Dioden von Ama...

        ice77I Offline
        ice77I Offline
        ice77
        wrote on last edited by
        #171

        @johannes-bauerstatter
        verstanden. Hast Du diese "bemessen" oder aus dem Bauch heraus ausgewählt? Wie bekäme ich heraus ob ggf. noch welche aus der "Grabbelkiste" funktionieren könnten? Auf was muss man achten?

        Johannes BauerstatterJ 1 Reply Last reply
        0
        • ice77I ice77

          @johannes-bauerstatter
          verstanden. Hast Du diese "bemessen" oder aus dem Bauch heraus ausgewählt? Wie bekäme ich heraus ob ggf. noch welche aus der "Grabbelkiste" funktionieren könnten? Auf was muss man achten?

          Johannes BauerstatterJ Offline
          Johannes BauerstatterJ Offline
          Johannes Bauerstatter
          wrote on last edited by
          #172

          @ice77 Sorry, aus dem Bauch. Ich würds einfach probieren da bei den 3,3V nicht viel passieren sollte außer dass es nicht funktioniert. Ob du das Risiko eingehen willst musst du selbst entscheiden außer es meldet sich noch ein Elektroniker der das besser beurteilen kann.

          1 Reply Last reply
          0
          • ice77I ice77

            Hallo Leute,
            mal eine kurze Frage. Ich will in kürze die 3 PZEM 004 V3 an einem D1 Mini in Betrieb nehmen und habe gesehen dass hier die TX mit einer Diode bestückt wird. Nirgends wird aber der genaue Typ der Diode beschrieben. In der Elektronik Grabbelkiste hab ich Dioden des Typs ZPD 5,6 gefunden. Würden diese funktionieren? 5,6 deutet ja auch 5,6V hin. Passt das?

            B Offline
            B Offline
            Beowolf
            wrote on last edited by
            #173

            @ice77 sagte in [Tutorial] PZEM-004T 3 Phasen Überwachung:

            Hallo Leute,
            mal eine kurze Frage. Ich will in kürze die 3 PZEM 004 V3 an einem D1 Mini in Betrieb nehmen und habe gesehen dass hier die TX mit einer Diode bestückt wird. Nirgends wird aber der genaue Typ der Diode beschrieben. In der Elektronik Grabbelkiste hab ich Dioden des Typs ZPD 5,6 gefunden. Würden diese funktionieren? 5,6 deutet ja auch 5,6V hin. Passt das?

            Hallo Ice,

            schaue mal hier.

            https://forum.iobroker.net/topic/42261/pzem-004t-3-phasen-überwachung-mit-espeasy-v2-0

            Ich habe das mit einem Wemos d1 Mini mit der ESPeasy gemacht. Alles drann ohne Widerstand und Diode. Läuft ohne Probleme.

            Klemm es doch einfach mal drann. Was soll schon passieren? Entweder es läuft oder eben nicht.

            Grüße
            Manfred

            Die Natur braucht nicht unseren Schutz, sie braucht unsere Abwesenheit.

            ice77I 1 Reply Last reply
            0
            • B Beowolf

              @ice77 sagte in [Tutorial] PZEM-004T 3 Phasen Überwachung:

              Hallo Leute,
              mal eine kurze Frage. Ich will in kürze die 3 PZEM 004 V3 an einem D1 Mini in Betrieb nehmen und habe gesehen dass hier die TX mit einer Diode bestückt wird. Nirgends wird aber der genaue Typ der Diode beschrieben. In der Elektronik Grabbelkiste hab ich Dioden des Typs ZPD 5,6 gefunden. Würden diese funktionieren? 5,6 deutet ja auch 5,6V hin. Passt das?

              Hallo Ice,

              schaue mal hier.

              https://forum.iobroker.net/topic/42261/pzem-004t-3-phasen-überwachung-mit-espeasy-v2-0

              Ich habe das mit einem Wemos d1 Mini mit der ESPeasy gemacht. Alles drann ohne Widerstand und Diode. Läuft ohne Probleme.

              Klemm es doch einfach mal drann. Was soll schon passieren? Entweder es läuft oder eben nicht.

              Grüße
              Manfred

              ice77I Offline
              ice77I Offline
              ice77
              wrote on last edited by
              #174

              @beowolf
              ja passiweren wird da nicht viel - das stimmt schon. Ich wollte diese Lösung fertig machen und bei meinen Eltern installieren. Wenn das dann nicht stabil läuft ist es wieder mit langer Fahrerei verbunden und einem meckernden paps...
              Ggf. versuch ich mal ein paar Dioden aus der Grabbelkiste. Wenns geht is gut, wenn nicht bestell ich die BAT43. Prinzipiell laufen tuts ja schon... nur obs dauerhaft läuft, das hab ich noch nicht probiert. Wollte halt wenn die "Fachleute" eine Diode auf die TX Leitung setzen... das auch so machen... weil auf "komische Fehler" wegen so etwas hatte ich einfach keine Lust.

              Aber try & error geht natürlich auch.

              1 Reply Last reply
              0
              • F Offline
                F Offline
                frodo777
                wrote on last edited by
                #175

                @HomeZecke
                Ich habe dein Projekt erfolgreich nachgebaut , Danke für das Teilen deines Skripts. Läuft Super. Ich habe einen Datenpunt wo ich nichts mit anfangen kann
                f9cc05f0-b7fd-43ee-ade2-f70267437260-image.png
                Was bedeutet bei Energie/Verbrauch nan. Und Energie/Verbrauchs-Startwert ist das der Zählerstand bei Inbetriebnahme? Dann muss ich mir mit einen Blockly den aktuellen Zählerstand ausrechnen.

                D HomeZeckeH 2 Replies Last reply
                0
                • F frodo777

                  @HomeZecke
                  Ich habe dein Projekt erfolgreich nachgebaut , Danke für das Teilen deines Skripts. Läuft Super. Ich habe einen Datenpunt wo ich nichts mit anfangen kann
                  f9cc05f0-b7fd-43ee-ade2-f70267437260-image.png
                  Was bedeutet bei Energie/Verbrauch nan. Und Energie/Verbrauchs-Startwert ist das der Zählerstand bei Inbetriebnahme? Dann muss ich mir mit einen Blockly den aktuellen Zählerstand ausrechnen.

                  D Offline
                  D Offline
                  da.phreak
                  wrote on last edited by
                  #176

                  @frodo777

                  NaN = Not a number

                  Passiert z. B. wenn eine ungültige Rechenoperation ausgeführt wird, wie teilen durch 0.

                  1 Reply Last reply
                  0
                  • F frodo777

                    @HomeZecke
                    Ich habe dein Projekt erfolgreich nachgebaut , Danke für das Teilen deines Skripts. Läuft Super. Ich habe einen Datenpunt wo ich nichts mit anfangen kann
                    f9cc05f0-b7fd-43ee-ade2-f70267437260-image.png
                    Was bedeutet bei Energie/Verbrauch nan. Und Energie/Verbrauchs-Startwert ist das der Zählerstand bei Inbetriebnahme? Dann muss ich mir mit einen Blockly den aktuellen Zählerstand ausrechnen.

                    HomeZeckeH Offline
                    HomeZeckeH Offline
                    HomeZecke
                    wrote on last edited by
                    #177

                    @frodo777

                    Hallo!

                    Der Verbrauch wird addiert aus den Werten VerbrauchL1, VerbrauchL2 Und VerbrauchL3. Dazu kommt noch der Verbrauchs-Startwert, um mit dem "richtigen" Zähler zu synchronisieren. Zeigen denn die 3 Verbrauchswerte Daten an?

                    Grüße...

                    F 1 Reply Last reply
                    0
                    • HomeZeckeH HomeZecke

                      @frodo777

                      Hallo!

                      Der Verbrauch wird addiert aus den Werten VerbrauchL1, VerbrauchL2 Und VerbrauchL3. Dazu kommt noch der Verbrauchs-Startwert, um mit dem "richtigen" Zähler zu synchronisieren. Zeigen denn die 3 Verbrauchswerte Daten an?

                      Grüße...

                      F Offline
                      F Offline
                      frodo777
                      wrote on last edited by frodo777
                      #178

                      @homezecke Wird in deinem Skript mit Energie/Verbrauch-Startwert gerechnet oder muss ich mir den aktuellen Zählerstand selbst ausrechnen? Sonst funktioniert alles bestens. Der Fehler lag wohl an einer wackeligen Steckverbindung. Ich habe glaube ich noch einen Fehler gefunden
                      9f71cd04-e5e8-405b-84e5-7ea422aa9d24-image.png
                      müsste das nicht old_frequenz_pzem2 heißen?
                      Deine Visualisierung habe ich auch übernommen, sieht richtig gut aus. Wir hast du das mit dem Verbrauch Gestern und Heute gelöst. Könntest du das Skript teilen, du scheinst da mehr Ahnung zu haben als ich.
                      Grüße

                      F 1 Reply Last reply
                      0
                      • F frodo777

                        @homezecke Wird in deinem Skript mit Energie/Verbrauch-Startwert gerechnet oder muss ich mir den aktuellen Zählerstand selbst ausrechnen? Sonst funktioniert alles bestens. Der Fehler lag wohl an einer wackeligen Steckverbindung. Ich habe glaube ich noch einen Fehler gefunden
                        9f71cd04-e5e8-405b-84e5-7ea422aa9d24-image.png
                        müsste das nicht old_frequenz_pzem2 heißen?
                        Deine Visualisierung habe ich auch übernommen, sieht richtig gut aus. Wir hast du das mit dem Verbrauch Gestern und Heute gelöst. Könntest du das Skript teilen, du scheinst da mehr Ahnung zu haben als ich.
                        Grüße

                        F Offline
                        F Offline
                        frodo777
                        wrote on last edited by
                        #179

                        @frodo777 Ich beantworte mir die Frage mal selbst. Man muß bei der Eingabe des Zählerstands den Hacken bei Bestätigt machen dann funktioniert es auch. Nach langen probieren hab ich es heraus gefunden. Jetzt wird auch der aktuelle Zählerstand angezeigt. Das Skript für den Verbrauch Gestern und Heute hätte ich aber immer noch gern.
                        Grüße...

                        HomeZeckeH 1 Reply Last reply
                        0
                        • F frodo777

                          @frodo777 Ich beantworte mir die Frage mal selbst. Man muß bei der Eingabe des Zählerstands den Hacken bei Bestätigt machen dann funktioniert es auch. Nach langen probieren hab ich es heraus gefunden. Jetzt wird auch der aktuelle Zählerstand angezeigt. Das Skript für den Verbrauch Gestern und Heute hätte ich aber immer noch gern.
                          Grüße...

                          HomeZeckeH Offline
                          HomeZeckeH Offline
                          HomeZecke
                          wrote on last edited by
                          #180

                          @frodo777 Hallo!

                          Ja, hast Du richtig erkannt, ist ein kleiner BUG. Es muss natürlich "old_frequenz_pzem2" heißen. Copy & paste -Fehler...😁 Also vor dem compilieren noch einmal anpassen. Ist aber nicht sooo schlimm, da die Frequenzwerte der drei Phasen eh sehr eng bei einander liegen.

                          Deiner bitte zum script kann ich entsprechen.☺ Musst Dich bitte allerdings noch ein paar Tage gedulden. Habe viel um die Ohren. Stelle es hier rein, sobald ich die Zeit dazu habe...

                          Grüße...

                          HomeZeckeH 1 Reply Last reply
                          0
                          • HomeZeckeH HomeZecke

                            @frodo777 Hallo!

                            Ja, hast Du richtig erkannt, ist ein kleiner BUG. Es muss natürlich "old_frequenz_pzem2" heißen. Copy & paste -Fehler...😁 Also vor dem compilieren noch einmal anpassen. Ist aber nicht sooo schlimm, da die Frequenzwerte der drei Phasen eh sehr eng bei einander liegen.

                            Deiner bitte zum script kann ich entsprechen.☺ Musst Dich bitte allerdings noch ein paar Tage gedulden. Habe viel um die Ohren. Stelle es hier rein, sobald ich die Zeit dazu habe...

                            Grüße...

                            HomeZeckeH Offline
                            HomeZeckeH Offline
                            HomeZecke
                            wrote on last edited by
                            #181

                            Hallo,

                            wie gewünscht mein script:

                            /*
                            ////////////////////////////////////////////////////////////////////////////////
                            ////////////////////////////////////////////////////////////////////////////////
                            
                                Stromzählerscript für PZEM und IOBroker     von Homezecke
                                ------------------------------------------------------------------------
                            
                            
                            ////////////////////////////////////////////////////////////////////////////////
                            ////////////////////////////////////////////////////////////////////////////////
                            */
                            
                            
                            //Initialisierungen-------------------------------------------------------------
                            createState('StromVerbrauchGestern',0 ); 
                            createState('StromVerbrauchHeute',0 );
                            createState('StromKostenHeute',0 );
                            
                            createState('Energie.StromVerbrauchStunde',0 )
                                                              
                            var timer1 = schedule('1 00 * * *', function() {zaehler()} );
                            var timer2 = schedule('*/60 * * * *',function() {stundenZaehler()} );  
                            var tageszaehler = 0;
                            var tagesDiff = 0;
                            var stromLetzte = 0;
                            var tarifEinheit = 27.54 // Kosten pro Einheit in cent angeben!
                            
                            
                            tageszaehler = getState('javascript.0.StromVerbrauchHeute'/*StromVerbrauchHeute*/).val;
                            tagesDiff    = getState('mqtt.0.Energie.Verbrauch'/*Energie/Verbrauch*/).val - tageszaehler;
                            
                            
                            
                            
                            if (tageszaehler == 0)
                            {
                               tagesDiff =getState('mqtt.0.Energie.Verbrauch'/*Energie/Verbrauch*/).val ;   
                            }
                            
                            
                            //==============================================================================
                            //Stromverbrauch -Stundenweise setzen (Stundenzähler)
                            function stundenZaehler() {
                            
                                var diff
                                var stromAktuell = getState('javascript.0.StromVerbrauchHeute').val;
                            
                               
                                if (stromLetzte != 0)
                                {
                                  if (stromLetzte < stromAktuell)
                                    {
                                      diff = stromAktuell - stromLetzte;   
                                    }
                                  else
                                    {
                                      diff = stromAktuell
                                    }     
                                }
                                else diff = 0;
                                
                                stromLetzte = stromAktuell;
                                
                            
                            
                                setState('Energie.StromVerbrauchStunde',diff);
                            
                            }
                            
                            //==============================================================================
                            //Stromverbrauch -Gestern und Heute- setzen  (Tageszähler)
                            function zaehler() {
                             
                              var gesamt = getState('mqtt.0.Energie.Verbrauch'/*Energie/Verbrauch*/).val;
                            
                              tageszaehler = getState('javascript.0.StromVerbrauchHeute'/*StromVerbrauchHeute*/).val;
                              setState('javascript.0.StromVerbrauchGestern'/*StromVerbrauchGestern*/,tageszaehler);
                              setState('javascript.0.StromKostenGestern',(tageszaehler * tarifEinheit) / 100);  
                              setState('javascript.0.StromVerbrauchHeute'/*StromVerbrauchHeute*/,0)
                              tagesDiff = gesamt;
                              tageszaehler = 0;
                             
                            }
                            
                            
                            //==============================================================================
                            //Gesamtzählerstand ändert sich
                            on({id: 'mqtt.0.Energie.Verbrauch'/*Energie/Verbrauch*/, change: "ne"}, function (obj)
                            
                            {
                                
                                setState('javascript.0.StromVerbrauchHeute'/*StromVerbrauchHeute*/,obj.state.val - tagesDiff);
                                setState('javascript.0.StromKostenHeute',((obj.state.val - tagesDiff) * tarifEinheit) / 100);
                             
                            });
                            
                            F 1 Reply Last reply
                            0
                            • HomeZeckeH HomeZecke

                              Hallo,

                              wie gewünscht mein script:

                              /*
                              ////////////////////////////////////////////////////////////////////////////////
                              ////////////////////////////////////////////////////////////////////////////////
                              
                                  Stromzählerscript für PZEM und IOBroker     von Homezecke
                                  ------------------------------------------------------------------------
                              
                              
                              ////////////////////////////////////////////////////////////////////////////////
                              ////////////////////////////////////////////////////////////////////////////////
                              */
                              
                              
                              //Initialisierungen-------------------------------------------------------------
                              createState('StromVerbrauchGestern',0 ); 
                              createState('StromVerbrauchHeute',0 );
                              createState('StromKostenHeute',0 );
                              
                              createState('Energie.StromVerbrauchStunde',0 )
                                                                
                              var timer1 = schedule('1 00 * * *', function() {zaehler()} );
                              var timer2 = schedule('*/60 * * * *',function() {stundenZaehler()} );  
                              var tageszaehler = 0;
                              var tagesDiff = 0;
                              var stromLetzte = 0;
                              var tarifEinheit = 27.54 // Kosten pro Einheit in cent angeben!
                              
                              
                              tageszaehler = getState('javascript.0.StromVerbrauchHeute'/*StromVerbrauchHeute*/).val;
                              tagesDiff    = getState('mqtt.0.Energie.Verbrauch'/*Energie/Verbrauch*/).val - tageszaehler;
                              
                              
                              
                              
                              if (tageszaehler == 0)
                              {
                                 tagesDiff =getState('mqtt.0.Energie.Verbrauch'/*Energie/Verbrauch*/).val ;   
                              }
                              
                              
                              //==============================================================================
                              //Stromverbrauch -Stundenweise setzen (Stundenzähler)
                              function stundenZaehler() {
                              
                                  var diff
                                  var stromAktuell = getState('javascript.0.StromVerbrauchHeute').val;
                              
                                 
                                  if (stromLetzte != 0)
                                  {
                                    if (stromLetzte < stromAktuell)
                                      {
                                        diff = stromAktuell - stromLetzte;   
                                      }
                                    else
                                      {
                                        diff = stromAktuell
                                      }     
                                  }
                                  else diff = 0;
                                  
                                  stromLetzte = stromAktuell;
                                  
                              
                              
                                  setState('Energie.StromVerbrauchStunde',diff);
                              
                              }
                              
                              //==============================================================================
                              //Stromverbrauch -Gestern und Heute- setzen  (Tageszähler)
                              function zaehler() {
                               
                                var gesamt = getState('mqtt.0.Energie.Verbrauch'/*Energie/Verbrauch*/).val;
                              
                                tageszaehler = getState('javascript.0.StromVerbrauchHeute'/*StromVerbrauchHeute*/).val;
                                setState('javascript.0.StromVerbrauchGestern'/*StromVerbrauchGestern*/,tageszaehler);
                                setState('javascript.0.StromKostenGestern',(tageszaehler * tarifEinheit) / 100);  
                                setState('javascript.0.StromVerbrauchHeute'/*StromVerbrauchHeute*/,0)
                                tagesDiff = gesamt;
                                tageszaehler = 0;
                               
                              }
                              
                              
                              //==============================================================================
                              //Gesamtzählerstand ändert sich
                              on({id: 'mqtt.0.Energie.Verbrauch'/*Energie/Verbrauch*/, change: "ne"}, function (obj)
                              
                              {
                                  
                                  setState('javascript.0.StromVerbrauchHeute'/*StromVerbrauchHeute*/,obj.state.val - tagesDiff);
                                  setState('javascript.0.StromKostenHeute',((obj.state.val - tagesDiff) * tarifEinheit) / 100);
                               
                              });
                              
                              F Offline
                              F Offline
                              frodo777
                              wrote on last edited by
                              #182

                              @homezecke Danke für das Skript hat sofort funktioniert sehr schönes Projekt von Dir.
                              L.G.

                              1 Reply Last reply
                              0
                              • HomeZeckeH HomeZecke

                                Hallo,

                                da es Nachfragen wegen der von mir erstellten Firmware gab, habe ich sie hier veröffentlicht. Folgendes gibt es zu beachten:

                                1. Ich hafte nicht für Schäden die durch Benutzung meiner Software entstehen könnten! Nutzung auf eigene Gefahr!
                                2. Ich biete nur bedingt support! (Je nach Laune und Zeit😁 )
                                3. Veränderungen am Quellcode können gerne vorgenommen und hier veröffentlicht werden

                                Kurzanleitung:

                                Es gibt keine Konfigurationsmöglichkeit. Die Daten für das eigene Netzwerk müssen im Quellcode angegeben werden. Benötigt werden die SSID das Passwort und die IP des MQTT Brokers. Eine neue Firmware kann über OTA geflasht werden, um den Wemos nicht immer wieder ausbauen zu müssen. Über "http://pzem-webupdate.local/update" sollte das gehen.
                                Angeschlossen werden die RX und TX Anschlüsse der PZEMs an folgende Pins (Wemos mini!):
                                PZEM 1 D1,D2
                                PZEM 2 D4,D3
                                PZEM 3 D5,D6
                                An D7 kann eine Status LED angeschlossen werden. Die signalisiert den Verbindungsaufbau zum Wlan und bzw Broker.

                                Nach dem Flashen und Starten gibt es unter IOBroker MQTT den neuen Datenpunkt "ENERGIE" Dort gibt es dann alle Daten zu jeder Phase und die Gesamtwerte. Die einzigen Werte die man ändern kann sind "PZEM-Reset" und "Verbrauchs-Startwert"

                                PZEM-Reset : Wird dieser auf true gesetzt, wird der Energiezähler aller 3 PZEM-Module auf 0 gesetzt.
                                Verbrauchs-Startwert: Hier kann der aktuelle Zählerstand des "echten" Hausstromzählers angegeben werden. Damit kann man den Datenpunkt "PZEM-Verbrauch" mit dem Hauszähler synchronisieren.

                                Viel Spaß!

                                //####################################################################################
                                //####################################################################################
                                //
                                //    PZEM Energiemessgeräterfassung mit WEMOS  von HomeZecke   v1.1 stand 30.03.2020
                                //    --------------------------------------------------------------------------
                                //     v 1.0      Testphase first release 			          -05.03.2020
                                //     v 1.1      Zählerstartwert kann festgelegt werden 		  -30.03.2020			
                                //				 
                                //     ToDo:      Online Config für Wlan / MQTT usw. hinzuf.
                                //
                                //     	
                                //			  
                                //####################################################################################
                                //####################################################################################
                                
                                #include <Arduino.h>
                                #include <ESP8266WiFi.h>
                                #include <WiFiClient.h>
                                #include <ESP8266WebServer.h>
                                #include <ESP8266mDNS.h>
                                #include <ESP8266HTTPUpdateServer.h>
                                #include <Ticker.h>
                                #include <PubSubClient.h>
                                #include <PZEM004Tv30.h>
                                
                                //Hier die persönlichen Daten eintragen!
                                //---------------------------------------------
                                const char* SSID = "WLAN-SSID";
                                const char* PSK =  "PASSWORT";
                                const char* MQTTserver = "192.168.0.0";
                                const uint16_t port = 1883;
                                //---------------------------------------------
                                const char* version = "Version 1.1";
                                const char* host = "PZEM-webupdate";
                                const int STATUS_LED = 13;  //D7 (Wemos D1 Mini)
                                
                                float start_verbrauch = 0;
                                float diff_verbrauch = 0;
                                float old_spannung_pzem1;
                                float old_frequenz_pzem1;
                                float old_stromstaerke_pzem1;
                                float old_verbrauch_pzem1;
                                float old_leistung_pzem1;
                                float old_pf_pzem1;
                                float old_spannung_pzem2;
                                float old_frequenz_pzem2;
                                float old_stromstaerke_pzem2;
                                float old_verbrauch_pzem2;
                                float old_leistung_pzem2;
                                float old_pf_pzem2;
                                float old_spannung_pzem3;
                                float old_frequenz_pzem3;
                                float old_stromstaerke_pzem3;
                                float old_verbrauch_pzem3;
                                float old_leistung_pzem3;
                                float old_pf_pzem3;
                                float old_spannung_gesamt;
                                float old_stromstaerke_gesamt;
                                float old_leistung_gesamt;
                                float old_verbrauch_gesamt;
                                float old_frequenz_gesamt;
                                float old_pf_gesamt;
                                float old_PZEM_verbrauch;
                                
                                
                                //---functions / callbacks
                                void MQTTcallback(char* topic, byte* payload, unsigned int length);
                                void pzem_reset();
                                void pzem_read();
                                void set_counter(float counterStart);
                                
                                
                                //-Klassen definieren
                                ESP8266WebServer httpServer(80);
                                ESP8266HTTPUpdateServer httpUpdater;
                                
                                WiFiClient MY_NETClient_1;
                                PubSubClient MQTTClient(MY_NETClient_1);
                                
                                Ticker myTimer1(pzem_read,5000); //Wie oft sollen die Daten aktualisiert werden? (alle 5 Sek.)
                                
                                PZEM004Tv30 pzem_1(5, 4);    //D1,D2  Wemos D1 Mini L1
                                PZEM004Tv30 pzem_2(2, 0);    //D4,D3                             L2
                                PZEM004Tv30 pzem_3(14, 12);  //D5,D6                             L3 
                                
                                
                                //=======================================================================================================================
                                //MQTT CallBack
                                //=======================================================================================================================
                                void MQTTcallback(char* topic, byte* payload, unsigned int length)
                                {
                                 
                                  char my_payload[length+1];  // nen string machen, länge eins mehr wegen nullterminierung
                                  float counter_start;
                                  
                                  Serial.print(topic);
                                  Serial.print(" : ");
                                  
                                  // Topic PZEMreset----------------------------------------------------------------------------------------
                                  if (strcmp(topic,"Energie/PZEM-Reset") == 0 )
                                      {
                                        
                                          for (unsigned int i = 0; i < length; i++)  // jedes einzelne byte in einen buchstaben umwandeln
                                            {              
                                               my_payload[i] = (char)payload[i];   // (char)100 wäre zb ein "d"
                                            };
                                
                                          my_payload[length] = '\0';              // nullterminierung
                                          Serial.println(my_payload);
                                          
                                          if (strcmp(my_payload,"true") == 0)
                                            {
                                                pzem_reset();                //Energie an den PZEM's resetten
                                            }
                                        
                                      }
                                
                                  // Topic Verbrauchs-Startwert------------------------------------------------------------------------------
                                  if (strcmp(topic,"Energie/Verbrauchs-Startwert") == 0 )
                                      {
                                        
                                          for (unsigned int i = 0; i < length; i++)  // jedes einzelne byte in einen buchstaben umwandeln
                                            {              
                                               my_payload[i] = (char)payload[i];   // (char)100 wäre zb ein "d"
                                            };
                                
                                          my_payload[length] = '\0';              // nullterminierung
                                          Serial.println(my_payload);
                                          counter_start = atof(my_payload);    // nen float aus der payload machen
                                          
                                          if (counter_start != start_verbrauch)
                                            {
                                              start_verbrauch = counter_start;
                                              set_counter(counter_start); // func set_couter zum setzen aufrufen
                                            }
                                
                                         
                                
                                        
                                      }      
                                
                                }
                                
                                //=======================================================================================================================
                                //WLan -Verbindung aufbauen
                                //=======================================================================================================================
                                void initWiFi()
                                {
                                
                                    Serial.println("");
                                    Serial.print("Wifi connect...");
                                    WiFi.begin(SSID, PSK);
                                
                                    while (WiFi.status() != WL_CONNECTED)
                                      {
                                        digitalWrite(STATUS_LED,!digitalRead(STATUS_LED));
                                        Serial.print(".");   
                                        delay(700);
                                      };
                                
                                    Serial.print("Verbunden!");
                                    WiFi.mode(WIFI_STA);
                                
                                }
                                
                                
                                
                                //=======================================================================================================================
                                //MQTT -Verbindung aufbauen
                                //=======================================================================================================================
                                void initMQTT(){
                                
                                   
                                    MQTTClient.setServer(MQTTserver,port);
                                    MQTTClient.setCallback(MQTTcallback);
                                
                                    Serial.println("");
                                    Serial.print("MQTT verbinden...");
                                
                                    //--Verbindungsloop
                                    while( !MQTTClient.connect("Energie_PZEM") ) 
                                      {
                                        digitalWrite(STATUS_LED,!digitalRead(STATUS_LED));
                                        Serial.print("*");  
                                        delay(100);
                                      };
                                
                                    digitalWrite(STATUS_LED,false);   
                                    Serial.print("MQTT ist verbunden!"); 
                                
                                    //--Topics abbonieren---------------------------------------------------- 
                                    if (MQTTClient.subscribe("Energie/PZEM-Reset"))
                                      {
                                            Serial.println("MQTT : Energie: Reset aboniert"); 
                                      };
                                
                                    if (MQTTClient.subscribe("Energie/Verbrauchs-Startwert"))
                                      {
                                            Serial.println("MQTT : Energie/Verbrauchs-Startwert aboniert"); 
                                      }; 
                                }
                                
                                
                                
                                //=======================================================================================================================
                                //PZEM Module auslesen und publishen
                                //=======================================================================================================================
                                void pzem_read(){
                                
                                  float spannung_gesamt;
                                  float stromstaerke_gesamt;
                                  float leistung_gesamt;
                                  float verbrauch_gesamt;
                                  float frequenz_gesamt;
                                  float pf_gesamt;
                                  float PZEM_verbrauch = 0;
                                
                                  float spannung_pzem1 = pzem_1.voltage();
                                	float stromstaerke_pzem1 = pzem_1.current();
                                	float leistung_pzem1 = pzem_1.power();
                                	float verbrauch_pzem1 = pzem_1.energy();
                                	float frequenz_pzem1 = pzem_1.frequency();
                                	float pf_pzem1 = pzem_1.pf();
                                	
                                	float spannung_pzem2 = pzem_2.voltage();
                                	float stromstaerke_pzem2 = pzem_2.current();
                                	float leistung_pzem2 = pzem_2.power();
                                	float verbrauch_pzem2 = pzem_2.energy();
                                	float frequenz_pzem2 = pzem_2.frequency();
                                	float pf_pzem2 = pzem_2.pf();
                                	
                                	float spannung_pzem3 = pzem_3.voltage();
                                	float stromstaerke_pzem3 = pzem_3.current();
                                	float leistung_pzem3 = pzem_3.power();
                                	float verbrauch_pzem3 = pzem_3.energy();
                                	float frequenz_pzem3 = pzem_3.frequency();
                                	float pf_pzem3 = pzem_3.pf();	
                                
                                 // char* Temp_String = "           ";
                                  char Temp_String[12];
                                
                                  if(!isnan(spannung_pzem1) && old_spannung_pzem1 != spannung_pzem1)
                                    { 
                                      dtostrf(spannung_pzem1,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L1/SpannungL1", Temp_String);
                                      old_spannung_pzem1 = spannung_pzem1;
                                    }
                                
                                  if(!isnan(spannung_pzem2) && old_spannung_pzem2 != spannung_pzem2)
                                    { 
                                      dtostrf(spannung_pzem2,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L2/SpannungL2", Temp_String);
                                      old_spannung_pzem2 = spannung_pzem2;
                                    }
                                
                                  if(!isnan(spannung_pzem3) && old_spannung_pzem3 != spannung_pzem3)
                                    { 
                                      dtostrf(spannung_pzem3,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L3/SpannungL3", Temp_String);
                                      old_spannung_pzem3 = spannung_pzem3;
                                    }
                                
                                  if(!isnan(stromstaerke_pzem1) && old_stromstaerke_pzem1 != stromstaerke_pzem1)
                                    { 
                                      dtostrf(stromstaerke_pzem1,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L1/StromstaerkeL1", Temp_String);
                                      old_stromstaerke_pzem1 = stromstaerke_pzem1;
                                    }
                                
                                  if(!isnan(stromstaerke_pzem2) && old_stromstaerke_pzem2 != stromstaerke_pzem2)
                                    { 
                                      dtostrf(stromstaerke_pzem2,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L2/StromstaerkeL2", Temp_String);
                                      old_stromstaerke_pzem2 = stromstaerke_pzem2;
                                    }
                                
                                  if(!isnan(stromstaerke_pzem3) && old_stromstaerke_pzem3 != stromstaerke_pzem3)
                                    { 
                                      dtostrf(stromstaerke_pzem3,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L3/StromstaerkeL3", Temp_String);
                                      old_stromstaerke_pzem3 = stromstaerke_pzem3;
                                    }
                                
                                  if(!isnan(leistung_pzem1) && old_leistung_pzem1 != leistung_pzem1)
                                    { 
                                      dtostrf(leistung_pzem1,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L1/LeistungL1", Temp_String);
                                      old_leistung_pzem1 = leistung_pzem1;
                                    }
                                
                                  if(!isnan(leistung_pzem2) && old_leistung_pzem2 != leistung_pzem2)
                                    { 
                                      dtostrf(leistung_pzem2,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L2/LeistungL2", Temp_String);
                                      old_leistung_pzem2 = leistung_pzem2;
                                    }
                                
                                  if(!isnan(leistung_pzem3) && old_leistung_pzem3 != leistung_pzem3)
                                    { 
                                      dtostrf(leistung_pzem3,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L3/LeistungL3", Temp_String);
                                      old_leistung_pzem3 = leistung_pzem3;
                                    }
                                
                                  if(!isnan(verbrauch_pzem1) && old_verbrauch_pzem1 != verbrauch_pzem1)
                                    { 
                                      dtostrf(verbrauch_pzem1,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L1/VerbrauchL1", Temp_String);
                                      old_verbrauch_pzem1 = verbrauch_pzem1;
                                    }
                                
                                  if(!isnan(verbrauch_pzem2) && old_verbrauch_pzem2 != verbrauch_pzem2)
                                    { 
                                      dtostrf(verbrauch_pzem2,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L2/VerbrauchL2", Temp_String);
                                      old_verbrauch_pzem2 = verbrauch_pzem2;
                                    }
                                
                                  if(!isnan(verbrauch_pzem3) && old_verbrauch_pzem3 != verbrauch_pzem3)
                                    { 
                                      dtostrf(verbrauch_pzem3,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L3/VerbrauchL3", Temp_String);
                                      old_verbrauch_pzem3 = verbrauch_pzem3;
                                    }
                                
                                  if(!isnan(frequenz_pzem1) && old_frequenz_pzem1 != frequenz_pzem1)
                                    { 
                                      dtostrf(frequenz_pzem1,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L1/FrequenzL1", Temp_String);
                                      old_frequenz_pzem1 = frequenz_pzem1;
                                    } 
                                
                                  if(!isnan(frequenz_pzem2) && old_frequenz_pzem1 != frequenz_pzem2)
                                    { 
                                      dtostrf(frequenz_pzem2,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L2/FrequenzL2", Temp_String);
                                      old_frequenz_pzem2 = frequenz_pzem2;
                                    } 
                                
                                  if(!isnan(frequenz_pzem3) && old_frequenz_pzem3 != frequenz_pzem3)
                                    { 
                                      dtostrf(frequenz_pzem3,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L3/FrequenzL3", Temp_String);
                                      old_frequenz_pzem3 = frequenz_pzem3;
                                    } 
                                
                                 if(!isnan(pf_pzem1) && old_pf_pzem1 != pf_pzem1)
                                    { 
                                      dtostrf(pf_pzem1,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L1/PowerFactorL1", Temp_String);
                                      old_pf_pzem1 = pf_pzem1;
                                    }  
                                
                                 if(!isnan(pf_pzem2) && old_pf_pzem2 != pf_pzem2)
                                    { 
                                      dtostrf(pf_pzem2,5 , 2, Temp_String);
                                      MQTTClient.publish ("Energie/L2/PowerFactorL2", Temp_String);
                                      old_pf_pzem2 = pf_pzem2;
                                    }   
                                
                                 if(!isnan(pf_pzem3) && old_pf_pzem3 != pf_pzem3)
                                  { 
                                    dtostrf(pf_pzem3,5 , 2, Temp_String);
                                    MQTTClient.publish ("Energie/L3/PowerFactorL3", Temp_String);
                                    old_pf_pzem3 = pf_pzem3;
                                  }
                                
                                
                                 if(!isnan(spannung_pzem1) && !isnan(spannung_pzem2) && !isnan(spannung_pzem3))
                                  {
                                    spannung_gesamt = (spannung_pzem1 + spannung_pzem2 + spannung_pzem3) / 3   ;
                                  }
                                 else
                                  {
                                    spannung_gesamt = 0;
                                  }
                                     
                                 
                                 if(!isnan(stromstaerke_pzem1) && !isnan(stromstaerke_pzem2) && !isnan(stromstaerke_pzem3))
                                  {
                                    stromstaerke_gesamt = stromstaerke_pzem1 + stromstaerke_pzem2 + stromstaerke_pzem3 ;
                                  }
                                 else
                                  {
                                    stromstaerke_gesamt = 0;
                                  } 
                                
                                 if(!isnan(leistung_pzem1) && !isnan(leistung_pzem2) && !isnan(leistung_pzem3))
                                  {
                                    leistung_gesamt = leistung_pzem1 + leistung_pzem2 + leistung_pzem3 ;
                                  }
                                 else
                                  {
                                    leistung_gesamt = 0;
                                  } 
                                
                                 if(!isnan(verbrauch_pzem1) && !isnan(verbrauch_pzem2) && !isnan(verbrauch_pzem3))
                                  {
                                    verbrauch_gesamt = verbrauch_pzem1 + verbrauch_pzem2 + verbrauch_pzem3 ;
                                    PZEM_verbrauch   = verbrauch_gesamt;
                                    verbrauch_gesamt = start_verbrauch + verbrauch_gesamt - diff_verbrauch;
                                  }
                                 else
                                  {
                                    verbrauch_gesamt = 0;
                                  }
                                
                                 if(!isnan(frequenz_pzem1) && !isnan(frequenz_pzem2) && !isnan(frequenz_pzem3))
                                  {
                                    frequenz_gesamt = (frequenz_pzem1 + frequenz_pzem2 + frequenz_pzem3) / 3;
                                  }
                                 else
                                  {
                                    frequenz_gesamt = 0;
                                  } 
                                
                                 if(!isnan(pf_pzem1) && !isnan(pf_pzem2) && !isnan(pf_pzem3))
                                  {
                                    pf_gesamt = (pf_pzem1 + pf_pzem2 + pf_pzem3) / 3 ;
                                  }
                                 else
                                  {
                                    pf_gesamt = 0;
                                  }    
                                
                                  if (old_spannung_gesamt != spannung_gesamt)
                                    {
                                      dtostrf(spannung_gesamt,5 , 2, Temp_String);
                                      MQTTClient.publish("Energie/Spannung",Temp_String);  
                                      old_spannung_gesamt = spannung_gesamt;
                                    }
                                
                                  if (old_stromstaerke_gesamt != stromstaerke_gesamt)
                                    {
                                      dtostrf(stromstaerke_gesamt,5 , 2, Temp_String);
                                      MQTTClient.publish("Energie/Stromstaerke",Temp_String);
                                      old_stromstaerke_gesamt = stromstaerke_gesamt;  
                                    }
                                  
                                  if (old_leistung_gesamt != leistung_gesamt)
                                    {
                                      dtostrf(leistung_gesamt,5 , 2, Temp_String);
                                      MQTTClient.publish("Energie/Leistung",Temp_String);    
                                      old_leistung_gesamt = leistung_gesamt;  
                                    }
                                
                                  if (old_verbrauch_gesamt != verbrauch_gesamt)
                                    {
                                      dtostrf(verbrauch_gesamt,5 , 2, Temp_String);
                                      MQTTClient.publish("Energie/Verbrauch",Temp_String); 
                                      old_verbrauch_gesamt = verbrauch_gesamt;     
                                    } 
                                
                                  if (old_frequenz_gesamt != frequenz_gesamt)
                                    {
                                      dtostrf(frequenz_gesamt,5 , 2, Temp_String);
                                      MQTTClient.publish("Energie/Frequenz",Temp_String);
                                      old_frequenz_gesamt = frequenz_gesamt;      
                                    } 
                                 
                                  if (old_pf_gesamt != pf_gesamt)
                                    {
                                      dtostrf(pf_gesamt,5 , 2, Temp_String);
                                      MQTTClient.publish("Energie/PowerFactor",Temp_String); 
                                      old_pf_gesamt = pf_gesamt;     
                                    } 
                                
                                  if (old_PZEM_verbrauch != PZEM_verbrauch)
                                  {
                                      dtostrf(PZEM_verbrauch,5 , 2, Temp_String);
                                      MQTTClient.publish("Energie/PZEM-Verbrauch",Temp_String); 
                                      old_PZEM_verbrauch = PZEM_verbrauch; 
                                  }
                                     
                                
                                  digitalWrite(STATUS_LED,true);
                                  delay(50);
                                  digitalWrite(STATUS_LED,false);  
                                
                                };
                                
                                
                                
                                //=======================================================================================================================
                                //Energieverbrauch in pzem Modulen zurücksetzen
                                //=======================================================================================================================
                                void pzem_reset()
                                {
                                
                                  myTimer1.pause();
                                  Serial.println("Energieverbrauch wird zurückgesetzt..!");
                                  
                                  pzem_1.resetEnergy();
                                	pzem_2.resetEnergy();
                                	pzem_3.resetEnergy();
                                  delay(1000);
                                  
                                  MQTTClient.publish("Energie/PZEM-Reset","false");
                                  myTimer1.resume();
                                	
                                }
                                
                                
                                //=======================================================================================================================
                                //Startwert für Verbrauchszähler setzen
                                //=======================================================================================================================
                                void set_counter(float counterStart){
                                
                                  myTimer1.pause();
                                  
                                  float verbrauch_pzem1 = pzem_1.energy();
                                  float verbrauch_pzem2 = pzem_2.energy();
                                  float verbrauch_pzem3 = pzem_3.energy();
                                
                                  float verbrauch_gesamt = verbrauch_pzem1 + verbrauch_pzem2 + verbrauch_pzem3;
                                  diff_verbrauch = verbrauch_gesamt;
                                
                                  myTimer1.resume();
                                
                                
                                
                                }
                                
                                // #####################################################################################################
                                // #####################################################################################################
                                // Die SETUP Routine
                                // #####################################################################################################
                                // #####################################################################################################
                                void setup()
                                {
                                
                                  pinMode(STATUS_LED,OUTPUT);
                                  digitalWrite(STATUS_LED,LOW);
                                  
                                  Serial.begin(9600);
                                  delay(100);
                                  Serial.println("");
                                  Serial.println("PZEM 3-Phasen-Reader");  
                                  
                                  Serial.println(version);
                                  Serial.println("");
                                
                                  initWiFi();
                                  initMQTT();
                                
                                  MQTTClient.publish("Energie/Info",version);
                                
                                
                                  //--OTA Over the Air update einrichten
                                  MDNS.begin(host);
                                  httpUpdater.setup(&httpServer);
                                  httpServer.begin();
                                  MDNS.addService("http", "tcp", 80);
                                  Serial.printf("HTTPUpdateServer ready! Open http://%s.local/update in your browser\n", host);
                                  
                                 
                                  //--Timer für PZEM lesen und senden starten
                                  myTimer1.start();
                                 
                                }
                                
                                
                                // #####################################################################################################
                                // #####################################################################################################
                                // Die Haupt-  LOOP Routine
                                // #####################################################################################################
                                // #####################################################################################################
                                void loop(){
                                
                                  //--Wifi verloren? dann neu aufbauen
                                  if (WiFi.status() != WL_CONNECTED)
                                    {
                                      initWiFi();
                                    };
                                
                                  //--MQTT Verbindung verloren? dann neu aufbauen
                                  if (MQTTClient.state() != MQTT_CONNECTED) 
                                    {
                                      initMQTT();
                                    };
                                
                                  MQTTClient.loop();
                                  httpServer.handleClient();
                                  MDNS.update();
                                  myTimer1.update();
                                
                                
                                  delay(10);
                                
                                
                                
                                }
                                
                                K Offline
                                K Offline
                                Kopterframe
                                wrote on last edited by
                                #183

                                @homezecke
                                Super Projekt, vielen Dank. Werde es auch nachbauen, mit nur einer Phase. Da nur eine vorhanden ist.
                                Habe ich das richtig verstanden,
                                PZEM1 RX - D1 Wemo und TX - D2 Wemo?
                                Viele Grüße

                                1 Reply Last reply
                                0
                                • marcusklM Offline
                                  marcusklM Offline
                                  marcuskl
                                  wrote on last edited by
                                  #184

                                  Mir ist aufgefallen das die Werte Scheinleistung, Blindleistung und Wirkleistung nicht zusammen passen.
                                  Scheinleistung ist ja Blindleistung und Scheinleistung zusammen gerechnet und wenn ich mir die Messwerte anschaue ergibt des irgendwie kein Sinn?
                                  Bei eich auch so ?
                                  Screenshot_2021-08-04-18-38-20-466_com.android.chrome.jpg

                                  Host: Intel Nuc6cayh (16GB Ram, 240GB SSD) mit Proxmox.

                                  Iobroker VM, InfluxDB LXC, Pihole LXC, Tasmoadmin LXC, Easy2connect VM

                                  DolomitiD 1 Reply Last reply
                                  0
                                  • marcusklM marcuskl

                                    Mir ist aufgefallen das die Werte Scheinleistung, Blindleistung und Wirkleistung nicht zusammen passen.
                                    Scheinleistung ist ja Blindleistung und Scheinleistung zusammen gerechnet und wenn ich mir die Messwerte anschaue ergibt des irgendwie kein Sinn?
                                    Bei eich auch so ?
                                    Screenshot_2021-08-04-18-38-20-466_com.android.chrome.jpg

                                    DolomitiD Offline
                                    DolomitiD Offline
                                    Dolomiti
                                    wrote on last edited by Dolomiti
                                    #185

                                    @marcuskl
                                    S ist nicht gleich P + Q, sondern 8fad4760-1aa7-4496-80b7-15285eb4734f-image.png

                                    Wikipedia

                                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                                    Intel N100 (32GB,256GB SSD), Proxmox -> Debian 12 in VM (Master) + Debian 12 in CT (Test) + Debmatic, HM-Aktoren, Wago 750-880, Shelly, Zigbee

                                    marcusklM 1 Reply Last reply
                                    0
                                    • DolomitiD Dolomiti

                                      @marcuskl
                                      S ist nicht gleich P + Q, sondern 8fad4760-1aa7-4496-80b7-15285eb4734f-image.png

                                      Wikipedia

                                      marcusklM Offline
                                      marcusklM Offline
                                      marcuskl
                                      wrote on last edited by
                                      #186

                                      @dolomiti ok Danke, bin schon lange raus aus dieser Thematik, hatte nur noch in Erinnerung das sich die Scheinleistung aus der Wirk- und Blindleistung zusammensetzt.

                                      Host: Intel Nuc6cayh (16GB Ram, 240GB SSD) mit Proxmox.

                                      Iobroker VM, InfluxDB LXC, Pihole LXC, Tasmoadmin LXC, Easy2connect VM

                                      1 Reply Last reply
                                      0
                                      • M Malaus

                                        @marcuskl
                                        ich habe es hinbekommen! Endlich! 😄
                                        Die 5V Spannungsversorgung der PZEM Module muss über den Wemo kommen. Nur dann erhalte ich eine Kommunikation. Ich vermute mal, dass liegt am Potenzial für Tx und Rx.
                                        Die Dioden habe ich im Tx Strang verbaut. Nur die zusätzliche Versorgung hab ich nicht drin. Es funktioniert auch ohne. Ist die einfach nur zur Unterstützung des Bus da?

                                        Lange Rede kurzer Sinn, hier ist eine Skizze (Hoffe man erkennt es):
                                        Scan 05.01.2020, 10.01.jpeg

                                        H Offline
                                        H Offline
                                        HelmutLinner
                                        wrote on last edited by
                                        #187

                                        @marcuskl meinst du den Widerstand im PZEM zwischen optocopler und vcc?

                                        Für was sind die Dioden?
                                        Ich hab es mit einem PZEM 004t und einem esp8266 probiert, ich hab die dioden in alle möglichen Richtungen eingebaut in RX oder TX und auch mit der separaten Versorgung über den Widerstand auf RX. Das hat aber alles nicht funktioniert.

                                        Ich hab dann den esp über 5v und ground Versorgung und den Pzem über die selbe Versorgung und RX auf TX, TX auf RX und es funktioniert, jetzt hab ich einen 2 ten PZEM mit Adresse 2 parallel dazu angeschlossen. Jetzt bekomme ich von beiden die Werte.

                                        Ich habe auch in der Tasmota Software auf PZEM016 RX gestellt obwohl ich einen PZEM04t habe, aber nur so funktioniert’s bei mir.

                                        Habt ihr in IObroker einzelne datenpunkte für Spannung Leistung Amper usw? Ich weiß gerade nicht wie ich den einen großen datenpunkt auseinander bekomme dass ich ihn in Grafana verwenden kann. Muss ich da was in tasmota machen damit schon mehrere datenpunkte erzeugt werden?

                                        {"Time":"2021-12-25T14:57:13","ENERGY":{"TotalStartTime":"2021-12-24T22:40:20","Total":0.000,"Yesterday":0.000,"Today":0.000,"Period":[ 0, 0],"Power":[ 0, 0],"ApparentPower":[ 0, 0],"ReactivePower":[ 0, 0],"Factor":[0.00,0.00],"Frequency":[50,50],"Voltage":[228,228],"Current":[0.000,0.000]}}

                                        D B M 3 Replies Last reply
                                        0
                                        • H HelmutLinner

                                          @marcuskl meinst du den Widerstand im PZEM zwischen optocopler und vcc?

                                          Für was sind die Dioden?
                                          Ich hab es mit einem PZEM 004t und einem esp8266 probiert, ich hab die dioden in alle möglichen Richtungen eingebaut in RX oder TX und auch mit der separaten Versorgung über den Widerstand auf RX. Das hat aber alles nicht funktioniert.

                                          Ich hab dann den esp über 5v und ground Versorgung und den Pzem über die selbe Versorgung und RX auf TX, TX auf RX und es funktioniert, jetzt hab ich einen 2 ten PZEM mit Adresse 2 parallel dazu angeschlossen. Jetzt bekomme ich von beiden die Werte.

                                          Ich habe auch in der Tasmota Software auf PZEM016 RX gestellt obwohl ich einen PZEM04t habe, aber nur so funktioniert’s bei mir.

                                          Habt ihr in IObroker einzelne datenpunkte für Spannung Leistung Amper usw? Ich weiß gerade nicht wie ich den einen großen datenpunkt auseinander bekomme dass ich ihn in Grafana verwenden kann. Muss ich da was in tasmota machen damit schon mehrere datenpunkte erzeugt werden?

                                          {"Time":"2021-12-25T14:57:13","ENERGY":{"TotalStartTime":"2021-12-24T22:40:20","Total":0.000,"Yesterday":0.000,"Today":0.000,"Period":[ 0, 0],"Power":[ 0, 0],"ApparentPower":[ 0, 0],"ReactivePower":[ 0, 0],"Factor":[0.00,0.00],"Frequency":[50,50],"Voltage":[228,228],"Current":[0.000,0.000]}}

                                          D Offline
                                          D Offline
                                          da.phreak
                                          wrote on last edited by
                                          #188

                                          @helmutlinner Das ist JSON da wirst Du wohl ein script brauchen, um das auseinander zu nehmen. JSON.Parse macht das, etwa so :

                                          var dec = JSON.parse(getState("adresse_zum_knoten").val);

                                          Danach kannst Du über Properties von "dec" auf die Werte zugreifen, z. B.:

                                          log(dec.ENERGY.Voltage[0]);

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          701

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe