Wifinfo
Module Wi-Fi de téléinformation
Install / Use
/learn @rene-d/WifinfoREADME
WifInfo
WifInfo est un module de consignation de la téléinformation des compteurs électriques 🇫🇷 avec serveur web embarqué.
Introduction
Ce projet est la fusion de développements réalisés en vue du remplacement d'un eco-devices sur base de Espressif 8266EX et de la une réécriture quasi complète - sauf la partie interface web - du projet homonyme de C-H. Hallard LibTeleinfo avec des modifications notamment de olileger et Doume.
- Meilleure séparation des fonctions dans des fichiers sources différents
- Homogénéisation du nommage, nettoyage du code source
- Minimisation des allocations mémoire (nouvelle librairie teleinfo)
- Server-sent event (SSE) pour les mises à jour des index
- Notifications HTTP sur changements HC/HP et dépasssement de seuils ou ADPS
- Compression et minimisation de la partie web avant écriture du filesystem (
data_src⇒dataau moment du build) - Client en liaison série pour mise au point avec SimpleCLI
- Tests unitaires sur PC et couverture
- Analyse statique de code
- Client Python de simulation cli.py sur base de
miniterm.pyde pyserial - Serveur Python Flask pour développement de la partie web
- Exemple de stack InfluxDB + Grafana pour la visualisation des données (avec sonde Python et client SSE)
- Utilisation de PlatformIO comme environnement de développement
Les notifications jeedom/emoncms ne sont pas testées.
Références
Documentation Enedis sur la téléinformation client pour les compteurs électroniques et pour les compteurs Linky.
Module PiTInfo et explications pourquoi le montage avec uniquement optocoupleur et résistances ne suffit pas avec un esp8266.
Interface web
Affichage des jauges PAPP, IINST et index HC/HP (en temps réel)

Affichage de données de téléinformation

Configuration des requêtes HTTP
Les requêtes HTTP sont de type GET.
Il y a 4 déclenchements possibles:
- périodique
- lors d'un changement de période tarifaire (exemple passage de HP à HC)
- lors de dépassement d'un seuil haut ou retour à un seuil bas (en VA, test avec la valeur PAPP)
- présence de l'étiquette ADPS (Avertissement de Dépassement de Puissance Souscrite)
L'URI est constituée avec les étiquettes de téléinformation (ADCO, HCHC, HCHP, PTEC, PAPP, IINST, etc.) ainsi que des étiquettes internes:
- date : date au format ISO8601 (ex: 2020-02-02T12:12:00+0100)
- timestamp : temps en secondes (Unix epoch)
- chipid : l'identifiant de l'esp8266 sous forme hexadécimale (0x0011AA)
- type : type de déclenchement (
MAJ: périodique,PTEC: changement tarif,HAUT: seuil haut,BAS: retour seuil bas,ADPS: dépassement,NORM: fin dépassement)
La syntaxe pour utiliser les étiquettes est au choix:
$NOM~NOM~
Exemple: /update.php?ptec=$PTEC&conso=~HCHC~+~HCHP~&id=$chipid ⇒ /update.php?ptec=HP&conso=4000+3000&id=0x0011AA
Données JSON
- http://wifinfo/json : téléinformation sous forme de dictionnaire JSON
- http://wifinfo/tinfo.json : téléinformation sous forme de tableau JSON, utilisé par l'onglet Téléinformation de l'interface
- http://wifinfo/system.json : état du système, utilisé par l'onglet Système de l'interface
- http://wifinfo/config.json : état du système, utilisé par l'onglet Configuration de l'interface
- http://wifinfo/wifiscan.json : liste des réseaux Wi-Fi, utilisé par l'onglet Configuration de l'interface
Autres requêtes
- http://wifinfo/reset : permet de redémarrer le module
- http://wifinfo/version : retourne la version (tag git) du système de fichiers
Notifications SSE
Les événements SSE sont accessibles via deux URL: http://wifinfo/tic ou http://wifinfo/sse/json, avec une limitiation à deux clients simultatnés.
La donnée est la trame de téléinformation au format JSON, comme http://wifinfo/json.
Elle est envoyée à chaque réception de trame depuis le compteur.
Installation
Depuis la version 1.6, le projet utilise un autre système de fichiers que SPIFFS (code trop gourmand ~30Ko, et rajoute beaucoup d'overhead dans le filesystem). Les tailles du firmware et du filesystem empêchaient les mises à jour des modules avec 1Mo de mémoire flash.
Le projet automatiquement est compilé pour deux boards (Releases):
- esp01_1m : ESP-01S avec 1 Mo de mémoire flash et LED sur GPIO2, dont 192 Ko pour le filesystem ERFS
- esp12e : ESP-12E (type NodeMCU 1.0) ou ESP-07 avec 4 Mo de flash, dont 1 Mo pour le filesystem ERFS
La programmation d'un module requiert des outils. esptool.py est l'outil officiel. L'IDE Arduino permet également de le faire.
Veuillez noter que chaque firmware est compilé pour une board précise, avec un plan d'adressage et une taille mémoire précises. Pour téléverser le programme avec l'IDE Arduino, il faut veiller à choisir la bonne carte et la bonne "Flash Size".
Programmation module 1 Mo :
esptool.py write_flash 0 firmware.bin
esptool.py write_flash 0xcb000 erfs.bin
Programmation module 4 Mo :
esptool.py write_flash 0 firmware.bin
esptool.py write_flash 0x300000 erfs.bin
Compilation
Le projet est conçu pour PlatformIO, en conjonction avec Visual Studio Code et son extension PlatformIO.
L'IDE d'Arduino peut également être utilisé.
La page HTML est compressée avec html-minifier et gzip.
Options de compilation
ENABLE_DEBUG: active la sortie sur le port série TX et vitesse 115200. Non utilisable avec un compteur, il faut utiliser le client de test pour injecter des trames.ENABLE_CLI: active les commandes par port série (TABouESC)ENABLE_LED: active l'utilisation de LED pour les cartes qui en ont une (esp01s, esp12e)ENABLE_OTA: rajoute le code pour les mises à jour OTA (non testé)ENABLE_CPULOAD: mesure de manière empirique la charge CPUWIFINFO_FS: filesystem à utiliser (SPIFFS ou ERFS)
Nota: Sans l'option ENABLE_DEBUG, le port série est réglé à 1200 7E1 en RX uniquement. Il y a suffisamment d'outils de mise au point pour ne pas à devoir tester avec un compteur ou un autre microcontrôleur qui simule la téléinformation.
Génération du filesystem ERFS
Le filesystem est automatiquement construit par PlatformIO - même s'il s'appelle spiffs.bin, PlatformIO ne permet pas d'en changer le nom.
Les différentes étapes peuvent être reproduites indépendamment.
Le répertoire data est préparé à l'aide du script prep_data_folder.py (nécessite python3, gzip, html-minifier) :
python3 prep_data_folder.py
Le fichier binaire est assemblé par le script mkerfs32.py est l'outil utilisé.
# version 1Mo flash dont 192Ko de filesystem
python3 mkerfs32.py -c data -s 192k erfs.bin
# version 4Mo flash dont 1Mo de filesystem
python3 mkerfs32.py -c data -s 1000k erfs.bin
PlatformtIO
Avec PlatformIO (soit ligne de commandes, soit extension Visual Studio Code):
platformio run -e <carte> -t uploadfs
platformio run -e <carte> -t upload
Cf. platformio.ini pour l'environnement <carte>.
IDE Arduino
Cf. les nombreux tutos pour l'utilisation d'esp8266-arduino. Il sera aussi nécessaire de rajouter la librairie SimpleCLI.
Le script mkarduinosrc.py permet l'amalgamation du code source en un seul wifinfo.ino.
Ajout SimpleCLI:

Sélection de Flash Size pour module 1 Mo:

Client de test/mise au point
cli.py est un terminal série qui permet d'injecter de la téléinformation
pip3 install pyserial click
./cli.py
Pour activer le mode commande (si compilé avec l'option ENABLE_CLI), il faut taper <TAB> ou <ESC>
Related Skills
node-connect
343.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
90.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
343.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
343.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
