Cartes "Energy" et teleinformation (TIC) avec ESPHome

Le module Energy est vraiment puissant, propose de belles cartes interactives Lovelace (navigation jour-mois-année, consolidation des coûts), et ce serait à mon sens 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 1 enregistrement seulement stocké par heure.

En général, je préfère toujours bien comprendre et essayer d’utiliser en priorité ce que propose HA avant d’utiliser des intégration tierces (par exemple Energy plutôt que node-red et influxDB pour la consommation électrique). Penser que ne pas faire le choix HA est prendre le risque de ne pas profiter des évolutions à venir de HA.

Certes le sujet télé-information a déjà été pas mal traité, mais je vous propose de vous faire mon retour d’expérience sur une intégration complète et éprouvée, avec un coût de réalisation total < 10€ :

  • Réalisation DIY avec un ESP32 et les quelques composants soudés sur une plaque de prototypage
  • Un boitier à imprimer, dispo dans Cults3D
  • Adaptation de la configuration ESPHome pour avoir les entités compatible Energy
  • Configuration et intégration du module energy dans Lovelace : consommation et coûts

J’ai documenté ici la procédure de création de nouveaux composants ESPHome que j’utilise :
Utilisation ESPHome web pour de nouveaux composants

Pour plus d’informations, je vous renvoie à 2 excellents tutos :

Pour information, mon compteur électrique est en mode TIC « historique », avec heures pleines et heures creuses. Si ce n’est pas votre cas, il faudra faire quelques adaptations.

J’ai moi préféré utiliser un ESP32 plutôt qu’un ESP8866 car, plus puissant, il permet de mieux gérer le flux de données sur la liaison série et ainsi évider les erreurs (« bad CRC »). J’ai choisi une résistance de 2k en entrée, qui est un bon compromis. La liaison série principale de l’ESP32 est utilisée (UART0) dispo sur le GPIO 03.
Autrement, on retrouve le schéma classique : opto-coupleur pour isoler le circuit et la compteur, transistor mofset pour ré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é. 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 :smirk:
image
image

J’ai conçu sous fusion360 et mis en ligne le boitier :

A 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.

Concernant ESPHome, ci-dessous mon fichier de configuration.

esphome:
  name: esp-sim800

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: GPIO3
#  tx_pin: GPIO1
  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() };
      }

Je n’ai gardé que les informations utiles (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 d’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 liason série (baud_rate: 0 dans le logger). On peut enlever cela pour le premier flashage par cable, pour vérifier que tout se passe bien.

Ensuite, il faut configurer le module Energy : il est depuis les dernières versions dans configuration - tableau de bord puis cliquer sur Energies. Je vous conseille de mettre les coûts de kWh.

J’ai également configuré la partie CO2 pour tester : 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). Bon…

J’ai aussi essayé d’ajouter mes panneau solaire, mais comme le module Energy ne prends pas en charge le rachat de la consommation par EDF, cela me faussait les résultats.

Reste enfin à intégrer les cartes Energy dans Lovelace (Energy Cards - Home Assistant)
Mon dashboard fait pour mobile est assez simple :

A noter qu’il y a ici présent le nouveau composant bouton :smirk:

Et le code, si jamais, des 6 cartes (hors entête de ma navigation sur mobile) :

type: energy-date-selection
type: energy-usage-graph
type: energy-sources-table
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
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: 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.teleinfo_tarif_actuel
  - entity: sensor.fr_grid_fossil_fuel_percentage
    name: Energie fossile / EDF
  - type: section
    label: Gestion du module teleinfo
  - entity: sensor.teleinfo_uptime
    name: Temps de fonctionnement
    secondary_info: last-updated
  - entity: button.teleinfo_restart
    name: Redémarrage

La suite pour moi sera d’intégrer les consommations des appareils : chauffage, chauffe-eau…
N’hésitez pas à faire vos retours ou compléments.

4 « J'aime »

Instant chipotage :laughing:
Y a-t-il une raison particulière pour garder les sensors en Wh et créer un template en kWH pour chacun plutôt que directement appliquer un filtre sur les sensors ?

De mon côté, pour les tarifs j’ai créé des input_numbers comme ça je peux modifier les tarifs simplement en changeant leur valeur mais les deux sont équivalant :slight_smile:

En tout cas chouette projet :slight_smile:

Merci :slight_smile:
Excellentes remarques.

L’idée est que le module envoie des données directement compatibles avec le module Energy, avec le device_class et l’unité de mesure en kWh corrects. Les indexes initiaux permettent un control mais oui on pourrait s’en passer en prod…
J’imagine que tu veux dire un filtre avec un multiply par 0.001 et changer ensuite le state_class en total_increasing ainsi que l’unité dans une customisation dans HA ? Je n’ai pas essayé, mais oui ce serait une alternative si le module energy accepte bien l’entité. Il peut y avoir un pb avec le last_reset. Tu as testé ?

Pour les input_number, j’ai hésité et me suis dit que cela était de la config utilisée pas trop souvent. Mais en phase, cela a quand même du sens de les déporter sur l’interface.

Pour info ça ne marche plus.

J’avais justement cette config : un customise sur une entité index.

Je n’avais plus de remontée depuis le début du mois. C’est grâce à ton code esphome que j’ai incorporé direct la bonne class dans le sensor.

1 « J'aime »

Désolé pour le temps de réponse, pas eu de notification.
Voilà un exemple, pas en customize dans Home Assistant mais directement dans la conf ESPHome :

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

Et le sensor remonte bien, je m’en sert dans le dashboard énergie.
Vu que tout peut se modifier directement dans ESPHome, pas besoin de toucher dans HA.

C’est sûr pour les input text que c’est pas modifié souvent mais au moins ça permet de les modifier directement dans HA en graphique, sans avoir à recharger quoi que ce soit après.
L’idéal serait une API pour récupérer les prix mais il faudrait avoir ça pour tout fournisseur :wink:

Top. Je n’avais pas testé le changement d’attributs ici (state_class, device_class et unit_of_measurement). C’est effectivement plus pertinent et permet de limiter le nombre d’infos transmises.

Je viens de tester et cela fonctionne très bien. Je change donc mon mon post initial avec le code modifié.

Merci @Nardol :grinning:
Les échanges sur le forum permettent de faire converger vers la meilleure solution et c’est cool

2 « J'aime »

Il te donne quand même les décimales même sans le accuracy_decimals: 3 ?
à mon époque :grin: ou plutôt quand j’ai mis ça en place avec le teleinfokit parce que ça fait peur la soudure lol, sans ça il m’affichait un nombre entier et @NicoP4 en avait conclus qu’il valait mieux les garder pour être le plus précis possible.

1 « J'aime »

Oups effectivement, tu as raison. Je les avais mis dans le template et j’ai juste oublié de les reporter. Je rajoute accuracy_decimals: 3.

1 « J'aime »

Salut,
J’ai réalisé un projet quasi similaire mais avec un module Pitinfo @ 10e couplé à un esp8266 (esp01s).
J’ai pas de problème de remonté des données jusqu’à maintenant.
Je me suis appuyé sur les mêmes « tutos » , et après quelques tâtonnements, j’ai du faire les mêmes modifs que toi pour avoir les informations dans le dashboard energy. (+ créations input number en €/kWh)
J’ai aussi créé des utility_meter pour les utiliser dans lovelace.

Pour ceux intéressés par ce module tout prêt :

Merci pour les info sur le c02. je n’avais même pas fait attention !

mon projet : GitHub - NicoDupont/esp_linky: Récupération des données de télé information du compteur linky
A noter, que j’ai supprimé les graphs Apexchart de lovelace car c’est assez redondant avec la partie energy.

1 « J'aime »

Merci pour le partage. Les graphes implémentés en sus sont très intéressants.

honnêtement, j’ai pompé le code et un peu modifié :laughing:

Bonjour,
ayant mis en place un zlinky et configurer le module Energy, je me demandais ou est stocker les infos du module Energy?

C’est dans les tables statistics.

1 « J'aime »

Bonjour et merci pour le guide.
Comment pourrait on ajouter les taxes fixes et au kw dans ce module ainsi que l’abonnement afin d’obtenir une pré-facture et ainsi comparer avec ce qui est facturé.
Un peu dans le même gout que le plugin suivi conso de jeedom?

Hello,
Merci pour le retour.
Concernant le découpage du tarif, le module Energy est fermé et il n’y a pas cette possibilité. Il faudrait redévelopper du spécifique en utilisant des input_texte pour les saisies de valeurs, puis des template sensor pour faire les calculs.
Le principal attrait du module energy est le graphique avec son sélecteur de période, qui n’existe malheureusement pas (encore?) pour les autres statistiques.

si les taxes sont proportionnelles au nombre de kwh on peut le faire dans le module energy sinon avec des templates sensors en effet

1 « J'aime »

Question idiote sans doute mais quel est la procédure pour avoir les card energy car dans paramètre > module complémentaire> aucun module Energy de trouvé.

le configuration du « module energy » se fait dans paramètres => tableaux de bord => Energy

Désolé je doit passer a coter mais je n’est pas energy

tu as quelle version de HA