Mon module de téléinformation (TIC) wifi vers MQTT pour compteur linky et autres

EDIT : Avec ESPHome 2021.9.3 c’est bien mieux, même s’il semble que si on active le chiffrement, il faut supprimer l’appareil de HA et le rajouter sinon on a des comportements assez étrange : affichage toujours en double dans les Intégrations à reconfigurer et au redémarrage de HA les entités sont indisponibles.
ça semble être inhérent aux ESP8266.

Hello,

Quelqu’un a-t-il tenté d’activer le chiffrement de l’API ESPHome pour le Téléinfokit ?

Parce que ma tentative d’hier s’est soldée par un comportement des plus étrange : j’avais deux appareils ESPHome marqué comme étant à reconfigurer dans HA (Configuration->Intégrations) :

  • L’une indique à chaque fois que la clé n’est pas valide
  • L’autre indique qu’il est impossible de s’y connecter à chaque fois qu’on indique la clé.

En désactivant le chiffre ment, les choses reviennent à la normal, si ce n’est que la notification indiquant qu’au moins une intégration nécessite d’être reconfigurée restait affichée jusqu’à ce que je redémarre Home Assistant…

Pardon j’avais oublié de préciser quand bien sur mon compteur est en mode standard

j’ai un message d’erreur des les logs : linky internal buffer full.

J’ai trouvé le code de @Jpsy pour voir les logs du bus uart :

[15:13:00][D][text_sensor:067]: ‹ uart_readline ›: Sending state ’ @"« x x x $x nx 0 0 0 » x x’

ca ressemble pas à ce que je devrais recevoir …

Tu as quelle version de esphome ?
Car je crois qu’il y a eu des modifs sur le sujet
Pour moi on est en 2021.9.2

Je suis sur la 2021.9.2 je me demande si c’est pas hardware le problème mais je suis nul en électronique…

En faisant un tour dans les commits sur ESPHome j’ai cru lire qu’il y avait effectivement eu des correctifs pour le mode standard mais je n’ai pas l’impression qu’ils soient intégrés en stable, pas trouvé dans les derniers changelog, le dernier correctif date du 27 septembre. ça concerne un souci de taille mémoire allouée et de traitement de timestamp pour certaines valeurs.
Il va probablement faloir attendre ESPHome 2021.10 pour que ça soit intégré.

Oui voir post 219 de jpsy.
Effectivement je ne sais pas si ce pr est passé
https://forum.hacf.fr/t/teleinfo-via-wifi/1077/224
Le CR a été transféré dans

J’ignore ou il en est
Phil

J’avais testé la branche dev aussi, ce n’était pas mieux, du coup, je vais tenter ce soir un custom_components avec le code du github de @Jpsy.

Merci pour l’aide je vous tiens au courant !

On parle bien de la même chose :slight_smile: selon les notes de versions ça n’a pas encore été intégré en stable et après vérification, la branche « release » n’a pas les changements, dernier changement sur teleinfo le premier août.
J’avance la 2021.10 mais apparemment une 2021.9.4 est prévue…

Bonjour à tous :slight_smile:

Bon j’ai pris mon courage à deux mains et je me suis lancé dans l’aventure ESPHOME !

Après moult découverte et autres divers achats (Le module pour flasher), j’ai réussi à flasher mon module avec ESPHOME comme un grand et tout fonctionne parfaitement.

J’ai même ajouté l’info HP/HC me permettant de lancer des automatisations sous HA si d’autres sont intéressé :slight_smile:

text_sensor:
  - platform: teleinfo
    tag_name: "PTEC"
    id: ptec
    name: "Grid tariff"
    icon: mdi:information
    teleinfo_id: myteleinfo
  # - platform: teleinfo
  #   tag_name: "ADCO"
  #   name: "Grid Linky Address"
  #   teleinfo_id: myteleinfo
  # - platform: teleinfo
  #   tag_name: "ISOUSC"
  #   name: "Grid subscribed current"
  #   teleinfo_id: myteleinfo
  # - platform: teleinfo
  #   tag_name: "IMAX"
  #   name: "Grid max current"
  #   teleinfo_id: myteleinfo

Par contre, vu mon niveau pour le moment… Il y a bien une chose que j’aimerai faire mais j’aurai besoin d’aide des plus expérimentés d’entre-vous !
J’aimerai que l’écran Oled soit éteint/off par défaut lors du reboot.

J’ai bien essayé de créer mon propre switch mais il me manque surement une « logique » car je n’arrive pas à le lier à l’id oled… Bref je n’y arrive pas.

Help…

1 « J'aime »

C’était plus facile que je ne le pensais… Il existe une fonction « on_boot » :sunglasses:

Pour les curieux, voici mon ficher de configuration :

teleinfokit.yaml
# ESPHome configuration file for teleinfokit module https://342apps.net/module-teleinfokit/

substitutions:
  # customize name here
  device_name: teleinfokit
  upper_devicename: Teleinfokit
  sensor_name: Grid

esphome:
  name: $device_name
  platform: ESP8266
  board: esp01_1m
  # Turn off oled on boot
  on_boot:
    priority: 250
    then:
      - lambda: id(oled).turn_off();

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

# Enable Home Assistant API
api:
  password: !secret api_pass

ota:
  password: !secret ota_pass
  id: my_ota

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_key

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: $upper_devicename Fallback Hotspot
    password: !secret ap_key

captive_portal:

web_server:
  port: 80
  auth:
    username: admin
    password: !secret ap_key

uart:
  id: uart_bus
  rx_pin: GPIO3
  baud_rate: 1200
  parity: EVEN
  data_bits: 7

teleinfo:
  id: myteleinfo
  update_interval: 30s
  historical_mode: true

sensor:
  # Teleinfo sensors
  - platform: teleinfo
    tag_name: "HCHC"
    id: hchc
    name: $sensor_name energy offpeak
    unit_of_measurement: "kWh"
    accuracy_decimals: 3
    icon: mdi:transmission-tower
    device_class: energy
    state_class: total_increasing
    teleinfo_id: myteleinfo
    filters:
      - multiply: 0.001
  - platform: teleinfo
    tag_name: "HCHP"
    id: hchp
    name: $sensor_name energy peak
    unit_of_measurement: "kWh"
    accuracy_decimals: 3
    icon: mdi:transmission-tower
    device_class: energy
    state_class: total_increasing
    teleinfo_id: myteleinfo
    filters:
      - multiply: 0.001
  - platform: teleinfo
    tag_name: "PAPP"
    id: papp
    name: $sensor_name power
    unit_of_measurement: "VA"
    state_class: "measurement"
    icon: mdi:flash
    teleinfo_id: myteleinfo
  - platform: teleinfo
    tag_name: "IINST"
    id: iinst
    name: $sensor_name current
    unit_of_measurement: "A"
    device_class: current
    state_class: "measurement"
    icon: mdi:flash
    teleinfo_id: myteleinfo
  # Additional sensors
  - platform: wifi_signal
    name: $upper_devicename wifi signal
    update_interval: 60s
    disabled_by_default: true
  - platform: uptime
    name: $upper_devicename uptime
    id: uptime_sensor
    update_interval: 60s
    disabled_by_default: true
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: uptime_human
            state: !lambda |-
              int seconds = round(id(uptime_sensor).raw_state);
              int days = seconds / (24 * 3600);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds /  60;
              seconds = seconds % 60;
              return (
                (days ? String(days) + "d " : "") +
                (hours ? String(hours) + "h " : "") +
                (minutes ? String(minutes) + "m " : "") +
                (String(seconds) + "s")
              ).c_str();

text_sensor:
  # Teleinfo sensors
  - platform: teleinfo
    tag_name: "PTEC"
    id: ptec
    name: $sensor_name tariff
    icon: mdi:information
    teleinfo_id: myteleinfo
  - platform: teleinfo
    tag_name: "ADCO"
    name: $sensor_name linky address
    disabled_by_default: true
    teleinfo_id: myteleinfo
  - platform: teleinfo
    tag_name: "ISOUSC"
    name: $sensor_name subscribed current
    disabled_by_default: true
    teleinfo_id: myteleinfo
  - platform: teleinfo
    tag_name: "IMAX"
    name: $sensor_name max current
    disabled_by_default: true
    teleinfo_id: myteleinfo
  # Additional sensors
  - platform: template
    name: $upper_devicename uptime human readable
    disabled_by_default: true
    id: uptime_human
    icon: mdi:clock-start
  - platform: wifi_info
    ip_address:
      name: $upper_devicename IP address
      disabled_by_default: true
    ssid:
      name: $upper_devicename connected SSID
      disabled_by_default: true
    bssid:
      name: $upper_devicename connected BSSID
      disabled_by_default: true
    mac_address:
      name: $upper_devicename mac wifi address
      disabled_by_default: true

switch:
  # Restart button
  - platform: restart
    name: $upper_devicename Reboot
    disabled_by_default: true

i2c:
  sda: GPIO0
  scl: GPIO2

font:
  - file: "arial.ttf"
    id: arial_font
    size: 16

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x32"
    id: oled
    rotation: 180°
    address: 0x3C
    pages:
      - id: page1
        lambda: |-
          it.printf(0, 0, id(arial_font), "Power: %.0f VA", id(papp).state);
      - id: page2
        lambda: |-
          it.printf(0, 0, id(arial_font), "Current: %.0f A", id(iinst).state);
      - id: page3
        lambda: |-
          it.printf(0, 0, id(arial_font), "HP: %.0f", id(hchp).raw_state);
      - id: page4
        lambda: |-
          it.printf(0, 0, id(arial_font), "HC: %.0f", id(hchc).raw_state);
      - id: page5
        lambda: |-
          it.printf(0, 0, id(arial_font), "Tariff: %s", id(ptec).state.c_str());

interval:
  - interval: 5s
    then:
      - display.page.show_next: oled
      - component.update: oled

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO1
      mode: INPUT_PULLUP
      inverted: true
    name: teleinfokit_switch
    internal: true
    on_click:
      min_length: 50ms
      max_length: 350ms
      then:
        - lambda: if (id(oled).is_on()) id(oled).turn_off(); else id(oled).turn_on();

Mes ajouts par rapport à la version de @NicoP4 :

  • L’écran oled est éteint par défaut (On boot).
  • Ajout du webserver (Login: admin, password : Voir ap_key dans votre secrets.yaml
  • Ajout d’un bouton « reboot » dans l’UI du webserver
  • Les noms des sensors sont customisables (Voir substitutions). Cela m’a surtout permis d’éviter le chaos de nommage des entitées sous HA.
  • Ajout des informations ADCO/ISOUSC/IMAX du Linky (Ne s’affiche pas par défaut sous HA).
  • Ajout de divers stats (Wifi signal/IP/Uptime/etc…) internes du module Téléinfokit (Ne s’affiche pas par défaut sous HA).
  • Ajout du sensor HC/HP afin de synchroniser le tarif sur mes autres plugs.

1 « J'aime »

bonjour
je suis en esp home avec ce merveilleux module
j’avais un souci avec les graphiques.
juste sur le site @NicoP4 utilise sensor.puissance_consommee alors que sur le flash d’esphome c’est sensor.puissance_actuelle
puis
sensor.index_heure_pleine devient sensor.index_heures_pleines avec des 's' voila une fois tout cela remplacés c’est nickel

stephane

C’est confirmé, le correctif pour les timestamp sera bien pour la version 2021.10 qui est en ce moment en beta.

Hello je suis revenu en mode historique et le module remarche très bien, je pense que c’est un problème hardware car j’ai testé toute les branches et le custom_components mais je n’avais que des données partielles et pas logiques. Pour mon usage l’historique me suffira de toute manière :slight_smile:

Intéressant tout ça !
Pour l’écran je procrastinais ça depuis un moment, merci :slight_smile:
ça pourrait être intéressant de le rendre configurable (avec une variable de substitution par exemple) comme ça on choisirait si on veut ou non ce comportement au moment de compiler le firmware.
Et le proposer par une pul request histoire que tout le monde en profite :wink:

Pour le serveur web par contre il faut savoir que ça consomme pas mal de ressources de l’ESP donc à mon avis il est à utiliser s’il y en a vraiment besoin.

EDIT : pour le sensor platform: uptime si tu ne souhaites pas l’afficher tu peux même le mettre en internal, comme ça l’uptime ne sera affiché que pour ton text sensor et le sensor de base ne servira que pour changer la valeur du text sensor.

tout ceci m’intéresse fortement (suivre ma conso en temps reel) mais cette solution n’est malheureusement pas faite pour moi, mon compteur linky est dans ma rue avec aucun moyen de tirer l’elec.
Connaissez vous un module qui se brancherait au linky pour remonter les info sur HA, du meme style que la clé de total Energy?

Bonjour à tous !

@KKox je suis curieux tu as demandé à changer le mode de téléinfo standard/historique à ton fournisseur ? Une simple demande leur suffit ? J’ai du mode historique chez moi et j’aurais bien voulu tester le mode standard pour le firmware (après je peux aussi leur demander ^^')

Vous vous êtes bien appropriés le firmware ESPHome c’est cool y’a de belles évolutions proposées dans tout ça :slight_smile:

De mon coté j’essaie de trouver le temps de faire des évols sur mon firmware pour le rendre beaucoup plus générique aux modes historique, standard, triphasé, etc. un peu comme ESPHome, ça sera bien plus pratique.
J’avance doucement mais j’avance :wink:

1 « J'aime »

@McFly a posté au sujet d’un projet qui te conviendrait mais je ne retrouve plus le post (après une recherche très sommaire) donc je t’invite à tenter un peu plus que moi :slight_smile:

Voilà une façon (un peu tordue) de rendre l’écran éteint au démarrage configurable avec une variable de substitution

LCD éteint configurable
# ESPHome configuration file for teleinfokit module https://342apps.net/module-teleinfokit/
substitutions:
  off_on_boot: 'false'

globals:
  - id: oled_on_boot
    type: bool
    initial_value: ${off_on_boot}

esphome:
  name: teleinfokit
  platform: ESP8266
  board: esp01_1m
  # oled state on boot
  on_boot:
    priority: -100
    then:
      - if:
          condition: 
            - lambda: return (id(oled_on_boot));
          then:
            - lambda: id(oled).turn_off();

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_key

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "TeleInfoKit"
    password: !secret ap_key

captive_portal:

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

# Enable Home Assistant API
api:
  password: !secret api_pass
  encryption:
    key: !secret encryption_key

ota:
  password: !secret ota_pass
  id: my_ota


uart:
  id: uart_bus
  rx_pin: GPIO3
  baud_rate: 1200
  parity: EVEN
  data_bits: 7

teleinfo:
  id: myteleinfo
  update_interval: 30s
  historical_mode: true

sensor:
  - platform: teleinfo
    tag_name: "HCHC"
    id: hchc
    name: "Index Heures Creuses"
    unit_of_measurement: "kWh"
    accuracy_decimals: 3
    icon: mdi:flash
    device_class: energy
    state_class: total_increasing
    teleinfo_id: myteleinfo
    filters:
      - multiply: 0.001
  - platform: teleinfo
    tag_name: "HCHP"
    id: hchp
    name: "Index Heures Pleines"
    unit_of_measurement: "kWh"
    accuracy_decimals: 3
    icon: mdi:flash
    device_class: energy
    state_class: total_increasing
    teleinfo_id: myteleinfo
    filters:
      - multiply: 0.001
  - platform: teleinfo
    tag_name: "PAPP"
    id: papp
    name: "Puissance Actuelle"
    unit_of_measurement: "VA"
    state_class: "measurement"
    icon: mdi:flash
    teleinfo_id: myteleinfo
  - platform: teleinfo
    tag_name: "IINST"
    id: iinst
    name: "Intensité Actuelle"
    unit_of_measurement: "A"
    device_class: current
    state_class: "measurement"
    icon: mdi:flash
    teleinfo_id: myteleinfo

i2c:
  sda: GPIO0
  scl: GPIO2

font:
  - file: "arial.ttf"
    id: arial_font
    size: 16

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x32"
    id: oled
    rotation: 180°
    address: 0x3C
    pages:
      - id: page1
        lambda: |-
          it.printf(0, 0, id(arial_font), "Conso: %.0f VA", id(papp).state);
      - id: page2
        lambda: |-
          it.printf(0, 0, id(arial_font), "Intensite: %.0f A", id(iinst).state);
      - id: page3
        lambda: |-
          it.printf(0, 0, id(arial_font), "HP: %.0f", id(hchp).raw_state);
      - id: page4
        lambda: |-
          it.printf(0, 0, id(arial_font), "HC: %.0f", id(hchc).raw_state);

interval:
  - interval: 5s
    then:
      - display.page.show_next: oled
      - component.update: oled

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO1
      mode: INPUT_PULLUP
      inverted: True
    name: teleinfokit_switch
    internal: true
    on_click:
      min_length: 50ms
      max_length: 350ms
      then:
        - lambda: if (id(oled).is_on()) id(oled).turn_off(); else id(oled).turn_on();

En suite, pour que l’écran soit off par défaut, pour compiler il faut faire esphome -s off_on_boot true compile teleinfokit.yml
Il y a sûrement plus propre mais de cette façon, si c’était intégré au firmware sur Github il n’y aurait pas à modifier le code, j’aime avoir le code exact du dépôt pour ne pas avoir à faire autre chose que git pull en cas de mise à jour :slight_smile:

Je suis chez Total un simple appel et il te change le mode , c’est gratuit. Après la première personne comprend pas il faut avoir le service technique !

Hello,

Je déconseille fortement la version 2021.10.0 en mode historique : on perd le PAPP.
Il semble qu’une valeur invalide soit récupérée et côté HA l’entité est toujours à « unknown ».
J’ai ouvert une issue : Teleinfo: PAPP get unknown value since 2021.10 · Issue #2585 · esphome/issues · GitHub

1 « J'aime »