- 1 PZEM 004T 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 éléctrique
- transformateur avec prise usb mini (pour alimenter le NodeMCU)
Caractéristique technique du wattmètre PZEM004
Paramètre électrique mesure :
• Voltage
• Intensité
• Puissance Instantané
• Energie
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 3 capteurs virtuels

-Tension

-Ampère (monophasé)

-Electricité (Instant+Compteur)

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 pour arduino : https://github.com/olehs/PZEM004T
et installer là.
Modifier le sketch suivant avec vos paramètre et televersé le dans votre NodeMCU
Code : Tout sélectionner
/*
PZEM004T vers Domoticz GET
*/
#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>
#include <PZEM004T.h>
// initialisation du PZEM004T
PZEM004T pzem(4,5); // RX,TX borne D1 et D2
IPAddress ip(192,168,1,1);
#define SLEEP_DELAY_IN_SECONDS 30 //interval envoi des données
//parametre Wifi
const char* ssid = "NomduWifi"; // Nom du reseau WIFI utilise
const char* password = "12345678"; // Mot de passe du reseau WIFI utilise
// Paremetre Domoticz
const char* domoticz_server = "192.168.0.x"; //adresse IP de domoticz
String IDX_U = "293"; //idx du capteur virtuels tension
String IDX_I = "292"; //idx du capteur virtuels intensite
String IDX_W = "294"; //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("");
float v = pzem.voltage(ip);
if (v < 0.0) v = 0.0;
Serial.print(v);Serial.print("V; ");
delay(10);
float i = pzem.current(ip);
if(i >= 0.0){ Serial.print(i);Serial.print("A; "); }
delay(10);
float p = pzem.power(ip);
if(p >= 0.0){ Serial.print(p);Serial.print("W; "); }
delay(10);
float e = pzem.energy(ip);
if(e >= 0.0){ Serial.print(e);Serial.print("Wh; "); }
Serial.println();
EnvoieDomoticz(IDX_U,String(v)); // tension
EnvoieDomoticz(IDX_I,String(i)); // intensite
EnvoieDomoticz(IDX_W,String(p)+ ";" +String(e)); // 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 alimenter le NodeMCU par sa prise usb l'aide d'un transformateur branché sur le 220V

--



Moi personnellement je l’ai branche dans mon tableau électrique général
