[NodeMCU] Un wattmètre wifi connecté à Domoticz pour environ 10€ avec le PZEM004T v3.0
Publié : 04 août 2022, 21:35
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
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

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

-Tension -Ampère (monophasé) -Électricité (Instant+Compteur) -Fréquence -Facteur de puissance
Allez dans Reglages / Dispositif et note les IDX des diffèrent capteur crée
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 Et instaler le PZEM004Tv30
Modifier le sketch suivant avec vos paramètre et televersé le dans votre NodeMCU
Branché le Ndembu au PZEM 004Tv30 comme sur le schéma ci-dessous

Et voilà Apres le branchement vous devriez obtenir de belle courbe
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
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

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

-Tension -Ampère (monophasé) -Électricité (Instant+Compteur) -Fréquence -Facteur de puissance
Allez dans Reglages / Dispositif et note les IDX des diffèrent capteur crée
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 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¶m=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);
}

Et voilà Apres le branchement vous devriez obtenir de belle courbe