HA-Teleinformation Linky-Mode Historique

Intro

C’est fait, j’ai enfin câblé la télé information de mon compteur Linky. Rien de bien méchant il suffit de se raccorder aux bornes i1/i2 du linky, le plus délicat fut le passage du câble de 60 ml entre le compteur Linky et mon tableau électrique.

Cet article traite le mode « Historique » du linky, il peut également communiqué en mode « Standard » plus élaboré, voir mon article sur le sujet.

Raccordement du Linky

Pré requis

Mes fichiers « .yaml » sont regroupés dans un dossier « config/packages ». J’utilise la directive « !include_dir_named packages » dans mon « configuration.yaml » très pratique pour organiser son HA.

Ci après un extrait du « configuration. yaml » dont la version à jour est disponible ici.


homeassistant:
  name: Crochon
  latitude: !secret latitude
  longitude: !secret longitude
  unit_system: metric
  packages: !include_dir_named packages
  external_url: !secret external-url
  internal_url: !secret internal-url

Choix du matériel

Les informations transmises par le Linky ne sont pas directement exploitables par un ESP, elles nécessitent un adaptateur, vous trouverez beaucoup de modèles sur le Net, perso j’ai choisi la facilité en achetant un module Wemos Teleinfo.

WeMos Teleinfo 2

C’est un module pas très cher, correctement étudié et bien fini, compatible avec les esp8266 et ESP32 Mini, qui dispose également d’une Led WS2812 RGB programmable, d’un connecteur I2C disponible pour un afficheur OLED ou autres capteurs compatibles, et d’une led indiquant l’état de la connexion avec le Linky qui se raccorde sur le bornier vert.

Perso j’utilise un L’ESP32 Mini ou ici , en effet l’ESP8266 est trop juste en puissance de calcul si on utilise l’intégration ESPHOME plus un afficheur, j’ai galéré avec, je ne le recommande pas, le constructeur du wemos téléinfo non plus d’ailleurs.

L’ESP32 Mini est un ESP32 au format ESP8266 D1, pratique si l’on souhaite utiliser des cartes d’extension, mais avec une puissance de calcul et de traitement bien supérieure.

Descriptif fonctionnel

Les compteurs Linky disposent de 2 modes de téléinformation :
• Le mode Historique, qui correspond à l’ancien mode des compteurs électroniques.
• Le mode Standard, qui est le nouveau format et qui comporte plus d’informations.

Vous trouverez les informations détaillées dans le document Enedis suivant:

J’ai utilisé dans un premier temps le mode historique du Linky, puis je suis passé au mode standard, le nombre d’informations disponibles est plus élevés, voir mon article sur le sujet.

Le module WEMOS Teleinfo est compatible, le changement de mode passe obligatoirement par une demande auprès de votre fournisseur d’énergie qui relaye vers Enedis.

Concernant l’intégration dans HA, pas de problème particulier grâce à « teleinfo » disponible sur ESP Home, il est compatible avec les deux modes, les différences étant dans la vitesse de transmission et la validation du mode historique ou pas:

Mode Historique

Mode Standard

Informations collectées

J’utilise le « W » et non le « VA » pour l’entité « PAPP » afin d’exploiter les « Statistiques Longues Durée » qui ne reconnait pas les « Volt Ampéres ». Pour mémoire, en monophasé P en W= P en VA multiplie cos phi, mais comme le Linky ne remonte pas le cos phi on se contentera d’un cos phi de 1, les puristes ne m’en voudront pas.

Je collecte les énergies Heures creuses « HCHC » et heures pleines »HPHC » en wh, je les additionne dans un « template » (Linky HPHC KWH) et divise par 1000 pour obtenir des kWh. C’est cette entité que j’utilise dans les « utility meter » de HA pour calculer mes consommations journalière, semaine, mois, année.

Je collecte également l’intensité instantanée « IINST » et l’intensité souscrite « ISOUSC », je calcule dans un « Template » « Linky I/Imax » le ratio entre les deux en %, ce qui me donne une idée de la réserve d’intensité disponible et plus tard, m’en servir pour vérifier si mon abonnement peut être revue à la baisse.

L’information PTEC nous indique si le tarif est en heure creuse ou heure pleine, variable utilisée dans l’automatisme de comptabilisation de l’énergie avec les « utility_meter ».

Code ESP

Si vous avez des difficultés de flashage avec ESPHome, parcourez mon article https://domo.rem81.com/home-assistant_esp-home/ cela devrait vous aider.

L’afficheur utilise une police de caractère « Arial », vous pouvez télécharger le fichier arial.ttf ici puis le transférer dans un dossier « fonts » de votre « /config/esphome ». Bien entendu vous pouvez utiliser une autre police de caractéres, « size » détermine la taille des caractères.

substitutions:
  device_name: esp124-tic
  adress_ip: "192.168.0.124"
  friendly_name: esp124
  time_timezone: "Europe/Paris"
  
esphome:
  name: ${device_name}
  platform: ESP32
  board: mhetesp32minikit
  platformio_options:
    lib_deps: NeoPixelBus@2.6.0
  on_boot:
    then:
      - light.control:
          id: led1
          brightness: 0.25
          state: on
wifi:
  networks:
    - ssid: !secret wifi_esp
      password: !secret mdpwifi_esp
      priority: 1
    - ssid: !secret wifi
      password: !secret mdpwifi
      priority: 0
  reboot_timeout: 5min

  manual_ip:
    static_ip: ${adress_ip}
    gateway: 192.168.0.1
    subnet: 255.255.255.0


# Enable logging
logger:
#  baud_rate: 0
# Enable Home Assistant API
api:

ota:

web_server:
  port: 80

font:
  - file: "fonts/arial.ttf"
    id: arial
    size: 15

i2c:
  sda: GPIO21 #D2=pin 19
  scl: GPIO22 #D1=pin 20
  scan: True
  id: bus_a
  
# 
uart:
  id: uart_a
  rx_pin: GPIO23
#  tx_pin: GPIO1
  baud_rate: 1200
  parity: EVEN
  data_bits: 7

teleinfo:
  id: myteleinfo
  uart_id: uart_a
  update_interval: 10s
  historical_mode: true
  
# Led WS2812 RGB  
light:
  - platform: partition
    name: led1
    id: led1
    default_transition_length: 0s
    segments:
      - id: rgb_led
        from: 0
        to: 0

  - platform: neopixelbus
    num_leds: 1
    pin: GPIO18
    name: "RGB strip"
    variant: ws2812
    id: rgb_led
    default_transition_length: 0s  


sensor:
  - platform: teleinfo
    id: hchc
    tag_name: "HCHC"
    name: "Linky HC Wh"
    unit_of_measurement: "Wh"
    icon: mdi:flash
    teleinfo_id: myteleinfo
    
  - platform: teleinfo
    id: hchp
    tag_name: "HCHP"
    name: "Linky HP Wh"
    unit_of_measurement: "Wh"
    icon: mdi:flash
    teleinfo_id: myteleinfo
 
  - platform: teleinfo
    id: papp
    tag_name: "PAPP"
    name: "Linky PAPP"
    unit_of_measurement: "W"
    device_class: "power"
    state_class: "measurement"  
    icon: mdi:flash
    teleinfo_id: myteleinfo
    on_value:
      - if:
          condition:
            sensor.in_range:
              id: papp
              below: 1000
          then: 
            - light.control:
                id: led1
                red: 0%
                green: 100% # vert
                blue: 0%
      - if:
          condition:
            sensor.in_range:
              id: papp
              above: 1000
              below: 3000
          then: 
            - light.control:
                id: led1
                red: 0%
                green: 0% # bleu
                blue: 100%
      - if:
          condition:
            sensor.in_range:
              id: papp
              above: 3000
          then: 
            - light.control:
                id: led1
                red: 100% #rouge
                green: 0%
                blue: 0%
           
    
  - platform: teleinfo
    id: isousc
    tag_name: "ISOUSC"
    name: "Linky I Sousc"
    unit_of_measurement: "A"
    icon: mdi:flash
    teleinfo_id: myteleinfo

  - platform: teleinfo
    id: iinst
    tag_name: "IINST"
    name: "Linky I Inst"
    unit_of_measurement: "A"
    icon: mdi:flash
    teleinfo_id: myteleinfo

  - platform: teleinfo
    id: imax
    tag_name: "IMAX"
    name: "linky I Max"
    unit_of_measurement: "A"
    icon: mdi:flash
    teleinfo_id: myteleinfo

  - platform: template
    name: "Linky I/Imax"
    id: i100
    icon: mdi:flash
    unit_of_measurement: "%"
    accuracy_decimals: 0
    lambda: |-
      return (id(iinst).state/id(isousc).state*100);

  - platform: template
    name: "Linky HPHC KWH"
    id: hphc_kwh
    icon: mdi:flash
    unit_of_measurement: "kWh"
    accuracy_decimals: 0
    lambda: |-
      return ((id(hchc).state+id(hchp).state)/1000);
      
  - platform: homeassistant
    name: "HCHP J"
    unit_of_measurement: "kWh"
    entity_id: sensor.energie_totale_linky_jour
    id: hphcj

  - platform: wifi_signal
    id: wif
    name: "${friendly_name} WiFi Signal Sensor"
    update_interval: 60s
    
  - platform: uptime
    id: uptime_seconds
    name: "${friendly_name} Uptime"
    update_interval: 60s
    unit_of_measurement: s
    accuracy_decimals: 0
    force_update: false
    icon: mdi:timer

text_sensor:
  - platform: teleinfo
    tag_name: "OPTARIF"
    name: "Linky OPTARIF"
    teleinfo_id: myteleinfo
    
  - platform: teleinfo
    tag_name: "PTEC"
    name: "Linky PTEC"
    teleinfo_id: myteleinfo

  - platform: template
    name: "${friendly_name} Uptime"
    update_interval: 60s
    icon: mdi:clock-start
    lambda: |-
      int seconds = (id(uptime_seconds).state);
      int days = seconds / (24 * 3600);
      seconds = seconds % (24 * 3600);
      int hours = seconds / 3600;
      seconds = seconds % 3600;
      int minutes = seconds /  60;
      seconds = seconds % 60;
      if ( days ) {
        return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else if ( hours ) {
        return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else if ( minutes ) {
        return { (String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else {
        return { (String(seconds) +"s").c_str() };
      }

#Etat de la connection
binary_sensor:
  - platform: status
    name: "${friendly_name} Status"

switch:   
  - platform: restart
    name: "${friendly_name} Restart"


display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    brightness: 100%
    lambda: |-
      it.printf(0,0,id(arial),"PuC=%.0f W",id(papp).state);
      it.printf(0,15,id(arial),"I Inst=%.0f A",id(iinst).state);
      it.printf(70,15,id(arial),"-%.0f %%",id(i100).state);
      it.printf(0,30,id(arial),"ConsoJ=%.0f kWh",id(hphcj).state);
      std::string tarif_ = id(tarif).state;
      it.printf(0,45,id(arial), "Tarif: %s", tarif_.c_str());  
      
   

Affichage local

J’affiche quelques valeurs en local sur un oled SSD1306 128×64, pratique pour une visu rapide à la puissance et l’intensité instantanée, du ratio I/imax et la conso du jour.

Je joue également avec la Led WS2812 RGB connectée sur le GPIO18. En fonction de la puissance la led change de couleur:

  • Verte de 0 à 1000 VA
  • Bleu entre 1000 et 3000 VA
  • Rouge si supérieure à 3000 VA
  • Les combinaisons sont infinies et facilement programmables.

Codes du fichier linky.yaml

On y retrouve:

  • les « utility meter » qui comptabilisent les energies consommées HC/HP par jour, semaine, mois, année
  • un ‘binary_sensor » HC utilisé dans l’affichage des graphiques de puissance permettant de matérialiser la zone HC
  • les « templates » qui cumulent les HC/HP des utility meter et calculent en € les coûts de consommations
####################################################
#                                                  #
#                       LINKY                      #
#                                                  #
####################################################


utility_meter:
# usage jour  
  energy_total_linky_usage_daily:
    source: sensor.linky_conso_totale_hphc
    cycle: daily
    tariffs:
      - hp
      - hc
# usage semaine
  energy_total_linky_usage_weekly:
    source: sensor.linky_conso_totale_hphc
    cycle: weekly
    tariffs:
      - hp
      - hc
# usage mois
  energy_total_linky_usage_monthly:
    source: sensor.linky_conso_totale_hphc
    cycle: monthly
    tariffs:
      - hp
      - hc
#usage an
  energy_total_linky_usage_yearly:
    source: sensor.linky_conso_totale_hphc
    cycle: yearly
    tariffs:
      - hp
      - hc

input_boolean:
  com_linky:
    name: Comm Linky OK=On

input_number:

  # Calcul des coûts journaliers
  cout_kwh_hp:
    name: Cout du Kwh HP
    min: 0
    max: 10
    unit_of_measurement: €
    icon: mdi:currency-eur
    step: 0.00001
    mode: box

  cout_kwh_hc:
    name: Cout du Kwh HC
    min: 0
    max: 10
    unit_of_measurement: €
    icon: mdi:currency-eur
    step: 0.00001
    mode: box

# Utilisé dans l'affichage des graphiques de puissance permettant de materialiser la zone HC
binary_sensor:
  - platform: template # = true si HC
    sensors:
      display_hp_hc:
        friendly_name: "HC"
        value_template: "{{ (states.sensor.linky_ptec.state == 'HC..') }}"

template:
# Consommation journalière HP + HC - addition des utility meter
  - sensor:
    - name: "Energie Totale Linky Jour"
      unique_id: "energy_total_linky_daily"
      state: >-
        {% set hp = states('sensor.energy_total_linky_usage_daily_hp') | float(default=0) | round(2) %}
        {% set hc = states('sensor.energy_total_linky_usage_daily_hc') | float(default=0) | round(2) %}
        {{ (hp + hc) | round(2) }}
      unit_of_measurement: "kWh"
      device_class: "energy"
      state_class: "total"  

# Consommation semaine HP + HC
    - name: "Energie Totale Linky weekly"
      unique_id: "energy_total_linky_weekly"
      state: >-
        {% set hp = states('sensor.energy_total_linky_usage_weekly_hp') | float(default=0) | round(2) %}
        {% set hc = states('sensor.energy_total_linky_usage_weekly_hc') | float(default=0) | round(2) %}
        {{ (hp + hc) | round(2) }}
      unit_of_measurement: "kWh"
      device_class: "energy"
      state_class: "total"  


# Consommation mensuelle HP + HC
    - name: "Energie Totale Linky Mois"
      unique_id: "energy_total_linky_monthly"
      state: >-
        {% set hp = states('sensor.energy_total_linky_usage_monthly_hp') | float(default=0) | round(2) %}
        {% set hc = states('sensor.energy_total_linky_usage_monthly_hc') | float(default=0) | round(2) %}
        {{ (hp + hc) | round(2) }}
      unit_of_measurement: "kWh"
      device_class: "energy"
      state_class: "total"  

# Consommation annuelle HP + HC
    - name: "Energie Totale Linky An"
      unique_id: "energy_total_linky_yearly"
      state: >-
        {% set hp = states('sensor.energy_total_linky_usage_yearly_hp') | float(default=0) | round(2) %}
        {% set hc = states('sensor.energy_total_linky_usage_yearly_hc') | float(default=0) | round(2) %}
        {{ (hp + hc) | round(2) }}
      unit_of_measurement: "kWh"
      device_class: "energy"
      state_class: "total"  

# Cout de l'Energie
# les couts du kWh HP et HC sont calculés dans excel en fonction des factures recues
# et saisis manuellement dans HA

    - name: "Cout Energy Total Jour HPHC"
      state: >-
        {% set hp = states('sensor.energy_total_linky_usage_daily_hp') | float(default=0) | round(2) %}
        {% set hc = states('sensor.energy_total_linky_usage_daily_hc') | float(default=0) | round(2) %}
        {% set chp = states('input_number.cout_kwh_hp') | float(default=0) | round(5) %}
        {% set chc = states('input_number.cout_kwh_hc') | float(default=0) | round(5) %}
        {{((hc*chc) + (hp*chp)) | round(2) }}
      unit_of_measurement: "€"
      device_class: "monetary"
      state_class: "total"  
      unique_id: "cout_energy_total_jour_hphc"

    - name: "Cout Energy Total Jour HP"
      state: >-
        {% set hp = states('sensor.energy_total_linky_usage_daily_hp') | float(default=0) | round(2) %}
        {% set chp = states('input_number.cout_kwh_hp') | float(default=0) | round(5) %}
        {{(hp*chp) | round(2) }}
      unit_of_measurement: "€"
      device_class: "monetary"
      state_class: "total"  
      unique_id: "cout_energy_total_jour_hp"
      
    - name: "Cout Energy Total Jour HC"
      state: >-
        {% set hc = states('sensor.energy_total_linky_usage_daily_hc') | float(default=0) | round(2) %}
        {% set chc = states('input_number.cout_kwh_hc') | float(default=0) | round(5) %}
        {{(hc*chc) | round(2) }}
      unit_of_measurement: "€"
      device_class: "monetary"
      state_class: "total"  
      unique_id: "cout_energy_total_jour_hc"

# Linky: Cumul HP+HC en kWh -> Utilisé dans utility meter
# sensor.linky_hphc_kwh est calculé dahns l'ESP
    - name: "Linky Conso Totale HPHC"
      unique_id: "linky_conso_totale_hphc"
      unit_of_measurement: "kWh"
      device_class: "energy"
      state_class: "total"  
      state: >-
        {% set hphc = states('sensor.linky_hphc_kwh') | float(default=0) | round(0) %}
        {% if (hphc)>10000 %}
          {{ (hphc) | round(0) }}
        {%endif%}          

Automatismes

Commutation de HP vers HC et Inversement

Il permet de permuter la tarification des utiliy meter en fonction du tarif récupéré dans le Linky (PTEC)

Code de l’automatisme

- id: '1642614758763'
  alias: 6_1_1 Energie Changement HP<->HC simplifié
  description: ''
  trigger:
  - platform: state
    entity_id: sensor.linky_ptec
    id: tarif_hc
    from: HP..
    to: HC..
  - platform: state
    entity_id: sensor.linky_ptec
    from: HC..
    to: HP..
    id: tarif_hp
  condition: []
  action:
  - choose:
    - conditions:
      - condition: trigger
        id: tarif_hc
      sequence:
      - service: utility_meter.select_tariff
        data:
          tariff: hc
        target:
          entity_id:
          - utility_meter.energy_total_linky_usage_daily
          - utility_meter.energy_total_linky_usage_monthly
          - utility_meter.energy_total_linky_usage_weekly
          - utility_meter.energy_total_linky_usage_yearly
    - conditions:
      - condition: trigger
        id: tarif_hp
      sequence:
      - service: utility_meter.select_tariff
        data:
          tariff: hp
        target:
          entity_id:
          - utility_meter.energy_total_linky_usage_daily
          - utility_meter.energy_total_linky_usage_monthly
          - utility_meter.energy_total_linky_usage_weekly
          - utility_meter.energy_total_linky_usage_yearly
    default: []
  mode: single

Automatisme de contrôle de la communication du Linky

Descriptif fonctionnel

Le but est de surveiller si la communication entre le Linky et HA est établie.

A chaque changement d’état de l’entité PAPP (puissance instantanée), l’automatisme est déclenché:

  • l' »input_boolean.com_linky » signifiant que la communication entre le linky et HA est OK est forcé sur On
  • Un délai d’une heure est déclenché,
  • si durant ce délai PAPP change d’état, l’automatisme est relancé (mode:restart) et « input_boolean.com_linky » reste sur On
  • sinon, passé ce délai, l' »input_boolean.com_linky » est forcé sur Off, et la communication est considérée en défaut, il sera remis sur On au prochain changement d’état de PAPP

Je surveillance la puissance PAPP, c’est la valeur plus évolutive, mais il arrive que quelques fois, surtout de nuit que la puissance reste stable pas et déclare donc un défaut fantôme.

En mode standard, nous pourrions utiliser l’entité « DATE ».

Code de l’automatisme:

- id: '1638118858848'
  alias: 2_2_2 Alarme_Notification Time Out Linky
  description: ' '
  trigger:
  - platform: state
    entity_id: sensor.linky_papp
  condition: []
  action:
  - service: input_boolean.turn_on
    target:
      entity_id: input_boolean.com_linky
  - delay:
      hours: 1
      minutes: 0
      seconds: 0
      milliseconds: 0
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.com_linky
  mode: restart

Blueprint Notification défaut communication:

J’exploite le défaut avec un blueprint « Nagging Alerting Notification Automation » plus pratique que l’intégration « alert » qui nécessite un redémarrage de HA à chaque modification. J’utilise ce blueprint dans d’autres cas de surveillance, portes, communication, etc..

- id: '1638119466260'
  alias: 2_1_11 Alarme Blueprints Notification Def Com Linky
  description: Blue Print
  use_blueprint:
    path: pavax/nagging_alert_notification.yaml
    input:
      condition_entity_state: 'on'
      sensor_entity: input_boolean.com_linky
      alert_state: 'off'
      alert_action:
      - service: notify.telegram
        data:
          message: Com Linky off Line{{-"\n"-}}{{states("sensor.date_time") }}
          title: Etat Reseau !!!
      - service: persistent_notification.create
        data:
          message: Com Linky Off Line {{-"\n"-}}{{states("sensor.date_time") }}
      resolved_action:
      - service: notify.telegram
        data:
          message: Com Linky On Line{{-"\n"-}} {{states("sensor.date_time") }}
          title: Etat RESEAU!!!
      - service: persistent_notification.create
        data:
          message: Com Linky On Line{{-"\n"-}}{{states("sensor.date_time") }}
      notify_device: 62cdce054a9d3448484b4df8e44cc499
      repeat_delay: 300
      initial_delay: 1
      max_alerts: 100
      resolved_message: Alert {{ entity_name }} resolved
      notify_message: Alert {{ entity_name }} triggered

Lovelace

Exemple d’affichage des données

Un autre exemple d’affichage utilisant « custom:mini-graph-card » de HACS

type: vertical-stack
cards:
  - type: custom:mini-graph-card
    entities:
      - entity: sensor.energie_totale_linky_jour
    name: Conso Linky 7j
    hours_to_show: 168
    aggregate_func: max
    group_by: date
    show:
      graph: bar
    icon: mdi:flash
  - type: custom:mini-graph-card
    color_thresholds:
      - color: '#00FF00'
        value: 0
      - color: '#FF9900'
        value: 4000
      - color: '#EA9999'
        value: 6000
      - color: '#CC0000'
        value: 10000
    color_thresholds_transition: hard
    line_width: 2
    icon: mdi:flash
    show:
      extrema: true
      fill: true
      icon: true
      labels: false
      name: true
      state: true
    hour24: true
    points_per_hour: 4
    hours_to_show: 24
    group: false
    state_map:
      - label: hp
        value: 'off'
      - label: hc
        value: 'on'
    style: |
      ha-card {
        border: solid 2px var(--primary-color);
      }
    entities:
      - entity: sensor.linky_papp
        name: Totale
      - color: '#CCC0cCC'
        entity: binary_sensor.display_hp_hc
        name: HC
        show_line: false
        y_axis: secondary
    name: Puissance Linky 24h

Un autre exemple d’affichage utilisant « custom:apexcharts-card » de HACS

type: custom:apexcharts-card
chart_type: donut
header:
  show: true
  title: Conso du Jour
  show_states: false
  colorize_states: true
series:
  - entity: sensor.energy_total_linky_usage_daily_hp
    name: HP
    color: green
  - entity: sensor.energy_total_linky_usage_daily_hc
    name: HC
    color: blue

Affichage du tableau Energie

Affichage dans Grafana

Vous trouverez ci-après le fichier Graphana correspondant (A renommer en .json)

Conclusion

Pas grand chose d’autre à ajouter, c’est simple à mettre en oeuvre (si le Linky est accessible), fiable et peu onéreux, il ne reste plus qu’a exploiter les informations.

Publication en lien avec cet article:

https://domo.rem81.com/ha-teleinformation-linky-mode-standard/

34 Comments on “HA-Teleinformation Linky-Mode Historique”

  1. Merci beaucoup pour ce tuto detaillé, j’ai essayé de l’adapter à ma config mais je suis en tarif de base, j’ai modifié le fichier ESP mais le sensor.energie_totale_linky_jour ne remonte aucune info, j’egalement modifié ceci:

    – platform: teleinfo
    id: index_base
    tag_name: « BASE »
    name: « Linky HP Wh »
    unit_of_measurement: « Wh »
    icon: mdi:flash
    teleinfo_id: myteleinfo

    – platform: template
    name: « Linky HPHC KWH »
    id: hphc_kwh
    icon: mdi:flash
    unit_of_measurement: « kWh »
    accuracy_decimals: 0
    lambda: |-
    return ((id(index_base).state)/1000);

    – platform: homeassistant
    name: « HCHP J »
    unit_of_measurement: « kWh »
    entity_id: sensor.energie_totale_linky_jour
    id: hphcj

    J’ai supprimé les HC.

    En te rerciant par avance.

    1. Bonjour, merci pour ton retour. Concernant l’énergie, le « sensor.energie_total_linky_jour » est calculé dans HA avec un utility_meter https://www.home-assistant.io/integrations/utility_meter/, dans ton cas la source sera le template « sensor.linky_hphc_kwh » que tu calcule dans l’esp. Tu peux aussi simplifier en supprimant le template name »Linky HPHC kWh » et convertir directement les wh en kWh en ajoutant « filters: lamba … »
      # Energie Active soutirée totale
      – platform: teleinfo
      id: index_base
      tag_name: « BASE »
      name: « Linky HP KWH »
      unit_of_measurement: « kWh »
      icon: mdi:flash
      teleinfo_id: myteleinfo
      filters:
      lambda: |-
      return x/1000;
      Dans ce cas la source de l’utility meter sera directement ce sensor.
      Bon courage

  2. Merci pour ton aide, voilà ce que j’ai fait:
    sensor:
    – platform: teleinfo
    id: index_base
    tag_name: « BASE »
    name: « Linky HP Wh »
    unit_of_measurement: « Wh »
    icon: mdi:flash
    teleinfo_id: myteleinfo

    – platform: template
    name: « Linky HP KWH »
    id: hphc_kwh
    icon: mdi:flash
    unit_of_measurement: « kWh »
    accuracy_decimals: 0
    lambda: |-
    return ((id(index_base).state)/1000);

    – platform: homeassistant
    name: « HCHP J »
    unit_of_measurement: « kWh »
    entity_id: sensor.energie_totale_linky_jour
    id: hphcj

    Puis j’ai adapté les valeurs dans pour l’utility meter:

    utility_meter:
    # usage jour
    energy_total_linky_usage_daily:
    source: sensor.linky_hp_kwh
    cycle: daily
    tariffs:
    – hp
    # usage semaine
    energy_total_linky_usage_weekly:
    source: sensor.linky_hp_kwh
    cycle: weekly
    tariffs:
    – hp
    # usage mois
    energy_total_linky_usage_monthly:
    source: sensor.linky_hp_kwh
    cycle: monthly
    tariffs:
    – hp
    #usage an
    energy_total_linky_usage_yearly:
    source: sensor.linky_hp_kwh
    cycle: yearly
    tariffs:
    – hp
    # Linky: Cumul HP+HC en kWh -> Utilisé dans utility meter
    # sensor.linky_hp_kwh est calculé dahns l’ESP
    – name: « Linky Conso Totale HPHC »
    unique_id: « linky_hp_kwh »
    unit_of_measurement: « kWh »
    device_class: « energy »
    state_class: « total »
    state: >-
    {% set index_base = states(‘sensor.linky_hp_kwh’) | float(default=0) | round(0) %}
    {% if (index_base)>10000 %}
    {{ (index_base) | round(0) }}
    {%endif%}

    Voilà où j’en suis pour adapter ta config à la mienne, que dois je faire maintenant, sachant que j’ai crée les deux cartes ainsi que le .json de grafana, les données sont récoltées mais il faut que j’attende 24h pour avoir un calcul journalier?

    1. Bonjour
      Voici ce que j’écrirai à ta place. le fait d’avoir un seul tarif simplifie le code:
      Apres reboot l’utility meter du jour doit commencer à compter.
      Bon courage
      *******************************************
      sensor:
      – platform: teleinfo
      id: index_base
      tag_name: « BASE »
      name: « Linky HP kWh »
      unit_of_measurement: « kWh »
      icon: mdi:flash
      teleinfo_id: myteleinfo
      lambda: |-
      return ((id(index_base).state)/1000);

      utility_meter:
      # usage jour
      energie_totale_linky_jour:
      source: sensor.linky_hp_kwh
      cycle: daily

      # usage semaine
      energie_totale_linky_semaine:
      source: sensor.linky_hp_kwh
      cycle: weekly

      # usage mois
      energie_totale_linky_mois:
      source: sensor.linky_hp_kwh
      cycle: monthly

      #usage an
      energie_totale_linky_annee:
      source: sensor.linky_hp_kwh
      cycle: yearly
      ***************************************************
      tu dois retrouver ton energie du jour dans: sensor.energie_totale_linky_jour
      Ce qui n’apparait plus par rapport à ton message tu le supprime

  3. Salut, excuse moi de te déranger, tout fonctionne correctement en ce qui concerne la remontée des informations, par contre j’ai voulu integrer ton automatisation de contrôle de la communication, hélas j’ai une erreur « Unable to find referenced entities input_boolean.com_linky », avant de te déranger j’ai essayer de trouver d’où venait cette erreur mais je n’ai pas trouvé la référence de cet input. En te remerciant par avance. Salutations.

    1. Bonjour, effectivement le input boolean était déclaré dans un autre fichier, en plus je l’avais renommé en ‘input_boolean.com_linky ». je l’ai ajouté dans linky.yaml et mis à jour le code de l’automatisme. Bon courage.

  4. Bonjour,

    avec les nouveaux abonnements multi tarifs, comment peut on adapter tes scripts ?

    je viens de passer de mint HP/HC a EDF av c un « électrique vert auto Weekend » , où on bénéficie d’heures creuses les week-end et jours fériés , je pensais bêtement que le compteur prenais ça comme du HC mais c’est pas le cas .
    la trame envoyé par le compteur ( en mode historique) est ‘base’
    le PTEC est HY et ne comprends pas les mentions HP/HC/WE …
    autrement dit tout mes appareils qui lisent la trame sont perdus et ne remontent plus les bonnes infos . ( même ma chaudière ne s enclanche pas plus la nuit 🙁 )

    as tu déjà rencontré le soucis ?
    je pense qu’on sera de plus en plus nombreux a l’avoir ( EDF a 2 abo de ce type , total energy a les supers HC , ect … )

    j imaginais une solution ‘mécanique’ pour palier , mais si on peut le faire en soft
    (je pensais utiliser le contact sec C1/C2 du compteur pour savoir si HP ou pas … mais j avous ne pas etre à l’aise a manipuler le compter … )

    merci

    1. Bonjour Jerome, il faut passer ton linky en mode standard et tu disposera de 10 index différents, regarde mon article sur le mode historique. Le changement de mode est à faire auprès de ton fournisseur d’énergie, et cela resoudera simplement ton problème, tiens mois informé, bon courage.

      1. Merci pour la réponse rapide 🙂 je viens de faire la demande a EDF , on verra bien . en attendant, je vais potasser la doc spécifique que tu as fait sur le mode standard .

          1. bon, je suis passé en mode normal et ….. c est pire .

            j ai un Tywatt1000 qui sert pour le RT2012, il est partit en carafe , d apres deltadore ( a defaut d avoir du matos de merde ils sont réactifs ) , il faut un modele sortit apres octobre 2020 pour gerer le mode normal ( et bim un truc a 250euros qui sert plus a rien ) .

            mon ecodevice, pareil , il ne remonte plus rien, meme plus la puissance consommée, pareil, il est pas compatible trame normale 🙁

            il n y a que mon petit boitier TIC/USB no name rail din, qui me remonte bien les infos sur Jeedom ( via plugin teleinfo ) .
            je l ai branché sur l odroid qui sert pour homeassistant, je recupere bien les infos sur nodered en lecture de l USB, mais apres je ne sais pas faire, et ce n est pas le sujet de cette page .

            merci quand meme pour ton aide

            ps : la trame ressemble à ça maintenant :
            ADSC 062061638213 3
            VTIC 02 J
            DATE H220223223917 D
            NGTF HC et Week-End U
            LTARF HEURE CREUSE K
            EAST 010686944 5
            EASF01 006972049 G
            EASF02 003574937 I
            EASF03 000139958 G
            EASF04 000000000 %
            EASF05 000000000 &
            EASF06 000000000 ‘
            EASF07 000000000 (
            EASF08 000000000 )
            EASF09 000000000 *
            EASF10 000000000  »
            EASD01 006685689 P
            EASD02 003460150 4
            EASD03 000357561 =
            EASD04 000183544 <
            IRMS1 003 1
            URMS1 238 G
            PREF 09 H
            PCOUP 09 "
            SINSTS 00667 Y
            SMAXSN H220223021413 06521 1
            SMAXSN-1 H220222030411 08197 W
            CCASN H220223223000 00510 3
            CCASN-1 H220223220000 00556 X
            UMOY1 H220223223000 238 –
            STGE 003A8000 A
            MSG1 PAS DE MESSAGE <
            PRM 19467293685817 M
            RELAIS 001 C
            NTARF 01 N
            NJOURF 00 &
            NJOURF+1 00 B
            PJOURF+1 0000C001 06308002 2230C001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE V

          2. Bon c’est déjà pas mal tu récupères ces info, et tu peux voir que tu récupere des watt heure dans EASTF01 à EASTF03, ce qui correspond à tes trois tarifications (regarde dans mon article la signification des entités). Est ce que avec node red tu sais extraire les valeurs par exemple, SINST c’est ta puissance instantanée, il faut extraire la valeur numérique puis la convertir, ce qu’a fait ce gars https://forum.hacf.fr/t/decoder-trames-linky-en-mode-standard-sous-node-red/4222, normalement c’est faisable. Dans cet article http://hallard.me/pitinfo/ un gars a écrit une fonction sous NR pour le mode historique, mais avec quelques modif ca pourrait fonctionner pour de l’historique. J’espère t’avoir aidé.

  5. Salut Rem81,

    Tout d’abord, je tiens à te remercier pour ton boulot remarquable !
    Cependant, j’ai suivi à la lettre ton article (acheter les même composants, être en mode historique, etc) mais malgré tout ça, je n’ai aucune information venant du linky qui remonte dans home assistant.
    Par réflexe, j’ai regardé les logs dans espHome et j’obtiens quelque « teleinfo: bad crc… »:
    « `
    [18:12:04][D][text_sensor:067]: ‘Linky PTEC’: Sending state ‘HP..’
    [18:12:05][E][teleinfo:038]: bad crc: got 62 except 74
    [18:12:06][D][sensor:125]: ‘linkyinfo Uptime’: Sending state 1777.36499 s with 0 decimals of accuracy
    [18:12:18][D][text_sensor:067]: ‘linkyinfo Uptime’: Sending state ’29m 37s’
    [18:12:25][E][teleinfo:038]: bad crc: got 62 except 68
    [18:12:30][D][sensor:125]: ‘linkyinfo WiFi Signal Sensor’: Sending state -49.00000 dBm with 0 decimals of accuracy
    [18:12:43][D][api:102]: Accepted ::FFFF:C0A8:A
    [18:12:43][W][api.connection:083]: Home Assistant 2022.3.7 (::FFFF:C0A8:A): Connection closed
    [18:12:45][E][teleinfo:038]: bad crc: got 62 except 80
    [18:13:03][D][sensor:125]: ‘Linky P/PCoup’: Sending state nan % with 0 decimals of accuracy
    [18:13:04][D][text_sensor:067]: ‘Linky PTEC’: Sending state ‘HP..’
    [18:13:05][E][teleinfo:038]: bad crc: got 62 except 54
    [18:13:06][D][sensor:125]: ‘linkyinfo Uptime’: Sending state 1837.37097 s with 0 decimals of accuracy
    [18:13:18][D][text_sensor:067]: ‘linkyinfo Uptime’: Sending state ’30m 37s’
    [18:13:25][E][teleinfo:038]: bad crc: got 82 except 83
    [18:13:30][D][sensor:125]: ‘linkyinfo WiFi Signal Sensor’: Sending state -49.00000 dBm with 0 decimals of accuracy
    [18:13:43][D][api:102]: Accepted ::FFFF:C0A8:A
    [18:13:43][W][api.connection:083]: Home Assistant 2022.3.7 (::FFFF:C0A8:A): Connection closed
    [18:13:45][E][teleinfo:038]: bad crc: got 82 except 83
    [18:14:03][D][sensor:125]: ‘Linky P/PCoup’: Sending state nan % with 0 decimals of accuracy
    [18:14:04][D][text_sensor:067]: ‘Linky PTEC’: Sending state ‘HP..’
    [18:14:05][E][teleinfo:038]: bad crc: got 62 except 68
    [18:14:06][D][sensor:125]: ‘linkyinfo Uptime’: Sending state 1897.37305 s with 0 decimals of accuracy
    « `
    Peux-tu essayer de m’aider ou bien as-tu des pistes afin de trouver d’où vient le problème ?
    D’avance merci.
    Tony

    1. Bonjour Tony
      Merci pour ton encouragement. Concernant ton bad crc, c’est le module wemos teleinfo qui ne peut pas déchiffer les trames reçues du linky: vérifie le raccordement au niveau du linky (I1 et I2), est-ce que la led rouge est allumée et clignote de temps en temps, quelle longueur de cables entre le linky et le module?

      1. Rebonjour Rémi,

        Merci beaucoup pour te retour rapide.
        Concernant tes questions, oui j’ai bien la led rouge du teleinfo qui est allumée mais non, elle ne clignote pas de temps en temps… Elle scintille mais reste allumée.
        Et les câbles permettant de relier le teleinfo et le linky font 20cm.
        Encore merci pour ton aide.
        Tony

      2. Rebonjour Rémi,

        Comme je pensais que dans ta question, tu sous-entendais que la longueur du câble pouvez être la cause du problème, j’ai changé les câbles par des câbles de 10cm (20cm auparavant) mais malheureusement cela ne résout pas mon problème, j’ai toujours les erreurs de bas crc…
        Merci d’avance pour ton aide.

        1. Re bonsoir
          Pas facile de dépanner à distance, peux tu copier coller le début du log de ton esp jusqu’aux premiers bad crc STP?

          1. Bonjour Remi,

            Voici les logs demandés (j’èspère que les sauts de lignes sera pris en compte dans le formatage du texte collé)

            INFO Reading configuration /config/esphome/linky-info.yaml…
            INFO Starting log output from 192.168.0.136 using esphome API
            INFO Successfully connected to 192.168.0.136
            [09:28:42][I][app:102]: ESPHome version 2022.3.1 compiled on Mar 27 2022, 17:37:37
            [09:28:42][C][wifi:491]: WiFi:
            [09:28:42][C][wifi:353]: Local MAC: C8:C9:A3:CB:97:90
            [09:28:42][C][wifi:354]: SSID: [redacted]
            [09:28:42][C][wifi:355]: IP Address: 192.168.0.136
            [09:28:42][C][wifi:357]: BSSID: [redacted]
            [09:28:42][C][wifi:358]: Hostname: ‘linkyinfo’
            [09:28:42][C][wifi:360]: Signal strength: -57 dB ▂▄▆█
            [09:28:42][C][wifi:364]: Channel: 9
            [09:28:42][C][wifi:365]: Subnet: 255.255.254.0
            [09:28:42][C][wifi:366]: Gateway: 192.168.1.254
            [09:28:42][C][wifi:367]: DNS1: 0.0.0.0
            [09:28:42][C][wifi:368]: DNS2: 0.0.0.0
            [09:28:42][C][logger:233]: Logger:
            [09:28:42][C][logger:234]: Level: DEBUG
            [09:28:42][C][logger:235]: Log Baud Rate: 115200
            [09:28:42][C][logger:236]: Hardware UART: UART0
            [09:28:42][C][i2c.arduino:038]: I2C Bus:
            [09:28:43][C][i2c.arduino:039]: SDA Pin: GPIO21
            [09:28:43][C][i2c.arduino:040]: SCL Pin: GPIO22
            [09:28:43][C][i2c.arduino:041]: Frequency: 50000 Hz
            [09:28:43][C][i2c.arduino:044]: Recovery: bus successfully recovered
            [09:28:43][I][i2c.arduino:054]: Results from i2c bus scan:
            [09:28:43][I][i2c.arduino:060]: Found i2c device at address 0x3C
            [09:28:43][C][uart.arduino_esp32:107]: UART Bus:
            [09:28:43][C][uart.arduino_esp32:109]: RX Pin: GPIO23
            [09:28:43][C][uart.arduino_esp32:111]: RX Buffer Size: 256
            [09:28:43][C][uart.arduino_esp32:113]: Baud Rate: 1200 baud
            [09:28:43][C][uart.arduino_esp32:114]: Data Bits: 7
            [09:28:43][C][uart.arduino_esp32:115]: Parity: EVEN
            [09:28:43][C][uart.arduino_esp32:116]: Stop bits: 1
            [09:28:43][C][template.sensor:023]: Template Sensor ‘Linky P/PCoup’
            [09:28:43][C][template.sensor:023]: State Class:  »
            [09:28:43][C][template.sensor:023]: Unit of Measurement: ‘%’
            [09:28:43][C][template.sensor:023]: Accuracy Decimals: 0
            [09:28:43][C][template.sensor:023]: Icon: ‘mdi:flash’
            [09:28:43][C][template.sensor:024]: Update Interval: 60.0s
            [09:28:43][C][uptime.sensor:031]: Uptime Sensor ‘linkyinfo Uptime’
            [09:28:43][C][uptime.sensor:031]: State Class: ‘total_increasing’
            [09:28:43][C][uptime.sensor:031]: Unit of Measurement: ‘s’
            [09:28:43][C][uptime.sensor:031]: Accuracy Decimals: 0
            [09:28:43][C][uptime.sensor:031]: Icon: ‘mdi:timer’
            [09:28:43][C][template.text_sensor:021]: Template Sensor ‘Linky PTEC’
            [09:28:43][C][template.text_sensor:021]: Template Sensor ‘linkyinfo Uptime’
            [09:28:43][C][template.text_sensor:021]: Icon: ‘mdi:clock-start’
            [09:28:43][C][light:104]: Light ‘RGB strip’
            [09:28:43][C][light:106]: Default Transition Length: 0.0s
            [09:28:43][C][light:107]: Gamma Correct: 2.80
            [09:28:43][C][light:104]: Light ‘led1’
            [09:28:43][C][light:106]: Default Transition Length: 0.0s
            [09:28:43][C][light:107]: Gamma Correct: 2.80
            [09:28:43][C][teleinfo:189]: TeleInfo:
            [09:28:43][C][teleinfo_sensor:012]: Teleinfo Sensor ‘Linky HPHC KWH’
            [09:28:43][C][teleinfo_sensor:012]: Device Class: ‘energy’
            [09:28:43][C][teleinfo_sensor:012]: State Class: ‘total_increasing’
            [09:28:43][C][teleinfo_sensor:012]: Unit of Measurement: ‘kWh’
            [09:28:43][C][teleinfo_sensor:012]: Accuracy Decimals: 0
            [09:28:43][C][teleinfo_sensor:012]: Icon: ‘mdi:flash’
            [09:28:43][C][teleinfo_sensor:012]: Teleinfo Sensor ‘Linky HC Wh’
            [09:28:43][C][teleinfo_sensor:012]: State Class:  »
            [09:28:43][C][teleinfo_sensor:012]: Unit of Measurement: ‘Wh’
            [09:28:43][C][teleinfo_sensor:012]: Accuracy Decimals: 0
            [09:28:43][C][teleinfo_sensor:012]: Icon: ‘mdi:flash’
            [09:28:43][C][teleinfo_sensor:012]: Teleinfo Sensor ‘Linky HP Wh’
            [09:28:43][C][teleinfo_sensor:012]: State Class:  »
            [09:28:43][C][teleinfo_sensor:012]: Unit of Measurement: ‘Wh’
            [09:28:43][C][teleinfo_sensor:012]: Accuracy Decimals: 0
            [09:28:43][C][teleinfo_sensor:012]: Icon: ‘mdi:flash’
            [09:28:43][C][teleinfo_sensor:012]: Teleinfo Sensor ‘Linky PCOUP’
            [09:28:43][C][teleinfo_sensor:012]: State Class:  »
            [09:28:43][C][teleinfo_sensor:012]: Unit of Measurement: ‘kVA’
            [09:28:43][C][teleinfo_sensor:012]: Accuracy Decimals: 0
            [09:28:43][C][teleinfo_sensor:012]: Icon: ‘mdi:flash’
            [09:28:43][C][teleinfo_sensor:012]: Teleinfo Sensor ‘Linky PAPP’
            [09:28:43][C][teleinfo_sensor:012]: Device Class: ‘power’
            [09:28:43][C][teleinfo_sensor:012]: State Class: ‘measurement’
            [09:28:43][C][teleinfo_sensor:012]: Unit of Measurement: ‘W’
            [09:28:43][C][teleinfo_sensor:012]: Accuracy Decimals: 0
            [09:28:43][C][teleinfo_sensor:012]: Icon: ‘mdi:flash’
            [09:28:43][C][teleinfo_sensor:012]: Teleinfo Sensor ‘Linky Umoy’
            [09:28:43][C][teleinfo_sensor:012]: State Class:  »
            [09:28:43][C][teleinfo_sensor:012]: Unit of Measurement: ‘V’
            [09:28:43][C][teleinfo_sensor:012]: Accuracy Decimals: 0
            [09:28:43][C][teleinfo_sensor:012]: Icon: ‘mdi:flash’
            [09:28:43][C][teleinfo_sensor:012]: Teleinfo Sensor ‘Linky I Inst’
            [09:28:43][C][teleinfo_sensor:012]: State Class:  »
            [09:28:43][C][teleinfo_sensor:012]: Unit of Measurement: ‘A’
            [09:28:43][C][teleinfo_sensor:012]: Accuracy Decimals: 0
            [09:28:43][C][teleinfo_sensor:012]: Icon: ‘mdi:flash’
            [09:28:44][C][teleinfo_sensor:012]: Teleinfo Sensor ‘linky N Tarif’
            [09:28:44][C][teleinfo_sensor:012]: State Class:  »
            [09:28:44][C][teleinfo_sensor:012]: Unit of Measurement:  »
            [09:28:44][C][teleinfo_sensor:012]: Accuracy Decimals: 0
            [09:28:44][C][teleinfo_sensor:012]: Icon: ‘mdi:flash’
            [09:28:44][C][teleinfo_text_sensor:009]: Teleinfo Text Sensor ‘linky Statuts’
            [09:28:44][C][teleinfo_text_sensor:009]: Icon: ‘mdi:flash’
            [09:28:44][C][status:034]: Status Binary Sensor ‘linkyinfo Status’
            [09:28:44][C][status:034]: Device Class: ‘connectivity’
            [09:28:44][C][restart:022]: Restart Switch ‘linkyinfo Restart’
            [09:28:44][C][restart:022]: Icon: ‘mdi:restart’
            [09:28:44][C][ssd1306_i2c:023]: I2C SSD1306
            [09:28:44][C][ssd1306_i2c:023]: Rotations: 0 °
            [09:28:44][C][ssd1306_i2c:023]: Dimensions: 128px x 64px
            [09:28:44][C][ssd1306_i2c:024]: Address: 0x3C
            [09:28:44][C][ssd1306_i2c:025]: Model: SSD1306 128×64
            [09:28:44][C][ssd1306_i2c:027]: External VCC: NO
            [09:28:44][C][ssd1306_i2c:028]: Flip X: YES
            [09:28:44][C][ssd1306_i2c:029]: Flip Y: YES
            [09:28:44][C][ssd1306_i2c:030]: Offset X: 0
            [09:28:44][C][ssd1306_i2c:031]: Offset Y: 0
            [09:28:44][C][ssd1306_i2c:032]: Inverted Color: NO
            [09:28:44][C][ssd1306_i2c:033]: Update Interval: 1.0s
            [09:28:44][C][web_server:129]: Web Server:
            [09:28:44][C][web_server:130]: Address: 192.168.0.136:80
            [09:28:44][C][mdns:084]: mDNS:
            [09:28:44][C][mdns:085]: Hostname: linkyinfo
            [09:28:44][C][ota:085]: Over-The-Air Updates:
            [09:28:44][C][ota:086]: Address: 192.168.0.136:3232
            [09:28:44][C][ota:089]: Using Password.
            [09:28:44][C][api:138]: API Server:
            [09:28:44][C][api:139]: Address: 192.168.0.136:6053
            [09:28:44][C][api:143]: Using noise encryption: NO
            [09:28:44][C][wifi_signal.sensor:009]: WiFi Signal ‘linkyinfo WiFi Signal Sensor’
            [09:28:44][C][wifi_signal.sensor:009]: Device Class: ‘signal_strength’
            [09:28:44][C][wifi_signal.sensor:009]: State Class: ‘measurement’
            [09:28:44][C][wifi_signal.sensor:009]: Unit of Measurement: ‘dBm’
            [09:28:44][C][wifi_signal.sensor:009]: Accuracy Decimals: 0
            [09:28:44][C][homeassistant.sensor:030]: Homeassistant Sensor ‘HCHP J’
            [09:28:44][C][homeassistant.sensor:030]: State Class:  »
            [09:28:44][C][homeassistant.sensor:030]: Unit of Measurement: ‘kWh’
            [09:28:44][C][homeassistant.sensor:030]: Accuracy Decimals: 1
            [09:28:44][C][homeassistant.sensor:031]: Entity ID: ‘sensor.energie_totale_jour’
            [09:28:45][E][teleinfo:038]: bad crc: got 62 except 48
            [09:28:51][D][api:102]: Accepted ::FFFF:C0A8:A
            [09:28:51][W][api.connection:083]: Home Assistant 2022.3.7 (::FFFF:C0A8:A): Connection closed
            [09:28:55][E][teleinfo:038]: bad crc: got 62 except 80
            [09:29:03][D][sensor:125]: ‘linkyinfo WiFi Signal Sensor’: Sending state -58.00000 dBm with 0 decimals of accuracy
            [09:29:05][E][teleinfo:038]: bad crc: got 62 except 48
            [09:29:06][D][sensor:125]: ‘Linky P/PCoup’: Sending state nan % with 0 decimals of accuracy
            [09:29:15][E][teleinfo:038]: bad crc: got 62 except 80

            Merci beaucoup pour ton aide !

            Tony

          2. Bonjour Tony
            Les entités que tu lis avec teleinfo semblent etre celles du mode standard (je vois PCOUP, U MOY,..), vérifie dans ton esphome le nom des sensors du mode historique ou sinon copie colle ton programme esp
            Slts

  6. Salut Remi,

    Ah oui, il se peut qu’il y ait des erreurs de ce type car au début, j’avais testé la configuration du mode historique de ton article mais il ne fonctionnait pas… De ce fait, j’ai cliqué sur le lien vers ton github, et j’ai chopé la config du fichier esp124-tic.yaml (https://github.com/remycrochon/home-assistant/blob/master/esphome/esp124-tic.yaml) en ne modifiant juste la variable historical_mode: false en true ainsi que le baud de 9600 en 1200.
    Voici mon code:
    substitutions:
    device_name: linkyinfo
    adress_ip: « 192.168.0.136 »
    friendly_name: linkyinfo
    time_timezone: « Europe/Paris »

    esphome:
    name: ${device_name}
    platform: ESP32
    board: mhetesp32minikit
    platformio_options:
    lib_deps: NeoPixelBus@2.6.0
    on_boot:
    then:
    – light.control:
    id: led1
    brightness: 0.25
    state: on
    wifi:
    networks:
    – ssid: !secret wifi_ssid
    password: !secret wifi_password
    priority: 1
    reboot_timeout: 5min

    manual_ip:
    static_ip: ${adress_ip}
    gateway: 192.168.1.254
    subnet: 255.255.254.0

    # Enable logging
    logger:
    # baud_rate: 0
    # Enable Home Assistant API
    api:
    password: !secret api_password

    ota:
    password: !secret ota_password

    web_server:
    port: 80

    font:
    – file: « fonts/arial.ttf »
    id: arial
    size: 15

    i2c:
    sda: GPIO21 #D2=pin 19
    scl: GPIO22 #D1=pin 20
    scan: True
    id: bus_a

    #
    uart:
    id: uart_a
    rx_pin: GPIO23
    # tx_pin: GPIO1
    baud_rate: 1200
    parity: EVEN
    data_bits: 7

    teleinfo:
    id: myteleinfo
    uart_id: uart_a
    update_interval: 10s
    historical_mode: true

    # Led WS2812 RGB
    light:
    – platform: partition
    name: led1
    id: led1
    default_transition_length: 0s
    segments:
    – id: rgb_led
    from: 0
    to: 0

    – platform: neopixelbus
    num_leds: 1
    pin: GPIO18
    name: « RGB strip »
    variant: ws2812
    id: rgb_led
    default_transition_length: 0s

    sensor:
    # Energie Active soutirée totale
    – platform: teleinfo
    id: hc_hp
    tag_name: « EAST »
    name: « Linky HPHC KWH »
    unit_of_measurement: « kWh »
    icon: mdi:flash
    teleinfo_id: myteleinfo
    device_class: « energy »
    state_class: « total_increasing »
    filters:
    lambda: |-
    return x/1000;

    # Energie Active soutirée Index01
    – platform: teleinfo
    id: hchc
    tag_name: « EASF01 »
    name: « Linky HC Wh »
    unit_of_measurement: « Wh »
    icon: mdi:flash
    teleinfo_id: myteleinfo

    # Energie Active soutirée Index02
    – platform: teleinfo
    id: hchp
    tag_name: « EASF02 »
    name: « Linky HP Wh »
    unit_of_measurement: « Wh »
    icon: mdi:flash
    teleinfo_id: myteleinfo

    #Puissance apparente de coupure
    – platform: teleinfo
    id: pcoup
    tag_name: « PCOUP »
    name: « Linky PCOUP »
    unit_of_measurement: « kVA »
    icon: mdi:flash
    teleinfo_id: myteleinfo

    #Puissance apparente instantanée ph1
    – platform: teleinfo
    id: papp
    tag_name: « SINSTS »
    name: « Linky PAPP »
    unit_of_measurement: « W »
    device_class: « power »
    state_class: « measurement »
    icon: mdi:flash
    teleinfo_id: myteleinfo
    on_value:
    – if:
    condition:
    sensor.in_range:
    id: papp
    below: 1000
    then:
    – light.control:
    id: led1
    red: 0%
    green: 100% # vert
    blue: 0%
    – if:
    condition:
    sensor.in_range:
    id: papp
    above: 1000
    below: 3000
    then:
    – light.control:
    id: led1
    red: 0%
    green: 0% # bleu
    blue: 100%
    – if:
    condition:
    sensor.in_range:
    id: papp
    above: 3000
    then:
    – light.control:
    id: led1
    red: 100% #rouge
    green: 0%
    blue: 0%

    #Tension moyenne ph1
    – platform: teleinfo
    id: umoy1
    tag_name: « UMOY1 »
    name: « Linky Umoy »
    unit_of_measurement: « V »
    icon: mdi:flash
    teleinfo_id: myteleinfo

    #Courant efficace ph1
    – platform: teleinfo
    id: iinst
    tag_name: « IRMS1 »
    name: « Linky I Inst »
    unit_of_measurement: « A »
    icon: mdi:flash
    teleinfo_id: myteleinfo

    # Numero du Tarif en cours
    – platform: teleinfo
    id: ntarif
    tag_name: « NTARF »
    name: « linky N Tarif »
    unit_of_measurement: «  »
    icon: mdi:flash
    teleinfo_id: myteleinfo

    ############### TEMPLATE ###################### »
    # Calcul du ratio de la puissance apparente utilisée en % par rapport au contrat
    – platform: template
    name: « Linky P/PCoup »
    id: p100
    icon: mdi:flash
    unit_of_measurement: « % »
    accuracy_decimals: 0
    lambda: |-
    return ((id(papp).state/1000)/id(pcoup).state*100);

    # Lecture dans HA de la conso du jour
    – platform: homeassistant
    name: « HCHP J »
    unit_of_measurement: « kWh »
    entity_id: sensor.energie_totale_jour
    id: hphcj

    # Puissance du signal WIFI
    – platform: wifi_signal
    id: wif
    name: « ${friendly_name} WiFi Signal Sensor »
    update_interval: 60s
    # Temps de fonctionnement de l’ESP
    – platform: uptime
    id: uptime_seconds
    name: « ${friendly_name} Uptime »
    update_interval: 60s
    unit_of_measurement: s
    accuracy_decimals: 0
    force_update: false
    icon: mdi:timer

    #######################################
    text_sensor:
    # Registre de statuts
    – platform: teleinfo
    id: stge
    tag_name: « STGE »
    name: « linky Statuts »
    icon: mdi:flash
    teleinfo_id: myteleinfo

    # Convertion du tarif en cours
    – platform: template
    id: tarif
    name: « Linky PTEC »
    lambda: |-
    if ( id(ntarif).state == 1 ) {
    return { « HC.. » };
    } else {
    return { « HP.. » };
    }
    # Affichage du temps de fonctionnement
    – platform: template
    name: « ${friendly_name} Uptime »
    update_interval: 60s
    icon: mdi:clock-start
    lambda: |-
    int seconds = (id(uptime_seconds).state);
    int days = seconds / (24 * 3600);
    seconds = seconds % (24 * 3600);
    int hours = seconds / 3600;
    seconds = seconds % 3600;
    int minutes = seconds / 60;
    seconds = seconds % 60;
    if ( days ) {
    return { (String(days) + »d  » + String(hours) + »h  » + String(minutes) + »m « + String(seconds) + »s »).c_str() };
    } else if ( hours ) {
    return { (String(hours) + »h  » + String(minutes) + »m « + String(seconds) + »s »).c_str() };
    } else if ( minutes ) {
    return { (String(minutes) + »m « + String(seconds) + »s »).c_str() };
    } else {
    return { (String(seconds) + »s »).c_str() };
    }

    #Etat de la connection
    binary_sensor:
    – platform: status
    name: « ${friendly_name} Status »
    # Restart de l’ESP
    switch:
    – platform: restart
    name: « ${friendly_name} Restart »

    # Affichage
    display:
    – platform: ssd1306_i2c
    model: « SSD1306 128×64″
    address: 0x3C
    brightness: 100%
    lambda: |-
    it.printf(0,0,id(arial), »P=%.0f W »,id(papp).state);
    it.printf(75,0,id(arial), »-%.0f %% »,id(p100).state);
    it.printf(0,15,id(arial), »I Inst=%.0f A »,id(iinst).state);
    it.printf(0,30,id(arial), »ConsoJ=%.0f kWh »,id(hphcj).state);
    std::string tarif_ = id(tarif).state;
    it.printf(0,45,id(arial), « Tarif: %s », tarif_.c_str());

    Du coup, je vais essayer de prendre ton code en mode historique et de reflasher l’esp.
    Encore et toujours, merci pour ton aide !

    Cdt,
    Tony

  7. Rebonjour Rémi,

    Je viens de mettre ta configuration que tu mets à disposition dans cet article (mode historique).
    J’ai pris tel-quel ta config à partir de « font:  » jusqu’en bas. Mais lorsque je tente de valider la config dans esphome, il me dit que la variable « tarif » n’existe pas et après vérification, elle n’existe pas dans ta config de ton article.
    Peux-tu m’éclairer ou mettre à jour ton fichier de conf dans l’article afin que je puisse me baser dessus ?
    Merci d’avance Rémi !
    Cdt,

    Tony-O

  8. Hello,
    Bravo pour ce super article mais malheureusement le model d’ESP32 mini n’est plus disponible. T’aurais d’autres références?
    Merci a toi.

        1. Bonjour, l’esp que tu as commandé ne convient pas. Le brochage n’est pas compatible avec le module tic, je te conseille de prendre l’esp Mini que je préconise, bon courage à toi.

          1. Merci pour ton retour j’ai commandé ta référence. là il faut que je fasse les soudures. et ensuite je m’attaquerai au code 🙂
            une question par anticipation : mon compteur étant a l’extérieur j’ai presque 5mètres entre mon compteur et station domotique. je peux tirer du cable en 0,8 entre la prise teleinfo et le module?

          2. Bonjour, la section du câble convient mais attention, si le câble chemine dans un fourreau il faut un câble qui résiste aux intempéries.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.