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.
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.
Un boitier a été conçu sous fusion360 et mis en ligne : Boitier ESP32 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.
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:
- platform: esphome
password: "caeaa610fd0d2cecb073ac015752xxxx"
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 bord
puis cliquer sur Energies
. Il est conseillé de mettre les coûts en EUR/kWh.
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.