Un appartement connecté en 2021 – Les volets Blyss

La forme ? Moi ça va.

J’avais promis sur Twitter que je ferais un article sur ce sujet fort intéressant qu’est la domotisation des volets. On pense d’abord à la lumière quand on parle domotique, mais en vrai il y a plein d’autres possibilités. Le problème des volets c’est qu’il y a quelques obstacles :

  • Il faut un moteur de volet pour le faire monter et descendre, et on va pas se mentir ça coûte une blinde et demie pour ce que c’est.
  • Les constructeurs de ces moteurs utilisent pour la plupart des normes un peu cheloues et pas forcément interopérables (par exemple Somfy)

L’historique

Donc mon appartement était livré avec des manivelles pour baisser les volets ou les monter manuellement. Un jour j’en ai eu marre et j’ai voulu mettre des moteurs de volets connectés. C’était en ~2012 et un pote est venu me les installés après me les avoir vendus (il bossait à Castorama.) Castorama a sa propre marque de domotique appellée Blyss. Comme il n’y avait pratiquement que ça sur le marché j’ai dit oui, sauf que je me suis rendu compte que le matériel Blyss c’était pas mal de la merde… mis à part les moteurs de volets qui faisaient leur taff.

Ceci dit sur 5 moteurs (j’ai 5 fenêtres) 3 sont tombés en panne pratiquement en même temps au bout de 4-5 ans et c’étaient même pas les plus utilisés.

Les moteurs utilisent des télécommandes en radio-fréquence (RF) 433 Mhz. Le souci étant qu’ils ont leur propre protocole de communication. Il aurait donc fallu bricoler un Raspberry Pi ou un Arduino avec le bon matériel et installer des trucs et ça c’était pas vraiment une option pour moi qui n’est pas autant bricoleur malheureusement.

Donc j’avais un peu laissé tomber l’idée de pouvoir les contrôler : j’avais de toutes façons changé 3 des moteurs pour des Somfy IO. Somfy qui est un gros constructeur et dont j’attendais beaucoup, sauf que…

  • Lors de l’installation le technicien m’a bien indiqué que je pourrais les contrôler par mon smartphone.
  • Ce qu’il ne m’a pas dit c’est qu’il fallait la box « Tahoma » de Somfy pour ça.
  • Ce qu’il ne m’a pas dit x2 c’est que sur le site de Somfy c’était marqué « Compatible Homekit d’Apple » mais qu’en fait non, c’était pas encore compatible. La mention a changé sur le site en « Bientôt compatible » avant de finir par disparaître, et je pense savoir pourquoi :
  • Ce qu’il ne m’a pas dit x3 c’est que la box Tahoma pour qu’elle marche il faut forcément qu’elle soit reliée à Internet. Car Somfy exige que vous passiez par son API en ligne pour commander votre box. Plus d’internet, plus de contrôle de la box.

Les petits bâtards.

Donc j’ai un peu freiné mon idée d’acheter une box Tahoma, et j’étais coincé avec 2 volets encore Blyss.

Puis un jour, j’ai trouvé 2 saint graals pratiquement simultanément.

Le RFXCOM

Il s’agit de ce boitier qui se branche en USB. On le trouve aux alentours de 100€ sur Amazon, et c’est un émetteur/récepteur de radio-fréquences. Avant de le commander, j’ai regardé s’il y avait des plugins Homebridge (l’outil que j’utilise pour ajouter des appareils non Homekit sur Homekit) et il y en avait au moins deux. Bon !

J’ai ensuite trouvé des articles ou des posts de forum sur le sujet (RFXCOM volets Blyss par exemple, sur google) ce qui m’a convaincu de tenter ma chance.

Il y a deux modèles, et vous voudrez sans doute prendre la version XL qui gère les plus gros firmwares et donc plus de protocoles. De toutes façons la différence de prix ne vaut pas qu’on prenne la version de base.

L’appareil se présente donc sous la forme d’un simple boitier à brancher en USB et doté d’une antenne. L’outil servant à le configurer est néanmoins windows uniquement, donc j’ai commencé par le brancher sur mon PC et à télécharger l’outil sur le site de RFXCOM. C’est un programme un peu rudimentaire, mais il fonctionne et m’a permis de faire quelques rapides essais.

La première chose que la documentation recommande de faire c’est désactiver tous les protocoles dont on a pas besoin : l’appareil peut en effet intercepter un nombre important de protocoles RF, mais ça veut dire que vous allez capter votre voisin qui ouvre sa porte de garage ou d’autres équipements autour de vous. Donc j’ai tout décoché sauf « Lighting6 » qui semblait être le protocole pour les appareils de marque Blyss.

Ensuite j’ai pris ma télécommande de volets et j’ai appuyé sur le bouton pour descendre, l’autre pour monter, et magie ! J’ai vu les codes apparaître dans les logs de l’outil, et ça m’a permis de connaître « l’adresse », le « sous-code » et la « ligne ». La ligne correspondait à la rangée sur laquelle j’avais appuyé sur la télécommande. L’adresse et le sous-code dépendaient des volets. J’ai donc reproduit le code dans l’outil pour tester, cliqué sur « Envoyé » et…

Rien.

Puis je me suis rappelé que cet idiot de moteur, pour qu’il fonctionne, nécessitait qu’on appuie plusieurs fois sur la télécommande. Donc j’ai envoyé mon code 3 fois, et paf, ça a fait descendre les volets ! Magie !

Maintenant, il fallait tester des plugins Homebridge.

La jungle de Homebridge

Homebridge étant un projet NodeJS, il y a pas mal de plugins assez différents, parfois pour les mêmes usages. Je vais pas vous faire un résumé de tout ce que j’ai essayé,mais en gros je me suis rabattu sur un truc simple qui utilise des APIs HTTP pour diriger les volets, homebridge-blinds. Le fonctionnement est simple : on définit quelles URLs utiliser pour le plugin pour monter ou baisser les volets et avoir le statut du volet. Du coup j’ai configuré ça un peu à l’arrache pour tester. Exemple de config.json à mettre dans Homebridge dans la partie Accessories :

{
			"accessory": "BlindsHTTP",
			"name": "Volets Salon",
			"up_url": "http://localhost:4000/livingroom/up",
			"down_url": "http://localhost:4000/livingroom/down",
			"stop_url": "http://localhost:4000/livingroom/stop",
			"http_options": {
				"method": "GET"
			},
			"show_stop_button": true,
			"motion_up_time": 22000,
			"motion_down_time": 22000,
			"verbose": true
		},
		{
			"accessory": "BlindsHTTP",
			"name": "Volets SDB",
			"up_url": "http://localhost:4000/bathroom/up",
			"down_url": "http://localhost:4000/bathroom/down",
			"stop_url": "http://localhost:4000/bathroom/stop",
			"http_options": {
				"method": "GET"
			},
			"show_stop_button": true,
			"motion_up_time": 11000,
			"motion_down_time": 11000,
			"verbose": true
		},

Le plugin va taper dans les URL indiquées pour monter, descendre, et arrêter. C’est simple MAIS.

Comment se fait la communication aux volets du coup?

Mon Homebridge est actuellement dans un container Docker sur mon NAS Synology. J’ai crée un dossier « rfx » dans lequel j’ai crée un nouveau projet node en ajoutant en dépendances express (le serveur web de nodejs) et rfxcom (le module qui sert à piloter le boitier que j’ai acheté). J’ai branché le boitier RFXCOM sur le Synology mais depuis le DSM 7, Synology a désactivé les périphériques USB qui ne sont pas des disques externe ou des onduleurs ou des imprimantes. Donc, comment faire ?

Réactiver l’USB sur un Synology sous DSM 7

Il a fallu se logger en root sur le Syno puis

modprobe usbserial
modprobe ftdi_sio
modprobe cdc-acm

Un petit coup de lsusb doit montrer du coup l’appareil RFXCOM de branché. Une ligne comme ça doit apparaître :

|__6-1 0403:6015:1000 00 2.00 12MBit/s 90mA 1IF (RFXCOM RFXtrx433XL DO5OPI0U)

Faut aussi passer les permissions sur /dev/ttyUSB0 (qui devrait du coup exister) pour que le container puisse écrire dedans. L’option « Executer le conteneur avec des permissions élevées » doit aussi être coché dans les options du conteneur côté interface Docker.

L’interface entre le NAS/RFXCOM et les volets

Du coup, on y arrive ! L’idée était d’écrire un petit serveur web en NodeJS qui prend des ordres via l’API Web que le plugin Homebridge va utiliser, et ensuite de les envoyer au RFXCOM.

Je vais pas passer sur tous les détails et essais qui ont mené à la création du script, et vous le livrer fini sur ce dépôt git.

Je lance ce script via le startup.sh que le conteneur Homebridge met à disposition. Comme ça le conteneur se lance, ça lance ce script puis démarre Homebridge.

Ce qu’il faut savoir, c’est que l’installation du module rfxcom sous NodeJS implique de compiler une extension native. Normalement npm s’en occupe, mais il vous faut des outils de compilation sur votre machine. Sur un NAS Synology, il faut installer Entware d’abord, qui ajoute un système de packages externe mais plus complet par rapport à ce que proposent Synology ou Synocommunity. Puis il faut installer les outils de développement :

opkg install make gcc
opkg install binutils busybox gawk ldd make sed tar
opkg install coreutils-install diffutils ldconfig patch pkg-config --force-overwrite

Une fois ceci fait vous pouvez faire un npm install sur le script que j’ai fait pour avoir les bons modules.

Choses que vous pourriez trouver curieuses :

  • Le script lance 3 fois la commande quand on lui demande de baisser les volets par exemple. Ceci reflète ce que j’expliquais tout à l’heure : il faut donner l’ordre au volet plusieurs fois pour qu’il s’active. Avec 3 fois je suis sûr que ça passe.
  • J’inscris la direction du volet quand la commande est passée. Cela permet à la commande « stop » de donner le bon résultat, à savoir un arrêt du volet. Car pour arrêter le volet en cours de course, il faut appuyer sur la direction opposée! Donc je dois savoir si le volet descend ou monte, pour l’arrêter.

Le script est bien sûr améliorable, il est fait pour ça. Il est même sous license MIT !

C’est pas parfait mais…

Ca fonctionne. Un « Dis Siri, baisse les volets du salon » et hop.

Le souci c’est qu’on baisse rarement nos volets à fond. On peut les ouvrir à fond mais souvent on va vouloir baisser les volets à je sais pas moi, la moitié, les trois quarts, etc.

La bonne nouvelle c’est que sur Homekit en tous cas, on peut définir comment on baisse le volet avec un slider.

La mauvaise, c’est que ces volets n’ont aucun retour. Le moteur ne peut que recevoir des ordres, pas en renvoyer. On ne peut donc pas savoir où se trouve le volet, ni quand l’arrêter. Vous aurez peut-être noté le motion_down_time dans la config plus haut : il s’agit en fait d’une mesure que j’ai fait emontre en main pour savoir combien de temps le volet met à descendre de tout en haut à tout en bas. Le plugin homebridge-blinds est suffisament intelligent pour savoir que quand on dit à Siri de descendre à 50%, il faut baisser pendant 50% du temps indiqué (en milisecondes) et faire la commande « stop ».

Le vrai souci c’est que ce n’est pas super précis car parfois le volet démarre avec un petit lag ou immédiatement.

La conclusion c’est que c’est vraiment de la merde les moteurs de volet Blyss.

Conclusion

Voilà c’est tout pour aujourd’hui. J’espère que ça aidera peut-être des gens qui ont un peu cherché comme moi à faire ça. Après ça reste du bricolage que je n’aime pas faire parce que in fine, j’aime quand tout marche d’un coup et je mets le prix pour ça. J’ai pas envie de me faire chier à bidouiller, je veux juste que ça fonctionne. C’est avec cette état d’esprit que je fais toujours mes développements d’application.

Là, pas le choix, il a fallu mettre les mains dans le cambouis tellement mon cas était particulier.

Notez que je n’aurai plus besoin de tout ça le jour où les volets lâcheront 🙂

Pour les 3 autres volets Somfy IO, il existe une alternative à la box Tahoma qui est la box Velux KLF 200. Celle-ci a un effet une compatibilité avec les volets Somfy car ils utilisent le même protocole et comble du bonheur, la box possède une interface locale ce qui n’oblige pas à avoir Internet pour l’activer, ni à dépendre des serveurs d’un constructeur. Hé ouais Somfy, c’est pas une box Tahoma que j’achèterai, tant pis pour vous.

On verra ça plus tard, car là je viens d’acheter une TV LG flambant neuve, et je l’ai aussi mise sous Homekit! Mais on va voir ça pour la prochaine fois.

Si vous avez des questions n’hésitez pas à poster ou à venir me voir directement sur le Discord l’Abri de la Nanami ! On a un excellent canal dédié au bricolage et à l’éléctronique (qui sert aussi à la hifi)