Téléinfo via wifi

Bonjour, je vous remrcie déjà pour toutes les informations disponibles dans ce fil ! cela m’a permis d’aboutir à une solution fonctionnelle avec mon compteur Linky. Cependant et malgré une liaison parfaitement intègre j’obtenais toujours une erreur CRC sur le même TAG téléinfo !

Après un certains nombre d’essais et quelques heures d’investigation, j’ai réussi à les faire disparaitre avec deux modifications:

  • Dans le fichier yaml de mon ESP32 dans le bloc uart j’ai ajouté rx_buffer_size: 2048 pour augmenter la taille du buffer de réception qui est par défaut de 256 octets (865 octets pour une trame de téléinfo en mode standard),
  • Dans une version personnalisée du module « teleinfo » de Esphome en ajoutant un « flush » du buffer de réception dans la fonction « update() ». Cela permet de garantir que l’analyse des données reçue au moment du réveil du module soit faite sur une trame complète.

J’ai tenté une « pull request » 3855 sur le git d’Esphome

Je ne sais pas si je suis le seul à avoir expérimenté ce genre de problématique ?

Au passage j’ai tenté d’implémenter un calcul du « Cos PHI », je vous ferai part de ma méthode dans une autre réponse.

Merci et bonne journée.

1 « J'aime »

Hello @Darki03 j’ai le même souci que toi avec un Wemos Teleinfo + ESPHome, les données remontent mais j’ai des trucs du genre :

[16:28:43][E][teleinfo:038]: bad crc: got 60 except 54
[16:28:43][E][teleinfo:038]: bad crc: got 60 except 54
[16:28:43][E][teleinfo:038]: bad crc: got 70 except 66
[16:28:43][D][sensor:127]: 'Linky Index': Sending state 35956.37109 kWh with 0 decimals of accuracy
[16:28:43][E][teleinfo:038]: bad crc: got 34 except 41
[16:28:43][E][teleinfo:168]: Invalid value for tag EASF02
[16:28:43][E][teleinfo:038]: bad crc: got 41 except 72
[16:28:43][E][teleinfo:038]: bad crc: got 41 except 35
[16:28:43][E][teleinfo:038]: bad crc: got 32 except 80
[16:28:43][E][teleinfo:038]: bad crc: got 32 except 95

J’ai testé ta PR mais ça n’a rien corrigé chez moi.
J’ai une config super basique exprès pour tester.
Si quelqu’un a une idée, je suis preneur.

Salut
il existe plusieurs interfaces entre le compteur et l’ESP mais en general le principe est le meme
en fonction du type d’ESP ( 8266 ou 32) et du mode du compteur ( historique ou pas )
la valeur de la resistance qui est entre la masse et la grille du mosfet est souvent diminuée a 4.7k voir moins.


sur ce schéma c’est R2 qui est a modifier
pour beaucoup cette nouvelle valeur a résorbé ce problème

Bonjour
Attention ce schéma n’est pas bon . L’entrée RX doit aller sur le drain du FET.
Sur ce schéma ça ne peut pas fonctionner car l’entrée Rx est toujours au 3,3 V.
Et en ce qui concerne les erreurs de CRC j’ai ça aussi mais ce n’est finalement pas très grave car les valseurs remontées sont absolues . Donc si il en manque peu importe

Merci @Pbranly

je corrige.

A voir avec ce schema
teleinfo-circuit

quoiqu’il en soit c’est la resistance qui est entre la grille et la masse qui est a modifier

1 « J'aime »

En fait l’idéal serait de voir la forme du signal de sortie sur un oscilloscope .
Un truc empirique : du 3,3 V a l’entrée de l’optocoupleur ne ferme pas le drain source du FET. Une tension de 5 V fonctionne .
C’est cohérent avec les specify du Linky. Mais si ça déclenche seulement à 4,8 V c’est juste et ça doit générer des erreurs

Bonjour à tous,

Depuis 1 semaine j’essaie de connecter mon Linky mode Historique à HA via Esphome.

J’ai d’abord suivi le tuto de la video de GammaTroniques, en particulier le test avec un FTDI branché sur PC et je vois bien les infos envoyées par Linky sur un terminal.
Je me suis ensuite attaqué au circuit avec le D1 mini et Esphome, mais je n’arrive pas à le faire marcher.

Mon circuit proto et le schéma utilisé est celui par @jrvrcd. J’ai également essayé de remplacer la résistance de 10kOhm par une de 4.7kOhm entre grille et masse du MOSFET ainsi que de remplacer tous les composants, mais sans succès.

Mon code sur Esphome - pour un premier test, je ne demande que l’adresse du compteur :

esphome:
  name: linky
  platform: ESP8266
  board: d1_mini

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Linky Fallback Hotspot"
    password: "9XKEPAUByyp2"

web_server:
  port: 80

captive_portal:

# Enable logging
logger:     
  baud_rate: 0   # disable logging via UART, help to avoid numerous crash with ESP_LOGD
  level: VERY_VERBOSE   # INFO for less log, put DEBUG to view all the linky's "étiquettes" received  in the logs
  esp8266_store_log_strings_in_flash: False     # recommanded for ESP8266 https://esphome.io/components/sensor/custom.html

# Enable Home Assistant API
api:
ota:

# ajout du composant uart pour la communication série avec la sortie TIC du compteur
# GPIO3 = Pin Rx sur Wemos D1
uart:
  id: uart_bus
#  tx_pin: GPIO15
  rx_pin: GPIO3
  baud_rate: 1200
  parity: EVEN
  data_bits: 7

# déclaration des sensors numérique
# les sensors doivent être déclarés dans l'ordre de la fonction lambda
teleinfo:
  id: myteleinfo
  update_interval: 60s
  historical_mode: true
  uart_id: uart_bus

sensor:
  - platform: teleinfo
    tag_name: "ADCO"
    name: "Adresse du compteur"
    unit_of_measurement: ""
    icon: mdi:eye

Enfin, le log - juste avec quelques lignes supprimées - indiquant un « state : nan » et « state_missing : YES », comme si l’info sur l’adresse du compteur n’était pas trouvé par le D1 mini :

  webserver_port: 80
  bluetooth_proxy_version: 0
  manufacturer: 'Espressif'
}
[21:41:01][VV][api.service:497]: on_list_entities_request: ListEntitiesRequest {}
[21:41:01][VV][api.service:132]: send_list_entities_sensor_response: ListEntitiesSensorResponse {
  object_id: 'adresse_du_compteur'
  key: 612102332
  name: 'Adresse du compteur'
  unique_id: 'linkysensoradresse_du_compteur'
  icon: 'mdi:eye'
  unit_of_measurement: ''
  accuracy_decimals: 0
  force_update: NO
  device_class: ''
  state_class: STATE_CLASS_NONE
  legacy_last_reset_type: LAST_RESET_NONE
  disabled_by_default: NO
  entity_category: ENTITY_CATEGORY_NONE
}
[21:41:01][VV][api.service:055]: send_list_entities_done_response: ListEntitiesDoneResponse {}
[21:41:01][VV][api.service:506]: on_subscribe_states_request: SubscribeStatesRequest {}
[21:41:01][VV][api.service:568]: on_subscribe_homeassistant_services_request: SubscribeHomeassistantServicesRequest {}
[21:41:01][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
  key: 612102332
  state: nan
  missing_state: YES
}
[21:41:01][VV][api.service:595]: on_subscribe_home_assistant_states_request: SubscribeHomeAssistantStatesRequest {}
[21:41:05][VV][api.service:470]: on_ping_request: PingRequest {}
[21:41:05][VV][api.service:043]: send_ping_response: PingResponse {}
[21:41:07][VV][scheduler:195]: Running interval '' with interval=10000 last_execution=26900 (now=36907)
[21:41:14][VV][scheduler:195]: Running interval '' with interval=60000 last_execution=4294951182 (now=43886)
[21:41:15][VV][api.service:470]: on_ping_request: PingRequest {}
[21:41:15][VV][api.service:043]: send_ping_response: PingResponse {}
[21:41:17][VV][scheduler:195]: Running interval '' with interval=10000 last_execution=36900 (now=46906)
[21:41:20][VV][api.service:470]: on_ping_request: PingRequest {}

Avez-vous rencontré ce problème ? Avez-vous des pistes par hasard, s’il vous plaît ?

Merci beaucoup d’avance !

@dosreism , de mon expérience les montages sur breadboard peuvent être hasardeux et/ou les composants eux même (cf ici.
Je te conseillerai

  • de mettre les logs sur le composant uart, pour voir si des trames sont reçues.
    -de vérifier le montage,
  • vérifier/changer de composants si tu en as en plus

J’ai fini par y arriver (sur ESP32), en faisant, refaisant le montage des dizaines de fois, et pourtant à chaque fois j’étais sur que c’était le bon…
Bon ce n’est que mon XP.

Salut

il me semble qu’il faut que tu rajoutes a la fin de ton sensor

teleinfo_id: myteleinfo

ça donnerait quelque chose comme cela

sensor:
  - platform: teleinfo
    tag_name: "ADCO"
    name: "Adresse du compteur"
    unit_of_measurement: ""
    icon: mdi:eye
    teleinfo_id: myteleinfo

il te faudra rajouter cette ligne a tous les sensors issus de la teleinfo.

regardes sur ESPHOME l’exemple fournis

Salut, merci de votre réponse, @jrvrcd. En effet, je l’avais oublié mais ca na pas résolu le problème, malheureusement.

Merci, @SebCaps, pour les conseils.

Je vais alors souder les éléments sur un board proto pour être sûr des connexions. Vous êtes parti sur quelles résistances ? 1kOhm en entrée et 10kOhm x2 entre les éléments ?

Enfin, pour les logs, comment faire ce que vous proposez ?

de mettre les logs sur le composant uart, pour voir si des trames sont reçues.

Merci encore !

Quand on passe en proto soudé, la vérif concernant le montage est encore plus important :slight_smile:
J’ai pris les valeurs proposé par gamma tronique, quelques erreurs CRC, mais ça passe de mon côté.
Pour le log c’est Ici

Hello @Pbranly !
Je confirme, j’ai moi aussi bien les données dans Home Assistant.
Par contre, même si ça fonctionne, ça me gêne d’un point de vue intellectuel de ne pas savoir d’où vient le souci.
De ce que je lis, la probabilité pour que ça vienne de ma shield est élevée, c’est ça ?
J’utilise Wemos Teleinfo sur une S2 mini.

Oui je suis d’accord avec toi. C’est pour ça que pour bien comprendre il faudrait regarder le signal en entrée de l’optocoupleur, en sortie ,et en sortie du FET de Facon à voir quel est l’étage qui écrase le signal et génère des erreurs.
La modification des résistances est totalement empirique mais fonctionnelle
Pour que ce soit intellectuellement satisfaisant il faut un oscilloscope …. Pas évident !

Salut @SebCaps,

pour info, j’ai réussi à trouver du temps pour me remettre à ce projet. J’ai passé du temps pour tester chaque composant et j’ai fini par trouver que les pins de mon transistor ne correspondaient pas à la spéc classique du BS170 ! Acheté sur AliExpress, c’est peut-être pas étonnant. :smiley:

Une fois le branchement refait, tout marche à merveille !

Merci de votre support !

2 « J'aime »

Salut à tous,
Petite contribution: interface linky avec un esp8266 un circuit 6N138 et une diode 1N4148 et 3 resistances …

Bon amusement.

Bonsoir,
Je suis un pro des montages électroniques, et je peux vous dire que les erreurs sur plaque d’essai sont courantes chez les amateurs et professionnels.
Il faut passer sur circuit imprimé dès que possible.
Bien sûr, à condition que le montage est fonctionnel.

Salut,

Alors, dans mon cas, j’ai galéré avec le circuit proto sur breadboard surtout parce que les pins de mon BS170 ne correspondaient pas à la spéc !

Ensuite, au passage sur circuit proto avec soudure, j’ai cramé 3 transistors car ne je ne savais pas qu’ils étaient sensibles à la chaleur du fer à souder :rofl:

Enfin, j’ai réussi à avoir un circuit soudé pas si dégueulasse en soudant des connecteurs pour le transistor afin d’éviter de le chauffer. C’est moche, mais suffisamment compact et surtout très fonctionnel !


Bonne journée !