Intégration HomeKit et Siri

Salut tout le monde, sur le trajet retour des vacances, j’ai travaillé sur la compatibilité de Gladys avec HomeKit (et donc avec Siri) pour les aficionados d’Apple (imaginez votre Gladys contrôlable avec votre montre). Je suis peut être naïf mais ces dernières années j’ai plus confiance en Apple, qu’en Amazon/Google pour la confidentialité des données (en particulier quand il s’agit de la reconnaissance vocale).

Pour l’instant 3 types de périphériques sont supportés :

  • les ampoules avec marche/arrêt, luminosité, couleurs et température de blanc
  • les commutateurs avec marche/arrêt
  • les capteurs de température
    Pour une première version ça devrait être suffisant, j’en ajouterai au fur et à mesure des demandes.
    Je n’ai testé que sur des périphériques virtuels j’aurai besoin d’aide pour tester sur de vrai périphériques une fois l’image docker disponible.

Techniquement parlant, l’intégration transforme Gladys en un pont de connexion compatible HomeKit (un peu comme des bridges Philips Hue, Xiaomi…), donc il suffit d’associer Gladys avec votre application Maison pour y voir tous les appareils connectés à Gladys (ceux pour l’instant compatible) dans votre réseau HomeKit. J’utilise Hap-Nodejs pour reproduire le protocole HomeKit en Nodejs (pour ceux qui connaissent le logiciel Homebridge, c’est leur librairie).

Côté code, je dois encore améliorer la structure, ajouter la partie front et vérifier que ça fonctionne bien lorsque on utilise une image docker. J’espère pouvoir vous proposer une PR rapidement mais ça s’annonce bien !

J’ai une petite question organisation pour ceux qui testent déjà des développements avec des appareils zigbee. Vous utilisez une clé zigbee à part ou vous utilisez celle de votre prod sur votre PC de test ? Et pareil pour les appareils, vous avez quelques appareils de dev en plus ou vous arrivez à utiliser vos appareils en dev et en prod en même temps ?

7 « J'aime »

Une première version du code

Bonjour @bertrandda ,
Petite question pour tester car je n’y connais rien en Apple. Ça a toujours été un mystère pour moi et une source de frustration car je n’arrive pas à faire ce que je veux avec ‹ ça ›. :smiley:
J’ai un iPad qui traîne dans un tiroir, cela suffit-il pour tester ou ais-je besoin de quelque chose d’autre?
Belle journée !

Salut, il faut un appareil compatible iPhone, iPad ou iPod touch, dans ton cas avec l’iPad regarde si ta version de iPadOS contient l’application Maison

si c’est le cas alors tu peux tester.

Une fois dessus, je te conseil de créer un nouveau domicile virtuel, si les tests amènent à changer des trucs dans l’intégration, tu pourras supprimer complètement ce domicile virtuel en une fois et pas appareil par appareil. Regarde ici pour ajouter un domicile Ajouter d’autres domiciles avec l’iPad - Assistance Apple (FR)

Il y a une petite description dans la page intégration, mais faut encore que j’écrive une doc complète. Si tu as besoin de plus d’aide n’hésite pas.

1 « J'aime »

Mon iPad est compatible.
Par contre, est-ce possible/compliqué pour toi de me builder une image Docker de test?
Je n’ai pas la moindre idée de comment on teste une PR.
Si pas possible, j’y regarderai un plus tard, mais j’y regarderai :wink:

1 « J'aime »

Super nouvelle

Pour l’instant seul le code en mode dev fonctionne, j’ai créé une image docker il y a quelques jours mais elle n’est pas fonctionnelle. Faut que je debug tout ça, les appareils ne s’ajoutent pas sur l’application maison.

Je te préviendrai quand tout sera bon pour tester

1 « J'aime »

Salut @GBoulvin, sur quel OS veux tu tester l’image docker ? Actuellement je test depuis docker sur macos et il y a une erreur de connexion à l’ajout de Gladys dans HomeKit. Après pas mal de lecture côté homebridge et hap-nodejs il semblerai que ce soit dû au paramètre --network=host qui ne fonctionne pas sur mac/windows.
Si tu es sur un système linux, peux tu tester l’image et tenter d’associer Gladys à ton application Maison et me confirmer que ça fonctionne bien s’il te plait ? L’image est dispo sur Docker bertrandda/gladys:homekit.

Je continue d’investiguer pour faire fonctionner ça sur mac/windows via docker, d’après ce que j’ai compris ce doit être un problème de mDNS. Lorsque le protocole HomeKit rend disponible un accessoire (ici le Bridge Gladys) il est sensé envoyer une requête mDNS pour signaler aux apps HomeKit qu’il est sur le réseau. Je vois bien la requête mDNS passer sur Wireshark quand je suis en dev, mais dès que j’utilise docker, la requête mDNS ne semble pas être perçu sur le réseau local, comme si elle était bloqué dans le container. Si quelqu’un a des connaissances sur le sujet (docker ou mDNS) est il possible d’avoir un peu d’aide s’il vous plait ?

1 « J'aime »

Salut!
Mets ton cœur à l’aise, ça fonctionne!
Matériel:
RPi 2 avec son OS Bullseye 32bit de base.
Installation de l’image Docker proposée ci-avant avec succès, aucune remarque.
Testé : seulement Tasmota, prises et lampes.
Comment?

Bravo!

Edit :
Par contre, après verrouillage/déverrouillage de l’iPad, il faut une vingtaine de secondes pour que les périphériques soient reconnectés…

Edit 2 : cette latence de reconnexion n’arrive pas systématiquement. Parfois, tout est connecté directement… Bizarre…

1 « J'aime »

Super nouvelle, merci pour tes retours @GBoulvin. Il y a donc bien un soucis dû au network=host sur mac/windows. Je vais ajouter la démarche de connexion dans la documentation.

Pour l’erreur qui apparait Sans réponse, ça semble être parce que l’iPad/iPhone (quand il est en veille) ne reste pas connecté en permanence au réseau HomeKit donc il a besoin de quelques secondes pour se reconnecter. Par contre si tu a un HomePod ou une Apple TV, ils peuvent servir de concentrateur HomeKit, vu que ce sont des appareils qui restent toujours connecté à la maison, le réseau HomeKit n’est jamais interrompu (https://www.reddit.com/r/HomeKit/comments/t55bw4/comment/hz3zf9a/?utm_source=share&utm_medium=web2x&context=3).

Tant mieux si c’est normal !
Comme je te disais, Apple a toujours été un grand mystère pour moi :wink:
Super boulot en tout cas. !

1 « J'aime »

Tu peux rien faire @bertrandda docker tourne dans une VM pas de network host sur ces os malheureusement.

Génial @bertrandda ! Ca va faire plaisir à un paquet de monde ça :slight_smile:

Merci pour l’info. Donc c’est à noté, si Gladys tourne sur docker, l’intégration ne marchera que si c’est un environnement Linux.

1 « J'aime »

Est-ce que d’autres personnes ont pu tester depuis ? :slight_smile:

Testé sur RPI4 (installation Gladys classique, remplacement de l’image docker par celle de @bertrandda)
J’ai l’erreur suivante au démarrage :frowning_face: Impossible de lancer le service

2022-10-03T10:08:01+0200 <warn> service.start.js:44 (Service.start) Unable to start service homekit TypeError: Cannot read property 'service' of undefined
    at HomeKitHandler.buildService (/src/server/services/homekit/lib/buildService.js:27:47)
    at /src/server/services/homekit/lib/buildAccessory.js:23:26
    at Array.forEach (<anonymous>)
    at HomeKitHandler.buildAccessory (/src/server/services/homekit/lib/buildAccessory.js:22:27)
    at /src/server/services/homekit/lib/createBridge.js:34:62
    at Array.map (<anonymous>)
    at HomeKitHandler.createBridge (/src/server/services/homekit/lib/createBridge.js:34:41)
    at Object.start (/src/server/services/homekit/index.js:25:5)
    at Service.start (/src/server/lib/service/service.start.js:33:7)

Arg désolé @cicoub13 j’ai oublié une vérification dans la création de la passerelle homekit, je fixe ça et te mets à jour l’image rapidement. Merci d’avoir testé en tout cas

1 « J'aime »

J’étais passé à coté de ce sujet !
Top @bertrandda merci d’avoir avancé là dessus :blush:

Je suis assez d’accord sur tes reflexions concernant la vie privée au moins sur le protocole. J’ai faillit choisir le protocole homekit pour mes têtes connectées.

Est-ce que tu penses qu’il sera possible d’utiliser homekit uniquement avec Gladys, sans aucun terminal Apple ?

Ça y est @cicoub13, l’image a été mise à jour ça devrait fonctionner pour toi aussi maintenant.

Salut @lmilcent, je ne suis pas sûr de comprendre ce que tu demandes. L’intérêt de HomeKit c’est de fonctionner avec l’application Maison d’Apple (pour le contrôle manuel) ou avec Siri (contrôle vocal). Ces deux apps sont uniquement disponible sur les appareils Apple, si tu n’en as pas je ne pense pas que ce soit utile de laisser ce service allumé sur ton Gladys. Normalement le réseau homekit ne te permet pas d’ajouter d’autres appareils à Gladys, je ne sais pas si tu as testé un peu le fonctionnement Google Home ou Alexa mais ça doit être pareil, tu ajoutes d’un côté tes appareils sur Gladys (via Zigbee, Zwave, bluetooth…) puis tu ouvres la connexion avec Alexa/Google Home/Homekit et ces 3 services peuvent interagir avec tes appareils Gladys. Donc en clair, sans appareil Apple ça fonctionnera mais ça ne servira à rien

En fait j’espérais pouvoir faire comme avec le zigbee :

  1. J’utilises Gladyd pour découvrir et connecter les périphériques
  2. J’utilises uniquement Gladys pour les contrôler

Si Homekit permet cela, ca me permettrait d’avoir des périphériques de ce protocole sans pour autant devoir avoir un iPhone.

Tu vois un peu plus mon cas de figure ?

@lmilcent en fait tu prend l’intégration à l’envers ! Le but de l’intégration HomeKit c’est de rendre les appareils Gladys contrôlables sur iPhone et sur Siri, un peu comme l’intégration Alexa ou Google home.

1 « J'aime »