Projet affichage compteur Linky TEMPO

Bonsoir,
j'ai un peu de mal à suivre vos différents échanges un tant soit peu technique.
Y -a-t-il parmi vous un auteur qui s'est particulièrement intéressé à la valeur du tic: "PTEC" il me semble avoir vu qu'il pouvait prendre la valeur HPB... ce qui fait penser à Heure Pointe Bleu ou Blanc... avez vous pu trouver d'autres valeurs à ce PTEC par exemple HPR?
Si oui, serait-il possible avec un arduino de transformer cette information en un contact sec. et même plus, pour les HPB ou W blanches
L'objectif étant de gérer aux mieux les différents points de consommations ( par exemple d’arrêter la clim en été si les jours sont HP blancs)
Merci pour vos réflexions.

Bonsoir,

A priori pas de difficulté pour faire ce que vous envisagez.
Partez de la dernière version ci-jointe qui peut se configurer pour les tarifs HP/HC et Tempo
LkyRx_11d.zip (44.1 KB)
1- Décompressez dans votre répertoire de travail, configurez comme indiqué dans le LinkyHistTIC.h et testez.
2- Lorsque tout fonctionnera, vous pourrez passer à la suite, sur une copie du répertoire de travail pour pouvoir revenir en arrière,
3- Pour rajouter ce que vous voulez, il faut déclarer les broches (pins) de sortie pour le ou les relais,
4- initialiser les broches dans le setup(),
5- dans le loop(), il vous faut utiliser les propriétés exposées par la classe
LinkyHistTIC:

    bool ptecIsNew();   /* Returns true if ptec has changed */
    uint8_t ptec();     /* Periode tarifaire en cours (enum Tarifs) */

Vous avez aussi les enum pour vous faciliter la tâche (en tarif Tempo)

    enum Tarifs:uint8_t {C_HPleinesBleu,  C_HCreusesBleu,
                         C_HPleinesBlanc, C_HCreusesBlanc,
                         C_HPleinesRouge, C_HCreusesRouge};

en tarif HP/HC

   enum Tarifs:uint8_t {C_HPleines, C_HCreuses};

Quand vous aurez passé l'étape 1 avec succès, écrivez un code qui devrait faire ce que vous voulez et postez le. Vous trouverez de l'aide sur le forum, et votre projet pourra servir à d'autres.

Bonne bidouille

MicroQuettas

@68tjs : merci pour l'explication du fonctionnement de ce montage. Quand j'ai fait le mien, je n'avais pas d'optocoupleur double. J'ai donc mis un simple CNY17 précédé d'un pont de 1N4148.
En toute logique, je devais aggraver le problème et c'est pourquoi j'avais prévu une capa (valeur à déterminer expérimentalement) pour "lisser" la commande de l'opto.
Au départ, j'avais prévu une résistance de collecteur de 4,7kOhm. Cela ne marchait pas.
J'ai donc augmenté la résistance à 47kOhm et tout c'est mis à marcher, sans la capa de lissage. Je n'ai pas poussé plus loin, pensant avoir "augmenté la sensibilité" en diminuant le courant collecteur.
En fait, à la lumière de vos explications, j'ai surtout augmenté la saturation du transistor !
J'ai trouvé la confirmation dans la datasheet du CNY17 qui donne différentes valeurs de T on avec ou sans saturation. La saturation peut rajouter jusqu'à environ 20 µs, largement suffisant pour ponter les coupures dues au passage au zéro du 50kHz sinusoïdal.
Encore merci pour l'explication qui explique et dédouane ce montage a priori intrigant (à condition de bien saturer le transistor).

1 Like

Bonsoir MicroQuettas, merci pour vos infos, remarques, commentaires, codes ...
Dans les différents sujets autour du TIC Linky (une petite dizaine), je cherche encore quel serait le meilleur interface entre Linky et circuit Arduino. Pourriez-vous m'aider dans ce dédale d'informations .
Merci, Pierre

Je me permets de répondre : quels sont vos besoins ?

La meilleure interface entre le linky et la carte microcontrôleur (pourquoi se limiter à arduino) sera celle adaptée à votre situation.

Où se trouve le compteur linky ?

  • chez vous ?
  • sur le palier ?
  • au bord du trottoir dans le muret de cloture ?
  • est-il possible de faire une liaison filaire ou faut-il passer en sans fil ?

Ce qui est sûr :

  • Enedis oblige à isoler galvaniquement l'électronique personnelle de celle du compteur, d'où l'utilisation d'un optocoupleur.
    Pour ce qui est du fonctionnement de l'optocoupleur, je pense l'avoir expliqué.
    Je n'ai pas parlé de la version avec mosFet qui ne fait qu'apporter un effet de seuil de déclenchement (caché lui aussi) avec l'utilisation du Vgsthreshold du transistor mosfet.
    Ce n'est, a mon avis, utile qu'avec des références d'optocoupleurs qui peuvent avoir un CTR de faible valeur (comme 20 pour les xxx814).

  • il n'est pas autorisé de tirer plus de mA que la limite fixée par Enedis.

  • Ce qui est sûr aussi, c'est que pour la partie programmation, je laisse ma place.

Merci 68tjs (le sage et pondérateur :wink:).

le Linky est chez moi, dans la maison. Je pourrais donc installer optocoupleur, carte microcontrôleur, et platine relais juste à coté. Puis un câble multibrins ira sur les différentes zones/appareillages à piloter.

Je vais faire une recherche sur vos différents écrits pour l'optocoupleur.
re-merci.
Belle soirée

Bonsoir Pierre,

Le bon montage, c'est celui qui marche !

Je pense que de nombreux utilisateurs ont utilisé avec succès le "montage de base" largement publié et dont le fonctionnement a été expliqué par @68tjs, à savoir:


Le Vcc est à 3,3V ou à 5V selon la tension d'alimentation de la carte.

Seul bémol, à la lumière des explications de 68tjs, J'augmenterais la résistance R2 à 47kOhms pour assurer la saturation du transistor. Avec la résistance de tirage interne activée dans l'Arduino en parallèle, on devrait avoir dans les 30kOhms, ce qui devrait fonctionner à coup sûr.
On peut probablement ne pas mettre R2 et s'en remettre uniquement à la résistance de tirage interne.

Bonne bidouille,

MicroQuettas

La résistance R1 (1,2k) me parait faible par rapport à la limite max fixée par Enédis qui doit être de 2k.

Le SFH 620A est pour moi le meilleur choix.
Je choisirai le grade A2 -> SFH620A2

Dans sa datasheet on trouve :

If est le courant dans les deux diodes
IF = 1 mA ⇾ 22% ≤ CTR ≤ non précisé | ⇾ Typique 30%
IF= 10 mA ⇾ 63% ≤ CTR ≤ 200%

Si le courant dans les diodes est trop faible, la valeur du CTR s'écroule.
Ce qui veut dire qu'il y a un compromis à trouver entre respecter la limite Enedis et un courant suffisant.

Si la résistance min est bien de 2k, l'amplitude des signaux Enedis étant de 12 V crête le courant max avec 2 k serait de 6 mA.

Il existe une variante au schéma de @MicroQuettas avec un transistor mosfet supplémentaire.
Si tu ne le trouves pas, je pourrai te le fournir.

Si la saturation n'est pas maitrisée, il peut y avoir des "remontées" de signal à l'état 0 V
Le rôle du mosfet est de masquer ces remontées.
⇉Tant que la valeur de la remontée est inférieure au seuil de conduction du mosfet, celui-ci ne conduit pas et la sortie reste à 0 V.

C'est satisfaisant pour les yeux de ceux qui ont un oscilloscope, mais je ne suis pas sûr que cela soit utile.
Cela va dépendre du choix du mosfet et du choix du microcontrôleur.

Par exemple, en utilisation à l'intérieur, tu n'as pas besoin de sans-fil donc une carte Uno ou nano convient.
Les entrées digitales micro Atmega 328p commutent autour de Vcc/2 soit 2,5 V
Un Esp32 sens haut vers bas commute à 30 % de Vcc et sens niveau bas vers haut commute à 70 %Vcc soit 2,3 V -> quasiment la même valeur.

Ce qui veut dire qu'avec un optocoupleur sérieux comme le SFH620-A2, il faudrait vraiment une très mauvaise saturation pour que le micro prenne ces remontées en compte.
Malgré tout il ne faut pas éliminer le cas où un linky peut aussi délivrer moins de 12 V.

Sans moyen de contrôle (oscilloscope) on peut faire quelques manips pour voir s'il y a de la marge.
Tu peux essayer avec différentes valeurs de R1 : si cela fonctionne avec 2k, tu augmentes jusqu'à ce que cela ne fonctionne plus.
Si tu trouves qu'avec 3 k cela ne fonctionne pus, il faut penser à passer au schéma avec mosfet.
Si tu trouves 10k, pas de soucis, tu as de la marge.

Attention : Je n'ai pas fait la manip, je m'appuie sur des simulations Spice avec le SFH 620, pour le reste c'est juste mon analyse.

J'aime bien maîtriser, je me passe volontiers de la résistance de tirage vu qu'elle peut être comprise entre 30k et 70k selon le lot de fabrication.
Pour assurer un niveau logique sur une entrée qui peut être "en l'air" c'est ok et c'est pour ce rôle qu'elle a été implanté dans la puce, pour être intégrée dans un schéma électronique, c'est définitivement non.
---------------------------------------------------------------------------------
Documents de référence Enedis :
Enedis-NOI-CPT_23E
Enedis-NOI-CPT_54E
Enedis-PRO-CF_55E
ERDF-NOI-CPT_02E

68tjs et MicroQuettas, Merci,
chez RS je trouve Vishay SFH620A-2... je vais en prendre 10, car autour de moi -frère, fils, etc, ont le même désir que moi d'automatiser tout cela !!
pour le mosfet ??? 68tjs vous me conseillez quoi, branchement, ...
Je sais souder... à peine coder mais par comparaison j'avance... mais coté matériel !!! océan de lacunes.
Belle nuit à vous .

Pour le mosfet il faut deja que tu dises si tu travaille en 5 V ou en 3,3 V.
Je ne suis pas convaincu de son utilité, si tu fais comme @MicroQuettas c’est dire tu diminues le courant collecteur, à courant photonique constant, tu augmentera la saturation. C’est pour moi une solution ceinture plus bretelles, mais si tu sens plus à l’aise avec, fais comme tu veux.
Sinon on trouve des sfh620 A2 sur aliexpress a des prix bien inférieurs a ceux de RS.

Le choix du mosfet se fait sur la valeur du Vgs_threshold qui, je le rappelle, est la valeur de la tension de déblocage, pas celle de conduction totale. C’est la tension qui laisse circuler un courant de seulement 250 micro ampères.

Dans Tuto et cours regardes les articles sur les mosfet d’ @hbachetti .
Tu y trouvera explications et propositions de références.

Note :
Un transitor bipolaire est un amplificateur de courant.
I_collecteur = I_base x beta

Quand le courant Ic est maximum, c’est à dire quand Rcollecteur x Ic = Vcc on dit que le transistor est entré en saturation.

Si on continu a injecter plus de courant de base que Ic/beta il va y avoir dans le transistor stockage de charges non utilisées, qui se libèreront quand il n’y aura plus de courant photonique.
@MicroQuettas en augmentant la résistance de collecteur a diminué Ic et donc le besoin en courant photonique, ce dernier étant constant la saturation a augmenté.

Bonjour, je viens de recevoir mes petites pièces...
je reviens vers vous quand cela fonctionnera !!!
grand Merci pour vos partages.
Pierre

Bonjour,
dans ces différents échanges et sur les différentes discussions autour du linky
y aurait-il une réponse qui synthétise le travail de MicroQuettas ou de ce que font le programme LkyRx_11d.ino, à quoi servent les sous-programmes LinkyHistTIC.cpp et .h

Cette question car je souhaite n'utiliser à terme que les signaux

  1. PTEC pour le transformer en signal HIGH ou LOW pour activer 2 relais (rouge et blanc > non-activés ce sera bleu), et en parallèle une led RGB (pour RWhiteB)
  2. DEMAIN pour une led RGB (RWB)
  3. HCHC et/ou HCHP pour une led orange (éteinte si heure creuse).
    J'envisage d'ailleurs que durant les périodes bleues les leds soient éteintes.
    Merci pour vos retours,
    Pierre

Je viens de finir un petit bout de programme pour piloter/simuler relais, leds, leds J+1

Bonjour,

Je vais essayer de répondre à vos questions:

à quoi servent les sous-programmes LinkyHistTIC.cpp et .h

C'est un module de classe (bibliothèque). Sa particularité est qu'il faut placer les 2 fichiers dans le répertoire de travail.

Pourquoi?

  • Le .h doit être configuré à votre carte, compteur, abonnement. C'est beaucoup plus facile dans le répertoire de travail, surtout si on a plusieurs configurations, Cf. ci-dessous.

que font le programme LkyRx_11d.ino

Il décode les trames reçues et, lorsqu'une nouvelle information se présente, il la copie sur le terminal.
Votre problème y est en grande partie déjà résolu:

  • PTEC en tarif HPHC, lignes 99 à 110,
  • PTEC en tarif Tempo, lignes 114 à 147.

Suivant le cas, vous n'avez qu'à rajouter vos actions (allumage LED, commande relais, etc.) dans le "case" correspondant au tarif concerné.

Dernier point, je vous conseille vivement de couper le problème en 2:

  • d'une part l'électronique et le décodage de la TIC,
  • d'autre part votre applicatif (LEDs, relais, etc.).

Pourquoi ?

  • si vous faîtes tout à la fois (décodage et applicatif) et que cela ne marche pas, vous aurez beaucoup de peine à identifier la cause,
  • pour tester votre applicatif, si vous devez attendre des heures, des jours ou des semaines qu'ENEDIS change son tarif, vous allez vous lasser...

Faire en 2 parties quasi indépendantes est beaucoup plus facile et rapide. Je vous conseille donc vivement:

  • de créer un 1er répertoire de travail LkyRx_11d_1, d'y décompresser tout le zip et de renommer le .ino en LkyRx_11d_1.ino, Dans ce répertoire, vous configurez le .h selon votre carte, tarif, compteur etc. et vous testez l'électronique et le décodage, sans toucher au .ino.
    Avec le schéma précédemment donné et les explications de 68tjs (R1 = 2k, R2 = 47k) comme base de départ, cela devrait marcher rapidement,

  • de créer un 2ième répertoire de travail LkyRx_11d_2, d'y décompresser tout le zip et de renommer le .ino en LkyRx_11d_2.ino, Dans ce repertoire, vous configurez le .h selon tarif, compteur et la carte en mode simulation (ligne 89 du .h #define LKYCONFIG 5). Vous pourrez alors tester votre applicatif en entrant des trames depuis le terminal réglé à 1200 Bds. Vous avez des exemples de trames dans les fichiers .txt et un tableur .ods qui vous permet de générer des trames avec la bonne CKS.

Au fait, quelle carte utilisez vous ? Le décodeur fonctionne sur les plus courantes, mais il n'a pas été testé sur toutes...

Voila, vous savez tout (ou presque...) !

Bonne bidouille,

MicroQuettas

Bonjour,
Merci MicroQuettas pour ce retour,
donc si je tente de comprendre, n'étant pas du tout de la partie !!!
le .ino sert à collecter les données qu'il va stocker ou mettre à jour dans les sous-programme .cpp et/ou .h
Le .h étant déterminant pour définir la carte utilisée (j'ai le choix, pour le moment je travaille avec une LGT8F328P de AZ-Delivery; je peux aussi travailler avec une UNO de AZ-Delivery aussi)
J'ai bien noté qu'il vaut mieux travailler sur des copies plutôt que les originaux (cf. LkyRx_11d_n)

par Terminal vous entendez mon PC ou un sous programme? ou l'écran Serial Monitor de l'appli Arduino?

CKS.... je pense qu'il s'agit de la structure des données?

Pour confirmation, la sortie Opto et résistances ( 2k et 3.3k) se branche sur ma carte en RX. (selon echanges du 26 janvier entre vous et 68tjs.

Je trouve tout cela compliqué.... et en même temps passionnant. Je vais tenter de faire de mon mieux !! Heureusement que vous êtes tous super réactif. Immense MERCI.
Pierre

Bonsoir,

Quelques réponses...

le .ino sert à collecter les données qu'il va stocker ou mettre à jour dans les sous-programme .cpp et/ou .h

En quelque sorte. Le .ino c'est le programme. Il utilise un "objet", une "boîte noire" contenant des données et les méthodes permettant de manipuler et d'accèder à ces données. Le code de l'objet est contenu dans le .cpp. Son interface, c-à-d tout ce qu'il faut savoir de lui pour l'utiliser est dans le .h.
Ce .h est inclus dans le programme principal .ino par une directive #include.
Dès lors que .ino, .h et .cpp sont dans le même répertoire de travail, le compilo se débrouille pour compiler et relier ("linker") tout cela.

j'ai le choix, pour le moment je travaille avec une LGT8F328P de AZ-Delivery;

Cette carte utilise un clone chinois de l'AVR328P. Je ne le connais pas et en particulier je ne sais pas si la bibliothèque SoftwareSerial fonctionne bien dessus. En utilisant cette carte pour vos premiers essais avec l'électronique vous vous aurez une double inconnue si cela ne marche pas : est-ce l'électronique qui merde ou le SoftwareSerial qui ne marche pas ou pas bien avec le clone de 328P ?
Conclusion, je déconseille le clone pour vos premiers essais, prenez une carte avec un ATMEL/MicroChip AVR Mega 328P comme les Uno, nano, etc.
Après, une fois que vous aurez validé l'électronique, vous pourrez essayer le clone. S'il marche, cela le dédouanera.

Ouvrez et regardez le .h pour voir comment configurer.
Configuration du .h pour un Uno .h ligne 89
#define LKYCONFIG 1
Les tarifs et le type de compteur, .h lignes 94 à 107

Pour confirmation, la sortie Opto et résistances ( 2k et 3.3k) se branche sur ma carte en RX. (selon echanges du 26 janvier entre vous et 68tjs.

Non. Par rapport au schéma du post 87:

  • R1 = 2k
  • R2 = 47k
  • X1-1 vers 5V de la carte,
  • X1-2 vers D10 (PB2) de la carte,
  • X1-3 vers GND de la carte,
  • I-1 vers Linky,
  • I-2 vers Linky.

par Terminal vous entendez mon PC ou un sous programme? ou l'écran Serial Monitor de l'appli Arduino?

l'écran Serial Monitor de l'appli Arduino

CKS.... je pense qu'il s'agit de la structure des données?

Oui et non. Toutes les trames sont signées par une cheksum (CKS) somme de contrôle. Elle est calculée et ajoutée par le Linky et vérifiée par le décodeur. Si elles ne correspondent pas, c'est qu'il y a une erreur quelque part et la trame est rejetée.

Par exemple, soit une PAPP (puissance apparente soutirée) de 00990 VA
Le Linky calcule et ajoute une CKS de "3" et transmet
PAPP 00990 3
Le décodeur refait le calcul et trouve aussi "3". La trame est validée.

Supposons qu'il y ait une erreur de transmission et que le décodeur reçoive PAPP 00991 3
Le décodeur refait le calcul et trouve une CKS = "T". Les CKS ne correspondant pas, la trame est rejetée.

Le tableur .ods inclus vous permet de générer vous même des trames avec la bonne CKS. Ouvrez le et jouez avec pour voir (activez les macros sur votre tableur pour que cela fonctionne). Vous en aurez besoin pour mettre au point votre applicatif.

Bonne bidouille,

MicroQuettas

Bonjour à tous,

Je me suis plongé récemment dans l'univers de la domotique, et plus particulièrement dans la maitrise de sa consommation. J'ai créé un petit shield Arduino pour se connecter à la TIC du Linky. Il m'en reste plusieurs que je vends sur Tindie. Il y a aussi un code d'exemple qui permet de décoder les valeurs envoyées par le Linky.

En espérant que ça vous aide dans votre bricolage :slight_smile:.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.