Réaliser un WifInfo

Citation

est-ce que les infos evolues sur ton wifinfo ?
faudrait que tu partage des screenshots de tes paramétrages maintenant

oui, les infos évolues

et tes configs wifinfo et equipement teleinfo ?


tu peux renseigner le numero ADCO dans le champ identifiant compteur ?
Pas d’espace dans la clé API (en fin de clé) ?
mets ton plugin teleinfo en mode debug pour regarder ce qu’il se passe ?

C’est bon, j’ai des data, j’ai renseigné le numéro ADCO, puis activé le débug et j’ai vu que j’avais des infos qui remontaient dans le debug.
J’avais pourtant renseigner le numéro ADCO lors d’un autre essais et c’était nok, mais il y avais surement une autre info mal renseignée à ce moment la.

Merci à tous :wink:

1 « J'aime »

Bonjour à tous,

Je voudrais mettre mon wifinfo à jour pour une prise en charge du mode « standard » du Linky et au passage voir si on peut avoir un firmware qui prend en charge les clé API 64 bits
NB : J’ai pas du tout envie de passer par du MQTT perso je vois pas l’intérêt de ce protocole pour mon installation.
J’ai téléchargé la dernière version (1.1.5) de la librairie arduino « LibTéléinfo » de Charles Hallard qui contient en exemple le code source du Wifinfo GitHub - hallard/LibTeleinfo: Librairie Universelle Teleinformation (TIC)

Contre toute attente, avec la dernière version de l’IDE Arduino (2.0.4) et toutes les librairies mise à jour, ça compile directement sans la moindre erreur.
J’ai essayé de modifier le fichier config.h pour passer la valeur de #define CFG_JDOM_APIKEY_SIZE (ligne 40) de 48 d’origine à 64 et idem, ça compile directement ainsi sans erreur.
Mais j’ai pas encore testé de télécharger le firmware pour voir ce que ça donnait réellement.

La question c’est : est-ce que quelqu’un à déjà fait cette mise à jour ?

@tibo.percin la version modifiée que tu as mis à dispo sur ton drive google (post de janvier 2022) est basée sur quelle source ? quelle version de librairie ? (parce que si tu as déjà fait le boulot, je vais pas me fatiguer à réinventer la roue)

EDIT : Pardon, j’aurais du reprendre la discussion du début. Ma source du wifinfo n’est pas la bonne… Faut que je recommence la manip avec la version de TheGressier

J’ai essayé de complier la version déjà modifiée avec clé 64 bits par tibo.percin qui a proposé en janvier 2022 mais impossible d’aller jusqu’au bout.
Aussi bien avec l’IDE Arduino qu’avec VScode + platformio j’ai plusieurs fois la même erreur sur un pointeur de structure, du genre :

src\webserver.cpp:735:17: error: ‹ ValueList › {aka ‹ struct _ValueList ›} has no member named ‹ free ›

et c’est toujours pour ce genre de code :
if( ! me->free ) {
Je suppose que « free » est une instruction de class du même genre que « next » qu à été supprimée depuis l’écriture de ce code.
Si des pro du C++ pouvaient m’en dire plus, et éventuellement par quoi remplacer cette instruction ?
merci d’avance.

Salut Forhorse,
Pour ma part j’ai utilisé la dernière version (1.0.7)
J’ai modifié légèrement le programme pour pouvoir passer la sécurité des 64 octets.
Malheureusement c’est assez instable, reboot automatique du wemos au bout de 5min.
Je n’ai pas cherché plus loin puisque @Phpvarious a proposé un petit scénario permettant de générer une clé 32 octets et franchement c’est beaucoup mieux !
La différence par rapport à MQTT, c’est sur la partie connexion wifi.
De ce que j’ai remarqué, en cas de coupure de courant, à la remise sous tension l’ESP démarre immédiatement et essaie de se connecter au wifi. Par contre le routeur est beaucoup plus lent, ce qui fait que l’ESP ne se connecte.
Solution, une fois que la box est démarrée, faire un reboot de l’ESP.
En espérant avoir pu t’apporter des éléments de réponse :slight_smile:

Merci pour ta réponse.
Cependant ça ne m’aide pas tellement…

Je voudrais essayer de « bricoler » une version de wifinfo qui corrige les problèmes actuelles… (clé 64 bits et gestion du wifi)
J’ai laissé tombé ma tentative de la modification de la version 1.0.7, je suis trop mauvais en C++ pour trouver une solution cette histoire de « me->free »… ça devait être dans une ancienne version de la librairie téléinfo que je n’ai pas retrouvé.

Actuellement je suis parti de la version 1.6.1 de « rene-d » (GitHub - rene-d/wifinfo: Module Wi-Fi de téléinformation) qui je l’espère est plus stable et a une meilleur gestion du wifi.
Le problème de cette version c’est quelle n’a jamais fonctionné avec Jeedom, mais je pense avoir trouvé le problème : les données sont passé à l’API « Téléinfo » en GET sauf que maintenant les données doivent être envoyée en « POST » donc j’espère être capable de faire la modification pour corriger ça.

Pour l’instant j’ai simplement réussit à compiler en local, ce qui m’a déjà fait perdre quelques cheveux parce que l’auteur utilisait un système de fichier « custom » (ERFS) mais ça ne voulais pas compiler pour une histoire de fonction déclarée 2 fois… bref, je suis passé, non sans mal, sur du LittleFS et ça compile et tourne a priori correctement sur l’ESP.

Il me reste donc encore toute la modif du code pour la partie Jeedom…
A suivre ?

J’ai réussit à modifier le firmware wifinfo 1.6.1 pour qu’il fonctionne avec Jeedom en v4, et j’ai aussi réussit a le faire fonctionner avec une clé API de 64 caractères.
Accessoirement j’ai aussi compris comment on fait pour choisir sur quel GPIO le signal TIC doit arriver et j’ai donc modifier ce firmware pour qu’il utilise la même broche que la version 1.0.7
Par contre cette version ne gère pas mieux le wifi, si le wifinfo démarre avant le point d’accès wifi sur lequel il est censé se connecter, il reste en mode AP et il faut donc le redémarrer pour qu’il « accroche » le réseau wifi.

Bon clairement je suis pas développeur pro, donc tout ça reste du « bricolage », mais pour l’instant ça fonctionne, configuré pour remonter les trames téléinfo toutes les 15 s, pour l’instant ça reste stable.
En gros, et de mémoire (je suis dessus depuis ce matin) en plus de ce que j’avais déjà évoqué jusqu’ici (principalement changement du système de fichier) voici les points que j’ai modifié :

  • Modification de l’interface web pour qu’elle accepte 64 caractères dans la configuration clé API Jeedom
  • Modification de « config.h » pour passer la taille de la clé jeedom à 64 bytes
  • Modification de « config.h » pour modifier le struct JeedomConfig afin que la somme de la longueur de toutes les variables qu’il contient reste à 256 bytes
  • Modification de « main.cpp » pour ajouter Serial.swap() à la suite de Serial.begin() afin que l’UART utilise les broches D7 et D8 à la place de TX et RX afin que le hardware soit identique à celui utilisé avec le firmware 1.0.7
  • Modification de « tic.cpp » fonction Jeedom_notif() correction de l’URL qui contenait « api » à la place de « apikey » et qui du coup faisait que Jeedom retournait une erreur 403, modification de la méthode du passage des donnés en POST au format JSON suivant méthode copiée du firmware 1.0.7 légèrement adaptée en conséquence (suppression de la partie qui vérifie la validité des étiquettes TIC, j’ai simplement adapté pour que l’etiquette ADCO ne soit pas incluse et que ce soit celle indiquée dans la config qui soit utilisée [idem firmware 1.0.7])

Si ça interesse qq1, je peux passer le code source modifié et/ou les fichiers compilés. Par contre je n’ai aucune maitrise de VScode+Plateformio donc pas dit que ce soit utilisable…

J’ai refait une version ce matin en repartant du code source de la 1.6.1 GitHub - rene-d/wifinfo: Module Wi-Fi de téléinformation et en ne modifiant que ce qui est nécessaire afin d’en faire une version au propre et la plus proche de l’origine possible. Je l’ai modestement nommé version 1.6.2
le firmware à télécharger dans vos ESP est ici :
https://www.cjoint.com/c/MDci0f15Exc

La procédure n’a pas changée (voir tuto de @tibo.percin en début de thread)
Ce firmware n’est compatible qu’avec le ESP8266 en version 4mega
Il corrige donc le problème de la clé API à 64 caractères.
Il est normalement compatible avec le hardware qui fonctionnait avec la version 1.0.7 pour ce qui est de la réception des trames TIC
Pour la led par contre c’est sur D6 (GPIO12) parce que ça correspond à mon hardware mais sur demande je peux compiler avec une autre configuration (ou fournir le code source bien entendu).

Le problème du wifi n’est toujours pas corrigé dans cette version. Je vais essayer de regarder mais c’est étrange que ça ne fonctionne pas, car de ce que j’ai vu il devrait être capable de se reconnecter tout seul… faut que je creuse un peu.

Si certains d’entre vous pouvaient essayer et me faire un retour, ça serait sympa.

Pas mal tes modifs,
Par contre un truc que j’ai du mal à comprendre, pourquoi ne pas être parti de la version 1.0.7 ?
Modifications par theGressier (version 1.0.7)

Modification de l'envoi des données à Jeedom suite à la mise à jour du plugin Teleinfo en v4 (changement API, POST JSON)

Les changements apportés sont les mêmes que les tiens.
Après en mettant les doigts dans le code tu as pu modifier selon ton montage (ce qui est plus qu’intéressant !).
Mais l’idée d’implémenté la clé 64 bits alors qu’un petit scénario qui te permet d’en générer une 32, ça compense tes 4 jours de travaux dessus non ?
En tout cas merci pour ta contribution !
Prochaine étape la gestion du wifi si je comprends bien :slight_smile:

Parce que dans la version 1.0.7 il y a un bout de code qui m’empêche de compiler (le fameux pointeur de structure « me->free » déclaré null part) et que je n’arrive pas à corriger.
La version 1.6.1 me paraissait en outre plus stable et plus réactive (et aussi plus récente de 1 an). Mais je me suis quand même fortement inspiré du code de 1.0.7 pour la partie de l’envoi des données vers Jeedom.

La correction du problème de la clé 64 byte c’est secondaire on va dire, surtout qu’il y a effectivement le scénario pour passer outre, mais dans le code du wifinfo c’est vraiment 3 lignes de code à corriger et c’est pas ça qui m’a prit beaucoup de temps.
Et me lançant dans cette histoire j’avais 3 objectifs :

1 - Avoir un Wifinfo compatible avec la TIC en mode standard.
2 - Avoir un Wifinfo capable de se reconnecter au wifi dans le coup classique de la panne de courant et du routeur qui met plus longtemps à redémarrer que le Wifinfo.
3 - Avoir un Wifinfo compatible avec la version actuelle de Jeedom sans bidouille (objectif bonus)

Pour le point 1 j’ai pas du tout travaillé dessus. Je ne sais pas si c’était déjà nativement pris en charge par la version 1.6.1 et j’ai pas regardé. Si quelqu’un ayant un Linky en mode standard pouvait faire un test avec ma version 1.6.2 ça serait sympa (mon compteur est encore en mode historique, donc j’ai pas de quoi tester)

Pour le point 2 je peux annoncer que c’est résolu. J’ai bossé une partie de la journée dessus et c’est actuellement en test pour voir si mes modifications n’ont pas altéré la stabilité du système.
Le code d’origine comprenait déjà en grande partie les éléments nécessaires pour ajouter cette fonction.
En gros j’ai ajouté une temporisation qui fait que si le Wifinfo est en mode AP alors qu’il y a une connexion wifi d’enregistrée (qu’un SSID est en mémoire) alors toutes les 2 minutes un « reset » du wifi se fait pour relancer la recherche du réseau.
Je pense avoir simulé toutes les situations possibles et mon Wifinfo parvient à se reconnecter tout seul à chaque fois, donc normalement finit la galère de devoir le rebooter à chaque panne de courant.
Je mettrais bientôt ce nouveau firmware à disposition, le temps de valider que tout fonctionne correctement.

Pour le point 3 c’était donc déjà corrigé, mais comme déjà dit, c’était vraiment pas grand chose à faire, donc fallait pas s’en priver.

J’ai profité aussi de l’occasion pour modifier l’interface web, au niveau de la configuration de Jeedom justement, en indiquant que, contrairement à ce qui était indiqué, l’identifiant compteur est obligatoire, et non pas facultatif, ce qui entrainait beaucoup d’échecs pour les nouveaux venu qui se lançaient dans avec un Wifinfo.

@tibo.percin : j’ai oublié de te demandé le schéma de ton hardware (l’ancien forum étant fermé, plus rien n’est disponible) il faudrait au minimum me dire sur quel GPIO tu connectais la LED afin que j’adapte le code de ma version 1.6.2 pour qu’il soit 100% compatible avec les Wifinfo que tu as fabriqué.

Merci pour tes explications détaillées et ton travail !
J’attends ton retour sur la stabilité de ton programme.
Voila le schéma


Si tu as besoin d’informations complémentaires n’hésites pas :wink:

J’étais en déplacement professionnel une partie de la semaine, donc je n’ai pas eu l’occasion d’intervenir ici, par contre ça m’a permit de tester la stabilité de mes modifs.

Donc uptime de pratiquement 5 jours en envoyant les données vers un Jeedom de test toutes les 15 secondes, on peut dire que niveau stabilité c’est bon (chez moi en tout cas)

Pour la LED je vois que tu as géré ça de façon indépendante de l’ESP, donc mes configs de firmware n’ont aucune incidence.

Je peux donc mettre à disposition cette version baptisée 1.6.3 qui apporte la fonction de relance de recherche du wifi dans le cas ou le Wifinfo démarre plus vite que la box (ou le point d’acces wifi sur lequel il se connecte normalement)

Le firmware à télécharger est ici :
Wifinfo1.6.3.zip.txt (448,1 Ko)

Pour ceux qui voudraient tester, petite explication en mode tuto :

Après téléchargement il faut changer l’extension du fichier pour enlever le .txt
Si l’affichage de l’extension des noms de fichiers n’est pas activé sur votre version de Windows (cas par défaut) il faut le faire. Dans l’explorateur de fichier onglet « affichage » puis cocher la case « Extensions de nom de fichier », faire alors un clic droit sur le fichier Wifinfo1.6.3.zip.txt puis « renommer », enlever alors le .txt à la fin et valider, confirmer que vous voulez bien changer l’extension.
Decompresser alors l’archive .zip pour retrouver les 3 fichiers en taille originale.
Les 2 fichiers important sont « firmware.bin » et « littlefs.bin », le 3eme fichier est juste un pense-bête pour retrouver les offsets de flash.

Pour flasher votre wifinfo il faut pouvoir se connecter physiquement en USB sur l’ESP : une mise à jour OTA risque de ne pas fonctionner car le système de fichier entre la version 1.0.7 et cette version 1.6.3 n’est pas le même (SPIFFS dans la version 1.0.7 et LittleFS dans la version 1.6.3)
Le mieux étant de retirer le Wemos de son support pour le déconnecter totalement du Wifinfo et de le brancher en USB avec un câble adaptée au PC qui servira à faire le flash du nouveau firmware.
Une fois l’ESP connecté en USB au PC, celui-ci devrait avoir un nouveau port COM
Pour vérifier que c’est bien le cas, il faut faire Démarrer > Paramètres > Périphériques
et dans Bluetooth et autres appareils vous devriez retrouver le port COM de votre ESP comme ceci :


Si ce n’est pas le cas, c’est peut être qu’il faut installer le pilote adapté (souvent CH340, voir les tutos sur le net pour ce faire)
Notez le numéro de port COM correspondant avant de fermer cette fenêtre.

Pour flasher le firmware dans votre ESP8266 de type Wemos D1 mini ou équivalent (ESP12E avec 4M de mémoire flash obligatoire) il vous faudra aussi l’outil Espressif Flash Download Tools disponible ici :
Tools | Espressif Systems
Actuellement c’est la version 3.9.4 qui est disponible.
Une fois le fichier contenant le logiciel téléchargé et décompressé lui aussi, il faut lancer flash-download_tool_3.9.4
S’ouvre alors une fenêtre de terminal, que vous allez laisser ouverte, et une petite fenêtre qui doit ressembler à ceci :
EFDT1
Sélectionner ESP8266 et le mode Develop puis validez.

S’ouvre alors une nouvelle fenêtre dans laquelle il va falloir faire quelques ajustements :
Dans l’onglet SPIDownload il faut d’abord choisir les fichiers qui serviront au flash.
Au bout du premier champ texte appuyer sur le bouton … et choisir le fichier firmware.bin correspondant du Wifinfo 1.6.3
dans le deuxième champ après le @ saisir l’adresse de flash 0x0 puis cochez la case en début de ligne.
Recommencez sur la seconde ligne avec le fichier littlefs.bin à l’adresse 0x300000 sans oublier là aussi de cocher la case en début de ligne ensuite.

Dans SPIFlashconfig choisir une fréquence de 40Mhz , SPI MODE en DIO

Dans DownloadPanel 1 choisir alors le port COM correspondant à celui de votre ESP et laisser la vitesse à 115200

Il faut d’abord commencer par faire un ERASE
Après quelques secondes l’indicateur du DownloadPanel 1 passe en bleu et indique « Finish »
Il est alors possible de lancer réellement le flash de l’ESP en cliquant sur START
Vous devriez alors avoir quelque chose que ressemble à ceci :

Le téléchargement dans l’ESP prend généralement une petite minute et ensuite l’indicateur doit à nouveau passer en bleu avec l’indication FINISH

Il est alors possible de fermer l’outil et de débrancher l’ESP pour qu’il retrouve sa place dans votre Wifinfo.

Après remise sous tension vous devriez retrouver un réseau wifi portant le nom wifinfo- suivit de chiffres et le lettre.
Se connecter dessus avec un smartphone ou un PC équipé du wifi puis dans un navigateur rentrer l’adresse 192.168.4.1

Si tout s’est bien passé vous devriez tomber sur la page du Wifinfo
cliquez sur l’onglet système et vérifiez que tout semble correcte :

Si votre Wifinfo est connecté a votre compteur, en retournant sur l’onglet Téléinformation les données de la TIC devraient s’afficher.
Il est alors temps de finaliser la configuration de votre Wifinfo.
Dans l’onglet Configuration, rentrez les infos de votre réseau wifi (le bouton avec la loupe permet d’afficher la liste des réseaux wifi disponibles)
Selectionnez juste le bon réseau wifi et entrez la clé, les champs Utilisateur du module et Mot de passe du module ne sont nécessaire que si vous souhaitez bloquer l’accès au Wifinfo à ceux qui n’auraient pas ces identifiants (inutile dans 99% des cas)

Après enregistrement il peut être nécessaire de redémarrer le Wifinfo pour que les paramètres soient pris en compte et qu’il se connecte à votre réseau wifi.
Une fois ceci fait, il faut retrouver votre Wifinfo sur votre réseau. Deux solutions :

Connectez vous alors sur votre Wifinfo en utilisant sa nouvelle adresse IP et configurez la partie Jeedom :

Serveur Jeedom : c’est généralement l’adresse IP de votre box Jeedom (genre 192.168.x.x)
Port : port sur lequel votre Jeedom est accessible en HTTP ou en HTTPS le cas échéant.
URL : normalement la valeur par défaut est la bonne.
Clé API : clé API correspondant au plugin téléinfo (Réglage>Système>Configuration puis API de votre Jeedom) (clé API de 64 caractères max pour cette version 1.6.3)
Mise à jour : Fréquence à laquelle vous voulez que les trames TIC remontent vers Jeedom
Identifiant compteur : Vous devez reportez l’étiquette ADCO de votre compteur OU celle indiqué dans Identifiant Compteur de l’objet correspondant dans le plug-in Téléinfo de Jeedom (dans le cas où celui-ci serait différent de celui de votre compteur, il est préférable de reprendre celui indiqué dans Jeedom pour éviter la création d’un nouveau compteur ou pour bloquer la réception des trames)
Ce champ est obligatoire, sans lui les infos remontée vers Jeedom ne sont pas correcte et le plug-in Téléinfo n’en tient pas compte.

Si je n’ai pas fait d’erreur, ça devrait alors fonctionner sans problème chez tout le monde.

Après avoir un peu étudié cette question, la version 1.6.3 ne prend en charge que le mode « Historique »
La prochaine étape (version 1.7.0 ? ) devrait voir la prise en charge du mode Standard du Linky, théoriquement ça ne devrait pas présenter de difficulté insurmontable, mais je ne vais pas m’avancer pour le moment.

3 « J'aime »

Pour ceux que ça intéresse les sources sont ici :
Winfinfo1.6.3_sources.zip.txt (191,7 Ko)

Perso je travail avec Visual Studio Code et l’extension Paltformio mais ça doit aussi marcher avec l’IDE Arduino avec les bonnes extensions.

1 « J'aime »

Bon je crois que je me suis un peu emballé et ai fait une erreur de débutant…
J’ai flashé mon ESP avec ta version 1.6.3 (j’avais au préalable flashé un autre ESP pour tester) et vu que c’était stable, je me suis dis pourquoi pas flasher mon montage.
Malheureusement j’ai eu des notifications jeedom m’indiquant des pertes de connexion avec l’ESP


Et c’est encore plus flagrant avec un ping.
Est ce que tu as le cas avec le tient @Forhorse ?
Pour info ma box est à 2m de l’esp (-51dB dans l’interface web du WifInfo)
Surement pas grand chose

Je n’ai pas noté de problème particulier, mais je ne surveille pas non plus l’état du wifinfo…
Mais je n’ai pas touché à la partie qui gère la connexion.
Ma modification se contente d’interroger le status de la connexion wifi (AP ou STA) au demarrage et de relancer la connexion toute les 2 minutes dans le cas d’un mode AP et qu’un SSID est enregistré en mémoire.
Une fois qu’il à réussit à « accrocher » le point d’access sur lequel il est censé se connecter, ma modification se désactive totalement jusqu’au prochain reset.

Comment tu fais pour monitorer l’état de ton wifinfo ?
en utilisant un ping, quel est la fréquence des déconnexions constatées ?
est-ce qu’il se produit un reset en même temps que la perte de connexion ? (uptime qui repart de zero)
est-ce que dans l’interface du wifinfo, onglet système, le compteur « Nb reconnexion Wi-Fi » s’incrémente ?
Chez moi pendant mon test de 5 jours il est resté à 1
Alors que sur celui de « prod » qui est toujours en 1.0.7 qui tourne chez moi depuis fin 2021 ce compteur indique 575688769 (mais je pense qu’il est bugé…)
Ils sont tous les deux à environ 1m de ma box, et les deux indiquent environ -63dB

Je vais laisser tourner une fenêtre de terminal avec un ping qui tourne en boucle le plus longtemps possible, mais pour l’instant je ne constate aucun problème (temps de réponse moyen entre 2 et 7ms avec parois un pic à 10-20ms)

Pas de soucis, c’était une question ouverte pour voir si c’était un cas isolé ou non :wink:
Depuis mon message j’ai fais un petit ajustement, j’étais encore en clé API 32 bits, du coup je suis passé en 64 histoire de repartir sur un cas d’usage « standard ».
Pour monitorer j’utilise le plugin « NETWORK »
Pendant 3min c’était OK, puis la ça revient comme avant:


Pas de reset de l’uptime, ni du nombre de reconnexion (reste à 1)
Par contre c’est intéressant ce que tu dis sur le temps de réponse moyen, moi c’est très long…

1 « J'aime »