Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker 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.9k

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

[Tutorial] PZEM-004T 3 Phasen Überwachung

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
pzem-004t-v30monitoringüberwachungmessunghow-totutorial
283 Beiträge 37 Kommentatoren 79.0k Aufrufe 41 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • NinjaTurtle85N Offline
    NinjaTurtle85N Offline
    NinjaTurtle85
    schrieb am zuletzt editiert von
    #38

    Kann ich die PZEM-004T nicht ohne wiederstände einzeln an eine NodeMCU anschließen ohne das ganze in Reihe zu schalten?
    Wenn ja was muss ich bei Generic (18) einstellen? Es gibt dort 3x Rx und nur 1x Tx.

    M 1 Antwort Letzte Antwort
    0
    • NinjaTurtle85N NinjaTurtle85

      Kann ich die PZEM-004T nicht ohne wiederstände einzeln an eine NodeMCU anschließen ohne das ganze in Reihe zu schalten?
      Wenn ja was muss ich bei Generic (18) einstellen? Es gibt dort 3x Rx und nur 1x Tx.

      M Offline
      M Offline
      manrum1
      schrieb am zuletzt editiert von
      #39

      @NinjaTurtle85 Nein, das geht leider nicht. Schau die folgendes mal an: https://forum.iobroker.net/topic/28453/tutorial-pzem-004t-3-phasen-überwachung

      1 Antwort Letzte Antwort
      0
      • OpenSourceNomadO Offline
        OpenSourceNomadO Offline
        OpenSourceNomad
        Most Active
        schrieb am zuletzt editiert von OpenSourceNomad
        #40

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

        Kann ich die PZEM-004T nicht ohne wiederstände einzeln an eine NodeMCU anschließen ohne das ganze in Reihe zu schalten?

        Sollte problemlos an einem ESP32 NodeMCU funktionieren, da dieser drei paar hardware UARTs hat

        9be4bb06-5df9-40e9-a268-c043f19e3879-image.png

        The ESP32 has three UARTs. Any pair of GPIO pins can be used, as long as they support the proper output/input modes.

        https://esphome.io/components/uart.html#hardware-uarts

        Und mittels software UART sollte das eigentlich auch einem esp8266 (z.B. dem klassischen NodeMCU) funktionieren wenn du genügen pins frei hast.

        „Das Widerlegen von Schwachsinn erfordert eine Größenordnung mehr Energie als dessen Produktion.“ - Alberto Brandolini (Bullshit-Asymmetrie-Prinzip)

        1 Antwort Letzte Antwort
        0
        • E elektrickser.de

          @HomeZecke

          Tolle Arbeit mit deiner Visu. Könntest du diese zur Verfügung stellen? Ich würde diese gerne in meiner Visu nutzen.

          Gruß Elektrickser

          HomeZeckeH Offline
          HomeZeckeH Offline
          HomeZecke
          schrieb am zuletzt editiert von
          #41

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

          @HomeZecke

          Tolle Arbeit mit deiner Visu. Könntest du diese zur Verfügung stellen? Ich würde diese gerne in meiner Visu nutzen.

          Gruß Elektrickser

          Klar, gerne.

          strom_view.txt

          Grüße...

          M 1 Antwort Letzte Antwort
          1
          • HomeZeckeH Offline
            HomeZeckeH Offline
            HomeZecke
            schrieb am zuletzt editiert von
            #42

            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 1 Antwort Letzte Antwort
            3
            • S Offline
              S Offline
              spaceduck
              schrieb am zuletzt editiert von
              #43

              Hallo,

              bei mir wirft der Compiler einen Fehler bei: Ticker myTimer1(pzem_read,5000);
              Frage: Welche ticker.h lib verwendest Du? Die mit dem ESP8266 Boardverwalter Paket mitkommt oder was anderes?

              Danke...

              HP Gen8 16GB / Ubuntu Server 20.04 LTS - Nein, ein Server braucht keine GUI…;-)

              NinjaTurtle85N 1 Antwort Letzte Antwort
              0
              • HomeZeckeH Offline
                HomeZeckeH Offline
                HomeZecke
                schrieb am zuletzt editiert von
                #44

                Hallo,

                [https://github.com/sstaub/Ticker]

                und bei der PZEM Lib benutze ich die neuere Lib
                [https://github.com/mandulaj/PZEM-004T-v30],
                da ich V3 Module benutze. Für alte PZEM-Module kann (muss?) auch eine alte Lib benutzt werden.

                Grüße..

                1 Antwort Letzte Antwort
                0
                • HomeZeckeH HomeZecke

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

                  @HomeZecke

                  Tolle Arbeit mit deiner Visu. Könntest du diese zur Verfügung stellen? Ich würde diese gerne in meiner Visu nutzen.

                  Gruß Elektrickser

                  Klar, gerne.

                  strom_view.txt

                  Grüße...

                  M Offline
                  M Offline
                  manrum1
                  schrieb am zuletzt editiert von manrum1
                  #45

                  @HomeZecke Zu deiner strom_view.txt: Ich kann den code nicht importieren, darf ich fragen welche Oberfläche du für deinen IOBroker nutzt?

                  HomeZeckeH 1 Antwort Letzte Antwort
                  0
                  • M manrum1

                    @HomeZecke Zu deiner strom_view.txt: Ich kann den code nicht importieren, darf ich fragen welche Oberfläche du für deinen IOBroker nutzt?

                    HomeZeckeH Offline
                    HomeZeckeH Offline
                    HomeZecke
                    schrieb am zuletzt editiert von
                    #46

                    Geht bei mir mit Chrome Browser auf PC, FullyKiosk und der Android Vis-App. Habe bei mir das ganze noch einmal test-weise importiert - geht. Nur das Hintergrundbild fehlt. Habe ich nicht mitgeliefert.

                    Grüße...

                    1 Antwort Letzte Antwort
                    0
                    • SBorgS Offline
                      SBorgS Offline
                      SBorg
                      Forum Testing Most Active
                      schrieb am zuletzt editiert von
                      #47

                      Jepp, eben probiert. Funktioniert (die Navileiste unten geht natürlich auch nicht 😁 )

                      Du importierst es aber auch wirklich als VIEW, nicht als Widget?

                      LG SBorg ( SBorg auf GitHub)
                      Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                      1 Antwort Letzte Antwort
                      0
                      • S Offline
                        S Offline
                        spaceduck
                        schrieb am zuletzt editiert von spaceduck
                        #48

                        Ich hab den Code noch etwas angepasst weil ich bei meinem mqtt Server eine Passwortabfrage eingerichtet habe, also vielleicht hilft es jemanden:

                        const char* mqttUser = "user";
                        const char* mqttPassword = "password";
                        
                        // while( !MQTTClient.connect("Energie_PZEM") ) 
                        while( !MQTTClient.connect("Energie_PZEM", mqttUser, mqttPassword)) 
                        

                        HP Gen8 16GB / Ubuntu Server 20.04 LTS - Nein, ein Server braucht keine GUI…;-)

                        1 Antwort Letzte Antwort
                        0
                        • S spaceduck

                          Hallo,

                          bei mir wirft der Compiler einen Fehler bei: Ticker myTimer1(pzem_read,5000);
                          Frage: Welche ticker.h lib verwendest Du? Die mit dem ESP8266 Boardverwalter Paket mitkommt oder was anderes?

                          Danke...

                          NinjaTurtle85N Offline
                          NinjaTurtle85N Offline
                          NinjaTurtle85
                          schrieb am zuletzt editiert von NinjaTurtle85
                          #49

                          @spaceduck konntest du den Fehler beseitigen? Ich habe die Lib`s von HomeZecke installiert der fehler kommt trotzdem.

                          Ich habe jetzt gesehen das mein Arduino: No Matching function for call to Ticker::Ticker(void (&) (), int) auswirft.
                          Kann mir jemand helfen?

                          S 1 Antwort Letzte Antwort
                          0
                          • NinjaTurtle85N NinjaTurtle85

                            @spaceduck konntest du den Fehler beseitigen? Ich habe die Lib`s von HomeZecke installiert der fehler kommt trotzdem.

                            Ich habe jetzt gesehen das mein Arduino: No Matching function for call to Ticker::Ticker(void (&) (), int) auswirft.
                            Kann mir jemand helfen?

                            S Offline
                            S Offline
                            spaceduck
                            schrieb am zuletzt editiert von spaceduck
                            #50

                            @NinjaTurtle85
                            ja, ich konnte es wie folgt lösen: kopiere die Ticker.h und Ticker.cpp von hier: https://github.com/sstaub/Ticker

                            in Dein Sketchverzeichnis. Dann änderst du die include Anweisung von

                            #include <Ticker.h>
                            in
                            #include "Ticker.h"

                            Hintergrund: Die ESP8266 Unterstützung bringt eine eigene Ticker Lib mit, ich konnte den Compiler aber nicht überreden die alternative Lib zu verwenden. Wenn die jedoch direkt im Sketch liegt und mit " " eingebunden wird, dann wird sie auch verwendet.

                            Gib Bescheid ob es funktioniert.

                            HP Gen8 16GB / Ubuntu Server 20.04 LTS - Nein, ein Server braucht keine GUI…;-)

                            HomeZeckeH NinjaTurtle85N 2 Antworten Letzte Antwort
                            0
                            • S spaceduck

                              @NinjaTurtle85
                              ja, ich konnte es wie folgt lösen: kopiere die Ticker.h und Ticker.cpp von hier: https://github.com/sstaub/Ticker

                              in Dein Sketchverzeichnis. Dann änderst du die include Anweisung von

                              #include <Ticker.h>
                              in
                              #include "Ticker.h"

                              Hintergrund: Die ESP8266 Unterstützung bringt eine eigene Ticker Lib mit, ich konnte den Compiler aber nicht überreden die alternative Lib zu verwenden. Wenn die jedoch direkt im Sketch liegt und mit " " eingebunden wird, dann wird sie auch verwendet.

                              Gib Bescheid ob es funktioniert.

                              HomeZeckeH Offline
                              HomeZeckeH Offline
                              HomeZecke
                              schrieb am zuletzt editiert von
                              #51

                              Sorry, habe das nur mit platformio probiert. Da gab es keine Probleme. Kann man eh nur empfehlen.

                              Grüße....

                              S 1 Antwort Letzte Antwort
                              0
                              • HomeZeckeH HomeZecke

                                Sorry, habe das nur mit platformio probiert. Da gab es keine Probleme. Kann man eh nur empfehlen.

                                Grüße....

                                S Offline
                                S Offline
                                spaceduck
                                schrieb am zuletzt editiert von
                                #52

                                @HomeZecke PlatformIO kannte ich noch garnicht, hab es gerade mal installiert - schaut gut aus!
                                Danke für den Tipp!

                                HP Gen8 16GB / Ubuntu Server 20.04 LTS - Nein, ein Server braucht keine GUI…;-)

                                1 Antwort Letzte Antwort
                                0
                                • S spaceduck

                                  @NinjaTurtle85
                                  ja, ich konnte es wie folgt lösen: kopiere die Ticker.h und Ticker.cpp von hier: https://github.com/sstaub/Ticker

                                  in Dein Sketchverzeichnis. Dann änderst du die include Anweisung von

                                  #include <Ticker.h>
                                  in
                                  #include "Ticker.h"

                                  Hintergrund: Die ESP8266 Unterstützung bringt eine eigene Ticker Lib mit, ich konnte den Compiler aber nicht überreden die alternative Lib zu verwenden. Wenn die jedoch direkt im Sketch liegt und mit " " eingebunden wird, dann wird sie auch verwendet.

                                  Gib Bescheid ob es funktioniert.

                                  NinjaTurtle85N Offline
                                  NinjaTurtle85N Offline
                                  NinjaTurtle85
                                  schrieb am zuletzt editiert von
                                  #53

                                  @spaceduck SUPER! Das hat schonmal geklappt Danke!
                                  Wenn Du mir jetzt noch sagen könntets wo Ich deinen Code zum Anmelden mit Benutzer und Passwort angeben musst bist Du mein Held 😁 👍

                                  HomeZeckeH 1 Antwort Letzte Antwort
                                  0
                                  • NinjaTurtle85N NinjaTurtle85

                                    @spaceduck SUPER! Das hat schonmal geklappt Danke!
                                    Wenn Du mir jetzt noch sagen könntets wo Ich deinen Code zum Anmelden mit Benutzer und Passwort angeben musst bist Du mein Held 😁 👍

                                    HomeZeckeH Offline
                                    HomeZeckeH Offline
                                    HomeZecke
                                    schrieb am zuletzt editiert von
                                    #54

                                    @NinjaTurtle85 Morgens,
                                    Du musst in Funktion initMQTT die Änderungen eintragen.

                                    Grüße...

                                    1 Antwort Letzte Antwort
                                    1
                                    • NinjaTurtle85N Offline
                                      NinjaTurtle85N Offline
                                      NinjaTurtle85
                                      schrieb am zuletzt editiert von
                                      #55

                                      So, gestern habe Ich alles Anklemmen lassen und läuft soweit auch stabil.
                                      Nur aktualliesiert sich mein L3 nur sporadisch somit fallen die Gesamten Daten der Addierten Datenpunkte auf Null. Kennt jemand das Phänomen? Der PZEM von L3 blinkt auch anders als L1 und L2.

                                      HomeZeckeH 1 Antwort Letzte Antwort
                                      0
                                      • NinjaTurtle85N NinjaTurtle85

                                        So, gestern habe Ich alles Anklemmen lassen und läuft soweit auch stabil.
                                        Nur aktualliesiert sich mein L3 nur sporadisch somit fallen die Gesamten Daten der Addierten Datenpunkte auf Null. Kennt jemand das Phänomen? Der PZEM von L3 blinkt auch anders als L1 und L2.

                                        HomeZeckeH Offline
                                        HomeZeckeH Offline
                                        HomeZecke
                                        schrieb am zuletzt editiert von
                                        #56

                                        @NinjaTurtle85 tausch doch testweise mal die Anschlüsse auf einen anderen deiner pzems um zu sehen ob der pzem ne macke hat.

                                        NinjaTurtle85N 1 Antwort Letzte Antwort
                                        0
                                        • HomeZeckeH HomeZecke

                                          @NinjaTurtle85 tausch doch testweise mal die Anschlüsse auf einen anderen deiner pzems um zu sehen ob der pzem ne macke hat.

                                          NinjaTurtle85N Offline
                                          NinjaTurtle85N Offline
                                          NinjaTurtle85
                                          schrieb am zuletzt editiert von
                                          #57

                                          @HomeZecke Das hatte ich schon probiert, immer L3 blinkt doppelt.
                                          Aber ich habe jetzt im Hutschienennetzteil die spannung etwas unter 5V gedreht, jetzt läuft es.
                                          Danke Euch für die ganze Hilfe! 👍

                                          Johannes BauerstatterJ 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          317

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe