Lorsque le compteur connecté Linky a été annoncé, ERDF (maintenant Enedis) s’est trouvée au coeur d’une controverse sur la vie privée et la collecte des données de la consommation électrique des français. Je ne chercherai pas ici à justifier ou condamner ses pratiques, mais je vais au moins vous montrer comment vous pouvez en profiter pour votre usage personnel. 😉

Voulant garder un oeil sur ma consommation électrique durant l’hiver tout en profitant des données maintenant fournies directement par Enedis, j’ai créé le projet Linkindle.

linkindle

L’afficheur est accroché au mur de mon appartement et allumé en permanence. Grâce à l’écran e-ink de la Kindle, la batterie devrait tenir des semaines sans nécessiter de recharge. L’histogramme est mis à jour une fois par jour.

D’un point de vue technique, les graphiques sont générés une fois par jour via un script cron qui tourne sur un serveur dédié (un simple Raspberry Pi fait l’affaire). Ils sont créés par un script Python et la bibliothèque matplotlib qui récupère traite les données d’Enedis, avant d’être mis à disposition sur un serveur web sur le réseau local.

La Kindle (une simple Kindle Basic suffit) a été jailbreakée et fait également tourner un script cron une fois par jour. Ce dernier récupère le graphique sur le serveur web et l’affiche.

Allez, on rentre dans les détails ! Tout est open-source, donc avec un peu d’huile de coude et de matériel vous pouvez avoir la même chez vous. 👌

Comment faire ?

Prérequis

Pour commencer, et c’est important à préciser, il va vous falloir un compteur Linky activé. L’installation est une première étape, mais vous devrez attendre jusqu’à plusieurs mois avant de recevoir un courrier de la part d’Enedis vous confirmant l’activation du compteur.

Vous devrez ensuite demander sur leur site web la création d’un compte personnel lié au compteur, une opération qui peut encore prendre plusieurs jours. Après ça, vous êtes prêts ! Vérifiez que vous avez bien accès aux données sur votre espace personnel.

En ce qui concerne le Kindle, n’importe lequel devrait faire l’affaire ; vérifiez simplement qu’il peut être jailbreaké avant de dépenser des dizaines d’euros dans une brique. Et notez que vous ne pouvez pas économiser 10€ en achetant la version avec les offres spéciales : j’ai testé, et ça ne fonctionne pas. 😒 Si toutefois vous avez fait cette erreur, vous pouvez désactiver ces dernières depuis le site d’Amazon.

Côté serveur

Le côté serveur sera le plus simple à configurer. Vous pouvez commencer par récupérer le projet sur Github. Installez les dépendances. Sur une Debian :

$ apt-get install python3 pip3 python3-numpy python3-matplotlib python3-requests python3-dateutil python3-tk texlive texlive-latex-extra texlive-fonts-recommended dvipng imagemagick

Mettez ensuite en place un serveur web quelconque. Apache fait très bien l’affaire.

Dans le répertoire du projet, éditez le fichier gen_graphs.sh et ajoutez votre identifiant et mot de passe Enedis dans les variables respectives. Remplacez la valeur de OUT_DIR par un dossier accessible depuis votre serveur web. Attention aux permissions !

Vous pouvez tester l’exécution du script avec cette simple commande :

$ ./gen_graphs.sh

Enfin, on pourra mettre en place une tâche cron pour récupérer les données quotidiennement.

$ crontab -e

# m h  dom mon dow   command
0 5 * * * /home/iot/linkindle/gen_graphs.sh

Remplacez bien sûr /home/iot/linkindle/ par le répertoire du projet. Le script sera ainsi appelé tous les jours à 5h du matin.

Côté Kindle

Cette partie étant un peu plus délicate (il est assez rare d’être “expert(e) en jailbreak de Kindle” 😶) et moins bien documentée, je vais essayez de la découper en plusieurs parties.

Gardez en tête que ce tutoriel a été écrit en 2016. La méthode de jailbreak peut avoir changé si vous lisez ça dans le futur. Faites attention à ce que vous faites, je ne suis pas responsable de ce que vous faites avec votre matériel ! Si vous avez des problèmes, n’hésitez pas à laisser un commentaire.

Jailbreak

Commencez par identifier le modèle de votre Kindle grâce à cette page.

La faille utilisée pour le jailbreak des Kindle les plus récentes n’est plus présente dans les dernières versions de leur firmware. Vous allez donc devoir downgrader votre appareil dans une version supportée en suivant à la lettre les instructions de ce thread.

Les outils que j’ai utilisé proviennent du forum et wiki MobileRead. Après avoir cherché pendant longtemps la source de certaines erreurs, j’ai découvert qu’il existe une page depuis laquelle tout télécharger. C’est la seule à avoir les versions les plus récentes de tous les outils. Considérez-la comme votre Bible à partir de maintenant.

KUAL (Kindle Universal Application Launcher)

Téléchargez KUAL depuis la page des snapshots, puis glissez le fichier .azw2 adapté dans le dossier documents à la racine de votre Kindle. Vérifiez que vous avez une nouvelle entrée dans la liste des livres sur la Kindle. Ce hack est une interface qui vous permettra de lancer simplement un tas d’extensions, dont celles qui nous intéressent.

Thread principal

MobileRead Package Installer

Pour pouvoir installer des packages sur les versions récentes du firmware des Kindle, vous aurez besoin de MobileRead Package Installer (ou mrpi). Installez simplement le répertoire téléchargé dans le dossier extensions à la racine du Kindle.

Thread principal

Screensaver hack

Le screensaver hack (ou linkss) permet de remplacer les fonds d’écran par défaut de la Kindle par n’importe quelle image au bon format. On va s’en servir pour afficher les images de nos histogrammes !

Pour l’installer, glissez les fichiers *.bin nécessaires dans le dossier racine de votre Kindle (y compris Python 2.7, qui est également fourni, et qui est une dépendance). Ensuite, ouvrez KUAL, puis sélectionnez MR Package Installer et lancez l’installation.

python sur kindle

Thread principal

Online Screensaver

Dernier morceau de magie pour donner vie à notre bidouille : l’extension Online Screensaver, qui va se charger de récupérer notre image, depuis notre serveur web, à intervalles définies préalablement. Sans cette extension, les scripts cron ne fonctionnent pas correctement, et le mode veille de la Kindle interfère avec le réseau.

Téléchargez l’extension depuis cette page et placez-la dans le dossier extensions à la racine de votre Kindle. Il vous faudra ensuite la configurer en modifiant le fichier onlinescreensaver/bin/config.sh pour y insérer l’URL du graphe que vous voulez afficher et la fréquence de rafraîchissement.

Testons !

Et voilà, tout devrait être configuré correctement. Faites un test en lançant une mise à jour du screensaver depuis KUAL > Online Screensaver. Essayez de redémarrer la Kindle, et boum, ça devrait être bon ! 😀

kindle au mur

Comment ça marche ?

Côté serveur

Pour récupérer les données de consommation électriques, j’ai du faire un reverse-engineering léger du site d’Enedis. Il se trouve qu’ils fournissent aux utilisateurs connectés un fichier JSON assez complet et simple à utiliser, paramétrable par date de début et de fin. L’authentification se fait classiquement par un appel à une page de login et la conservation d’un cookie de session.

Vous pouvez retrouver la partie de récupération des données brutes (et la réutiliser dans un autre projet si tel est votre désir !) dans le module Python linky.py.

La génération des histogrammes est réalisée par linky_plot.py. J’utilise matplotlib et le module LaTeX pour réaliser de beaux graphiques. Ce script appelle directement le module décrit précédemment.

Enfin, le point d’entrée “normale” est le fichier gen_graphs.sh, dans lequel est appelé le script Python 3, mais également l’outil imagemagick, qui est hyper important pour la génération d’images adaptées à l’écran de la Kindle. Un paramètre incorrect, et les résultats seront inutilisables.