Téléinfo via wifi

Ton nouveau linky doit être de base en mode historique
Donc pas 9600

Je confirme qu’il est en historique :

Du coup j’ai changé le code comme suit :

substitutions:
  name: teleinfo
  
esphome:
  name: ${name}
  platform: ESP32
  board: nodemcu-32s
  includes:
  - uart_read_line_sensor.h


wifi:
  networks:
  - ssid: !secret wifi_ssid
    password: !secret wifi_pass


  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Teleinfo Fallback Hotspot"
    password: !secret wifi_pass

web_server:
  port: 80

captive_portal:

# Enable logging
logger:
  level: VERBOSE #makes uart stream available in esphome logstream
  baud_rate: 0 #disable logging over uart

# Enable Home Assistant API
api:

ota:

uart:
  id: uart_bus
##  tx_pin: GPIO1
  rx_pin: GPIO3
  #baud_rate: 115200
  #baud_rate: 9600
  baud_rate: 1200
  parity: EVEN
  data_bits: 7

text_sensor:
  - platform: custom
    lambda: |-
      auto my_custom_sensor = new UartReadLineSensor(id(uart_bus));
      App.register_component(my_custom_sensor);
      return {my_custom_sensor};
    text_sensors:
      id: "uart_readline"

Cependant toujours rien dans les logs :

INFO Reading configuration /config/esphome/teleinfo.yaml...
INFO Starting log output from teleinfo.local using esphome API
INFO Successfully connected to teleinfo.local
[21:08:59][I][app:102]: ESPHome version 2022.3.1 compiled on Aug 29 2022, 17:00:23
[21:08:59][C][wifi:491]: WiFi:
[21:08:59][C][wifi:353]:   Local MAC:  [redacted]
[21:08:59][C][wifi:354]:   SSID: [redacted]
[21:08:59][C][wifi:355]:   IP Address:  [redacted]
[21:08:59][C][wifi:357]:   BSSID: [redacted]
[21:08:59][C][wifi:358]:   Hostname: 'teleinfo'
[21:08:59][C][wifi:360]:   Signal strength: -41 dB ▂▄▆█
[21:08:59][V][wifi:362]:   Priority: 0.0
[21:08:59][C][wifi:364]:   Channel: 9
[21:08:59][C][wifi:365]:   Subnet: 255.255.255.0
[21:08:59][C][wifi:366]:   Gateway: 192.168.68.1
[21:08:59][C][wifi:367]:   DNS1: 192.168.1.254
[21:09:00][C][wifi:368]:   DNS2: 192.168.68.1
[21:09:00][C][logger:233]: Logger:
[21:09:00][C][logger:234]:   Level: VERBOSE
[21:09:00][C][logger:235]:   Log Baud Rate: 0
[21:09:00][C][logger:236]:   Hardware UART: UART0
[21:09:00][C][uart.arduino_esp32:107]: UART Bus:
[21:09:00][C][uart.arduino_esp32:109]:   RX Pin: GPIO3
[21:09:00][C][uart.arduino_esp32:111]:   RX Buffer Size: 256
[21:09:00][C][uart.arduino_esp32:113]:   Baud Rate: 1200 baud
[21:09:00][C][uart.arduino_esp32:114]:   Data Bits: 7
[21:09:00][C][uart.arduino_esp32:115]:   Parity: EVEN
[21:09:00][C][uart.arduino_esp32:116]:   Stop bits: 1
[21:09:00][C][captive_portal:088]: Captive Portal:
[21:09:00][C][web_server:129]: Web Server:
[21:09:00][C][web_server:130]:   Address: teleinfo.local:80
[21:09:00][C][mdns:084]: mDNS:
[21:09:00][C][mdns:085]:   Hostname: teleinfo
[21:09:00][V][mdns:086]:   Services:
[21:09:00][V][mdns:088]:   - _esphomelib, _tcp, 6053
[21:09:00][V][mdns:090]:     TXT: version = 2022.3.1
[21:09:00][V][mdns:090]:     TXT: mac = 3c610531d09c
[21:09:00][V][mdns:090]:     TXT: platform = ESP32
[21:09:00][V][mdns:090]:     TXT: board = nodemcu-32s
[21:09:00][C][ota:085]: Over-The-Air Updates:
[21:09:00][C][ota:086]:   Address: teleinfo.local:3232
[21:09:00][C][api:138]: API Server:
[21:09:00][C][api:139]:   Address: teleinfo.local:6053
[21:09:00][C][api:143]:   Using noise encryption: NO

J’ai essayé aussi en mettant les sensors Index , VA & co et toujours rien.
J’ai la vague impression qu’un composant est défaillant, je vais essayer de trouver du rab et de refaire sur une carte de test.

As tu essayé avec mon code ?

pourquoi fais tu le
includes: - uart_read_line_sensor.h ?

quel model d’ ESP utilises tu ?

de mémoire il faut désactiver l’uart spécifique pour les log (qui est d’après ce que j’ai compris ( mais a confirmer) l’uart0
voir les lignes dans mon code

logger:
  baud_rate: 0

d’après ce que je vois c’est l’uart0 que tu utilises
essaye plutot d’utiliser l’uart1 ( hardware lui aussi) c’est pour cela que j’utilise la pin 16

voir pinout ci dessous

En fait j’utilise le code de Jpsy (post de mai 2021)pour avoir uniquement les logs vu que mon code initial ne fonctionne plus.

J’ai mis le tien pour voir et j’obtiens ce résultat :

INFO Reading configuration /config/esphome/teleinfo.yaml...
INFO Detected timezone 'Europe/Paris'
INFO Starting log output from teleinfo.local using esphome API
INFO Successfully connected to teleinfo.local
[21:44:51][I][app:102]: ESPHome version 2022.3.1 compiled on Aug 30 2022, 21:39:15
[21:44:51][C][wifi:491]: WiFi:
[21:44:51][C][wifi:353]:   Local MAC: [redacted]
[21:44:51][C][wifi:354]:   SSID: 'TP-Link'[redacted]
[21:44:51][C][wifi:355]:   IP Address: [redacted]
[21:44:51][C][wifi:357]:   BSSID: 60:32:B1:1D:4B:BE[redacted]
[21:44:51][C][wifi:358]:   Hostname: 'teleinfo'
[21:44:51][C][wifi:360]:   Signal strength: -42 dB ▂▄▆█
[21:44:51][C][wifi:364]:   Channel: 9
[21:44:51][C][wifi:365]:   Subnet: 255.255.255.0
[21:44:51][C][wifi:366]:   Gateway: [redacted]
[21:44:51][C][wifi:367]:   DNS1: [redacted]
[21:44:51][C][wifi:368]:   DNS2: [redacted]
[21:44:51][C][logger:233]: Logger:
[21:44:51][C][logger:234]:   Level: DEBUG
[21:44:51][C][logger:235]:   Log Baud Rate: 0
[21:44:51][C][logger:236]:   Hardware UART: UART0
[21:44:51][C][uart.arduino_esp32:107]: UART Bus:
[21:44:51][C][uart.arduino_esp32:108]:   TX Pin: GPIO17
[21:44:51][C][uart.arduino_esp32:109]:   RX Pin: GPIO16
[21:44:51][C][uart.arduino_esp32:111]:   RX Buffer Size: 256
[21:44:51][C][uart.arduino_esp32:113]:   Baud Rate: 1200 baud
[21:44:51][C][uart.arduino_esp32:114]:   Data Bits: 7
[21:44:51][C][uart.arduino_esp32:115]:   Parity: EVEN
[21:44:51][C][uart.arduino_esp32:116]:   Stop bits: 1
[21:44:51][C][template.text_sensor:021]: Template Sensor 'esp compteur - Uptime'
[21:44:51][C][template.text_sensor:021]:   Icon: 'mdi:clock-start'
[21:44:51][C][uptime.sensor:031]: Uptime Sensor 'compteur Uptime'
[21:44:51][C][uptime.sensor:031]:   State Class: 'total_increasing'
[21:44:51][C][uptime.sensor:031]:   Unit of Measurement: 's'
[21:44:51][C][uptime.sensor:031]:   Accuracy Decimals: 0
[21:44:51][C][uptime.sensor:031]:   Icon: 'mdi:timer-outline'
[21:44:51][C][teleinfo:189]: TeleInfo:
[21:44:51][C][teleinfo_text_sensor:009]:   Teleinfo Text Sensor 'optarif'
[21:44:51][C][teleinfo_text_sensor:009]:   Teleinfo Text Sensor 'ptec'
[21:44:51][C][teleinfo_sensor:012]:   Teleinfo Sensor 'hchc'
[21:44:51][C][teleinfo_sensor:012]:     State Class: ''
[21:44:51][C][teleinfo_sensor:012]:     Unit of Measurement: 'Wh'
[21:44:52][C][teleinfo_sensor:012]:     Accuracy Decimals: 0
[21:44:52][C][teleinfo_sensor:012]:     Icon: 'mdi:Counter'
[21:44:52][C][teleinfo_sensor:012]:   Teleinfo Sensor 'hchp'
[21:44:52][C][teleinfo_sensor:012]:     State Class: ''
[21:44:52][C][teleinfo_sensor:012]:     Unit of Measurement: 'Wh'
[21:44:52][C][teleinfo_sensor:012]:     Accuracy Decimals: 0
[21:44:52][C][teleinfo_sensor:012]:     Icon: 'mdi:Counter'
[21:44:52][C][teleinfo_sensor:012]:   Teleinfo Sensor 'papp'
[21:44:52][C][teleinfo_sensor:012]:     State Class: ''
[21:44:52][C][teleinfo_sensor:012]:     Unit of Measurement: 'VA'
[21:44:52][C][teleinfo_sensor:012]:     Accuracy Decimals: 0
[21:44:52][C][teleinfo_sensor:012]:     Icon: 'mdi:flash'
[21:44:52][C][homeassistant.time:010]: Home Assistant Time:
[21:44:52][C][homeassistant.time:011]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[21:44:52][C][status:034]: Status Binary Sensor 'ESP32_TIC'
[21:44:52][C][status:034]:   Device Class: 'connectivity'
[21:44:52][C][restart:022]: Restart Switch 'Restart esp32_TIC'
[21:44:52][C][restart:022]:   Icon: 'mdi:restart'
[21:44:52][C][captive_portal:088]: Captive Portal:
[21:44:52][C][web_server:129]: Web Server:
[21:44:52][C][web_server:130]:   Address: teleinfo.local:80
[21:44:52][C][mdns:084]: mDNS:
[21:44:52][C][mdns:085]:   Hostname: teleinfo
[21:44:52][C][ota:085]: Over-The-Air Updates:
[21:44:52][C][ota:086]:   Address: teleinfo.local:3232
[21:44:52][C][api:138]: API Server:
[21:44:52][C][api:139]:   Address: teleinfo.local:6053
[21:44:52][C][api:143]:   Using noise encryption: NO
[21:44:52][C][wifi_signal.sensor:009]: WiFi Signal 'compteur WiFi Signal'
[21:44:52][C][wifi_signal.sensor:009]:   Device Class: 'signal_strength'
[21:44:52][C][wifi_signal.sensor:009]:   State Class: 'measurement'
[21:44:52][C][wifi_signal.sensor:009]:   Unit of Measurement: 'dBm'
[21:44:52][C][wifi_signal.sensor:009]:   Accuracy Decimals: 0
[21:45:02][D][sensor:125]: 'compteur Uptime': Sending state 222.23900 s with 0 decimals of accuracy
[21:45:05][D][sensor:125]: 'compteur WiFi Signal': Sending state -42.00000 dBm with 0 decimals of accuracy
[21:45:50][D][text_sensor:067]: 'esp compteur - Uptime': Sending state '3m 42s'
[21:46:02][D][sensor:125]: 'compteur Uptime': Sending state 282.24200 s with 0 decimals of accuracy
[21:46:05][D][sensor:125]: 'compteur WiFi Signal': Sending state -40.00000 dBm with 0 decimals of accuracy
[21:46:20][I][ota:105]: Boot seems successful, resetting boot loop counter.
[21:46:20][D][esp32.preferences:114]: Saving preferences to flash...
[21:46:50][D][text_sensor:067]: 'esp compteur - Uptime': Sending state '4m 42s'

Je suis presque sûr que j’ai un composant de grillé :wink:

hello

question bête

tu as bien redirigé le drain du mosfet vers le GPIO 16 ?

@Comperta un composant hs est peut être bien la cause, je viens de l’expérimenter, sur 5 optocoupleurq, 2 seulement de ok, tout les autres éléments étant par ailleurs identiques. Bon a 0.2€ la pièce pas grave, faut juste penser à en prendre un peu plus, et monter sur une breadboard avant de sortir le fer…

Pas de question bête :slight_smile: @jrvrcd , je suis bien sur le 16.
@SebCaps Vu que dans mon ancienne ancienne maison tout était ok, je penche vraiment pour le composant HS…faut juste que je retrouve dans les cartons celui qui contient les pièces de remplacement et la breadboard :slight_smile:

Merci à vous tous, c’est réparti :wink:
Au final c’était R1 qui était mal soudée et donc débranchée :slight_smile:

1 « J'aime »

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