Integración de HomeKit y Siri

¡Hola a todos! En el camino de vuelta de las vacaciones, trabajé en la compatibilidad de Gladys con HomeKit (y por lo tanto con Siri) para los aficionados de Apple (imaginen su Gladys controlable con su reloj). Quizás sea ingenuo, pero en los últimos años tengo más confianza en Apple que en Amazon/Google en cuanto a la privacidad de los datos (especialmente cuando se trata de reconocimiento de voz).

Por ahora, se soportan tres tipos de dispositivos:

  • las bombillas con encendido/apagado, luminosidad, colores y temperatura de blanco
  • los interruptores con encendido/apagado
  • los sensores de temperatura
    Para una primera versión, debería ser suficiente, iré añadiendo más según las demandas.
    Solo lo he probado con dispositivos virtuales, necesitaré ayuda para probarlo con dispositivos reales una vez que la imagen de Docker esté disponible.

Técnicamente hablando, la integración transforma Gladys en un puente de conexión compatible con HomeKit (algo así como los puentes Philips Hue, Xiaomi…), por lo que basta con asociar Gladys con su aplicación Casa para ver todos los dispositivos conectados a Gladys (los que son compatibles por ahora) en su red HomeKit. Utilizo Hap-Nodejs para replicar el protocolo HomeKit en Nodejs (para los que conocen el software Homebridge, es su librería).

En cuanto al código, aún debo mejorar la estructura, añadir la parte frontal y verificar que funcione bien cuando se usa una imagen de Docker. ¡Espero poder proponerles una PR rápidamente, pero todo va bien!

Tengo una pequeña pregunta organizativa para los que ya están probando desarrollos con dispositivos Zigbee. ¿Usan una clave Zigbee aparte o usan la de su producción en su PC de prueba? Y lo mismo para los dispositivos, ¿tienen algunos dispositivos de desarrollo adicionales o logran usar sus dispositivos en desarrollo y en producción al mismo tiempo?

Una primera versión del código

¡Hola @bertrandda!
Pregunta rápida para probar, ya que no sé nada de Apple. Siempre ha sido un misterio para mí y una fuente de frustración porque no logro hacer lo que quiero con ‹ eso ›. :smiley:
Tengo un iPad que está en un cajón, ¿es suficiente para probar o necesito algo más?
¡Buen día!

Hola, necesitas un dispositivo compatible con iPhone, iPad o iPod touch. En tu caso, con el iPad, verifica si tu versión de iPadOS incluye la aplicación Casa

. Si es así, puedes probarla.

Una vez que la tengas, te recomiendo crear un nuevo hogar virtual. Si los tests llevan a cambiar cosas en la integración, podrás eliminar por completo este hogar virtual de una vez y no dispositivo por dispositivo. Mira aquí para agregar un hogar Añadir más casas con el iPad - Soporte técnico de Apple (ES)

Hay una pequeña descripción en la página de integración, pero aún tengo que escribir una documentación completa. Si necesitas más ayuda, no dudes en pedirla.

Mi iPad es compatible.
Por otro lado, ¿es posible/complicado para ti construirme una imagen Docker de prueba?
No tengo la menor idea de cómo se prueba un PR.
Si no es posible, lo miraré más tarde, pero lo miraré :wink:

¡Excelente noticia!

Por ahora solo funciona el código en modo desarrollo, hace unos días creé una imagen de Docker pero no es funcional. Tengo que depurar todo esto, los dispositivos no se añaden en la aplicación de casa.

Te avisaré cuando todo esté listo para probar.

Hola @GBoulvin, ¿en qué sistema operativo quieres probar la imagen de Docker? Actualmente estoy probando desde Docker en macOS y hay un error de conexión al agregar Gladys en HomeKit. Después de leer bastante sobre homebridge y hap-nodejs, parece que se debe al parámetro --network=host que no funciona en mac/windows.
Si estás en un sistema Linux, ¿puedes probar la imagen y intentar asociar Gladys con tu aplicación Casa y confirmarme que funciona bien, por favor? La imagen está disponible en Docker bertrandda/gladys:homekit.

Sigo investigando para hacer funcionar esto en mac/windows a través de Docker, según lo que he entendido, debe ser un problema de mDNS. Cuando el protocolo HomeKit pone a disposición un accesorio (en este caso el Bridge Gladys), debería enviar una solicitud mDNS para notificar a las aplicaciones HomeKit que está en la red. Veo pasar la solicitud mDNS en Wireshark cuando estoy en desarrollo, pero tan pronto como uso Docker, la solicitud mDNS no parece ser percibida en la red local, como si estuviera bloqueada en el contenedor. Si alguien tiene conocimientos sobre el tema (Docker o mDNS), ¿es posible tener un poco de ayuda, por favor?

¡Hola!
¡Pon tu corazón en paz, funciona!
Material:
RPi 2 con su OS Bullseye 32bit de base.
Instalación de la imagen Docker propuesta anteriormente con éxito, sin comentarios.
Probado: solo Tasmota, enchufes y lámparas.
¿Cómo?

¡Bravo!

Edición:
Sin embargo, después de bloquear/desbloquear el iPad, se necesitan unos veinte segundos para que los dispositivos se reconecten…

Edición 2: esta latencia de reconexión no ocurre sistemáticamente. A veces, todo está conectado directamente… Raro…

¡Excelente noticia, gracias por tus comentarios @GBoulvin! Hay un problema relacionado con network=host en mac/windows. Voy a añadir el procedimiento de conexión en la documentación.

Para el error que aparece « Sin respuesta », parece que es porque el iPad/iPhone (cuando está en modo de espera) no permanece conectado permanentemente a la red HomeKit, por lo que necesita unos segundos para reconectarse. Sin embargo, si tienes un HomePod o una Apple TV, pueden actuar como concentradores HomeKit, ya que son dispositivos que siempre están conectados a la casa, por lo que la red HomeKit nunca se interrumpe (https://www.reddit.com/r/HomeKit/comments/t55bw4/comment/hz3zf9a/?utm_source=share&utm_medium=web2x&context=3).

¡Mejor si es normal!
Como te decía, Apple siempre ha sido un gran misterio para mí :wink:
¡Excelente trabajo, en todo caso! !

No puedes hacer nada @bertrandda, Docker se ejecuta en una máquina virtual, no hay red host en estos sistemas operativos, desafortunadamente.

¡Genial @bertrandda! ¡A mucha gente le va a hacer feliz esto :)!

Gracias por la información. Por lo tanto, hay que tener en cuenta que si Gladys se ejecuta en docker, la integración solo funcionará si es un entorno Linux.

¿Alguien más ha podido probar desde entonces? :slight_smile:

Probado en RPI4 (instalación clásica de Gladys, reemplazo de la imagen docker por la de @bertrandda)
Al iniciar, obtengo el siguiente error :frowning_face: No se puede iniciar el servicio

2022-10-03T10:08:01+0200 <warn> service.start.js:44 (Service.start) No se puede iniciar el servicio homekit TypeError: No se puede leer la propiedad 'service' de 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)

Perdón @cicoub13, olvidé una verificación en la creación del puente homekit, lo arreglo y te actualizo la imagen rápidamente. Gracias por haberlo probado de todos modos

¡Me había perdido este tema!
¡Genial @bertrandda gracias por avanzar en esto :blush:

Estoy bastante de acuerdo con tus reflexiones sobre la privacidad, al menos en el protocolo. Casi elijo el protocolo HomeKit para mis cabezas conectadas.

¿Crees que será posible usar HomeKit solo con Gladys, sin ningún terminal de Apple?

Ya está @cicoub13, la imagen ha sido actualizada, debería funcionar para ti también ahora.

Hola @lmilcent, no estoy seguro de entender lo que pides. La ventaja de HomeKit es que funciona con la aplicación Casa de Apple (para el control manual) o con Siri (control por voz). Estas dos aplicaciones solo están disponibles en dispositivos Apple, si no tienes ninguno, no creo que sea útil dejar este servicio encendido en tu Gladys. Normalmente, la red homekit no te permite añadir otros dispositivos a Gladys, no sé si has probado un poco el funcionamiento de Google Home o Alexa, pero debe ser lo mismo, añades tus dispositivos en Gladys (vía Zigbee, Zwave, bluetooth…) y luego abres la conexión con Alexa/Google Home/Homekit y estos 3 servicios pueden interactuar con tus dispositivos Gladys. En resumen, sin un dispositivo Apple funcionará, pero no servirá de nada.

De hecho, esperaba poder hacerlo como con el zigbee:

  1. Uso Gladyd para descubrir y conectar los dispositivos
  2. Uso solo Gladys para controlarlos

Si Homekit permite esto, me permitiría tener dispositivos de este protocolo sin tener que tener un iPhone.

¿Ves un poco más mi caso de uso?

@lmilcent en realidad lo estás haciendo al revés. El objetivo de la integración con HomeKit es hacer que los dispositivos de Gladys sean controlables desde iPhone y Siri, un poco como la integración con Alexa o Google Home.