Communication tool for smart electricity meters — RS232 / TCP/IP, CRC-16 Modbus integrity, real-time supervision.
Industrial IoT · Serial Communication · CRC Integrity · Tkinter GUI · Smart Metering · Test Automation
Interface connectée en TCP/IP — trames du compteur avec validation CRC-16 Modbus (vert = valide, rouge = corrompue).
Stage d'un mois chez SAGEMCOM Tunisie (Ben Arous, juillet 2025), dans le département test et métrologie. SAGEMCOM fabrique des compteurs électriques intelligents mono et triphasés certifiés MID/IEC/DLMS-COSEM, déployés en Europe, Afrique et Moyen-Orient.
Le stage avait deux dimensions. La première : observer la ligne de production — de la zone CMS jusqu'aux tests de calibration métrologique — pour comprendre comment un compteur passe de circuit imprimé nu à produit certifié. La deuxième : développer un outil logiciel concret, utilisé par les ingénieurs de test pour dialoguer avec ces compteurs.
One month watching how smart meters are built and certified on an industrial line, then building the software that connects them to client systems.
La zone CMS, c'est là où les cartes électroniques prennent forme. Sérigraphie de la pâte à braser, placement automatique des composants par des machines haute cadence, passage au four de refusion, soudure à la vague pour les composants traversants, puis contrôle ICT — test électrique automatisé qui détecte les défauts de soudure, courts-circuits et composants mal positionnés avant que la carte n'aille plus loin.
Ce qui m'a marqué : la précision du processus et la vitesse à laquelle les cartes passent d'un poste à l'autre. Chaque étape a ses propres critères de rejet, et rien ne passe en zone intégration sans avoir été validé.
C'est là que le compteur devient un produit. Les cartes assemblées passent par le test vision (LCD et conformité visuelle), le test diélectrique Hipot (haute tension pour vérifier l'isolation électrique), le test fonctionnel (ports de communication, relais, impulsions), puis la calibration métrologique — le test clé, où la précision de mesure est validée sous charge calibrée selon la directive MID 2014/32/EU. Ensuite le poste laser grave le numéro de série, et des dispositifs poka-yoké bloquent toute erreur humaine jusqu'au test final.
Sur le banc, les ingénieurs utilisaient plusieurs outils séparés pour communiquer avec les compteurs : un pour le port série, un autre pour le réseau. Passer de l'un à l'autre ralentissait les validations et la vérification des CRC se faisait manuellement. L'objectif était simple : un seul outil, les deux transports, la vérification automatique.
The goal was simple: one tool, two transports, automatic integrity check.
Connexion. RS232 via pyserial (détection automatique des ports COM, baudrate configurable) ou TCP/IP (socket, IP et port configurables). Les deux modes partagent la même logique de réception — les données arrivent dans un thread de fond, passent dans une queue, et l'interface se met à jour toutes les 500 ms sans jamais bloquer.
Intégrité. Chaque trame reçue est vérifiée par CRC-16 Modbus. Si le CRC est bon, la ligne s'affiche en vert. Si le CRC est mauvais, la ligne s'affiche en rouge — et la session continue. Une trame corrompue est un événement à enregistrer, pas une raison de planter. À l'envoi, le CRC est calculé et ajouté automatiquement.
Interface. Tkinter, sobre. Sélecteur de mode, panneaux de paramètres, log coloré des trames, section d'envoi par fichier batch ou saisie manuelle, barre de progression, zone de paramètres en temps réel.
def compute_crc16(data: bytes) -> int:
crc = 0x0000
for b in data:
crc ^= b
for _ in range(8):
if crc & 1:
crc = (crc >> 1) ^ 0xA001
else:
crc >>= 1
return crcPolynôme standard Modbus (0xA001) — utilisé dans les protocoles de communication des compteurs industriels pour garantir l'intégrité des échanges.
V1,I1,V2,I2,V3,I3,kWh,kVAR,freq,index,lot,PF,THD,SN,timestamp,ref,CRC
230.1,5.123,229.8,5.100,230.0,5.110,3500,200,3550,12345,678,50.0,0.98,SGM123456,43298,12345
Le dernier champ est le CRC-16 Modbus calculé sur tous les champs précédents en UTF-8.
Tests unitaires et d'intégration réalisés avec Robot Framework — connexion, logique CRC, parsing, scénarios d'erreur (trame mal formée, coupure), transitions d'état de l'interface. Tests également menés sur des compteurs physiques sur la ligne de production.
Les suites de tests et leurs résultats sont confidentiels et ne sont pas inclus dans ce dépôt.
Unit and integration tests with Robot Framework. Real hardware tests on physical meters on the SAGEMCOM production line. Test suites are confidential.
pip install -r requirements.txt
# Lancer le simulateur local
python server_sim.py
# Lancer l'interface
python client.pyMode TCP/IP → 127.0.0.1:15000 → Connecter.
Mode Série → sélectionner le port COM → régler le baudrate → Connecter.
Les commandes peuvent être envoyées depuis un fichier batch (commands.txt) ou saisies manuellement. Le CRC est ajouté automatiquement.
smart-meter-interface/
├── client.py # Application principale
├── server_sim.py # Simulateur TCP local
├── commands.txt # Exemple de batch
├── requirements.txt
├── docs/images/
└── README.md
Ce dépôt contient uniquement l'interface de communication. Les outils internes SAGEMCOM, le firmware des compteurs, les spécifications propriétaires des trames, les données de calibration et les suites de tests ne sont pas inclus.
This repository contains only the standalone communication interface. Internal tooling, firmware, proprietary specifications, calibration data, and test suites are not included.