Skip to content

PiggyMeter

PiggyMeter attaché au compteur électrique

Cet article vous montre comment construire un appareil pour lire à distance les données d'un compteur électrique (ou de tout appareil avec une interface compatible).

Il utilise des composants largement disponibles, des logiciels open source et est compatible avec les logiciels de domotique populaires, Home Assistant.

INFO

Un kit pour assembler un appareil fonctionnel est disponible à l'achat sur Tindie : PiggyMeter KIT.

Caractéristiques

  • Prend en charge les protocoles basés sur IEC62056-21
  • Prend en charge le protocole SML passif en utilisant le composant natif ESPHome
  • Plusieurs compteurs : énergie, eau, thermique, et plus
  • Utilise ESPHome open source
  • Communication sans fil via Wi-Fi
  • S'intègre avec Home Assistant
  • Serveur web optionnel
  • Matériel bon marché ESP32-C3 ou ESP32-S2
  • Conception de boîtier disponible pour impression 3D

Il prend en charge les compteurs compatibles avec la norme IEC62056-21 qui fonctionne en modes A, B, C, D (mais pas E). Pour plus de détails, voir composant IEC 62056-21.

Notez qu'il existe de nombreuses variations du protocole. Bien que le compteur puisse utiliser la même interface optique, le format de la trame de données pourrait être différent.

De plus, il prend en charge les compteurs qui utilisent le protocole SML (Smart Message Language) en utilisant le composant SML d'ESPHome.

WARNING

Les normes DLMS, M-Bus et ANSI C12.18/19 ne sont pas prises en charge par le logiciel.

Comment vérifier si le compteur est pris en charge ?

Le terme IEC 62056-21 est utilisé pour plusieurs protocoles (avec la même couche matérielle mais un encodage de données différent). L'appareil prend en charge les compteurs qui fournissent des données encodées en ASCII, quelque chose comme ceci :

console
1-0:15.8.1(00000009999.567*kWh)
1-0:15.8.2(00000000000.000*kWh)
1-0:15.8.3(00000000000.000*kWh)
1-0:15.8.4(00000000000.000*kWh)

Le compteur doit être compatible avec la Norme Internationale IEC 62056-21:2002.

Anneau métallique caractéristique et interface optique au milieu.

Pour le protocole SML, recherchez le logo SML sur le compteur ou consultez le manuel. Le composant ESPHome ne prend en charge que le mode passif, il n'envoie aucune requête au compteur. Dans ce mode, le compteur envoie des données toutes les quelques secondes.

Compteurs signalés comme fonctionnant avec PiggyMeter

La liste est créée sur la base des rapports des utilisateurs. Aucune garantie qu'elle soit exacte.

INFO

N'hésitez pas à envoyer un email à info@aquaticus.info si vous connaissez un compteur qui fonctionne avec PiggyMeter mais qui n'est pas listé ci-dessus.

Logiciel alternatif

Le matériel PiggyMeter peut fonctionner avec de nombreux compteurs différents utilisant une interface optique. Cependant, le logiciel ne prend actuellement en charge qu'une seule norme, limitant pratiquement la gamme de compteurs pris en charge.

Vous pouvez essayer d'utiliser un logiciel alternatif qui pourrait ajouter la prise en charge de différents compteurs. Il est important de noter qu'il n'y a aucune garantie qu'il fonctionnera parfaitement avec PiggyMeter. Pour obtenir de l'aide, veuillez contacter l'auteur original.

Liste des matériaux

PièceDescription
CPUWemos C3 ou S2 Mini https://www.wemos.cc/en/latest/
Interface optiquePiggyMeter PCB https://www.tindie.com/products/32082/
2×broche 1×4Pas de 2,54 mm ; la partie en plastique doit avoir une hauteur de 8,5 mm
Aimant annulaire⌀30/⌀15×2mm
BoîtierBoîtier imprimé en 3D https://github.com/aquaticus/piggymeter_case
RondelleRondelle imprimée en 3D https://github.com/aquaticus/piggymeter_case
CouvercleCouvercle arrière imprimé en 3D https://github.com/aquaticus/piggymeter_case

Carte CPU

CPU

Vous avez besoin d'une carte avec une puce Espressif installée et un brochage compatible Wemos/Lolin. Le facteur clé est l'emplacement de 4 broches : GND, VCC, TX et RX.

La taille du circuit imprimé est également critique. Le boîtier imprimé en 3D correspond uniquement aux cartes (ou leurs clones) listées ci-dessous :

  • Lolin/Wemos S2 mini
  • Lolin/Wemos C3 mini

En théorie, vous pouvez utiliser n'importe quelle autre carte CPU avec un brochage compatible, notamment l'ESP32 et l'ESP8266 D1 mini. Mais dans ce cas, vous devez concevoir votre propre boîtier et modifier un peu les fichiers de configuration (type de carte et broches du port série).

Interface optique

Interface optique

Un compteur utilise une interface optique compatible avec la norme IEC62056-21, communiquant avec une sonde via une diode infrarouge et un phototransistor.

L'interface est connectée à l'un des ports série de la carte CPU. Bien sûr, vous avez également besoin de VCC et GND.

Interface optique et carte CPU

Soudez 2 broches d'en-tête. Vous devez utiliser une broche d'en-tête de 8,5 mm de hauteur. La conception du boîtier s'adapte à cette hauteur, garantissant un ajustement correct. Si la hauteur dépasse cette dimension, fermer le couvercle peut poser des problèmes.

INFO

Vous pouvez acheter une interface assemblée sur Tindie. Acheter sur Tindie

Boîtier

Téléchargez les fichiers pour imprimante 3D depuis https://github.com/aquaticus/piggymeter_case. Utilisez la version V5 pour le dernier design.

Boîtier

Le boîtier se compose de trois composants :

  • le boîtier principal,
  • une rondelle,
  • et un couvercle.

Il existe trois fichiers STL distincts disponibles pour chaque composant, ou alternativement, un seul fichier 3fm incorporant les trois éléments.

Le boîtier répond aux exigences de la norme IEC62056-21 pour la sonde optique.

INFO

Le boîtier a un petit loquet. Pour le fermer ou l'ouvrir, vous devez utiliser une certaine force.

Paramètres d'impression 3D recommandés

  • Matériau : PLA
  • Couche : 0,2 mm
  • Pas de support

3d print

Assemblage

Assembly

Disposez les composants dans le boîtier dans cet ordre :

  1. Aimant
  2. Rondelle
  3. Interface optique
  4. Carte CPU
  5. Couvercle

INFO

Regardez l'assemblage sur Youtube https://youtu.be/fM2LyJJWQHA?si=dyY4r7zMSMfbwQtm

Programmation pour compteurs IEC62056-21

Commencez par installer ESPHome.

En fonction de votre carte CPU, sélectionnez le fichier de configuration approprié. De plus, effectuez des ajustements manuels de certains paramètres, tels que le mot de passe WiFi.

Obtenir les fichiers de configuration

Clonez le dépôt git avec les fichiers de configuration :

bash
git clone https://github.com/aquaticus/piggymeter_esphome_yaml

Créer un fichier secrets.yaml

Créez un fichier secrets.yaml dans le répertoire où se trouvent les fichiers de configuration. Ce fichier contiendra le nom du réseau WiFi et son mot de passe correspondant.

yaml
# Home Assistant API encryption key
api_key: my_home_assistant_encryption_key

# OTA password
ota_pass: my_ota_password

# WiFi network name
wifi_ssid: my_network

# WiFi network password
wifi_pass: my_password

Modifier la configuration du projet

La configuration est pré-configurée avec des points de données standard pour un compteur électrique.

N'hésitez pas à ajuster la liste, surtout si votre compteur diffère du type de compteur électrique. Consultez le composant IEC 62056-21 pour plus d'informations.

yaml
sensor:
   - platform: iec62056
       obis: 1-0:15.8.0
       name: Absolute active energy total
       unit_of_measurement: kWh
       accuracy_decimals: 3
       device_class: energy
       state_class: total_increasing

Construire et flasher le firmware

bash
esphome run piggymeter-s2-iec62056-21.yaml

La commande ci-dessus flashe le firmware et affiche la sortie du moniteur. Par défaut, l'interface lit les données d'un compteur toutes les 1 minute.

TIP

Pour la carte ESP32-S2, vous devez appuyer sur le bouton BOOT puis sur le bouton RESET sur le PCB pour entrer en mode programmation. De plus, vous pouvez voir un message d'erreur après le flashage -- ignorez-le simplement.

log
[12:21:27][D][iec62056.component:232]: Connection start
[12:21:27][D][binary_sensor:036]: 'Meter Connection Status': Sending state ON
[12:21:28][D][switch:013]: 'Internal LED' Turning ON.
[12:21:28][D][switch:056]: 'Internal LED': Sending state ON
[12:21:28][D][iec62056.component:174]: Meter identification: '/XXX6\2YYYYY'
[12:21:28][D][iec62056.component:407]: Meter reported protocol: C
[12:21:28][D][iec62056.component:410]: Meter reported max baud rate: 19200 bps ('6')
[12:21:28][D][iec62056.component:438]: Using negotiated baud rate 9600 bps.
[12:21:29][D][iec62056.component:470]: Switching to new baud rate 9600 bps ('5')
[12:21:29][D][iec62056.component:482]: Meter started readout transmission
[12:21:29][D][iec62056.component:524]: Data: 0-0:C.1.0(12345678)
[12:21:29][D][iec62056.component:524]: Data: 0-0:1.0.0(2000-01-01 20:10:30)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.0(00000001000.657*kWh)
[12:21:29][D][iec62056.component:620]: Set sensor 'Absolute active energy total' for OBIS '1-0:15.8.0'. Value: 1000.656982
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.1(00000002000.657*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.2(00000003000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.3(00000004000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.4(00000005000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:01)

Programmation pour compteurs SML

Les premières étapes sont identiques à celles pour les compteurs IEC62056-21.

Après avoir cloné le dépôt et créé le fichier secrets.yaml, utilisez les fichiers de configuration pour les compteurs SML.

bash
esphome run piggymeter-s2-sml.yaml

Il est probable que vous deviez ajuster le fichier de configuration pour correspondre aux points de données transmis par le compteur. Il est également utile de vérifier le débit en bauds et les bits de données du port série.

Home Assistant

L'appareil devrait être automatiquement détecté par Home Assistant. Sinon, vous pouvez l'ajouter manuellement en cliquant sur Ajouter une intégration et en sélectionnant l'intégration ESPHome.

PiggyMeter expose trois groupes d'éléments :

Déclencheur de Lecture

Ce déclencheur force PiggyMeter à lire les données d'un compteur en dehors du programme.

État de Connexion du Compteur

Le statut $1 indique que l'interface échange des données avec le compteur.

Connection Status

Capteurs

Voici une liste de capteurs définis dans le fichier de configuration.

Sensors

Mode Autonome

PiggyMeter peut fonctionner indépendamment de Home Assistant, offrant la capacité d'activer un serveur web. Ce serveur affiche les lectures de données directement dans un navigateur web et offre une API REST simple.

Pour activer le serveur web, incluez les lignes suivantes dans le fichier de configuration :

yaml
web_server:
  port: 80

Plus d'informations sur le serveur web peuvent être trouvées dans la documentation ESPHome.

Modifications

Par défaut, l'appareil récupère des données toutes les minutes, et la LED interne est allumée pendant la transmission.

Seul un nombre limité de codes OBIS est défini dans le fichier yaml de configuration. Il est fortement recommandé de modifier la liste des capteurs pour correspondre à un compteur.

Bien que les codes OBIS soient standardisés, les compteurs peuvent transmettre un nombre variable de codes. Pour vérifier les codes pris en charge par votre compteur, activez le journal DEBUG pour le composant IEC62056-21 et analysez la sortie du journal.

Diagnostic et Problèmes IEC62056-21

Cette section est uniquement pour les compteurs IEC62056-21 (pas SML).

Après avoir flashé le firmware, l'appareil tentera de lire les données d'un compteur après environ 15 secondes. Si la transmission échoue, il réessaiera deux fois toutes les 15 secondes.

Vous pouvez ajuster ces paramètres en configurant les jetons appropriés. Consultez la documentation du composant IEC62056-21 pour plus de détails.

Il est conseillé de passer le niveau de journalisation par défaut de DEBUG à INFO une fois que le bon fonctionnement de l'appareil a été confirmé.

Voici les problèmes courants et leurs solutions respectives.

TIP

Assurez-vous que la sonde est solidement fixée au compteur, en alignant la flèche sur la sonde vers le haut.

Pas de transmission du compteur

log
[E][iec62056.component:268]: No transmission from meter.

Cela peut indiquer :

  • Le plus souvent, l'interface n'est pas attachée à un compteur.
  • L'interface n'est pas correctement alignée avec l'interface optique d'un compteur.
  • Le compteur n'est pas compatible.

Assurez-vous que l'interface optique est positionnée parallèlement à la surface avant du boîtier. Si l'appareil fonctionne lorsqu'il est attaché au compteur sans le boîtier, mais ne fonctionne pas après avoir été inséré dans le boîtier, cela pourrait être le problème. Dans ce cas, vous pouvez également envisager d'agrandir les deux trous dans le boîtier.

Tous les capteurs n'ont pas reçu de données

log
[E][iec62056.component:644]: Not all sensors received data from the meter. The first one: OBIS '1-0:72.7.0'. Verify sensor is defined with valid OBIS code.

Cela peut indiquer deux problèmes :

  • Le compteur ne prend pas en charge le code OBIS que vous avez configuré dans le fichier yaml. Supprimez simplement le capteur avec le code OBIS spécifique de la configuration.
  • Il pourrait y avoir une faute de frappe ou une définition incorrecte du code OBIS pour le capteur dans le fichier de configuration. Vérifiez le code.

Le compteur transmet automatiquement des données mais l'appareil ne reçoit rien

Cela indique que le compteur prend en charge le mode D de l'IEC62056-21. Dans ce mode, le compteur transmet automatiquement des données toutes les quelques secondes sans nécessiter de demande spécifique. Assurez-vous que le port série est configuré pour s'aligner avec le format de transmission du compteur, généralement réglé sur 9600 7E1 ou 2400 7E1 dans la plupart des cas.

yaml
# 9600bps for mode D
uart:
    rx_pin: GPIO21
    tx_pin: GPIO22
    baud_rate: 9600
    data_bits: 7
    parity: EVEN
    stop_bits: 1

En outre, le Mode D doit être activé manuellement en définissant mode_d=True dans la configuration de la plateforme.

yaml
# Activer le mode D
iec62056:
  mode_d: True

Erreurs de somme de contrôle

log
[E][iec62056.component:504]: Échec de la vérification BCC. Attendu 0x6b, obtenu 0x14

Cette erreur suggère des problèmes de transmission.

Généralement, la vitesse de transmission est excessivement élevée. Réduire le débit en bauds maximal devrait aider.

yaml
iec62056:
  baud_rate_max : 4800

Identification du compteur reçue mais pas de transmission

log
[D][iec62056.component:174]: Identification du compteur : '/XXX6\2YYYYYYY'
[D][iec62056.component:252]: Le compteur indique le mode E, qui n'est pas pris en charge. Tentative du mode C. Cela fonctionnera pour les compteurs prenant en charge à la fois le mode E et C.
[E][iec62056.component:268]: Pas de transmission du compteur.

La chaîne d'identification du compteur est reçue avec succès, mais il n'y a pas de transmission de données. De plus, le journal affiche un message indiquant, "Le compteur indique le mode E."

Le compteur fonctionne exclusivement en mode E, ce que PiggyMeter ne prend pas en charge. Par conséquent, le logiciel tente de passer le compteur en mode C, mais cette tentative échoue.

Si un compteur prend en charge à la fois le mode E et C, le système devrait fonctionner correctement.