Moniteur d'énergie domestique intelligent avec ESP32, PZEM-004T et Home Assistant

Figure 1 : Système complet de monitoring énergétique connecté via MQTT vers Home Assistant.

Bienvenue sur TechFix Hub ! En 2026, avec la hausse continue des prix de l'électricité et la prise de conscience écologique, savoir exactement combien consomme chaque appareil de votre maison n'est plus un luxe, mais une nécessité.

Les solutions commerciales (Shelly EM, Emporia Vue) coûtent entre 80€ et 200€ et vous enferment dans des écosystèmes propriétaires. Dans ce guide complet, nous allons construire notre propre système de monitoring énergétique open-source pour moins de 25€, en utilisant :

  • 🧠 Un microcontrôleur ESP32 (le cerveau WiFi)
  • 📊 Un capteur PZEM-004T V3 (précision professionnelle)
  • 🏠 La plateforme Home Assistant (le centre de commande)
  • 📡 Le protocole MQTT (communication ultra-rapide)

À la fin de ce tutoriel, vous aurez un tableau de bord temps réel de toute votre consommation, des alertes en cas de dépassement, et des graphiques historiques dignes des solutions à 500€.

💡 1. Pourquoi Ce Projet Est Indispensable en 2026

💰 Économies Réelles

Identifiez les appareils énergivores et réduisez votre facture de 15 à 30% dès le premier mois.

🔒 100% Privé

Vos données restent chez vous, pas dans le cloud d'un fabricant chinois.

🚀 Évolutif

Ajoutez des capteurs, des automatisations, et même du solaire plus tard.

🛠️ 2. Liste du Matériel (BOM Complète)

Voici exactement ce dont vous avez besoin, avec des liens vers les composants recommandés :

Composant Spécification Prix Approx. Pourquoi ce choix ?
ESP32 DevKit V1 (30 pins) ~6€ WiFi intégré, double cœur, suffisamment de GPIO
PZEM-004T V3 100A avec optocoupleur ~10€ ⚠️ Version V3 obligatoire pour l'isolation galvanique
Alimentation 5V Hi-Link HLK-PM01 ou chargeur USB ~3€ Alimentation isolée pour l'ESP32
Boîtier DIN 4 modules, rail DIN ~5€ Installation propre dans le tableau électrique
Fils + Connecteurs Wago, borniers, fil 1.5mm² ~3€ Connexions sécurisées et réversibles
💰 COÛT TOTAL ~27€ (vs 150€ en solution commerciale)
💡 Astuce de Pro : Commandez 2 ou 3 PZEM-004T dès le début. Vous pourrez monitorer séparément le tableau principal, le chauffe-eau, et la borne de recharge voiture. Le coût marginal est faible, et l'architecture ESP32+MQTT permet d'ajouter des nœuds facilement.

🔌 3. Schéma de Câblage Complet

⚠️ DANGER DE MORT - LISEZ CECI AVANT TOUT

  • Coupez TOUJOURS le disjoncteur général avant toute intervention
  • Ne travaillez JAMAIS seul sur une installation 230V
  • Utilisez un vérificateur d'absence de tension (VAT) avant de toucher quoi que ce soit
  • Le PZEM-004T V3 possède un optocoupleur, mais respectez quand même les distances d'isolement

📍 Câblage Côté ESP32 (Basse Tension - 3.3V)

Pin PZEM-004T Pin ESP32 Fonction
5V (rouge) 5V (VIN) Alimentation du capteur
GND (noir) GND Masse commune
RX (jaune) GPIO 17 (TX2) Communication série
TX (blanc) GPIO 16 (RX2) Communication série

⚡ Câblage Côté 230V (Haute Tension)

Le PZEM-004T V3 se place en série sur la phase entre le disjoncteur et votre installation :

  1. La phase entrante (venant du disjoncteur) → borne IN du PZEM
  2. La phase sortante (vers l'installation) → borne OUT du PZEM
  3. Le neutre passe directement (le PZEM a une borne N dédiée pour sa propre alimentation)
  4. La terre n'est PAS connectée au PZEM (sécurité)

💻 4. Le Code ESP32 Complet (Arduino IDE)

Avant de téléverser, installez ces bibliothèques via le Gestionnaire de Bibliothèques :

  • PZEM004Tv30 par Jakub Vanek
  • PubSubClient par Nick O'Leary (pour MQTT)
  • WiFi (inclus avec ESP32)
#include <WiFi.h>
#include <PubSubClient.h>
#include <PZEM004Tv30.h>

// ============ CONFIGURATION WIFI ============
const char* ssid = "VOTRE_WIFI";
const char* password = "VOTRE_MOT_DE_PASSE";

// ============ CONFIGURATION MQTT ============
const char* mqtt_server = "192.168.1.100"; // IP de votre Home Assistant
const int mqtt_port = 1883;
const char* mqtt_user = "votre_user_mqtt";
const char* mqtt_password = "votre_password_mqtt";
const char* mqtt_topic_prefix = "homeassistant/sensor/energy_meter/";

// ============ CONFIGURATION PZEM ============
PZEM004Tv30 pzem(Serial2, 16, 17); // RX=16, TX=17

WiFiClient espClient;
PubSubClient client(espClient);

unsigned long lastPublish = 0;
const unsigned long publishInterval = 10000; // Publication toutes les 10s

void setup_wifi() {
  delay(10);
  Serial.println("Connexion WiFi en cours...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi connecté ! IP: " + WiFi.localIP().toString());
}

void reconnect_mqtt() {
  while (!client.connected()) {
    Serial.print("Connexion MQTT...");
    String clientId = "ESP32-EnergyMeter-" + String(random(0xffff), HEX);
    if (client.connect(clientId.c_str(), mqtt_user, mqtt_password)) {
      Serial.println("connecté !");
    } else {
      Serial.print("échec, rc=");
      Serial.print(client.state());
      Serial.println(" réessai dans 5s");
      delay(5000);
    }
  }
}

void publish_value(const char* suffix, float value) {
  char topic[100];
  char payload[20];
  snprintf(topic, sizeof(topic), "%s%s", mqtt_topic_prefix, suffix);
  snprintf(payload, sizeof(payload), "%.2f", value);
  client.publish(topic, payload, true); // retain = true
}

void setup() {
  Serial.begin(115200);
  Serial.println("\n=== Moniteur Énergie ESP32 ===");
  
  setup_wifi();
  client.setServer(mqtt_server, mqtt_port);
  
  // Configuration Home Assistant Auto-Discovery
  publish_ha_config();
}

void publish_ha_config() {
  // Configuration pour l'intégration automatique dans Home Assistant
  String config_topic = "homeassistant/sensor/energy_meter/power/config";
  String payload = "{"
    "\"name\": \"Consommation Maison\","
    "\"unit_of_measurement\": \"W\","
    "\"device_class\": \"power\","
    "\"state_topic\": \"homeassistant/sensor/energy_meter/power\","
    "\"unique_id\": \"esp32_energy_power\","
    "\"state_class\": \"measurement\""
  "}";
  client.publish(config_topic.c_str(), payload.c_str(), true);
}

void loop() {
  if (!client.connected()) reconnect_mqtt();
  client.loop();
  
  unsigned long now = millis();
  if (now - lastPublish > publishInterval) {
    lastPublish = now;
    
    float voltage = pzem.voltage();
    float current = pzem.current();
    float power = pzem.power();
    float energy = pzem.energy();
    float frequency = pzem.pf(); // Power Factor
    
    if (!isnan(voltage)) publish_value("voltage", voltage);
    if (!isnan(current)) publish_value("current", current);
    if (!isnan(power))   publish_value("power", power);
    if (!isnan(energy))  publish_value("energy", energy);
    if (!isnan(frequency)) publish_value("power_factor", frequency);
    
    Serial.printf("V: %.1fV | I: %.2fA | P: %.1fW | E: %.2fkWh\n",
                  voltage, current, power, energy);
  }
}
✅ Fonctionnalité clé : Home Assistant Auto-Discovery
La fonction publish_ha_config() envoie une configuration MQTT spéciale qui permet à Home Assistant de détecter automatiquement votre capteur et de créer les entités sans aucune configuration YAML manuelle. Magique !

🏠 5. Intégration dans Home Assistant

Étape 1 : Installer le Broker MQTT

Dans Home Assistant, allez dans Paramètres → Modules Complémentaires → Boutique de Modules et installez Mosquitto Broker.

Étape 2 : Créer un Utilisateur MQTT

Allez dans Paramètres → Personnes → Utilisateurs et créez un utilisateur dédié "mqtt_esp32" avec un mot de passe fort. Notez ces identifiants pour le code ESP32.

Étape 3 : Créer un Dashboard Puissant

Voici un exemple de carte Lovelace pour visualiser vos données :

type: vertical-stack
cards:
  - type: entities
    title: Consommation Instantanée
    entities:
      - entity: sensor.consommation_maison
        name: Puissance Actuelle
      - entity: sensor.tension_reseau
        name: Tension
      - entity: sensor.courant_total
        name: Courant
  
  - type: history-graph
    title: Consommation 24h
    entities:
      - sensor.consommation_maison
    hours_to_show: 24
  
  - type: energy-distribution
    # Carte officielle Énergie de HA

🤖 6. Automatisations Puissantes

Voici 3 automatisations qui transforment votre moniteur en véritable assistant énergétique :

🚨 Alerte Dépassement de Puissance

Scénario : Si la consommation dépasse 6 kW (risque de disjonction), envoyer une notification et couper le chauffe-eau temporairement.

🌙 Mode Nuit Automatique

Scénario : Entre 22h et 6h, si la consommation dépasse 500W (hors chauffage), envoyer une alerte "appareil oublié allumé".

💰 Rapport Hebdomadaire

Scénario : Tous les dimanches à 20h, envoyer un résumé Telegram avec la consommation de la semaine et l'estimation de la facture.

🚀 7. Améliorations Futures (Niveau Avancé)

  • 🔋 Monitoring Solaire : Ajoutez un 2ème PZEM sur l'entrée de vos panneaux photovoltaïques pour calculer votre autoconsommation en temps réel.
  • 📊 Écran Local : Ajoutez un écran OLED 0.96" I2C pour afficher les données sans ouvrir Home Assistant.
  • ⚡ Détection d'Appareils (NILM) : Utilisez l'IA pour reconnaître la signature électrique de chaque appareil (frigo, TV, machine à laver) sans capteur supplémentaire.
  • 🔔 Notification Telegram : Envoyez des alertes sur votre téléphone en cas de consommation anormale.
  • 📈 Export InfluxDB : Pour des graphiques encore plus poussés sur plusieurs années.

🔗 Pour Aller Plus Loin sur TechFix Hub

Ce projet s'inscrit dans une série d'articles sur l'IoT et la domotique. Découvrez nos autres guides :

✅ Conclusion

Avec moins de 30€ de composants et quelques heures de travail, vous disposez maintenant d'un système de monitoring énergétique plus puissant que les solutions commerciales à 200€. Vous avez le contrôle total sur vos données, la liberté d'ajouter des automatisations, et la satisfaction du fait-maison.

Dans un prochain article, nous verrons comment ajouter la reconnaissance automatique d'appareils par IA (NILM) pour identifier quel appareil consomme quoi, sans capteur supplémentaire. Restez connectés !

🛠️ Prêt à construire votre moniteur ?

Vous avez des questions sur le câblage, la configuration MQTT, ou les automatisations Home Assistant ? Posez votre question dans les commentaires ci-dessous, la communauté TechFix Hub se fera un plaisir de vous aider !

Mots-clés : ESP32 Energy Monitor PZEM-004T V3 Home Assistant MQTT IoT Domotique DIY Énergie Solaire

Bottom Ad [Post Page]