Installer HomeBridge pour rendre un appareil compatible HomeKit

Récemment, j’ai essayé un truc : installer HomeBridge sur un Raspberry Pi. Beaucoup me disaient que ce hack qui permet de rendre compatible HomeKit des dizaines d’appareils était très efficace et pratique. Pratique, peut-être, simple à installer, pas vraiment. Procédons.

L’idée de départ était de rendre mon purificateur d’air compatible avec HomeKit. Il est connecté, mais Dyson ne propose pas la prise en charge de HomeKit.

Installer HomeBridge

Première étape, installer HomeBridge. Ce programme en Node JS peut fonctionner sur pas mal d’OS, mais j’ai choisi le plus simple dans mon cas : un Raspberry Pi. J’avais déjà un bloc de 5 cartes dans un coin (alimentées par un chargeur dotés de six prises USB) donc j’ai ajouté une carte. Petite contrainte dans mon cas, j’ai pris un vieux Raspberry Pi en spare, un modèle A+ (ARMv6, donc). Je précise avant de commencer, l’installation peut être plus simple si vous avez déjà une distribution domotique ou un NAS Synology (par exemple) et on peut même installer HomeBridge sur un Mac.

Un Raspberry Pi A+

La documentation d’HomeBridge est assez complète et le logiciel évolue régulièrement. Je suis parti du tutorial… qui n’est pas complet.

Première étape, installer un Raspberry Pi avec une version récente de Raspbian et connaître son modèle. Les Raspberry Pi B, B+, A, A+ et Zero (W) sont en ARMv6 (processeur ARM11) et les Raspberry Pi 2 et 3 en ARMv7 (Cortex A7 ou A53). C’est important. Commencez par mettre à jour le système et installer le nécessaire. Je suppose que vous savez vous connecter en SSH ou brancher un clavier.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git make
sudo apt-get install libavahi-compat-libdnssd-dev

Abandonnez la méthode du tutorial pour installer Node JS. Elle installe une vieille version et certains plug-in demandent une version récente. Avec un Raspberry Pi en ARMv6 (cas de mon A+), la solution la plus simple est ce script. Et pas besoin de passer par sudo apt-get nodejs : ça installe une vieille version.

J’avais besoin au moins de la 8.0, j’ai installé la 8.£9 avec cette commande.

wget -O - https://raw.githubusercontent.com/sdesalas/node-pi-zero/master/install-node-v8.9.0.sh | bash

Pour vérifier la version, tapez simplement cette commande.

node -v

La solution classique n’a pas fonctionné dans mon cas, donc j’ai suivi l’installation unusual du tutorial.

sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gyp
cd /usr/local/lib/node_modules/homebridge/
sudo npm install --unsafe-perm bignum
cd /usr/local/lib/node_modules/hap-nodejs/node_modules/mdns
sudo node-gyp BUILDTYPE=Release rebuild

Truc rigolo (non), pour une raison bizarre, je n’avais pas les mêmes dossiers pour l’installation. Selon les cas, vous devrez remplacer /usr/local/lib par /usr/lib/ ou /opt/node/lib/ ou même /opt/nodejs/lib/. Ca dépend visiblement de la façon d’installer Node JS (simple, non ?).

C’est le moment de tester à vide. En théorie, l’exécutable est dans le path, donc taper homebridge suffit. En pratique, j’ai du mettre le chemin complet (/opt/nodejs/bin/homebridge).

Les plug-in

HomeBridge sert juste de lien entre vos appareils et HomeKit. Il faut donc installer des plug-in. Il en existe vraiment beaucoup, pour pas mal d’appareils. Ça va de la température CPU du Raspberry Pi au contrôle de différents appareils connectés. Dans mon cas, je voulais gérer un purificateur d’air. Attention au choix du plug-in, vérifiez les retours avant : certains sont basiques, buggés ou compliqués à mettre en place. Pour Dyson, par exemple, il en existe plusieurs avec différents problèmes. Pour la connexion, Dyson utilise en effet un numéro de série (dérivé de l’adresse MAC) et un mot de passe, noté sur l’appareil, et le vrai mot de passe dérive de ce dernier. Un des plug-in va vous demander de sniffer la liaison entre l’application et l’appareil (pas très pratique), un autre de le calculer vous-même (c’est un hash précis) et celui que j’ai utilisé fait tout automatiquement.

J’ai utilisé homebridge-dyson-link, avec un bon suivi. L’installation de base est simple :

npm install -g homebridge-dyson-link

Une fois que c’est fait, il faut installer un fichier de configuration. Les ennuis commencent. En théorie, il faut récupérer l’exemple de base, le modifier et ajouter les informations spécifiques au plug-in. En pratique, dans la majorité des retours que j’ai eu sur HomeBridge, le point de crispation a été ce fichier. Il est formaté en JSON et – premier point – il vaut mieux utiliser un éditeur de texte qui ne joue pas trop sur le contenu (quelques éditeurs de textes cassent le formatage). Deuxième point, la logique du JSON n’est pas évidente de prime abord, même quand on connaît (un peu) la programmation. Le fichier config.json se trouve dans ~/.homebridge/. Attention, si vous lancez HomeBridge avec la commande sudo (ce n’est pas nécessaire), il va aller lire le fichier qui se trouve dans /home/root/.homebridge/.

nano ~/.homebridge/config.json

Dans les trucs importants, comptez bien les accolades et les crochets. Un copier/coller malheureux peut en faire disparaître une et rendre le tout inutilisable. Ensuite, vérifiez la présence des virgules en fin de ligne. Il en faut quand la ligne est suivie d’un autre élément dans le même bloc, mais pas s’il s’agit du dernier élément. Même chose pour les blocs : un bloc (entre des accolades) suivi d’un second bloc doit être terminé par une virgule. Et enfin attention à vos guillemets, surtout si vous effectuez des copier/coller : certains OS (et éditeurs de textes) remplacent les guillemets par des versions différentes. La solution la plus simple pour vérifier si tout va bien est un validateur en ligne. Il permet de voir si le fichier est correctement formaté.

Une fois le fichier correctement formaté, il faut lancer HomeBridge avec un iPhone a proximité. Normalement, si tout se lance correctement – je vous le souhaite – le terminal va afficher un code QR et un code HomeKit (impossible à scanner…). Il suffit donc d’ajouter un périphérique HomeKit dans l’application Maison en scannant le code QR (ou en tapant le code) et attendre que l’appareil iOS se connecte à HomeBridge. iOS 11 (je ne sais pas pour les précédents) indique que HomeBridge n’est pas certifié et qu’il peut poser des soucis, mais ce n’est pas réellement un souci.

L’appareil n’est pas certifié

Avec mon purificateur Dyson, le résultat n’est pas totalement parfait : s’il envoie les données (température, qualité de l’air, etc.) et qu’HomeKit permet de gérer la ventilation, le plug-in (ou le purificateur, aucune idée) ne gère pas la vitesse quand l’appareil est en mode automatique. Donc quelle que soit la vitesse, HomeKit affiche la dernière vitesse choisie en manuel. Bien évidemment, ce bug est lié à mon appareil, pas à HomeBridge.

HomeBridge en démarrage automatique

Si ça marche sans erreurs (ce n’était pas mon cas, suite à des erreurs, mais je vous passe ces étapes), il faut lancer HomeBridge au démarrage.

La méthode que j’ai utilisé est celle qui passe par init.d. Première chose, copiez le contenu de ce fichier dans le presse-papier.

Ensuite, tapez la commande suivante, collez le contenu dans le fichier et modifiez les trois lignes qui suivent. La ligne qui commence par cmd est importante : il faut bien mettre le bon dossier en fonction de votre installation.

sudo nano /etc/init.d/homebridge

dir="/home/pi"
cmd="DEBUG=* /opt/nodejs/bin/homebridge"
user="pi"

Ensuite, tapez ces deux commandes et redémarrez.

sudo chmod 755 /etc/init.d/homebridge
sudo update-rc.d homebridge defaults

Normalement, si tout se passe bien, HomeBridge démarre automatiquement.

Que penser de HomeBridge

Mon avis reste un peu mitigé. Dans l’absolu, c’est un bon moyen de rendre un appareil standard compatible avec HomeKit. Dans la pratique, c’est un peu compliqué à installer, pas franchement user friendly, alors que le but de HomeKit est notamment de proposer de la domotique simple à utiliser. En dehors de ça, et même si ça semble assez stable dans le temps, les chances de tomber en panne augmentent : au lieu de dépendre d’un seul appareil, on dépend de la liaison entre un appareil et le Raspberry Pi et du Raspberry Pi avec HomeKit. Enfin, si HomeBridge même ne pose pas de soucis de compatibilité, c’est nettement moins évident pour les plug-in : il faut trouver le bon, le configurer (pas toujours évident) et espérer qu’il ne contienne pas de bugs. Avec mon appareil Dyson, sur trois possibilités après une simple recherche, deux sont (très) compliquées à mettre e oeuvre.

Pour tester rapidement ou essayer de connecter un appareil incompatible (comme moi), HomeBridge peut s’envisager. Mais dans la majorité des cas, choisir un appareil compatible HomeKit nativement me semble un bien meilleur choix, sauf à aimer les bidouilles. Là, pour un résultat avec des bugs cosmétiques, j’ai quand même perdu l’équivalent d’un après-midi de bidouille. Après, j’avoue que même sur les appareils HomeKit, ce n’est pas toujours parfait, surtout quand HomeKit arrive avec une mise à jour comme chez Netatmo.