Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. [Tutorial] PZEM-004T 3 Phasen Überwachung

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Tutorial] PZEM-004T 3 Phasen Überwachung

    This topic has been deleted. Only users with topic management privileges can see it.
    • HomeZecke
      HomeZecke @frodo777 last edited by

      @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...

      HomeZecke 1 Reply Last reply Reply Quote 0
      • HomeZecke
        HomeZecke @HomeZecke last edited by

        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 Reply Quote 0
        • F
          frodo777 @HomeZecke last edited by

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

          1 Reply Last reply Reply Quote 0
          • K
            Kopterframe @HomeZecke last edited by

            @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 Reply Quote 0
            • marcuskl
              marcuskl last edited by

              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

              Dolomiti 1 Reply Last reply Reply Quote 0
              • Dolomiti
                Dolomiti @marcuskl last edited by Dolomiti

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

                Wikipedia

                marcuskl 1 Reply Last reply Reply Quote 0
                • marcuskl
                  marcuskl @Dolomiti last edited by

                  @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.

                  1 Reply Last reply Reply Quote 0
                  • H
                    HelmutLinner @Malaus last edited by

                    @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 Reply Quote 0
                    • D
                      da.phreak @HelmutLinner last edited by

                      @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 Reply Quote 0
                      • B
                        Beowolf @HelmutLinner last edited by

                        @helmutlinner

                        Warum nimmst Du nicht ESPeasy V2.0 ?

                        Hatte ich hier schon mal beschrieben:

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

                        ioBroker bekommt die Daten passend dann per mqtt.

                        Alles einfach und läuft bei mir seit einem Jahr ohne Probleme.

                        Ich hatte ja auch schon weiter oben mal etwas geschrieben.

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

                        Grüße
                        Manfred

                        1 Reply Last reply Reply Quote 0
                        • M
                          manrum1 @HelmutLinner last edited by

                          @helmutlinner Hallo, aller Anfang ist schwer, war bei mir auch so:

                          Zuerst richtest Du Dir im iobroker Datenpunkte ein, am besten unter dem Objektbaum 0_userdata.0... Dazu nimmst Du folgendes Script und lässt es einmal laufen, danach solltest Du die Datenpunkte sehen:

                          /* /* Strommessung
                          
                          
                          */
                          var pfad = '0_userdata.0.Strom.hb.Status.',
                              name_geraet = 'Pzem_hb', // zB Waschmaschine (Achtung keine Umlaute)
                              beschreibung = 'Strommessung Home Base'; // zB 
                          
                          // Energie
                          createState(pfad + name_geraet + '.Zaehler.Energy_TotalStartTime', 0, {
                              name: 'Energie Total StartTime',
                              desc: 'xx',
                              type: 'string',
                              unit: '',
                              role: '',
                              read: true,
                              write: true
                           });
                           
                          createState(pfad + name_geraet + '.Zaehler.Energy_Total', 0, {
                              name: 'Energie total',
                              desc: 'xx',
                              type: 'number',
                              unit: 'kWh',
                              role: 'value.power.consumption',
                              read: true,
                              write: true
                           });
                          
                           createState(pfad + name_geraet + '.Zaehler.Energy_Yesterday', 0, {
                              name: 'Energie gestern',
                              desc: 'xx',
                              type: 'number',
                              unit: 'kWh',
                              role: 'value.power.consumption',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Energy_Today', 0, {
                              name: 'Energie heute',
                              desc: 'xx',
                              type: 'number',
                              unit: 'kWh',
                              role: 'value.power.consumption',
                              read: true,
                              write: true
                           });
                          
                           createState(pfad + name_geraet + '.Zaehler.Period', 0, {
                              name: 'Periode',
                              desc: 'xx',
                              type: 'number',
                              unit: '',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          // Leistung
                          createState(pfad + name_geraet + '.Zaehler.Power_Ph1', 0, {
                              name: 'Leistung Phase 1',
                              desc: 'xx',
                              type: 'number',
                              unit: 'W',
                              role: 'value.power',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Power_Ph2', 0, {
                              name: 'Leistung Phase 2',
                              desc: 'xx',
                              type: 'number',
                              unit: 'W',
                              role: 'value.power',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Power_Ph3', 0, {
                              name: 'Leistung Phase 3',
                              desc: 'xx',
                              type: 'number',
                              unit: 'W',
                              role: 'value.power',
                              read: true,
                              write: true
                           });
                          
                          // Scheinleistung
                           createState(pfad + name_geraet + '.Zaehler.ApparentPower_Ph1', 0, {
                              name: 'Scheinleistung Phase 1',
                              desc: 'xx',
                              type: 'number',
                              unit: 'VA',
                              role: 'value.power',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.ApparentPower_Ph2', 0, {
                              name: 'Scheinleistung Phase 2',
                              desc: 'xx',
                              type: 'number',
                              unit: 'VA',
                              role: 'value.power',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.ApparentPower_Ph3', 0, {
                              name: 'Scheinleistung Phase 3',
                              desc: 'xx',
                              type: 'number',
                              unit: 'VA',
                              role: 'value.power',
                              read: true,
                              write: true
                           });
                          
                           // Blindleistung
                           createState(pfad + name_geraet + '.Zaehler.ReactivePower_Ph1', 0, {
                              name: 'Blindleistung Phase 1',
                              desc: 'xx',
                              type: 'number',
                              unit: 'VAr',
                              role: 'value.power',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.ReactivePower_Ph2', 0, {
                              name: 'Blindleistung Phase 2',
                              desc: 'xx',
                              type: 'number',
                              unit: 'VAr',
                              role: 'value.power',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.ReactivePower_Ph3', 0, {
                              name: 'Blindleistung Phase 3',
                              desc: 'xx',
                              type: 'number',
                              unit: 'VAr',
                              role: 'value.power',
                              read: true,
                              write: true
                           });
                          
                           // Leistungsfaktor
                           createState(pfad + name_geraet + '.Zaehler.Factor_Ph1', 0, {
                              name: 'Leistungsfaktor Phase 1',
                              desc: 'xx',
                              type: 'number',
                              unit: '',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Factor_Ph2', 0, {
                              name: 'Leistungsfaktor Phase 2',
                              desc: 'xx',
                              type: 'number',
                              unit: '',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Factor_Ph3', 0, {
                              name: 'Leistungsfaktor Phase 3',
                              desc: 'xx',
                              type: 'number',
                              unit: '',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                            // Frequenz
                           createState(pfad + name_geraet + '.Zaehler.Frequency_Ph1', 0, {
                              name: 'Frequenz Phase 1',
                              desc: 'xx',
                              type: 'number',
                              unit: 'Hz',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Frequency_Ph2', 0, {
                              name: 'Frequenz Phase 2',
                              desc: 'xx',
                              type: 'number',
                              unit: 'Hz',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Frequency_Ph3', 0, {
                              name: 'Frequenz Phase 3',
                              desc: 'xx',
                              type: 'number',
                              unit: 'Hz',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                            // Volt
                           createState(pfad + name_geraet + '.Zaehler.Voltage_Ph1', 0, {
                              name: 'Spannung Phase 1',
                              desc: 'xx',
                              type: 'number',
                              unit: 'V',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Voltage_Ph2', 0, {
                              name: 'Spannung Phase 2',
                              desc: 'xx',
                              type: 'number',
                              unit: 'V',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Voltage_Ph3', 0, {
                              name: 'Spannung Phase 3',
                              desc: 'xx',
                              type: 'number',
                              unit: 'V',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                           // Strom
                           createState(pfad + name_geraet + '.Zaehler.Current_Ph1', 0, {
                              name: 'Strom Phase 1',
                              desc: 'xx',
                              type: 'number',
                              unit: 'A',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Current_Ph2', 0, {
                              name: 'Strom Phase 2',
                              desc: 'xx',
                              type: 'number',
                              unit: 'A',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Current_Ph3', 0, {
                              name: 'Strom Phase 3',
                              desc: 'xx',
                              type: 'number',
                              unit: 'A',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                            // Berechnete
                          
                          createState(pfad + name_geraet + '.Zaehler.Current', 0, {
                              name: 'Strom gesamt',
                              desc: 'xx',
                              type: 'number',
                              unit: 'A',
                              role: 'value.power',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Power', 0, {
                              name: 'Leistung gesamt',
                              desc: 'xx',
                              type: 'number',
                              unit: 'W',
                              role: 'value.power.consumption',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.ApparentPower', 0, {
                              name: 'Scheinleistung gesamt',
                              desc: 'xx',
                              type: 'number',
                              unit: 'VA',
                              role: 'value.power.consumption',
                              read: true,
                              write: true
                           });
                          
                           createState(pfad + name_geraet + '.Zaehler.ReactivePower', 0, {
                              name: 'Blindleistung gesamt',
                              desc: 'xx',
                              type: 'number',
                              unit: 'VAr',
                              role: 'value.power.consumption',
                              read: true,
                              write: true
                           });
                          
                          
                           // Zähler
                          
                          createState(pfad + name_geraet + '.Zaehler.Zaehler_actual', 0, {
                              name: 'Zählerstand aktuell',
                              desc: 'xx',
                              type: 'number',
                              unit: 'kWh',
                              role: 'value.power.consumption',
                              read: true,
                              write: true
                           });
                          
                           createState(pfad + name_geraet + '.Zaehler.Zaehler_Korrektur', 0, {
                              name: 'Zähler Korrektur (setzen)',
                              desc: 'xx',
                              type: 'number',
                              unit: 'kWh',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                           createState(pfad + name_geraet + '.Zaehler.Zaehler_HT', 0, {
                              name: 'Zählerstand Basiswert HT (setzen)',
                              desc: 'xx',
                              type: 'number',
                              unit: 'kWh',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Zaehler_NT', 0, {
                              name: 'Zählerstand Basiswert NT (setzen)',
                              desc: 'xx',
                              type: 'number',
                              unit: 'kWh',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          
                          createState(pfad + name_geraet + '.Zaehler.Zaehler_Basiswert', 0, {
                              name: 'Zählerstand Basiswert (setzen oder Summe HT/NT)',
                              desc: 'xx',
                              type: 'number',
                              unit: 'kWh',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Zaehler_Basiswert_Datum', 0, {
                              name: 'Zählerstand Basiswert Datum/Uhrzeit (setzen)',
                              desc: 'xx',
                              type: 'string',
                              unit: '',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          createState(pfad + name_geraet + '.Zaehler.Zaehler_Pzem_Lastchanged', 0, {
                              name: 'Datum/Uhrzeit',
                              desc: 'xx',
                              type: 'string',
                              unit: '',
                              role: '',
                              read: true,
                              write: true
                           });
                          
                          
                          

                          Als nächstes brauchst Du ein Script, dass den MQTT-String parst (durchsucht) und die Daten auf einzlene Datenpunkte mapped, die wir vorher erzeugt haben.

                          on('mqtt.0.tele.stromhb.SENSOR', function(dp) {
                              let tstrom = JSON.parse(dp.state.val);
                              if(tstrom['Time']) {
                                  let val = tstrom['Time'];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Zaehler_Pzem_Lastchanged', val, true);
                              }
                              let strom = JSON.parse(dp.state.val).ENERGY;
                              if(strom['TotalStartTime']) {
                                  let val = strom['TotalStartTime'];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Energy_TotalStartTime', val, true);
                              } if(strom['Total']) {
                                  let val = strom['Total'];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Energy_Total', val, true);
                              } if(strom['Yesterday']) {
                                  let val = strom['Yesterday'];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Energy_Yesterday', val, true);
                              } if(strom['Today']) {
                                  let val = strom['Today'];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Energy_Today', val, true);
                              } if(strom['Period']) {
                                  let val = strom['Period'];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Period', val, true);
                              } if(strom['Power']) {
                                  let val = strom['Power'][0];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Power_Ph1', val, true);
                              } if(strom['Power']) {
                                  let val = strom['Power'][1];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Power_Ph2', val, true);
                              } if(strom['Power']) {
                                  let val = strom['Power'][2];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Power_Ph3', val, true);
                              } if(strom['ApparentPower']) {
                                  let val = strom['ApparentPower'][0];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ApparentPower_Ph1', val, true);
                              } if(strom['ApparentPower']) {
                                  let val = strom['ApparentPower'][1];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ApparentPower_Ph2', val, true);
                              } if(strom['ApparentPower']) {
                                  let val = strom['ApparentPower'][2];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ApparentPower_Ph3', val, true);
                              } if(strom['ReactivePower']) {
                                  let val = strom['ReactivePower'][0];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ReactivePower_Ph1', val, true);
                              } if(strom['ReactivePower']) {
                                  let val = strom['ReactivePower'][1];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ReactivePower_Ph2', val, true);
                              } if(strom['ReactivePower']) {
                                  let val = strom['ReactivePower'][2];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ReactivePower_Ph3', val, true);
                              } if(strom['Factor']) {
                                  let val = strom['Factor'][0];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Factor_Ph1', val, true);
                              } if(strom['Factor']) {
                                  let val = strom['Factor'][1];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Factor_Ph2', val, true);
                              } if(strom['Factor']) {
                                  let val = strom['Factor'][2];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Factor_Ph3', val, true);
                              } if(strom['Frequency']) {
                                  let val = strom['Frequency'][0];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Frequency_Ph1', val, true);
                              } if(strom['Frequency']) {
                                  let val = strom['Frequency'][1];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Frequency_Ph2', val, true);
                              } if(strom['Frequency']) {
                                  let val = strom['Frequency'][2];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Frequency_Ph3', val, true);
                              } if(strom['Voltage']) {
                                  let val = strom['Voltage'][0];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Voltage_Ph1', val, true);
                              } if(strom['Voltage']) {
                                  let val = strom['Voltage'][1];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Voltage_Ph2', val, true);
                              } if(strom['Voltage']) {
                                  let val = strom['Voltage'][2];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Voltage_Ph3', val, true);
                              } if(strom['Current']) {
                                  let val = strom['Current'][0];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Current_Ph1', val, true);
                              } if(strom['Current']) {
                                  let val = strom['Current'][1];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Current_Ph2', val, true);
                              } if(strom['Current']) {
                                  let val = strom['Current'][2];
                                  setState('0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Current_Ph3', val, true);
                              }
                              
                               setTimeout(function() {
                              // Code, der erst nach 5 Sekunden ausgeführt wird
                          
                              setState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Zaehler_Basiswert", (getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Zaehler_HT").val + getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Zaehler_NT").val), true);
                              setState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Current", (getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Current_Ph1").val + getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Current_Ph2").val + getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Current_Ph3").val), true);
                              setState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Power", (getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Power_Ph1").val + getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Power_Ph2").val + getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Power_Ph3").val), true);
                              setState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ReactivePower", (getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ReactivePower_Ph1").val + getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ReactivePower_Ph2").val + getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ReactivePower_Ph3").val), true);
                              setState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ApparentPower", (getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ApparentPower_Ph1").val + getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ApparentPower_Ph2").val + getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.ApparentPower_Ph3").val), true);
                              // setState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Zaehler_actual", (getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Zaehler_Basiswert").val + getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Zaehler_Korrektur").val), true);
                              setState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Zaehler_actual", (getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Zaehler_Basiswert").val + getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Energy_Total").val - getState("0_userdata.0.Strom.hb.Status.Pzem_hb.Zaehler.Zaehler_Korrektur").val), true);
                              }, 5000);
                          
                            });
                          
                          

                          Bei mir heißt der Knoten im MQTT-Adapter stromhb, das musst Du natürlich anpassen. Das Script muss dann dauernd laufen.
                          Am Ende werdne noch einige Berechnungen vorgenommen, ignoriere das erst mal.

                          Viel Erfolg

                          1 Reply Last reply Reply Quote 1
                          • B
                            Berti69 last edited by

                            Hallo
                            Kann mir mal jemand helfen. Irgendwie stecke ich fest. Habe alle drei Module laut Plan verdrahtet. Kann auch jedes Modul einzel auslesen. Leider gehen 3 zusammen nicht. Habe versucht über Tasmota die Adresse der Module zuschreiben. Ohne Erfolg. Die Software für Windows bekomme ich nicht zum laufen. Egal ob mit win 7 oder 10. Kommt immer ein Fehler wenn ich die run über Admin Starte. Gibt es noch ne andere Software für das schreiben der Adresse oder mach ich irgendwo einen Fehler. Danke
                            Gruß Bernd

                            OpenSourceNomad ice77 2 Replies Last reply Reply Quote 0
                            • OpenSourceNomad
                              OpenSourceNomad Most Active @Berti69 last edited by OpenSourceNomad

                              @berti69 said in [Tutorial] PZEM-004T 3 Phasen Überwachung:

                              Gibt es noch ne andere Software für das schreiben der Adresse

                              Esphome 😉 Das passende snippet dafür steht in der Dokumentation der pzemac (für v3) Komponente.
                              Vielleicht hilft dir dann im Anschluss auch gleich (das meist sehr aussagekräftig) logging weiter um eventuelle Probleme mit dem pzem004t zu identifizieren 💡

                              1 Reply Last reply Reply Quote 0
                              • ice77
                                ice77 @Berti69 last edited by ice77

                                @berti69

                                Hallo Bernd

                                Ich kann Dir gerne sagen wie ich es ohne Kopfschmerzen gelöst habe:

                                Verkable immer nur ein einzelnes PZEM an den esp8266 und setze die ID. Gib jedem Gerät eine unterschiedliche ID. Ich habe dazu ESPeasy genutzt, welches ich hier auch anhängen kann, wenn ich das binary noch finde.

                                Wenn die unterschiedlichen IDs gesetzt wurden, kannst Du alle PZEMs an den ESP hängen und entsprechend konfigurieren.

                                Das funktioniert 100%. Die einzige Stolperstelle ist, dass immer nur ein einzelner PZEM angehängt sein darf, wenn die ID geschrieben wird.

                                Falls es nicht klappt... sag bescheid und ich helf dir gern.

                                LG

                                PS: ID setzten unter PZEM mode -> program adress

                                Hier das Binary welches sicher funktioniert:
                                ESP_Easy_mega_20210114_energy_ESP8266_4M1M.zip

                                PZEM.png

                                Hier kannst Du die ID setzen:
                                ProgramAdress.png

                                1 Reply Last reply Reply Quote 0
                                • B
                                  Berti69 last edited by

                                  Danke Euch beiden für die Hilfe. Habe es hinbekommen. Entweder habe ich das irgendwo überlesen oder es ist für Andere selbstverständlich. Ich mußte die isAnalogLibrary.ocx in die Windows Registry eintragen und installieren. Jetzt geht die Messung.
                                  Danke

                                  E 1 Reply Last reply Reply Quote 0
                                  • E
                                    Elektroschlumpf5 @Berti69 last edited by

                                    @berti69 said in [Tutorial] PZEM-004T 3 Phasen Überwachung:

                                    isAnalogLibrary.ocx in die Windows Registry eintragen und installieren

                                    Hallo...
                                    Hab so meine probleme hiermit. was meinst du damit in die registry eintragen und installieren. bekomme es nicht zum laufen...

                                    1 Reply Last reply Reply Quote 0
                                    • guxtdu
                                      guxtdu last edited by

                                      Super Projekt

                                      hat jemand eine Idee warum mein PZEM mir 250V anzeigt und nicht 230V

                                      Danke

                                      B 1 Reply Last reply Reply Quote 0
                                      • B
                                        Beowolf @guxtdu last edited by

                                        @guxtdu

                                        Foto von Anschluß? Mal mit einem Multimeter gemessen? Hast Du nur den einen? Defekt?

                                        So ist eine Aussage etwas schwierig.

                                        1 Reply Last reply Reply Quote 0
                                        • Basti97
                                          Basti97 Most Active last edited by

                                          Ich habe nochmal eine Frage hier zu welche Diode habt ihr genommen. Ich hoffe das ich das hier nicht überlesen habe .)

                                          1 Reply Last reply Reply Quote 0
                                          • E
                                            edition last edited by

                                            Guten Tag

                                            Hat jemand eine Idee, warum mir nur die Spannung und die Frequenz angezeit wird? Die Werte für Strom, Leistung usw. bleiben bei Null, obwohl ein Heizlüfter mit 2000 Watt angeschlossen ist!

                                            Ich habe 2 PZEM-004T V3. Einen mit Gehäuse, der andere ohne. Dazu einen geschlossenen und einen geteilten Stromwandler. Ich habe es mit einem Arduino Uno, einem Arduino Nano, mit einem Wemos D1 mini und Tasmota und auch esp easy versucht. Beim Wemus mit und ohne Pegelwandler. Das Ergebniss ist immer gleich. Strom bleibt auf 0,00 A!
                                            Es können doch nicht beide PZEM defekt sein!

                                            edition

                                            B 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            862
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            how-to messung monitoring pzem-004t-v30 tutorial überwachung
                                            37
                                            283
                                            65377
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo