Surveiller sa consommation électrique avec Jeedom et un modem Teleinfo en « USB over IP »

Réduire votre consommation d’électricité est bénéfique tant pour vos finances que pour l’environnement, et tout commence par l’information. Si les habitudes écoénergétiques (comme éteindre les lumières inutilisées et réduire au minimum le chauffage électrique) jouent un rôle important, ce qui change vraiment la donne, c’est la possibilité de surveiller et de comparer votre consommation en temps réel, où que vous soyez. Cela vous permet de suivre vos progrès et de détecter rapidement les pics inhabituels, que vous soyez chez vous ou à l’extérieur.

Dans cet article, je vais vous expliquer comment je surveille ma propre consommation d’électricité à l’aide du système de domotique et d’automatisation Jeedom et d’un compteur électrique Linky français. Ma configuration comprend un contrôleur Jeedom « maître » (fonctionnant sur une machine virtuelle Debian sur un Intel NUC avec vSphere) et un modem/capteur matériel connecté au compteur Linky, qui est à son tour relié à un Raspberry Pi 3B+ distant. Le cœur de cette solution est une méthode permettant d’accéder à des périphériques USB distants via un réseau, à l’aide de la technologie USB over IP.

Comme mon compteur électrique est physiquement éloigné de ma machine Jeedom, je ne peux pas connecter le modem USB directement à à Jeedom. Pour résoudre ce problème, j’ai installé un petit Raspberry Pi 3B+ à l’intérieur de l’armoire électrique et je l’ai connecté au modem. Le Raspberry Pi envoie les données du compteur via IP/Wifi au contrôleur Jeedom principal, qui traite le modem comme s’il était directement connecté en USB.

Ce système permet d’enregistrer et d’afficher la consommation d’électricité en direct (pratique pour voir instantanément l’impact du démarrage d’un appareil spécifique), mais aussi au fil du temps, ce qui facilite la comparaison de la consommation entre différents mois et différentes années, et même au sein des différentes périodes tarifaires de votre abonnement. Avec quelques réglages supplémentaires, ce système peut également estimer vos coûts d’électricité. Utilisé avec des capteurs Z-Wave, des prises intelligentes ou des interrupteurs qui mesurent leur propre consommation, il vous permet d’identifier rapidement les appareils et les habitudes qui contribuent le plus à votre consommation d’énergie, et même de réaliser du délestage facilement.

Notez qu’il existe trois approches alternatives à la méthode USB sur IP avec Jeedom :

  • Vous pouvez déployer une instance Jeedom « esclave » sur le Raspberry Pi à l’intérieur de l’armoire électrique, puis utiliser le plugin Teleinfo avec le plugin Jeedom Link pour transmettre les données de cette instance esclave au contrôleur Jeedom principal. Cependant, cette méthode est relativement lourde pour le simple transfert de données, car elle nécessite l’exécution de deux instances Jeedom distinctes.
  • Vous pouvez également utiliser le mode démon du plugin Teleinfo sur le Raspberry Pi. Ce plugin est spécialement conçu pour la surveillance de la consommation électrique dans Jeedom et, en mode démon, ne nécessite pas l’installation complète de Jeedom sur le Pi. Personnellement, je préfère la solution USB sur IP car elle est générique : elle fonctionne avec n’importe quel périphérique USB, pas seulement avec le modem électrique et pas seulement pour Jeedom.
  • Une troisième option consiste à utiliser un autre type de modem Teleinfo, qui transmet les données à Jeedom à l’aide d’un protocole sans fil. Je prévois de publier un guide séparé pour cette approche.

Par conséquent, la solution USB sur IP décrite ici est un choix robuste et générique lorsque vous souhaitez utiliser un périphérique USB distant sur un système Linux via un réseau TCP/IP disponible. Elle ne s’applique pas qu’à la surveillance d’électricité.

Le matériel et les logiciels que j’utilise

Voici un aperçu rapide des composants nécessaires à cette configuration :

  • Mon contrôleur Jeedom principal fonctionne sur une machine virtuelle Debian hébergée sur un ancien Intel NUC (la configuration de cette machine est décrite ici).
  • Le modem électrique est connecté via USB à un Raspberry Pi 3B (un Pi Zero W fonctionnerait probablement aussi), qui restera installé en permanence dans l’armoire électrique.
  • Un « modem EDF Téléinformation » : c’est là que les choses se compliquent, car chaque pays a généralement son propre type de compteur électrique. Ce tutoriel concerne spécifiquement les installations françaises ! En France, tous les compteurs électriques sont équipés de deux connecteurs qui peuvent être utilisés pour surveiller la consommation d’électricité. Les données transmises via ce connecteur « Teleinfo » sont simples et officiellement documentées, et le modem les convertit en données USB que le Raspberry Pi peut lire. Si vous vous trouvez dans un autre pays, vous devez vérifier le fonctionnement de votre système électrique et le type de matériel ou d’adaptation dont vous aurez sûrement besoin.
Le modem USB Teleinfo à brancher sur le Linky français

  • Quelques notions de base en matière de câblage électrique.
  • Le plugin Jeedom « Teleinfo » (gratuit) permet de surveiller et d’enregistrer les données en temps réel sur le contrôleur principal Jeedom à partir du capteur distant.
  • En option et non décrit dans ce guide, le plugin Jeedom « Suivi conso » (8 €), qui peut aussi être installé sur le contrôleur Jeedom principal pour formater et afficher les données collectées de manière attrayante.

Configuration du « serveur USB » distant RPI3B

On commence par installer une nouvelle image de Raspbian sur le Raspberry Pi 3B. (Si vous avez besoin d’aide, vous pouvez vous référer à mon tutoriel de configuration rapide. Pour cet article, je vais partir du principe que Raspbian est déjà installé et fonctionne.)

a. Câblage du modem

On prépare le modem Teleinfo pour le câblage : dévissez son boîtier et insérez deux petits fils, un dans chacun des deux connecteurs internes.

Retirez maintenant délicatement le couvercle supérieur du compteur électrique pour exposer les bornes I1 et I2 (ignorez la borne « A », notre modem est alimenté par USB).

Connectez les deux fils du modem Teleinfo à I1 et I2 — peu importe quel fil va à quelle borne.

Enfin, éteignez le Raspberry Pi, placez-le dans l’armoire électrique, puis rallumez-le.

L’ensemble du dispositif côté compteur électrique. Il manque un câble USB sur cette photo (entre le modem et le Raspberry).

Une fois que le Raspberry Pi a démarré, je m’y connecte en SSH et vérifie quels périphériques USB sont détectés par Raspbian. Je surveille également les journaux système principaux pour confirmer que le modem USB Teleinfo est correctement détecté lorsque je le branche.

Et maintenant, je branche le modem avec son câble USB au Raspberry…

Après avoir connecté le modem, un nouveau périphérique « Cartelectronic » apparaît dans les journaux, identifié par lsusb comme un périphérique « Future Technology » et détecté comme un modem série USB sur ttyUSB0 (selon syslog). Cela signifie que tout fonctionne parfaitement jusqu’à présent.

b. Partage des données Teleinfo sur IP

Configurons maintenant Raspbian afin que le Raspberry Pi 3B puisse partager ses données Teleinfo sur le réseau TCP/IP, en tant que serveur. Commencez par installer le paquet « usbip » :

apt-get install -y usbip

Cette commande installe les modules usbip nécessaires. Ensuite, nous allons nous assurer que Raspbian charge les modules du noyau requis au démarrage en modifiant /etc/modules-load.d/modules.conf.

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

vhci-hd
usbip-core
usbip_common_mod
usbip-host

Ensuite, redémarrez votre Raspberry Pi et vérifiez que les modules usbip sont désormais chargés.

Vous pouvez également vérifier quels périphériques sont visibles par usbip à l’aide de la commande suivante :

root@PITeleinfo:~# usbip list -l
usbip: error: Protocol spec without prior Class and Subclass spec at line 23299
 - busid 1-1.1 (0424:ec00)
   Microchip Technology, Inc. (formerly SMSC) : SMSC9512/9514 Fast Ethernet Adapter (0424:ec00)

 - busid 1-1.5 (0403:6015)
   Future Technology Devices International, Ltd : Bridge(I2C/SPI/UART/FIFO) (0403:6015)

Vous verrez peut-être une erreur apparaître à la première ligne. Cela semble être spécifique à Debian 10.12 Bullseye sur le Pi 3B, mais cela n’affecte pas la configuration ni le fonctionnement ultérieur. Ce qui importe, c’est l’identifiant « 1-1.5 », qui fait référence au périphérique que nous voulons partager (vous avez également vu cet identifiant dans /var/log/messages et syslog). Nous utiliserons cet ID de bus sur l’hôte distant dans les étapes suivantes. Tout d’abord, effectuons un test rapide de partage de notre modem :

root@PITeleinfo:~# usbipd -D
root@PITeleinfo:~# usbip bind -b 1-1.5
usbip: info: bind device on busid 1-1.5: complete

Il ne devrait y avoir aucune erreur : le modem est désormais correctement partagé sur le serveur.

c. Démarrer USBIP automatiquement avec systemd

Ensuite, configurez une unité systemd afin que usbip se lance automatiquement au démarrage du raspberry. Créez le fichier /etc/systemd/system/usbip.service. (Je me suis basé sur ce guide, avec quelques modifications pour Debian/Raspbian.)

root@PITeleinfo:~# joe /etc/systemd/system/usbip.service
[Unit]
Description=Exports USB device over IP
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service

[Service]
Type=simple
Restart=on-failure
RestartSec=20
User=root
Group=root
ExecStart=/usr/sbin/usbipd
ExecStartPost=/usr/sbin/usbip bind --busid=1-1.5
ExecStop=/usr/sbin/usbip unbind

[Install]
WantedBy=multi-user.target

Maintenant, laissez systemd reconnaître la nouvelle unité et configurez-la pour qu’elle se lance au démarrage :

root@PITeleinfo:~# systemctl daemon-reload
root@PITeleinfo:~# systemctl enable usbip.service
Created symlink /etc/systemd/system/multi-user.target.wants/usbip.service → /etc/systemd/system/usbip.service.

Notez que l’unité est configurée pour attendre que le réseau soit prêt ; le partage de périphériques USB sur le réseau n’est pas possible si le réseau n’est pas encore opérationnel. Pour vous assurer que cela fonctionne, activez l’unité systemd-networkd-wait-online.service sur votre système :

root@PITeleinfo:~# systemctl enable systemd-networkd-wait-online.service

Maintenant, démarrons le service :

root@PITeleinfo:~# systemctl start usbip.service
Job for usbip.service failed because the control process exited with error code.
See "systemctl status usbip.service" and "journalctl -xe" for details.

Nous voyons une erreur, mais c’est en fait normal, car nous avons précédemment démarré usbip manuellement à des fins de test. Vérifions cela.

root@PITeleinfo:~# journalctl -xe
avril 03 13:02:20 PITeleinfo systemd[1]: Starting Exports USB device over IP...
░░ Subject: L'unité (unit) usbip.service a commencé à démarrer
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░
░░ L'unité (unit) usbip.service a commencé à démarrer.
avril 03 13:02:20 PITeleinfo usbip[1634]: usbip: error: device on busid 1-1.5 is already bound to usbip-host
avril 03 13:02:20 PITeleinfo systemd[1]: usbip.service: Control process exited, code=exited, status=1/FAILURE
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░
░░ An ExecStartPost= process belonging to unit usbip.service has exited.
░░
░░ [...]
░░
░░ L'unité (unit) usbip.service a échoué, avec le résultat failed.
root@PITeleinfo:~#

L’explication est claire : le périphérique avec busid 1-1.5 est déjà « lié » à usbip, ce qui est normal puisque nous avons lancé manuellement usbip plus tôt à des fins de test.

Maintenant, redémarrons le Pi 3B et vérifions que usbip démarre automatiquement et que le périphérique 1-1.5 est partagé sans intervention.

root@PITeleinfo:~# /sbin/reboot
root@PITeleinfo:~# tail -n 300 /var/log/syslog
[...]
Apr  3 18:06:35 PITeleinfo dhcpcd[440]: wlan0: soliciting an IPv6 router
Apr  3 18:06:35 PITeleinfo dhcpcd[440]: wlan0: rebinding lease of 192.168.1.46
Apr  3 18:06:35 PITeleinfo dhcpcd[440]: wlan0: probing address 192.168.1.46/24
Apr  3 18:06:37 PITeleinfo ModemManager[491]: <info>  [base-manager] couldn't check support for device '/sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5': not supported by any plugin
Apr  3 18:06:37 PITeleinfo ModemManager[491]: <info>  [base-manager] couldn't check support for device '/sys/devices/platform/soc/3f300000.mmcnr/mmc_host/mmc1/mmc1:0001/mmc1:0001:1': not supported by any plugin
Apr  3 18:06:37 PITeleinfo ModemManager[491]: <info>  [base-manager] couldn't check support for device '/sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1': not supported by any plugin
Apr  3 18:06:37 PITeleinfo systemd-networkd[169]: wlan0: Gained IPv6LL
Apr  3 18:06:37 PITeleinfo systemd[1]: Finished Wait for Network to be Configured.
Apr  3 18:06:37 PITeleinfo systemd[1]: Starting Exports USB device over IP...
Apr  3 18:06:37 PITeleinfo usbip[558]: usbip: info: bind device on busid 1-1.5: complete
Apr  3 18:06:37 PITeleinfo systemd[1]: Started Exports USB device over IP.
[...]

C’est parfait, la clé USB est automatiquement partagée après son redémarrage, nous sommes prêts pour la phase suivante : configurer le contrôleur Jeedom principal, alias le « client ».

2. Configuration du « client USB » : Jeedom

a. Montage du périphérique USB distant

Maintenant, configurons la machine virtuelle Jeedom, qui sert de client à notre serveur usbip Pi 3B. Commencez par installer le paquet usbip comme vous l’avez fait sur le Raspberry Pi :

root@DEBIAN10-3-JEEDOM:~# apt-get install -y usbip

Cela installe les modules usbip nécessaires. Ensuite, assurez-vous que Debian charge les modules du noyau requis au démarrage en modifiant /etc/modules-load.d/modules.conf.

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

vhci-hcd
usbip-core
usbip_common_mod

A nouveau, redémarrez votre système Debian et vérifiez que les modules usbip sont chargés.

Maintenant, faisons un petit test manuel en essayant de « monter » (connecter) le modem partagé depuis le serveur. On a besoin de deux choses : l’ID USB source côté serveur et l’adresse IP du serveur (le raspberry distant).

root@DEBIAN10-3-JEEDOM:~# usbip attach -d 1-1.5 -r 192.168.1.46
root@DEBIAN10-3-JEEDOM:~#

Aucune erreur n’ayant été signalée, la connexion du périphérique a probablement réussi. Nous pouvons maintenant vérifier que le périphérique USB est correctement détecté par le système. Examinons les journaux système…

root@DEBIAN10-3-JEEDOM:~# tail -f /var/log/syslog
Apr  3 11:25:41 DEBIAN10-3-JEEDOM kernel: [ 1084.463477] usb 3-1: SerialNumber: DA1RP5XM
Apr  3 11:25:41 DEBIAN10-3-JEEDOM kernel: [ 1084.496260] usbcore: registered new interface driver usbserial_generic
Apr  3 11:25:41 DEBIAN10-3-JEEDOM kernel: [ 1084.496671] usbserial: USB Serial support registered for generic
Apr  3 11:25:41 DEBIAN10-3-JEEDOM kernel: [ 1084.505932] usbcore: registered new interface driver ftdi_sio
Apr  3 11:25:41 DEBIAN10-3-JEEDOM kernel: [ 1084.506646] usbserial: USB Serial support registered for FTDI USB Serial Device
Apr  3 11:25:41 DEBIAN10-3-JEEDOM kernel: [ 1084.507371] ftdi_sio 3-1:1.0: FTDI USB Serial Device converter detected
Apr  3 11:25:41 DEBIAN10-3-JEEDOM kernel: [ 1084.507474] usb 3-1: Detected FT-X
Apr  3 11:25:41 DEBIAN10-3-JEEDOM kernel: [ 1084.512422] usb 3-1: FTDI USB Serial Device converter now attached to ttyUSB0
Apr  3 11:25:44 DEBIAN10-3-JEEDOM ModemManager[492]: <info>  Couldn't check support for device '/sys/devices/platform/vhci_hcd.0/usb3/3-1': not supported by any plugin

Vous devriez maintenant voir des lignes de journal confirmant que votre périphérique USB est détecté et connecté en tant que ttyUSB0.

root@DEBIAN10-3-JEEDOM:~# lsusb
Bus 018 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 017 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 016 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 015 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 014 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 013 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 012 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 011 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 009 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 010 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 008 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 002: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 004: ID 0658:0200 Sigma Designs, Inc. Aeotec Z-Stick Gen5 (ZW090) - UZB
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Vous devriez voir « Future Technology Devices International, Ltd Bridge (I2C/SPI/UART/FIFO) », le même périphérique visible côté serveur. Cela confirme que tout fonctionne comme prévu.

b. Tout démarrer automatiquement avec systemd

Ici aussi, nous utiliserons un fichier système systemd dédié (/etc/systemd/system/usbip.service) pour surveiller et monter le modem Teleinfo distant via IP.

root@DEBIAN10-3-JEEDOM:~# joe /etc/systemd/system/usbip.service
[Unit]
Description=Connects remote USB device over IP
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service

[Service]
Type=simple
Restart=on-failure
User=root
Group=root
ExecStart=/usr/local/sbin/usbip_teleinfo.sh

[Install]
WantedBy=multi-user.target

Cette unité systemd lance un script (/usr/local/sbin/usbip_teleinfo.sh) contenant une boucle qui vérifie régulièrement si les points de terminaison spécifiés sont montés et, si ce n’est pas le cas, tente de les monter. Le script intercepte également divers signaux de terminaison Unix afin de pouvoir dissocier proprement les périphériques distants montés. N’oubliez pas de mettre à jour le script avec votre propre adresse IP SERVEUR et l’ID BUS tel qu’il est exposé par votre serveur.

root@DEBIAN10-3-JEEDOM:~# joe /usr/local/sbin/usbip_teleinfo.sh
#!/bin/bash

ENDLESS=true
LANG=C
SERVER='192.168.1.46'
BUSID='1-1.5'

trap_exit() {
    ENDLESS=false
    for PORT in $(/usr/sbin/usbip port | /usr/bin/grep ^Port | /usr/bin/cut -d':' -f1 | /usr/bin/awk '{print$2}'); do
        /usr/sbin/usbip detach -p $PORT
    done
    exit 0
}

trap trap_exit SIGINT
trap trap_exit SIGTERM
trap trap_exit SIGKILL

while $ENDLESS; do
    if ! /usr/sbin/usbip port | /usr/bin/grep "usbip:.*${SERVER}.*${BUSID}$" &> /dev/null; then
        /usr/sbin/usbip attach -r ${SERVER} -b ${BUSID}
    fi
    sleep 30
done

trap_exit
root@DEBIAN10-3-JEEDOM:~# chmod 0750 /usr/local/sbin/usbip_teleinfo.sh

Une fois encore, assurez-vous que l’unité systemd chargée de vérifier que le réseau est opérationnel est activée sur votre système :

root@DEBIAN10-3-JEEDOM:~# systemctl enable systemd-networkd-wait-online.service

Maintenant, activez cette nouvelle unité systemd pour vous assurer qu’elle démarre au boot de Jeedom :

root@DEBIAN10-3-JEEDOM:~# systemctl daemon-reload
root@DEBIAN10-3-JEEDOM:~# systemctl enable usbip.service
Created symlink /etc/systemd/system/multi-user.target.wants/usbip.service → /etc/systemd/system/usbip.service.

Pour tester votre configuration, démarrez le service :

root@DEBIAN10-3-JEEDOM:~# sudo systemctl start usbip.service

Cette fois-ci, il ne devrait y avoir aucune erreur. Remarque : l’absence d’erreur est normale. Lors de la préparation de cet article, j’ai débranché mon Raspberry Pi, ce qui a entraîné la perte du point de montage sur le contrôleur Jeedom. Vérifions quels périphériques USB sont actuellement connectés au boîtier Jeedom.

root@DEBIAN10-3-JEEDOM:~# lsusb
Bus 018 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 017 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 016 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 015 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 014 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 013 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 012 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 011 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 009 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 010 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 008 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 004: ID 0658:0200 Sigma Designs, Inc. Aeotec Z-Stick Gen5 (ZW090) - UZB
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
root@DEBIAN10-3-JEEDOM:~#

Le « Future Technology Devices International, Ltd Bridge » apparaît désormais localement, parfait ! À ce stade, votre système monte automatiquement le capteur électrique distant sur le contrôleur Jeedom après un redémarrage, que celui-ci ait lieu sur le Raspberry Pi ou sur le serveur Jeedom.

Important : pour que cela fonctionne correctement, votre Raspberry Pi doit disposer d’une adresse IP statique (ou que vous y accédiez par un FQDN) ! Vous pouvez définir une adresse IP fixe directement sur le Pi (sans utiliser DHCP) ou configurer un bail DHCP statique sur votre routeur ou serveur DHCP.

Configuration du plugin Teleinfo dans Jeedom

Pour surveiller la consommation électrique, vous devrez installer un plugin dédié dans Jeedom. J’ai utilisé le plugin gratuit « Teleinfo ». Rendez-vous sur la page Plugins de Jeedom, ouvrez le Market et recherchez « Teleinfo ». Cliquez sur le bouton pour l’installer. Une fois l’installation terminée, Jeedom vous invitera à ouvrir la page de configuration. Cliquez sur Oui.

Remarque : la capture d’écran ci-dessous montre ma configuration déjà réalisée, la vôtre peut donc être légèrement différente après une nouvelle installation. Voici ce que vous devez faire immédiatement après avoir installé le plugin :

  1. (Cercle rouge) Commencez par lancer la compilation des dépendances.
  2. (Cercle violet) Je recommande de passer les journaux en mode DEBUG dans un premier temps, afin de pouvoir repérer facilement les erreurs, avec beaucoup de détails. Après avoir vérifié qu’il n’y a pas d’erreurs, vous pouvez repasser en mode INFO, puis cliquer sur Enregistrer.
  3. (Cercle bleu) Dans le menu déroulant Modem 1, sélectionnez votre modem électrique. Dans mon cas, il est monté comme /dev/ttyUSB0. Cliquez à nouveau sur Enregistrer.
  4. (Cercle vert) Attendez que le démon redémarre — le statut devrait passer au vert. Si ce n’est pas le cas après quelques minutes, examinez attentivement les journaux du plugin.

Je recommande également d’activer l’affichage du panneau Bureau en bas de la page de configuration (voir le cercle vert ci-dessous). N’oubliez pas d’enregistrer à nouveau vos modifications.

Vous pouvez également cliquer sur le bouton « Diagnostic » (affiché ci-dessus en bleu). Cela lancera plusieurs vérifications afin de confirmer que votre configuration et le capteur à distance fonctionnent correctement.

Maintenant, rendez-vous sur la page principale du plugin Teleinfo.

Un nouvel objet est automatiquement ajouté dès que le démon Teleinfo commence à collecter des données à partir du capteur électrique distant ou du modem. Le plugin peut immédiatement extraire les informations de votre compteur électrique, y compris son identifiant. Cliquez sur cet objet pour obtenir plus de détails.

Informations de base sur le compteur

La première chose que je recommande est d’activer la « création de commandes » (voir le cercle vert ci-dessus). Ce paramètre indique au plugin de créer automatiquement de nouvelles commandes dès qu’il détecte de nouveaux champs de données provenant du capteur qu’il n’a jamais vus auparavant.

Ma deuxième recommandation est de vérifier l’intégrité des données (voir le cercle orange ci-dessus).

Dans cette vue, vous pouvez voir quels champs ont déjà été reçus de votre compteur électrique et quand chacun d’entre eux a été mis à jour pour la dernière fois. Ensuite, examinons les commandes qui ont été automatiquement créées pour cet objet Jeedom.

Toutes ces commandes représentent soit des champs de données reçus du compteur électrique, chacun étant converti en champs d’informations individuels dans Jeedom, soit des données calculées par le plugin à partir des données reçues du compteur. Vous pouvez afficher, stocker et utiliser ces champs pour tout traitement ou automatisation que vous souhaitez mettre en place.

Remarque importante : le compteur électrique Linky peut fonctionner selon deux « modes », mais un seul à la fois. Ce mode est défini par votre fournisseur, mais vous pouvez demander à le modifier, c’est gratuit et cela se fait généralement en 24h.

  • Mode HISTORIQUE : utilise un format Teleinfo « à l’ancienne »
  • Mode STANDARD : utilise un format récent beaucoup plus détaillé

Nous pouvons voir sur mes premières captures d’écran que mon compteur Linky utilise le mode HISTORIQUE. Mais nous allons changer cela.

Affichage d’un petit widget sur le tableau de bord de Jeedom

Dans mon cas, je n’ai pas besoin de suivre chaque champ de données au fil du temps, je désactive donc simplement quelques options inutiles.

Remarque : dans la capture d’écran suivante, j’utilise toujours le mode HISTORIQUE, mais j’ai demandé à Électricité de France (EDF) de passer mon Linky en mode Standard. Cela devrait être fait pendant la nuit.

Maintenant, si vous retournez à la page d’accueil de Jeedom, vous devriez voir le widget Teleinfo très basique s’afficher.

Modification du widget

Une fois mon compteur électrique passé en mode Standard (et plein de nouvelles commandes disponibles dans le compteur détecté par le plugin Teleinfo), j’ai voulu améliorer l’affichage du widget. J’ai d’abord sélectionné des champs de données supplémentaires à afficher. Notez les nouvelles commandes qui apparaissent dans l’équipement du compteur, car le modem Teleinfo envoie désormais des champs de données supplémentaires.

Ensuite, j’ai modifié la disposition du widget. Pour se faire, il suffit de cliquer sur la petite icône en forme de crayon située en haut à droite du tableau de bord standard de Jeedom.

Une fois en mode Édition, cliquez sur les trois points verticaux en haut à droite du widget compteur que vous avez créé précédemment.

Une fenêtre contextuelle apparaîtra. Dans la section « Affichage », choisissez d’afficher les valeurs historiques SINSTS en arrière-plan du widget. Ces valeurs représentent la puissance instantanée fournie. Ensuite, dans la section « Mise en page », créez un tableau et attribuez des commandes (marquées en rouge ci-dessous) à des cellules spécifiques, tout en définissant des étiquettes (en bleu) pour les autres cellules.

Vous pouvez également personnaliser les paramètres d’affichage pour chaque commande dans la section « Commandes », par exemple en spécifiant son apparence sur le Web et sur les appareils mobiles, et en ajustant d’autres détails visuels.

J’obtiens ce widget simple mais efficace.

Quelques explications concernant ce widget :

  • La première ligne affiche le type de mon abonnement (ici : TEMPO d’EDF (Électricité de France)), le tarif journalier actuel (ici : HP BLEU), la puissance instantanée fournie (ici : 351 VA que je convertis incorrectement en watts).
  • La deuxième ligne est purement esthétique : je ne pouvais pas utiliser les balises HTML <BR> pour ajouter une ligne vide, j’ai donc ajouté trois « – ».
  • La troisième ligne explique la signification des deux colonnes du tableau en dessous : valeurs d’aujourd’hui et d’hier.
  • Les lignes 4, 5 et 6 sont utilisées pour les coûts cumulés et la consommation d’aujourd’hui et d’hier en heures pleines et heures creuses.

Notez que pour les commandes que nous avons choisies d’historiser, nous pouvons cliquer sur leur valeur, ce qui ouvrira une fenêtre d’historique.

Tableau de bord propre au plugin Teleinfo

Cependant, les informations les plus importantes sont disponibles directement depuis le tableau de bord du plugin Teleinfo.

Accéder au tableau de bord de Teleinfo

Différents types de statistiques apparaîtront ici, en fonction du type d’abonnement électrique que vous avez souscrit auprès de votre fournisseur.

Il est important de mentionner que je ne suis qu’un « consommateur » d’électricité, et non un producteur. Cependant, en France, si vous produisez de l’électricité (par exemple, avec des panneaux solaires), vous pouvez injecter (et revendre) votre production dans le réseau principal et ainsi recevoir une rétribution. Si j’étais producteur et que je choisissais de vendre mon électricité, ces valeurs apparaîtraient également dans les statistiques suivantes, car les données de production remonteraient aussi via le modem USB depuis le compteur Linky.

Vous trouverez ci-dessous un exemple des statistiques détaillées du tableau de bord générées par le plugin Teleinfo.

Conclusion et synthèse

En utilisant la technique de l’USB over IP, vous pouvez surveiller la consommation électrique de votre maison en temps réel, même lorsque votre compteur et votre contrôleur Jeedom sont éloignés l’un de l’autre. Cette approche est puissante car elle est flexible et modulaire : vous n’avez besoin que d’un petit Raspberry Pi, de la sortie Teleinfo de votre compteur électrique existant, d’un modem compatible et d’une configuration simple. Il est important de noter que cette solution fonctionne non seulement pour les cas d’utilisation Teleinfo, mais aussi pour tout périphérique USB que vous souhaitez partager sur votre réseau local (comme les clés Z-Wave ou les capteurs USB).

Cette configuration DIY vous permet de :

  • Centraliser toutes vos données de consommation électrique dans Jeedom
  • Comparer et optimiser votre consommation mois après mois ou année après année.
  • Configurer des alertes ou des automatisations pour les pics imprévus ou les schémas inhabituels.
  • Étendre facilement votre réseau domotique, sans installer de câbles supplémentaires !

Si vous êtes intéressé par d’autres projets domotiques, vous aimerez peut-être lire :

Pour plus d’informations sur le plugin Teleinfo, consultez la documentation officielle ou consultez le document sur le protocole Teleinfo d’Enedis (PDF, FR).

Avez-vous mis en œuvre cette solution ou adapté un autre protocole à Jeedom ? Surveillez-vous votre consommation d’énergie à l’aide d’une autre méthode ? N’hésitez pas à partager vos conseils, questions ou commentaires dans la section ci-dessous !

Merci !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


La période de vérification reCAPTCHA a expiré. Veuillez recharger la page.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.