Serveur de téléinformation Linky

Bonjour Alain,

Content de voir que cela marche :grin: Ceci dit, la modification de la configuration est incomplète et certaines modifications faites depuis le serveur ne devraient pas être sauvegardées. Cela n'a pas d'importance à ce stade et je corrigerai le tout proprement avec la nouvelle version bi-tarif, en cours de test.

La finalité de mon serveur est différente de ce que vous faites avec emoncms : le serveur est orienté sur la transmission de la consommation instantanée :

  • pour chasser le gaspi en traquant les consommations de veille qui sont celles qui font grimper la facture,
  • pour les pointes de consommation qui risquent de faire disjoncter le Linky, encore que les nouvelles infos publiées très récemment par Enedis dans la V3 de son document sur la téléinformation client soient plutôt rassurantes. Pourquoi ne l'ont-ils pas dit plus tôt ?

Pour vos optocoupleurs, d'après les docs que j'ai trouvées sur Internet :

  • le 4N32 est un photodarlington : très sensible, mais pas véloce,
  • je n'ai pas trouvé de 6N36, mais un 6N136. Si c'est bien celui que vous avez, il devrait convenir parfaitement, encore qu'il ait un brochage pas courant (au moins pour moi).

Comme tous les deux sont simple alternance, il vous faut utiliser l'un des 2 montages publiés, l'un dans le premier post de cette rubrique, l'autre ici avec 2 optos. Je n'ai pas essayé celui à 2 optos, mais il devrait marcher sans problème. Dans tous les cas, il vous faut essayer...
Attention aussi car le signal est faiblard. Je ne pense pas qu'il puisse actionner 2 démodulateurs.

A bientôt et bonne bidouille,

MicroQuettas

TIC2opto_00a.pdf (27 KB)

Hello

Mon linky arrive bientôt, alors je vais décortiquer ton projet :slight_smile:

Petite question : au bout d'un an de fonctionnement, est-ce que ta solution a passé avec succès l'épreuve du temps?
Un retour d'expérience éclairant un point à améliorer, ou bien c'était tout bon du premier coup?

bonsoir Bricoleau.
ça marche sans soucis. Mais pour l'instant je n'ai pas le Linky ( les trames en mode historique sont les même)
Donc j'utilise ce serveur sur un compteur Electronique standard.... et c'est OK

Bonsoir à tous deux,

Merci pour le message et le retour d'expérience.
Ici, quelques améliorations dont je vous ferais profiter. Le fonctionnement est bon : la version en service (04h) a été démarrée pour la dernière fois le 29/01/19. Depuis, cela tourne sans histoire. J'ai juste un doute sur un point que je n'ai pas été capable de clarifier, et vos expériences pourront certainement aider à y voir clair.
Je reviens avec tout cela d'ici une dizaine de jours. Pour l'instant, j'ai les petits enfants et ils sont trop jeunes pour goûter les joies de la bidouille et de l'Arduino.

Bonne bidouille et à bientôt,

Fred de MicroQuettas

Bonjour à toutes et tous,

Voici comme promis une nouvelle version du serveur Linky après plus d'un an de fonctionnement, en plusieurs posts :

1- Quelques nouveautés

  • Affichage de la puissance de coupure du Linky (130%) de la puissance souscrite comme indiqué dans la nouvelle mouture de la note Enedis (Enedis-NOI-CPT_54E V3),
  • Commande possible d'une alarme sonore (niveau logique HIGH sur la pin GPIO_14) en cas de dépassement de la puissance souscrite,
  • Gestion des identifiants Wifi (SSID et Pwd) jusqu'à 32 caractères,
  • Reset commandé fiable, relier GPIO_16 et RST,
  • Améliorations cosmétiques de ci, de là...

Et les captures des principaux écrans :

A+ pour la suite et bonne bidouille,

MicroQuettas

8- Lky03f - Page 96f.JPG

Re, voilà la suite...

2- Nouvelle procédure de configuration

  • Régler l'IDE pour effacer toute la mémoire Flash ("All Flash content") et pas seulement le squetch (menu Outils),
  • Renseigner le SSID et le PWD (mot de passe) de votre Wifi dans le fichier A_DevConfig.h, lignes 246 et 247,
  • Compiler et téléversez tel quel, pour mémoire : A_DevConfig.h : DHCPMODE (37) décommentée ; A_CompilSwitches.h, ligne 10 : LKYDEBUG décommentée,
  • Une fois le programme lancé, sur le moniteur série (9600), taper %w et noter (copier dans un fichier) la configuration du réseau,
  • Vérifiez avec votre navigateur (utilisateur : user, mot de passe user, aministrateur : admin, mot de passe admin) que programme fonctionne sur l'IP donnée par le DHCP,
  • Choisir une IP fixe (en pratique seulement le dernier nombre de l'IP) libre sur votre réseau (par défaut 236), et la renseigner dans A_DevConfig.h, ligne 20,
  • Commentez (ajoutez // en début de ligne) A_DevConfig.h, ligne 37, pour supprimer le mode DHCP,
  • Commentez (ajoutez // en début de ligne) A_CompilSwitches.h, ligne 10, pour supprimer le mode LKYDEBUG,
  • Mettez à jour les lignes A_DevConfig.h 255, 257, 259, 261 et 263 avec les informations sur votre réseau copiées précédemment,
  • Configurer le programme en fonction de votre compteur en éditant les lignes A_DevConfig.h 23 à 35, par défaut tarif BASE, LINKY, monophasé, 6kW, 30A,
  • Compilez et téléversez,
  • Vérifiez avec votre navigateur que le programme fonctionne sur l'IP fixe que vous lui avez choisie,
  • Terminez la configuration du programme en renseignant de nouveaux identifiants et mots de passe utilisateur et administrateur directement sur son interface de configuration.

Attention : par la suite, réglez l'IDE sur effacer le squetch seulement ("Only squetch"), faute de quoi l'EEPROM sera effacée et votre configuration avec...

Si vous avez perdu vos identifiants, il vous reste à tout reprendre depuis le début en règlant l'IDE pour effacer toute la mémoire ("All Flash content").

A+ pour la suite...

1 Like

Re, et le troisième et dernier morceau avec le code...

3- Le mode HWSERIAL

La difficulté de ce montage est le récepteur série avec le Linky. En effet, sur une carte NodeMCU, Wemos D1 ou similaire, l'unique récepteur série du 8266 est reliée à l'interface USB et donc difficilement utilisable.
Il faut donc utiliser un récepteur série logiciel. La bibliothèque Software Serial fonctionnne, mais accapare la plus grande partie du temps CPU, ce qui la rend inutilisable avec un Linky qui babille en permanence à 1200 Bds. J'ai donc écrit un récepteur série logiciel alternatif qui utilise le timer1 du 8266 pour faire les délais et tout gérer par interruption. Le problème est que ce timer est très peu documenté et utilisé par d'autres choses :

  • le pwm, pulse etc. : facile, on ne les utilise pas,
  • l'OTA et l'écriture sur la pseudo EEPROM : gérés par arrêt de la réception série,
  • d'autres choses que je n'ai pas identifiées...

En pratique, il m'est arrivé d'avoir des resets non commandés à intervalles de quelques jours sans que je puisse en identifier la source et les reproduire, et ce, malgré des mauvais traitements infligés à l'entrée série (variation vitesse, débranchement, envoi de breaks, etc.). Qui plus encore, le système a fonctionné normalement pendant 1 semaine avec un simulateur qui lui envoyait des trames Linky...

J'ai compris que Alain-alph n'avait pas eu ce souci...

Bref, il y a un doute.
Comme j'utilise des cartes ESP12 maison sur lesquelles la pin Rx est accessible, j'ai fait une variante du programme qui utilise le récepteur HW et c'est celle que j'utilise. Elle fonctionne depuis plus de 6 mois en continu, ce qui, en passant, dédouane tout le reste du programme.

Pour utiliser le récepteur HW (lorsque la pin Rx est accessible, sur une carte ESP01 par exemple) :

  • Configurez d'abord votre programme comme indiqué précédemment,
  • Réglez l'IDE sur effacer le squetch seulement, faute de quoi l'EEPROM sera effacée et votre configuration avec,
  • Décommentez la ligne CompilSwitches.h 43 qui active la réception par le HW serial,
  • Compilez et téléversez.

Remarque : il est possible que cela fonctionne aussi avec une carte NodeMCU ou Wemos D1 en utilisant la résistance série vers le convertisseur USB comme une pull-up, si l'optocoupleur de l'adaptateur accepte suffisamment de courant, mais je n'ai pas essayé.


Voilà, tous les retours sont les bienvenus et surtout bonne bidouille,

MicroQuettas

Lky04i_P.zip (155 KB)

1 Like

Bonjour MicroQuettas,

je viens de télécharger ton archive et la parcourir. Super boulot ! Perso je ne compte pas me lancer dans ce genre de projet mais si j'avais a jouer avec mon compteur linksys je reviendrai voir !

Les sources sont propres et tout est fourni ! merci.

Sinon, partages tu ta solution sur une forge quelconque (github ou autre) ? Sous quelle licence logicielle places tu ton code ? Désolé, mais je n'ai pas vu.

Merci Supercc !

Je n'utilise pas GitHub car je bidouille à titre personnel et je n'en ai pas trouvé l'utilité (?).
Je publie de temps en temps une bidouille sur ce site où j'ai trouvé bien des astuces et idées. Si cette publication peut aider qqun, alors tant mieux.

Pour la licence : GNU bla bla bla et tout est libre : ...sinon je ne l'aurai pas publié !

Il y a dans le code 1 ou 2 modules dans lesquels j'ai adapté du code déjà publié par d'autres. J'ai gardé les entêtes des auteurs d'origine qui y sont identifiables.

Je répondrai avec plaisir aux demandes (raisonnables).

Bonne bidouille,

MicroQuettas

Merci pour les réponses qui me conviennent :wink:

Bonjour MicroQuettas

Merci pour le partage, beau travail.

Je planche actuellement sur un projet de carte relais pour la domotique (ioBoard) et une entrée Télé Info est prévue.

Les protos de carte sont bientôt prêts et je vais donc me pencher sur le firmware.

Pour la téléinfo je n'y connais pas encore grand chose et je pensais utiliser la librairie de Charles Hallard (Blog Charles et les sources: Git Hallard) jusqu'à ce que je découvre la tienne. La connais-tu et as-tu un avis par rapport à ta librairie? Peut-être même quelques conseils avant de me lancer?

Merci

Loic

Bonsoir Loïc,

Je ne connaissais pas ce site. C'est superbe et je l'ai inscrit dans mes marque pages !

Avec cette bibliothèque, l'auteur vise l'universalité. Pour cela, il doit traiter le problème de la multiplicité des tarifs, et donc des informations envoyées par les compteurs. C'est ce qu'il fait, et avec sa biblio, vous serez prévenus par un callback lorsqu'une nouvelle info est arrivée, mais ce sera à vous de la traiter dans le callback.

Tout dépend de ce que vous voulez faire. Si j'ai bien compris votre projet, votre carte sera un "frontal" d'une appli plus importante sur une autre machine. Dans ce cas, la biblio Ch. Hallard est adaptée. Vous envoyez tout ce qui en sort à la "grosse machine" qui fera le tri et commandera les actions appropriées.

Pour votre frontal, vous allez utiliser un ATMega 2560 avec 4 UART HW. Il faut en réserver une à la téléinformation, car softwareSerial consomme trop de ressources CPU (point aussi identifié par Ch. Hallard).

Enfin, j'ai regardé votre projet de carte. Vous êtes sûr qu'un ATMega 2560 sera suffisant ? Un 8 bits à 16Mhz, c'est un peu limite aujourd'hui, surtout si vous faites fabriquer des cartes. Il me semble qu'il y ait des solutions plus performantes et guère plus chères, toujours dans l'environnement Arduino, quitte à faire les IO discrètes avec des adaptateurs I2C genre PCF8574 (ou plus modernes).

Voilà, bon courage et bonne bidouille,

Fred de MicroQuettas

Merci Fred pour ta réponse.

Pour mon projet de carte, elle se veut un peu des deux à la fois, à savoir être pilotable par un système plus haut niveau (Node Red ou Jeedom par exemple) mais aussi être autonome (la base d'une domotique solide!) en gérant elle même des plages horaires (d'où le module RTC) et pourquoi pas un délestage via l'action d'un de ses relais si les infos transmises par la TéléInfo le requierent.

Donc la carte doit être capable de décoder "en interne" les infos reçues par la TéléInfo. De ce que je comprends de ta réponse, il y a des chances pour que le décodage via la librairie de Hallard soit plus lourd que par ta librarie car elle retourne plus d'infos, c'est bien cela? Je ne me suis pas encore penché en détail sur cette librairie mais il me semblait avoir vu qu'on pouvait filtrer en amont les tags que l'on souhaitait recevoir/décoder. Je vais vérifier.

Enfin, pour la carte j'ai choisi le processeur AT2560 car il avait une bonne taille mémoire et que j'ai un projet de taille raisonnable qui tourne bien dessus (PoolMaster), je ne me suis pas posé plus de question!

Loic

Bonjour Loïc,

Joli projet le poolmaster...

Pour revenir aux bibliothèques téléinformation, ce sont deux approches différentes :

  • la bibliothèque Hallard enregistre tout ce qui sort du compteur en ASCII et c'est à l'utilisateur de récupérer ce qui l'intéresse,
  • la mienne (A_LinkyDecEsp) ne capture que ce qui l'intéresse, directement en format numérique.

Dans tous les cas, il te faudra aller à la pêche des champs qui t'intéressent en fonction du type de contrat que tu as :

  • en interrogeant la biblio Hallard (méthode

char * TInfo::valueGet(char * name, char * value)

  • avec la mienne, si les infos qui t'intéressent n'y sont pas, il te faudra la modifier pour les capturer.

A toi de voir ce qui est le plus adapté à ton cas.

Si tu le peux encore sur ton proto, remplace la DS1307 par une DS3231. Le quartz est intégré et elle est plus précise. Elle a aussi un flag qui signale un arrêt de l'oscillateur, pratique pour valider sa sortie. L'interface SW est quasi identique, sauf qu'il n'y a pas de NVR (non volatile RAM).

Bon courage pour ce projet et bonne bidouille..

Fred de MicroQuettas

MicroQuettas:
Bonjour Loïc,

Joli projet le poolmaster...

Bonjour Fred et merci. J'en suis très content, l'eau de ma piscine n'a jamais été aussi claire et propre, pas eu à la choquer de tout l'été alors que ça faisait des années que je galérais à l'entretenir (ce qui a stimulé ce projet) malgré l'achat coûteux de régulateurs du commerce et non connectés de surcroit.

Pour revenir aux bibliothèques téléinformation, ce sont deux approches différentes :

  • la bibliothèque Hallard enregistre tout ce qui sort du compteur en ASCII et c'est à l'utilisateur de récupérer ce qui l'intéresse,
  • la mienne (A_LinkyDecEsp) ne capture que ce qui l'intéresse, directement en format numérique.

Dans tous les cas, il te faudra aller à la pêche des champs qui t'intéressent en fonction du type de contrat que tu as :

  • en interrogeant la biblio Hallard (méthode
  • avec la mienne, si les infos qui t'intéressent n'y sont pas, il te faudra la modifier pour les capturer.

A toi de voir ce qui est le plus adapté à ton cas.

OK merci pour ces infos complémentaires. Dés que j'ai les protos je vais tester les deux approches.

Si tu le peux encore sur ton proto, remplace la DS1307 par une DS3231. Le quartz est intégré et elle est plus précise. Elle a aussi un flag qui signale un arrêt de l'oscillateur, pratique pour valider sa sortie. L'interface SW est quasi identique, sauf qu'il n'y a pas de NVR (non volatile RAM).

OK je le mets dans la wish list de la prochaine révision.
Mais que veux-tu dire par "Elle a aussi un flag qui signale un arrêt de l'oscillateur, pratique pour valider sa sortie"?

Loic

Bonjour Loïc,

Sur la DS3231, cf. datasheet DS3231, page 14, dans le Status register (0Fh), il y a le bit 7 : OSF (oscillator stop flag). Il est mis à 1 au démarrage et en cas de pb sur l'oscillateur.
En pratique :

  • mettre le bit à 0 quand on met à jour l'horloge,
  • le lire avant de lire l'heure sur l'horloge :
    si == 0, tutti bene,
    si == 1, méfiance, l'oscillateur s'est arrêté et l'horloge est invalide.

C'est un truc sympa qui n'existait pas sur la DS1307.

Bonne bidouille,

Fred de MicroQuettas

PS : pour les piscines, je garde un souvenir ému d'une maison où la piscine était surplombée par un beau tilleuil... La dite piscine se transformait inexorablement en un grand bac de tisane !!

Super merci.
Piscine: la domotique ne ramasse pas encore les feuilles ni ne nettoie le filtre du robot, hélas

Bonjour MicroQuettas

Je viens de tester ton code, mais j'ai des soucis sur la numerotation des lignes de code, je suis sur notepad++ et je n'arrive pas a identifier les lignes pour sur DHCP et l'adresse en dur. Donc ce n'est pas facile, la page web de config fonctionne donc je vais mettre mes info a jour par ce biais la. je suis en comptage HP/HC puissance kw ou je rentre les infos ?
Merci encore pour le bon boulot

Voila tout mes problémes sont resolu avec la version 4 sinon dans le terminal je n'ai jamais pu avoir la config avec la commande %w ?
Il ne me reste plus qu'a integrer le montage a coté de l'épouventa

Bonjour,

Content que tout fonctionne avec la V04.
Pour les informations de "deboggage" :

  • il faut compiler avec l'option

#define LKYDEBUG true /* Global debugging enable */

décommentée (ligne 10 du fichier A_CompilSwitches.h),

  • le moniteur série fonctionne à 9600 bds avec des fins de lignes Windows (CR et LF).

Ceci dit, une fois que le programme est configuré et que le bidule fonctionne, l'option de "déboggage" ne sert à rien. Cela fait du code "mort", ce que les bonnes pratiques commandent d'éviter.

Note : pour recharger le programme SANS effacer toute la configuration, bien régler l'IDE sur "erase sketch only".

Bonne bidouille,

MicroQuettas

1 Like