Utiliser une ampoule Avea avec HomeKit (via HomeBridge)

Je ne sais pas pourquoi, mais je m’acharne à utiliser HomeBridge pour rendre mes appareils compatibles avec HomeKit. Et à chaque fois, je regrette. Cette fois, j’ai connecté une ampoule Elgato Avea.

La lampe Avea est une ampoule connectée en Bluetooth proposée pour environ 30 €, qui a été vendue comme « compatible HomeKit » à son annonce en 2014 mais qui ne l’est pas. Elle fonctionne uniquement en Bluetooth 4.0 depuis un smartphone. Récemment, je suis tombé sur un projet qui permet de la contrôler en HomeKit via HomeBridge.

Un peu de matériel

Première chose, trouver un support sympa. J’ai choisi un truc à l’aspect un peu vintage sur Amazon. Bon, ce n’était pas une super idée, pour deux raisons. D’abord, le look ne s’accorde pas tellement avec la lampe blanche. Ensuite, le support a un variateur intégré et la lampe connectée n’aime pas du tout ça : même variateur à fond, ça grésille et la partie connectée ne fonctionne pas. J’ai donc ouvert le câble et supprimé directement le variateur. Ensuite, mon installation HomeBridge tourne sur un vieux Raspberry Pi sans Bluetooth, donc j’ai ajouté une clé Bluetooth 4.0 (un truc IOGear compatible avec les Mac, d’ailleurs) que j’avais en stock. Avec un Raspberry Pi avec Bluetooth intégré (un 3, 3+ ou Zero W), ce n’est pas nécessaire, mais vu le fonctionnement d’HomeBridge, je vous déconseille de passer une installation d’une carte à une autre : une partie des logiciels dépend fortement de l’architecture du CPU (ARMv6 sur les vieux modèles, v7 sur les récents).

La plaie HomeBridge

En théorie, HomeBridge, c’est magique : on coupe le serveur (important), on installe le nouveau plug-in, on modifie le fichier de configuration et on relance HomeBridge. Ca c’est la théorie.

sudo /etc/init.d/homebridge stop // Stopper HomeBridge.
npm install -g --unsafe-perm homebridge-avea-bulb // Installer le plug-in.

Ajouter les lignes suivantes dans le config.json.

"accessories": [
{
"accessory": "AveaBulb",
"name": "Avea Bulb"
}
],

sudo /etc/init.d/homebridge start // Lancer HomeBridge.

Ca, c’est la théorie. En pratique, déjà, un problème se pose : le JSON. J’ai placé les informations au mauvais endroit au départ. En fait, j’avais des accessoires basés sur une structure platforms et il s’agit ici d’un accessoire. Je ne peux même pas vous expliquer comment structurer le truc, vu que ça dépend totalement de ce que vous avez. Mais en gros, il y a une section platforms et une section accessories bien séparées. Second problème, HomeBridge ne pouvait pas se connecter au Bluetooth. J’ai bloqué plus longtemps là dessus pour deux raisons. D’abord, parce qu’avec les appareils Bluetooth, HomeBridge doit normalement être lancé en root et que mon installation ne se lance pas en root en démarrage automatique. Ensuite, parce que la commande recommandée (sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)) ne fonctionnait pas chez moi.

J’ai trouvé la raison après pas mal de recherches. Premièrement, visiblement, il faut ajouter un truc dans les versions récentes de Debian – donc Raspbian – (Stretch) : cap_net_admin. Deuxièmement, j’ai bizarrement plusieurs binaires de Node sur mon Raspberry Pi, et la commande « which node » ne donnait pas les droits à la bonne. Dans mon cas précis, et vu le côté bidouille de HomeBridge, ça peut changer selon les appareils, la commande exacte est la suivante. Elle donne les droits nécessaires à la bonne version de Node pour utiliser le Bluetooth.

sudo setcap cap_net_raw,cap_net_admin+eip $(eval readlink -f '/opt/nodejs/bin/node')

Dans ma bibliothèque

Avec ça (et ça m’a pris une bonne partie d’une soirée), mon installation démarre automatiquement et affiche correctement la lampe. En pratique, la portée est assez bonne – plus que ce que je pensais – et HomeBridge semble stable. Par contre, la lampe ne donne pas exactement les mêmes couleurs que les autres lampes : il y a un décalage visible. Genre quand on choisit du rouge, ça tire vers le rose. Mais ce n’est pas trop gênant à l’usage. La lampe est à plusieurs mètres d’un Raspberry Pi qui est dans une étagère avec un mur derrière et ça fonctionne sans problèmes, même si je ne sais pas si c’est aussi efficace avec le Bluetooth interne des Raspberry Pi récents.

Petit truc en plus sur une idée de @paingout, la lampe s’allume en rouge quand le capteur de CO2 détecte une mauvaise qualité de l’air. Bon, vu le fonctionnement de base d’HomeKit, ce n’est pas très efficace (on ne peut le faire par défaut que via la concentration en CO2) mais c’est très simple à mettre en place avec les automatisations.

Et enfin, comme lors de mes essais précédents, j’ai perdu pas mal de temps à configurer HomeBridge. Parce que même si ça fonctionne, c’est quand même souvent une plaie à configurer sur pas mal de points. Je suis du coup toujours assez dubitatif à son sujet : le but d’HomeKit est de simplifier la domotique et avec HomeBridge on tombe vite dans les travers des autres solutions qui demandent des connaissances importantes. C’est un peu dommage.