J’ai ouvert un message d’erreur:
J’ai trouvé la source du problème:
Un Linky triphasé en mode Standard crée 53 étiquettes différentes avec une longueur totale de données de plus de 1300 octets. C’est plus que le MAX_BUF_SIZE
réservé de 1024 octets dans le composant « Teleinfo ». D’où les messages de Internal buffer full
.
Si on augmente le MAX_BUF_SIZE
à 2048, le problème est résolu.
Voici mon PR correspondant:
https://github.com/esphome/esphome/pull/1802
Cool ca m’intéresse ca je vais voir ca. Merci
@Jpsy
en attendant le fix de esphome, tu peux expliquer comment fixer temporairement, stp.
→ Chmod on file teleinfo.h to pass PR checks
Merci
Vous devez créer le dossier suivant:
/config/esphome/custom_components/teleinfo/
Après vous copiez les quatre fichiers de le repo suivant dans le nouveau dossier: https://github.com/esphome/esphome/tree/dev/esphome/components/teleinfo
Enfin, modifiez le fichier teleinfo.h et changez la valeur de MAX_BUF_SIZE de 1024 à 2048.
La prochaine fois que vous compilerez dans ESPHome, le nouveau code sera utilisé automatiquement.
@Jpsy
j’ai appliqué et j’ai bien après compilation dans /config/esphome/mon_esp/src/esphome/components/teleinfo/ le fichier teleinfo.h avec : static const uint16_t MAX_BUF_SIZE = 2048;
Donc le custom fonctionne.
Mais malgré tout aucune valeur de la teleinfo.
J’ai même utilisé ton yaml dans ton incident (1802). Vide aussi…
Pourtant cette config fonctionnait quand le linky etait en historique
Tu confirmes que pour toi cela fonctionne en mode Standard ?
Si tu as une idée …
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'
Oh, et avez-vous changé les noms des étiquettes? Le mode standard utilise des étiquettes différentes du mode historique!
Si ce deuxième PR est accepté, nous aurons également un schéma de circuit dans la documentation ESPHome Teleinfo: Teleinfo: fix tag_name and add circuit example by Jpsy · Pull Request #1185 · esphome/esphome-docs · GitHub
Dans ce PR, j’ai également corrigé la propriété actuellement incorrecte tag
→ tag_name
.
@Jpsy
Oui les etiquettes etaient changées pour le mode standard
Tout fonctionne et avec ton debug code et avec mon fichier yaml et surtout ton conseil pour le fix temporaire en attendant la correction officielle esphome teleinfo.
Je pense maintenant que c’etait un probleme de fils et de cables, vu qu j’ai du toucher pour remettre un wemos.Je ne suis pas bon en soudure…
Merci de tes conseils et pour declarer le pb esphome.
Pierre
Hello Sylvain.
D’après ton code, je devrais avoir une mesure toutes les 2 secondes (update_interval: 2s).
Hors je vous dans la base InfluxDB qu’il y a une valeur par seconde .
A quoi sert cette valeur de 2 secondes ?
Je souhaite utiliser ces valeurs pour calculer des W.h sous grafana.
J’ai tenté la fonction integral mais elle ne donne rien de cohérent.
Comment fais tu ?
Merci d’avance
Phil
J’ai créé un nouveau PR pour adresser d’autres problèmes essentielles du mode standard de Linky:
https://github.com/esphome/esphome/pull/1829
Avec ce PR, il est désormais possible de lire des étiquettes contenant un horodatage. Ces étiquettes n’ont renvoyé que 0 jusqu’à présent. Il est également possible de lire l’horodatage soi-même dans un capteur. Cela peut être utilisé, par exemple, pour lire l’heure de la charge la plus élevée en étiquette SMAXSN.
Pour installer le PR directement:
- Créez ce dossier:
/config/esphome/custom_components/teleinfo/
- Copiez les quatre fichiers suivants dans le nouveau dossier: esphome/esphome/components/teleinfo at teleinfo_standard_mode · Jpsy/esphome · GitHub
La nouvelle documentation se trouve ici: https://deploy-preview-1197–esphome.netlify.app
De mon avis avec ça il ne manque qu’une seule fonction à réaliser pour le mode standard:
Lire des messages et des informations textuelles avec des capteurs de type Text Sensor. Peut-être je vais addresser ça plus tard.
PS: Si vous avez testé le PR chez vous, vous êtes invités à laisser un commentaire avec confirmation ou un message d’erreur à Github.
Bonjour,
Depuis le changement du BS170, tout fonctionne sauf que j’ai énormément de bad CRC.
Je suis en mode historique . Le circuit est à 20 cm de la sortie du TIC.
En fait, je ne récupère que moins du 1/3 des valeurs ce qui m’empêche de faire des calculs sous grafana (sur une période d’une heure, seulement moins de 1000 mesure au lieu des 3600). L’intégration des valeurs donne un résultat aléatoire .
N’ayant pas d’oscilloscope, je ne peux pas analyser les signaux jusqu’à l’entrée de l’ESP32.
qui
Qui aurait une piste ?
Merci d’avance
Philippe
Extrait du log :
[07:21:27][I][app:105]: ESPHome version 1.17.2 compiled on May 14 2021, 16:37:09
[07:21:31][E][teleinfo:036]: bad crc: got 51 except 42
[07:21:33][E][teleinfo:036]: bad crc: got 79 except 76
[07:21:39][E][teleinfo:036]: bad crc: got 79 except 67
[07:21:43][E][teleinfo:036]: bad crc: got 79 except 67
[07:21:47][E][teleinfo:036]: bad crc: got 79 except 67
[07:21:53][E][teleinfo:036]: bad crc: got 51 except 42
[07:21:55][E][teleinfo:036]: bad crc: got 79 except 76
[07:22:01][E][teleinfo:036]: bad crc: got 79 except 67
[07:22:05][E][teleinfo:036]: bad crc: got 79 except 67
[07:22:09][E][teleinfo:036]: bad crc: got 79 except 67
J’essaierais de réduire la valeur de R1. 500 ohms ne devraient pas être un problème. Le voltage effectiv à I1 / I2 est de 4 à 5 volts. Alors même 250 ohms seraient OK.
Merci je vais essayer
Phil
Bonjour a tous
Tout fonctionne très bien chez moi avec ce fix #2
Linky/mode standard/pitinfo1.3/wemos
les logs donnent bien des infos pour un controle. (Conso et production)
Juste ce message qui revient:
[15:01:16](Message skipped because it was too big to fit in TCP buffer - This is only cosmetic)
Pierre
Je viens de tester en mettant une 1k en // de la 1k. Ça ne change rien. Il n’y a que moins de 25% de trames bonnes
J’ai aussi testé sans succès une autre alim et un autre câble usb .
Une autre piste ?
Cela signifie que le côté entrée de l’optocoupleur n’est probablement pas la source de l’erreur.
Du côté de la sortie, des interférences électro-magnetique peuvent entraîner des problèmes. Les signaux Wifi en particulier peuvent être une source. Soit d’un point d’accès Wifi proche, soit du MCU lui-même. J’essaierais de protéger la section entre l’optocoupleur et le MOSFET en particulier.
Comment protéger ? Blindages ? Capas ?