Téléinfo via wifi

Oui absolument! J’obtiens toutes les données en mode Standard. Le journal du MCU dans ESPHome affiche également les étiquettes reconnues.

Avez-vous vraiment changé le mode de le Linky?
Ou est-il possible que votre circuit optocoupleur pose des problèmes à 9600 bauds?

Ma première étape a été de vérifier la connexion de données sans le composant Teleinfo. Je l’ai fait avec une configuration ESPHome différente. Cela lit simplement les données ligne par ligne à 9600 bauds et les affiche dans le journal:

esphome:
  name: mcu_d1_mini_01
  platform: ESP8266
  board: d1_mini

  build_path: mcu_d1_mini_01_rs232

  includes:
  - uart_read_line_sensor.h

wifi:
  ssid:     !secret fritzbox_wlan_sid
  password: !secret fritzbox_wlan_pwd

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "D1 mini 01"
    password: !secret esps_fallback_hotspot_pwd

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:
  password: !secret esps_api_pwd

ota:
  password: !secret esps_ota_pwd

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"

De plus, vous devez créer le fichier /config/esphome/uart_read_line_sensor.h:

#include "esphome.h"

class UartReadLineSensor : public Component, public UARTDevice, public TextSensor {
 public:
  UartReadLineSensor(UARTComponent *parent) : UARTDevice(parent) {}

  void setup() override {
    // nothing to do here
  }

  int readline(int readch, char *buffer, int len)
  {
    static int pos = 0;
    int rpos;

    if (readch > 0) {
      switch (readch) {
        case '\n': // Ignore new-lines
          break;
        case '\r': // Return on CR
          rpos = pos;
          pos = 0;  // Reset position index ready for next time
          return rpos;
        default:
          if (pos < len-1) {
            buffer[pos++] = readch;
            buffer[pos] = 0;
          }
      }
    }
    // No end of line has been found, so return -1.
    return -1;
  }

  void loop() override {
    const int max_line_length = 80;
    static char buffer[max_line_length];
    while (available()) {
      if(readline(read(), buffer, max_line_length) > 0) {
        publish_state(buffer);
      }
    }
  }
};

Avec ce programme, j’obtiens les données suivantes dans le journal:

[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'ADSC	0418.........	A'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'VTIC	02	J'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'DATE	E210520033243		7'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'NGTF	      BASE      	<'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'LTARF	      BASE      	F'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EAST	020102629	%'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASF01	020102629	8'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASF02	000000000	#'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASF03	000000000	$'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASF04	000000000	%'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASF05	000000000	&'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASF06	000000000	''
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASF07	000000000	('
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASF08	000000000	)'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASF09	000000000	*'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASF10	000000000	"'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASD01	020102629	6'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASD02	000000000	!'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASD03	000000000	"'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'EASD04	000000000	#'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'IRMS1	000	.'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'IRMS2	001	0'
[03:32:40][D][text_sensor:015]: 'uart_readline': Sending state 'IRMS3	002	2'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'URMS1	237	F'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'URMS2	233	C'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'URMS3	239	J'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'PREF	30	B'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'PCOUP	30	\'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'SINSTS	00639	X'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'SINSTS1	00063	@'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'SINSTS2	00156	D'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'SINSTS3	00420	?'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'SMAXSN	E210520003340	05013	''
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'SMAXSN1	E210520003338	01549	)'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'SMAXSN2	E210520003338	01672	''
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'SMAXSN3	E210520030914	02638	+'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'SMAXSN-1	E210519084029	05225	_'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'SMAXSN1-1	E210519065313	01482	L'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'SMAXSN2-1	E210519071212	01734	H'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'SMAXSN3-1	E210519194707	02972	]'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'CCASN	E210520033000	01716	7'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'CCASN-1	E210520030000	00434	N'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'UMOY1	E210520033000	234	$'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'UMOY2	E210520033000	231	"'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'UMOY3	E210520033000	243	&'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'STGE	003A0001	:'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'MSG1	PAS DE          MESSAGE         	<'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'PRM	055156........	3'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'RELAIS	000	B'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'NTARF	01	N'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'NJOURF	00	&'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'NJOURF+1	00	B'
[03:32:41][D][text_sensor:015]: 'uart_readline': Sending state 'PJOURF+1	00008001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTIL'