Integración del controlador eedomus con HomeKit – Parte 2

    • Guía para integrar eedomus en HomeKit de Apple para visualizar y actuar a través de Siri en dispositivos registrados en eedomus usando una Raspberry Pi.

    En la anterior entrega de este tutorial describimos el proyecto de integración del controlador eedomus con HomeKit de Apple, además pudimos ver los requisitos necesarios y detallamos el proceso de instalación previo para tener un entorno lo más estable posible para HomeKit.

    En esta segunda parte nos vamos a centrar en la instalación de las aplicaciones dentro de nuestra Raspberry Pi y la configuración del plugin para eedomus.

    Si habéis llegado hasta aquí, es que ya tenéis la Raspberry Pi con la distribución Raspbian y Jessie como versión.

    No todos los requisitos que hemos comentado y que comentaremos a continuación son extrictamente necesarios, pero como decimos, es lo que mejores resultados y más estabilidad nos ha ofrecido a la hora de ejecutar homebridge y el plugin de eedomus.

    Orden domótica transmitida a eedomus a través de Siri

    Instalación de homebridge en la Raspberry Pi

    Si no lo hemos hecho antes, en los pasos del anterior artículo, es recomendable actualizar los paquetes a su última versión.
    Estos pasos los vamos a realizar ya con nuestro usuario (por ejemplo, pi), así que debemos añadir el comando «sudo» antes de cada comando para disponer de permisos de «root» en la ejecución:

    Ahora vamos a instalar las dependencias previas. Estas dependencias previas son paquetes o aplicaciones necesarias para el ecosistema que estamos instalando.

    Empezamos instalando los paquetes NodeJS, npm y node-semver:

    Este comando se encargará de descargarse los paquetes e instalarlos. Nos avisará en caso de que ya lo tengamos instalado, aunque con una instalación limpia no lo estarán.

    Instalamos el paquete node:

    Comprobamos que tenemos la versión 4.2.2 de node o posterior:

    Instalamos el paquete Avahi:

    Este paquete lo podemos denominar como de «autodescubrimiento». Para no entrar mucho en detalle, se trata de una especie de multicast de DNS que se utilizará dentro de HAP-NodeJS (implementación NodeJS de HomeKit Accessory Server que utiliza homebridge).Orden domótica dirigida a eedomus a través de Siri

    Instalación de homebridge

    Homebridge lo instalaremos desde los repositorios de npmjs ejecutando:

    Una vez instalado, ya podemos probar a ejecutarlo (como usuario pi, esta vez no haría falta utilizar sudo):

    Es normal que aparezcan esos WARNING, los vamos a ver cada vez que arranquemos homebridge.

    La última línea nos indica que no ha encontrado ningún plugin instalado, así que vamos al siguiente punto para instalar nuestro plugin.

    Instalación del plugin para eedomus.

    Los plugins para homebridge son módulos NodeJS publicados en github o en npmjs y tagueados con el texto «homebridge-plugin«. Deben tener el prefijo «homebridge-» en el nombre para poder funcionar con homebridge.

    En nuestro caso, he creado un plugin para que sea posible la interacción entre nuestro controlador eedomus, la aplicación homebrige y la plataforma HomeKit de Apple: homebridge-eedomus

    Para instalarlo, simplemente tenemos que ejecutar:

    Si todo ha ido bien, deberemos tener una salida similar a esta:

    Más adelante, en el otra parte del tutorial, veremos cómo instalar otros plugins para controlar otros dispositivos.

    Los plugins instalados y el propio homebridge, los podremos encontrar en nuestra Raspberry en el directorio:

    Dentro de cada plugin, podremos encontrar también sus propias dependencias, es decir, otros programas necesarios para su funcionamiento. En nuestro caso, para el plugin de eedomus, la única dependencia como podéis ver un poco más arriba es «request«, pero esto se instalará automáticamente.

    Los plugins a su vez pueden contener otras dependencias dentro, pero todo esto también se habrá instalado de forma automática. En el caso de «request» son las que aparecen también arriba (forever, extend, etc).Orden domótica dirigida a eedomus a través de Siri

    Configuración inicial del plugin homebridge-eedomus

    En este paso, crearemos el fichero «config.json» que contendrá nuestros módulos y dispositivos, por los que homebridge preguntará a eedomus.

    Vamos a crear uno simple, para comprobar que homebridge arranque sin problemas.

    Mucho ojo con el editor que utilicemos para crear este fichero, los editores como TextEdit de Mac o Wordpad de Windows pueden insertar caracteres que no son legibles o que impiden su correcta lectura.

    Hay múltiples editores de «texto plano». Yo, personalmente, utilizo el editor vi de linux, aunque si no tienes mucha práctica puedes utilizar el editor pico, que también viene por defecto instalado. Si tienes windows puedes utilizar algún editor tipo Ultraedit y después llevarte el fichero a la Raspberry Pi.

    Al instalar el plugin homebridge-eedomus, os debería haber creado un fichero llamado «config-sample.json»Este fichero es un buen punto de partida para añadir vuestros módulos. Incluye un módulo de cada tipo:

    • Switch -> Para dispositivos tipo ON/OFF
    • WindowCovering -> Para controlar los módulos de persiana
    • TemperatureSensor -> Para obtener información de sensores de temperatura
    • Light -> Para control de luces ON/OFF o regulables en intensidad

    En un futuro espero ir añadiendo más tipos de módulos.

    Pero antes de crear el fichero, necesitamos conocer los siguientes datos:

    • Dirección IP (privada) de nuestro eedomus: En secure.eedomus.com -> Configuración -> Controlador: aparece como sitio local. Es importante que configuremos nuestro controlador eedomus con una dirección IP estática para que ésta no cambie. Si no tenéis claro como hacerlo, tenéis aquí toda la información.
    • Código API del módulo: Cada módulo, tiene asociado un identificador único. Para la primera prueba, vamos a sacar el periph_id de uno de ellos, en mi ejemplo he utilizado el de uno de los enchufes de la regleta Greenwave: Configuración -> nuestro módulo -> Configurar -> Parámetros Experto -> Código API (busca el código de uno de tus dispositivos, que sea de tipo ON/OFF, como puede ser un módulo Fibaro 2×1)
    • Usuario y contraseña para la API: Si no tenemos, o no lo conocemos, en este enlace Philippe explica como hacerlo.

    Ahora, tenemos que ir al directorio oculto .homebridge de nuestro usuario, en mi caso: pi

    Una vez aquí, podemos copiar el fichero de ejemplo que incluyo con la instalación del paquete homebridge-eedomus. Sería así:

    Ahora podremos editar el fichero, reemplazando los valores comentados arriba y quitando los accesorios que no vayamos a utilizar de momento.

    La configuración para la primera prueba, debería quedar algo así:

    Mi recomendación es que vayáis poco a poco, probéis a incluir un módulo y lo probéis bien.

    Estos son los distintos apartados que tenemos dentro de la configuración:

    • «bridge«: es la configuración que vamos a enviar de homebridge a HomeKit, con el nombre, usuario, puerto y código PIN para HomeKit.
    • «description«: no hace falta cambiar nada, es una descripción por defecto.
    • «credentials«: configuración eedomus: IP y usuario y contraseña de la API.
    • «accessories«: dispositivos a registrar.

    Son personalizables, pero es recomendable dejar puestos los arriba indicados (salvo por supuesto, los del apartado «credentials«). Veremos más adelante como sí que sería recomendable o necesario cambiar el «username» en caso de que tengamos que borrar la asociación de homebridge y crear una nueva.

    El «pin» es el número que nos pedirá más adelante la aplicación iOS para registrar el dispositivo homebridge.

    En el apartado «accessories» vamos a dar de alta los dispositivos que queremos integrar en homebridge. Es decir, tendremos cada módulo como un accesorio con el que interactuaremos a través de Siri. Debemos reemplazar los siguientes datos con los de nuestro módulo:

    • «accessory«: aquí siempre utilizaremos «eedomus»
    • «name«: nombre del primer dispositivo que queramos integrar para las pruebas
    • «periph_id«: el identificador de nuestro dispositivo, es el código API del módulo.
    • «service«: De momento, para esta prueba, utilizaremos solo un módulo que tenga como parámetros ON/OFF, así que lo dejaremos como «Switch«

    Hasta aquí esta segunda entrega, en la siguiente arrancaremos la aplicación y realizaremos las primeras pruebas.

    Carlos Fernández

    Informático en el mundo de las telecomunicaciones y gran apasionado de las tecnologías, el mundo Apple y la domótica.


    11 Respuestas

    1. Blpr0 dice:

      He instalado raspbian (la ultima versión del 9 de febrero). He seguido todos los pasos hasta llegar a instalar homebridge, en donde me suelta esto y no lo instala. Lo extraño es que estoy usando sudo

      pi@raspberrypi:~ $ sudo npm install -g homebridge

      > curve25519@1.1.0 install /usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/node_modules/curve25519
      > node-gyp rebuild

      gyp WARN EACCES user «root» does not have permission to access the dev dir «/root/.node-gyp/4.2.2»
      gyp WARN EACCES attempting to reinstall using temporary dev dir «/usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/node_modules/curve25519/.node-gyp»
      gyp WARN install got an error, rolling back install
      gyp WARN install got an error, rolling back install
      gyp ERR! configure error
      gyp ERR! stack Error: ENOSPC: no space left on device, mkdir ‘/usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/node_modules/curve25519/.node-gyp’
      gyp ERR! stack at Error (native)
      gyp ERR! System Linux 4.1.17-v7+
      gyp ERR! command «/usr/local/bin/node» «/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js» «rebuild»
      gyp ERR! cwd /usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/node_modules/curve25519
      gyp ERR! node -v v4.2.2
      gyp ERR! node-gyp -v v3.0.3
      gyp ERR! not ok

    2. Carlos Fernández dice:

      Si, el error que te daba era por haberse quedado sin espacio.
      El otro día instale otra raspbian y me pasó lo mismo. Con la primera no recuerdo haber tenido que expandirlo.

      Por si le ocurre a alguien más, basta con ejecutar «sudo raspi-config» y elegir la primera opción (Expand Filesystem) para utilizar todo el espacio de la tarjeta SD.

    3. jaime dice:

      No soy capaz de instalar el paquete node. Me podeis ayudar?

    4. Eduardo dice:

      Una pregunta, Carlos ¿La dirección MAC que aparece como «username» del archivo config.json es siempre la misma o es la de nuestro eedomus o Raspberry Pi o algún aparato que tengamos?

       «bridge»: {
      «name»: «Homebridge»,
      «username»: «CC:22:3D:E3:CE:30»,
      «port»: 51826,
      «pin»: «031-45-154»

      GRACIAS!

      • Carlos Fernández dice:

        Hola Eduardo, no había visto tu pregunta.

        Esa dirección MAC no es real, puedes cambiarla sin problema. Es más (creo que lo comenté en alguno de los artículos), cuando tienes algún problema con homebridge una de las soluciones es volver a darlo de alta, cambiando justamente esta «MAC», por ejemplo cambiando el 30 del final por un 31.

    5. Eduardo dice:

      Distintos tipos de «services», por si a alguien le interesa:

      AccessoryInformation – Provides information about the given home automation device (accessory).
      AirQualitySensor – Defines an air quality sensor.
      Battery – Defines the state of an accessory’s battery.
      CarbonDioxideSensor – Defines a carbon Dioxide Sensor.
      CarbonMonoxideSensor – Defines a Carbon Monoxide Sensor.
      ContactSensor – Defines a contact sensor (such as a window being opened or closed).
      Door – Defines a door state sensor (such as opened or closed).
      Fan – Defines a remote controlled fan.
      GarageDoorOpener – Defines a garage door opener.
      HumiditySensor – Defines a humidity sensor.
      LeakSensor – Defines a leak sensor (like for a hot water heater or washing machine).
      LightBulb – Defines a stand alone light or a light that is part of another accessory (like a garage door opener).
      LightSensor – Defines a light sensor.
      LockManagement – Defines a service that manages an automated door lock.
      LockMechanism – Defines a remote controlled lock (like a door lock).
      MotionSensor – Defines a motion sensor.
      OccupancySensor – Defines an occupancy sensor.
      Outlet – Defines a remote controlled wall outlet.
      SecuritySystem – Defines a home security system.
      StatefulProgrammableSwitch – Defines a programmable switch that remains in a give state once triggered (like a flip switch).
      StatelessProgrammableSwitch – Defines a programmable switch that returns to its initial state after being triggered (like a push button).
      SmokeSensor – Defines a smoke sensor.
      Switch – Defines an on/off switch like a standard wall switch.
      TemperatureSensor – Defines a temperature sensor.
      Thermostat – Defines a smart thermostat used to control an HVAC system.
      Window – Defines an automated window that cane be remotely opened or closed.
      WindowCovering – Defines a remotely controlled window covering, like blinds that can be opened or closed.

    6. Eduardo dice:

      Vaya, pensé que ya estaban implementados más tipos.
      ¿Se pueden añadir de alguna forma toqueteando código?
      Me interesan, sobre todo, los siguientes, para ir incluyendo las últimas adquisiciones:
      GarageDoorOpener
      MotionSensor
      Thermostat
      LightSensor
      Door
      AccessoryInformation
      ContactSensor
      SmokeSensor

      Gracias Carlos.

      • Carlos Fernández dice:

        Si, aparecieron al finales del año pasado. Estaba trabajando en implementarlos cuando se me ocurrió la brillante idea de comprarme un portátil nuevo y vender mis ordenadores, así que estuve una temporada sin ordenador en casa.
        Ya tengo en la versión que estoy probando alguno de ellos funcionando, a ver si puedo dedicarle algo más de tiempo y os voy comentando por el foro.

        • Benito dice:

          Puedes confirmar si hay mas accesorios ademas de las luces, sensores temperatura, interruptores y persianas.
          Si por ejemplo configuro algun dispositivo como Door ya no me carga el homebridge

    Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *