Intégrer SmartHab à la solution domotique Home Assistant

2019-03-02 13:00:00 +0000

Home Assistant propose une solution logicielle de “box” domotique open-source qui s’installe sur n’importe quel matériel (par exemple un Raspberry Pi) et propose de nombreuses intégrations avec des appareils connectés.

Si vous vivez dans un logement équipé de la solution de domotique de SmartHab, vous cherchez peut-être un moyen de l’intégrer avec le reste de votre équipement via un logiciel comme Home Assistant. Moi aussi ! C’est pourquoi j’ai développé un plugin SmartHab pour Home Assistant.

home-assistant smarthab overview

Une fois mise en place, l’intégration vous donnera accès à toutes les possibilités de Home Assistant : automatisation, contrôle depuis iOS via HomeKit, contrôle vocal depuis Alexa ou Google Home…

Soyez prévenu·e : Home Assistant n’est pas un logiciel facile à prendre en main, et un certain niveau en anglais et en configuration textuelle de logiciels vous sera plus qu’utile.

Une fois le composant SmartHab publié (vous pouvez consulter la liste des composants actuellement disponibles), il suffira d’installer Home Assistant et d’ajouter ces lignes dans le fichier configuration.yaml :

smarthab:
  email: john.doe@example.com
  password: '123456'

Vos lumières et volets seront automatiquement mis à votre disposition dans Home Assistant au prochain démarrage.

Back to the Future Digital Speedometer: Making a Replica

2018-07-12 19:10:00 +0000

For a long time now, I’ve been wanting to create a replica of Back to the Future’s digital speedometer. It’s a prop used in the movie that’s placed on the DeLorean’s dashboard, and can be seen multiple times throughout the trilogy. Of course, it’s mostly used as a visual element to mark when the DeLorean reaches 88 miles per hour and begins its time travel!

I thought it would be cool to recreate it, and make it compatible with modern cars. I’ve seen very good-looking GPS models on the market, but I wanted to make something more genuine. GPS feels like cheating! There’s also a really awesome replica made by Damien De Meulemester that only uses components available in 1985, and works on a real DeLorean by adding a sensor to the speedometer. This is way out of my league, and obviously out of the question for modern cars with electronic speedometers, but it was a great inspiration to get started on this project.

end result

I settled on making my replica connect via a wire to the car’s OBD-II port, which is present on the vast majority of today’s cars.

Resources

You can find the firmware’s source code, reference material, CAD files, and more on Github.

Preparing the build: research!

We have to figure out the dimensions of the prop, the materials and components used, etc. Thankfully, the Internet is a great resource, and people have already done most of that for us.

The enclosure used in the movie is apparently a Hammond 1591CGY ABS box. It’s 120 x 65 mm, so it’s not too big for a dashboard, and has a pretty good size for fitting some electronics in it.

The displays used in the movie are three Stanley readout displays, which, unfortunately, don’t exist anymore. This technology has largely been replaced by seven-segment LED displays, and since they’re so similar, we’ll use these. The dimensions are tricky; it’s difficult to find the exact right size, but displays with a digit height of 20.3 mm seem to do the trick nicely. I’ll be using three Multicomp LS0803SRWK for this project.

Note that the third digit is hidden by a piece of tape; to keep things simple but accurate and more power-efficient, we’ll use a third display, but without wiring it.

The Stanley readout displays used to come with a black frame around them, which we can see in the movie. We’ll have to do without this. There are multiple solutions, including cutting a polystyrene frame, or using a sheet of black plastic, but the most elegant solution in 2017 to my eyes is 3D-printing a nice, sturdy plastic frame. If you’re using displays similar to mine in dimensions, you can use this model I made.

At the end of the first movie, we can see the back of the speedometer a little bit better.

back to the future back speedometer

As you can see, it’s using some kind of DB25 sub-D plug, which is usually found on old computers as a parallel port (used for printers and such). Not terribly convenient, but not too hard to find!

The Dymo labels found on the front of the box—famously reading SET TO 88—might be one of the trickiest to reproduce today, if you don’t have the right hardware. Modern Dymo machines usually print in 2D using a different font, but the labels we need are 3D (embossed) and 12 mm high. 9 mm embossed labels can be found, but 12 mm ones are rarer.

We’re now mostly good on our “exterior” stuff; our speedometer should be pretty good-looking if we can get all of these parts.

Build process

I’m using an Arduino Nano (compatible) board for this project. It’s got a UART interface, enough I/O ports, and runs at 5V. It’s also super tiny and will fit nicely in the enclosure.

We’ll need to get our Arduino to communicate with the car’s CAN bus to get the vehicle speed. Fortunately, this is all pretty easy, using the Freematics UART OBD-II adapter; it’s made for Arduino and provides a simple ELM327 interface that’s compatible with most CAN standards. It can even provide power to the board and has simple-to-use libraries, so it’s perfect for our needs.

I had some creative choices to make when it comes to the build. I chose to include an ON/OFF slider on the back, next to the plug, to make sure the speedometer doesn’t drain the battery when the engine is off. It’s not a hard switch: it signals the Arduino to put itself and the Freematics adapter into sleep mode. I also included a speed adjustment potentiometer which you can use to calibrate the display with your actual speed.

IMG_1453

The Arduino’s firmware development was a tough task, as I had to learn a lot about interrupts, serial communication and display driving in the process. In the end, it’s designed as a state machine with three states (sleep, connecting, connected).

The 7-segment displays are driven using a fork of the SevSeg library that tweaks the segments to reflect the ones used on screen (no top/bottom bar on 6 and 9, respectively) and always displaying the decimal point.

The OBD data is polled often, and when we get the current vehicle speed, we display it by going through all the numbers in between (with a linear interpolation). That was a very important point for me, because that’s how it is on screen, and no replica seemed to do this except for De Meulemester’s.

I started by making a basic prototype of the logic board on a breadboard and trying to make it work as well as possible with my car. I got into trouble when it came to interrupts and took a while to finish that whole system; I worked on the hardware parts in the mean time.

Once I had a working prototype, I finally could solder the whole thing (which also took some effort) and put it into its box!

Retrospective

This was a great project to both attempt to build hardware and play with Arduino. The electronics involved are pretty simple but still made me ask some interesting questions that are definitely useful in any project: What’s a pull-up resistor and why is it needed? How do you wire multiple 7-segment displays, and what is multiplexing? How do you handle interrupts and switch between different tasks at the same time (boy was that a tricky one).

I’ve made a few mistakes, of course, and there is certainly a lot to be improved by more skilled DIY-and-BTTF-enthusiasts (if you’re one of them and decide to follow my steps, please send me a tweet 👌).

Using Molex connectors was, in retrospect, not such a good idea. I thought it would improve modularity; but whereas in computer science that doesn’t mean many drawbacks, in electronics it means wasted space. The enclosure isn’t that small, but the connectors are pretty big and I certainly could have done without them and the long-ass cables I used for them.

end result

I could probably also improve the constant polling of the serial line, linear speed interpolation (using the accelerometer data that comes with the adapter?), and display multiplexing.

Overall, this was a lot of fun. I hope you liked it too! 😎

Linkindle : Affichez votre consommation électrique sur une liseuse

2016-12-04 21:10:05 +0000

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.