Cartes "Energy" et teleinformation (TIC) avec ESPHome

Les compteurs Linky disposent d'une prise de téléinformation appelée TIC permettant de récupérer sa consommation électrique dans Home Assistant. Cet article décrit comment construire pour une somme modique un module permettant de récupérer les informations du Linky, basé sur ESPHome et un ESP32.
Cartes "Energy" et teleinformation (TIC) avec ESPHome

Sommaire

1. Introduction

Le module Energy de Home Assistant est vraiment puissant, il propose de belles cartes graphiques interactives (navigation jour-mois-année, consolidation des coûts), et il serait dommage de ne pas l’utiliser. Le module Energy utilise les tables “statistics” de HA, qui permettent de garder les données sans limite de durée, avec un seul enregistrement stocké par heure.

Certes le sujet télé-information est présent sur plusieurs sujets, mais il est proposé ici, un retour d’expérience sur une intégration complète et éprouvée, avec un coût de réalisation total inférieur à 10 €.

Les sujets traités dans cet article sont :

  • Réalisation DIY avec un ESP32 et les quelques composants soudés sur une plaque de prototypage,
  • Un boitier à imprimer, disponible dans Cults ,
  • Adaptation de la configuration ESPHome pour avoir les entités compatibles Energy,
  • Configuration et intégration du module energy dans le dashboard HA,
  • Suivre la consommation et les coûts.

2. Conception du module

Pour information, le compteur électrique interfacé ici est en mode TIC “historique”, avec heures pleines et heures creuses. Si ce n’est pas votre cas, il faudra faire quelques adaptations.

Le choix de l’ESP32 plutôt qu’un ESP8266 a était préféré, car plus puissant, et permettant de mieux gérer le flux de données sur la liaison série et ainsi évider les erreurs (bad CRC). Il est conseillé de choisir un ESP32 Wroom avec une connexion USB-C (plus récent) et un processeur CP2102 (les CH340  sont moins stables). Si vous trouvez, une carte Devkit C V4 de AZDelivery, elle sera parfaite.

Brochage de la carte AZDelivery :

Nous allons utiliser l'entrée du port série 2 (RX - UART2), disponible sur notre carte sur le GPIO 16.

Pour information, l'UART0 n'a pas été utilisée car il y a risque de conflit avec la sortie debug. Enfin, il n'est pas nécessaire de brancher la sortie TX, car l'ESP n'a rien à transmettre.

⚠️
Le brochage proposé est celui le plus courant, mais il faut vérifier celui de votre l'ESP32, et en particulier où se trouve le port série 2 (RX de l'UART2).

J’ai choisi une résistance de 2kOhms en entrée, qui est un bon compromis.

Autrement, on retrouve le schéma classique : opto-coupleur (LTV814) pour isoler le circuit et le compteur, transistor mofset (BS170) pour amplifier le signal.

L’ESP32, alimenté par sa prise micro-usb, alimente en 3.3v le circuit.

Les quelques composants sont soudés sur une plaque de prototypage de 5cm x 6cm. Un bornier est rajouté pour connecter le compteur Linky.

💡
Certes, on peut trouver des montages tout faits, mais souder ces quelques composants n’est pas très compliqué, et le DIY est toujours tellement plus satisfaisant 😏.
Boitier du module TIC ouvert
Boitier du module TIC ouvert (UART0 avait été branché ici, mais il faut brancher l'UART2)
Compteur et branchement du module TIC
Compteur et branchement du module TIC

Un boitier a été conçu sous fusion360 et mis en ligne : Boitier ESP32 sur Cult3d

💡
À noter qu’il pourrait bien entendu être utilisé pour d’autres montages à base de ESP32 ou ESP8266 sur carte de prototypages. D’ailleurs, il semble susciter de l’intérêt sur Cult3D.

3. Vérifier le signal du compteur

Cette étape est optionnelle, mais pourra vous faire gagner du temps pour la suite. Avant de connecter l'ESP32 et tout souder, il peut être pertinent de vérifier le signal renvoyé par la prise TIC.

Pour cela, il est conseillé d'acheter pour une somme modique un convertisseur TTL USB vers RS32. Il vous permet de lire le signal de sortie du Linky sur un PC via son via son port USB.

Il vous faudra utiliser les composants précédents avec un montage temporaire. Une autre solution est de prévoir un bornier de test sur la plaque de prototypage, avec 3 bornes : RX, VCC et GND.

Le signal peut être lu sur le PC avec le logiciel Termit qui permet de visualiser les informations reçues sur une série RS232. Il vous faudra alors renseigner les paramètres suivants dans le logiciel :

  • Port USB où est connecté le convertisseur TTL - USB.
  • Paramètres série : 1200 bds, 7 bits data, 1 stop, parité "even".

Une fois tout configuré, vous devriez voir passer en claire la trame transmission du TIC. Ci-dessous les différentes infos possibles transmises :

4. Paramétrage ESPHome

L’article premiers pas avec ESPHome vous guidera si besoin dans l’installation de ESPHome, puis dans la création initiale du composant.

⚠️
Le code suivant est donné pour un compteur mono-phasé. Il sera à adapter si vous avez un compteur triphasé.

Ci-dessous le fichier de configuration à recopier dans le paramétrage du composant ESPHome.

esphome:
  name: esp-teleinfo

esp32:
  board: esp-wrover-kit
  framework:
    type: arduino

logger:
  level: debug
  baud_rate: 0

ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

api:


uart:
  id: uart_bus
  rx_pin: GPIO16  
#  tx_pin: GPI17
  baud_rate: 1200
  parity: EVEN
  data_bits: 7

teleinfo:
  id: esp_teleinfo
  update_interval: 60s
  historical_mode: true

binary_sensor:
  - platform: status
    id: teleinfo_status
    name: "Teleinfo Status"

sensor:
  - platform: wifi_signal
    name: "Signal wifi"
    update_interval: 60s
    unit_of_measurement: dB
    accuracy_decimals: 0
    force_update: false
    icon: mdi:wifi
    
  - platform: uptime
    id: uptime_seconds
    name: "Uptime Sensor"
    update_interval: 60s
    unit_of_measurement: s
    accuracy_decimals: 0
    force_update: false
    icon: mdi:timer
    
  - platform: teleinfo
    tag_name: "IINST"
    name: "Intensité"
    unit_of_measurement: "A"
    icon: mdi:current-ac

  - platform: teleinfo
    tag_name: "PAPP"
    name: "Puissance"
    unit_of_measurement: "VA"
    icon: mdi:flash

  - platform: teleinfo
    tag_name: "HCHC"
    id: hchc
    name: "Teleinfo index_hc_kwh"
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "total_increasing"
    accuracy_decimals: 3 
    filters:
      - multiply: 0.001
    icon: mdi:gauge

  - platform: teleinfo
    tag_name: "HCHP"
    id: hchp
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "total_increasing"
    name: "Teleinfo index_hp_kwh"
    accuracy_decimals: 3 
    filters:
      - multiply: 0.001
    icon: mdi:gauge

button:
  - platform: restart
    name: "Teleinfo Restart"

text_sensor:
  - platform: teleinfo
    tag_name: "PTEC"
    name: "Tarif actuel"
    icon: mdi:clock-time-nine-outline
  - platform: template
    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() };
      }      

Seules les informations utiles ont été gardées (par exemple l’ID du compteur qui ne change jamais n’a pas besoin d’être lue en permanence). Une lecture toutes les minutes est suffisante.

Les sensors index ont des attributs compatibles avec le module Energy : state_class de type total_increasing et conversion en kWh. L’UART0 étant utilisée, il est préférable de désactiver la sortie des logs sur la liaison série (baud_rate: 0 dans le logger). On peut enlever cela pour le premier flashage par câble, pour vérifier que tout se passe bien.

5. Configuration du module Energy

Ensuite, il est nécessaire de configurer le module Energy : il est depuis les dernières versions dans configuration- tableau de bordpuis cliquer sur Energies. Il est conseillé de mettre les coûts en EUR/kWh.

Configuration dashboard Energy
Configuration dashboard Energy
💡
La section CO2 a également été configurée : cela donne le % d’énergie carbonée utilisée par EDF. Il faut aller sur le site https://co2signal.com/ , créer une clé d’API et la rentrée dans la configuration du module Energy. Cela crée une entité CO2 avec en temps réel le % d’énergie carbonée utilisée par EDF. La doc est ici si jamais : CO2 Signal - Home Assistant (home-assistant.io) .

6. Interface utilisateur (tableau de bord)

Reste enfin à intégrer les cartes Energy dans le dashboard ( https://www.home-assistant.io/lovelace/energy/) . Celui ci-après est adapté à un usage sur mobile.

Voici le code des différentes cartes à ajouter : des différentes cartes Energy dans le dashboard :

Les gauges

type: horizontal-stack
cards:
  - type: gauge
    min: 0
    max: 90
    entity: sensor.teleinfo_intensite
    severity:
      green: 0
      yellow: 55
      red: 65
    needle: true
  - type: gauge
    entity: sensor.teleinfo_puissance
    min: 0
    max: 20340
    severity:
      green: 0
      yellow: 12450
      red: 14690
    needle: true

Le tableau énergie

type: energy-date-selection
type: energy-usage-graph
type: energy-sources-table

Consommations des différents appareils

Si vous avez défini des appareils individuels, vous obtiendrez un graphique de la consommation de chaque appareil.

Depuis mars 2024, une nouvelle carte Energy energy-devices-graph est disponible pour afficher le détail heure par heure des consommations de vos appareils, que vous pouvez rajouter en quatrième ligne.

max_device est optionnel, et sert à définir le nombre max d'appareils affichés.

type: energy-devices-graph
max_devices: 5

Affichage des index du compteur

type: horizontal-stack
cards:
  - type: entity
    entity: sensor.teleinfo_index_hc_kwh
    name: Index HC
    icon: mdi:gauge
  - type: entity
    entity: sensor.teleinfo_index_hp_kwh
    name: Index HP
type: entities
entities:
  - entity: sensor.owon_extension_voltage
    name: Tension du réseau
  - entity: sensor.teleinfo_tarif_actuel
  - entity: sensor.fr_grid_fossil_fuel_percentage
    name: Energie fossile / EDF
  - type: section
    label: Gestion du module teleinfo
  - entity: button.teleinfo_restart
    name: Redémarrage

Conclusion

Vous pouvez suivre votre consommation journalière, mensuelle ou annuelle, ainsi que le coût électrique en heure pleine et heure creuse.

L’étape suivante sera de détailler les consommations de chaque appareil de votre réseau électrique. Pour cela, il y a différentes solutions :

  • Intégration d’objets connectés exposant leurs consommations,
  • Capteur de mesure, avec pince ampèremétrique, dans le tableau électrique (type Owon PC321, PZEM)
  • Ajout de prises électriques connectées avec mesure de la consommation (machine à laver, réfrigérateur)-
  • Estimation de la consommation : calcul du temps de fonctionnement X puissance de l’appareil.

N’hésitez pas à faire vos retours ou propositions.

Sources