[NodeMCU] Un wattmètre wifi connecté à Domoticz pour environ 10€ avec le PZEM004T v3.0

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement.
Merci d'utiliser la balise correspondante à votre sujet : [Tuto], [Plugin], [DzVents], [LUA], [Python], [Bash] ...
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Répondre
V1nz T3ch
Messages : 2
Enregistré le : 14 oct. 2019, 16:27

[NodeMCU] Un wattmètre wifi connecté à Domoticz pour environ 10€ avec le PZEM004T v3.0

Message par V1nz T3ch »

Voici une mise a jour de ce tutorial pour le PZEM 004T v.3.0
Bien que le prix sois moins intéressant que certaine prise qui supporte 16A que l’on peux trouver sur Ali express comme cette prise la a 7.5€

Ce tuto reste très intéressant pour un branchement dans le tableau électrique vu le PZEM0004T supporte jusqu’à 100A
PZEM004T v3.jpg
PZEM004T v3.jpg (1.24 Mio) Vu 77 fois
Liste de matériel à acheter
- 1 PZEM 004T v3.0 lien
- 1 NodeMCU lien
- 5 Câble pour breadboard femelle/femelle lien

Liste de matériel à récupérer
- Rallonge électrique (avec terre (conseillé))
- domino

Caractéristique technique du wattmètre PZEM004T v3
Paramètre électrique mesure :
• Voltage
• Intensité
• Puissance Instantané
• Énergie
• Fréquence (que sur la V3)
• Facteur de puissance (que sur la V3)

Communications en TTL avec le NodeMCU

Dans domoticz
Dans réglages / matériel crée un matériel ‘Compteur Elec’ de type Dummy
Image

Avec le nouveau matériel crée 5 capteurs virtuels
Image

-Tension
tension.PNG
tension.PNG (10.07 Kio) Vu 77 fois
-Ampère (monophasé)
intensite.PNG
intensite.PNG (11.09 Kio) Vu 77 fois
-Électricité (Instant+Compteur)
electricite.PNG
electricite.PNG (11.81 Kio) Vu 77 fois
-Fréquence
frequence.PNG
frequence.PNG (10.83 Kio) Vu 77 fois
-Facteur de puissance
facteurdepuissance.PNG
facteurdepuissance.PNG (11.31 Kio) Vu 77 fois


Allez dans Reglages / Dispositif et note les IDX des diffèrent capteur crée
tableau(02).jpg
tableau(02).jpg (106.62 Kio) Vu 77 fois


Dans Arduino IDE


Télécharger la librairie du PZEM 004T v3 en allons dans :
Croquis / Inclure une librairie / Gérer les bibliothèque
Rechercher pzem
bibliotheque.png
bibliotheque.png (29.85 Kio) Vu 77 fois
Et instaler le PZEM004Tv30


Modifier le sketch suivant avec vos paramètre et televersé le dans votre NodeMCU

Code : Tout sélectionner

/*
 PZEM004T v3.0 vers Domoticz GET 
*/

#include <ESP8266WiFi.h>
#include <SoftwareSerial.h> 
//#include <PZEM004T.h>
#include <PZEM004Tv30.h>

// initialisation du PZEM004T
#define PZEM_RX_PIN 4
#define PZEM_TX_PIN 5

SoftwareSerial pzemSWSerial(PZEM_RX_PIN, PZEM_TX_PIN);
PZEM004Tv30 pzem(pzemSWSerial);


#define SLEEP_DELAY_IN_SECONDS 30
//parametre Wifi

const char* ssid     = "toto";
const char* password = "12345678";

// Paremetre Domoticz
const char* domoticz_server = "192.168.0.8"; //adresse IP de domoticz
String IDX_U     = "551"; //idx du capteur virtuels tension lidR%TVe1R9Su?V>j!lqvqM?9dJ 5%M+vC_(=-y>|FFQ&NSeB%-SU_bci%QNhoN
String IDX_I     = "552"; //idx du capteur virtuels intensite     
String IDX_W     = "553"; //idx du capteur virtuels puissance et energie
String IDX_F     = "554"; //idx du capteur virtuels puissance et energie
String IDX_PF     = "555"; //idx du capteur virtuels puissance et energie

WiFiClient domoticz_client;

int nbtent=0;


void setup(void) {
  Serial.begin(115200);
  
  // Connexion au WiFi
  delay(10);

  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    if (nbtent<10){
      nbtent++ ;   
      delay(1000);
      Serial.print(".");
    }
    else{
      Serial.println("Restet");
      ESP.deepSleep(2 * 1000000, WAKE_RF_DEFAULT);
    }    
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  //initialisation ttl avec PZEM004T
  //pzem.setAddress(ip);
  
}

void loop(void){    
  Serial.println("");  
  Serial.print("Custom Address:");
  Serial.println(pzem.readAddress(), HEX);

  float v = pzem.voltage();
  if (v < 0.0) v = 0.0;
  Serial.print(v);Serial.print("V; ");
  delay(10); 
  float i = pzem.current();
  if(i >= 0.0){ Serial.print(i);Serial.print("A; "); }
  delay(10);   
  float p = pzem.power();
  if(p >= 0.0){ Serial.print(p);Serial.print("W; "); }
  delay(10);   
  float e = pzem.energy();
  if(e >= 0.0){ Serial.print(e);Serial.print("Wh; "); }  
  float f = pzem.frequency();
  if(f >= 0.0){ Serial.print(f);Serial.print("Hz; "); }
  float pf = pzem.pf();
  if(pf >= 0.0){ Serial.print(pf);Serial.print("; "); }
  Serial.println();

  EnvoieDomoticz(IDX_U,String(v)); // tension
  EnvoieDomoticz(IDX_I,String(i)); // intensite
  EnvoieDomoticz(IDX_W,String(p)+ ";" +String(e)); // puissance
  EnvoieDomoticz(IDX_F,String(f)); // frequence
  EnvoieDomoticz(IDX_PF,String(pf)); // facteur de puissance
  
  delay(100);
    
  Serial.println("Pausse de "+String(SLEEP_DELAY_IN_SECONDS)+" secondes...");
  delay(SLEEP_DELAY_IN_SECONDS * 1000);
  }


int EnvoieDomoticz(String IDX, String Svalue) {
  domoticz_client.connect(domoticz_server, 8080);
  delay(500);

  int Resultat=0 ;
  int NbTentEnvoie=0;
  
  String deel1 = "GET /json.htm?type=command&param=udevice&idx="+IDX+"&nvalue=0&svalue=";
  String deel3 = " HTTP/1.1\r\nHost: www.local.lan\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n";  
  String dataInput = String(deel1 + Svalue + deel3);
  while (Resultat!=1) {
    if (NbTentEnvoie<10){
      NbTentEnvoie++ ;
      Serial.print("_");
      domoticz_client.println(dataInput);
      delay(500);
      // Si le serveur repond lire toute les lignes
      while(domoticz_client.available()){
        String line = domoticz_client.readStringUntil('\r');
        if (line.lastIndexOf("status")>0 and line.lastIndexOf("OK")>0){
          Serial.println("Status OK");
          Resultat = 1 ;
        }
      }
    }
  else{
      Serial.println("Restet");
      ESP.deepSleep(2 * 1000000, WAKE_RF_DEFAULT);
    }  
    
  }  
  // deconexion
  domoticz_client.println("Connection: close");
  domoticz_client.println();  
  return(Resultat);
}
Branché le Ndembu au PZEM 004Tv30 comme sur le schéma ci-dessous

Image

Et voilà Apres le branchement vous devriez obtenir de belle courbe
indicateur.PNG
indicateur.PNG (66.89 Kio) Vu 77 fois
Domoticzcourbe.png
Domoticzcourbe.png (495.41 Kio) Vu 77 fois
Modifié en dernier par V1nz T3ch le 06 août 2022, 20:06, modifié 4 fois.

Keros
Messages : 3320
Enregistré le : 23 juil. 2019, 20:57

Re: [NodeMCU] Un wattmètre wifi connecté à Domoticz pour environ 10€ avec le PZEM004T v3.0

Message par Keros »

Merci pour cette mise à jour.

En hébergeant les images à l'extérieur du forum, il y a de fort risques qu'elles ne soient plus disponibles dans quelque temps comme ici, ou encore . Est-ce que tu peux éditer ton message et utiliser l'onglet Fichiers joints en dessous de la zone d'écriture des messages pour enregistrer les éléments sur le serveur du forum. Merci

Répondre