Integración del controlador eedomus con HomeKit – Parte 3

Si llegáis aquí desde la anterior parte del tutorial, por fin ha llegado el momento de arrancar la aplicación y realizar las primeras pruebas contra nuestro controlador eedomus. He de confesar que la primera vez que le dije a Siri: “Enciende la televisión“, y la televisión se encendió, me produjo una enorme sensación de satisfacción. Me pasé un buen rato jugando a encender y apagar la tele aún siendo consciente de que esta práctica no es muy recomendable.

Además de arrancar la aplicación, en esta tercera parte del tutorial, crearemos un script de arranque para que la aplicación se inicie automáticamente cuando la encendemos. También daremos un pequeño repaso a dos aplicaciones para iOS, y veremos algunas de las opciones de configuración que podemos aplicar para hacer que Siri nos entienda mejor.

Al finalizar esta parte del tutorial ya tendréis a Siri a vuestra casi entera disposición.

 

Orden domótica dirigida a eedomus a través de Apple Watch

 

Arranque de la aplicación homebridge

En el anterior capítulo ya habíamos creado el fichero de configuración config.json, pero antes de arrancar nuestra aplicación, vamos a automatizar el proceso de arranque para que cada vez que encendamos (o reiniciemos) nuestra Raspberry Pi se ejecute de forma automática homebridge. De esta forma será más autónomo y no tendremos que hacer nada ante un corte de luz o reinicio de nuestra Raspberry Pi. Para realizar estos pasos, es recomendable hacerlo como usuario root.

Este es el script para arranque automático de homebridge:

#!/bin/sh
### BEGIN INIT INFO
# Provides: homebridge
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

dir="/home/pi"
cmd="DEBUG=* /usr/local/bin/homebridge"
user="pi"

name=`basename $0`
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"

get_pid() {
    cat "$pid_file"
}

is_running() {
    [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
}

case "$1" in
    start)
    if is_running; then
        echo "Already started"
    else
        echo "Starting $name"
        cd "$dir"
        if [ -z "$user" ]; then
            sudo $cmd >> "$stdout_log" 2>> "$stderr_log" &
        else
            sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
        fi
        echo $! > "$pid_file"
        if ! is_running; then
            echo "Unable to start, see $stdout_log and $stderr_log"
            exit 1
        fi
    fi
    ;;
    stop)
    if is_running; then
        echo -n "Stopping $name.."
        kill `get_pid`
        for i in {1..10}
        do
            if ! is_running; then
                break
            fi

            echo -n "."
            sleep 1
        done
        echo

        if is_running; then
            echo "Not stopped; may still be shutting down or shutdown may have failed"
            exit 1
        else
            echo "Stopped"
            if [ -f "$pid_file" ]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
    fi
    ;;
    restart)
    $0 stop
    if is_running; then
        echo "Unable to stop, will not attempt to start"
        exit 1
    fi
    $0 start
    ;;
    status)
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        exit 1
    fi
    ;;
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

exit 0

Debemos guardarlo en:

/etc/init.d/homebridge

Para guardarlo, podemos hacer uso de cualquier editor, como por ejemplo vi o pico, con el que más cómodos nos sintamos.

Personalizamos el script con nuestros datos (usuario y home), si es el usuario pi no hay que cambiar nada:

dir="/home/pi"
cmd="DEBUG=* /usr/local/bin/homebridge"
user="pi"

Asignamos permisos al script de arranque:

# chmod 755 /etc/init.d/homebridge

Añadimos en defaults el script:

# update-rc.d homebridge defaults

Ahora debería arrancarse automáticamente cada vez que arranque la Raspberry Pi. También, a partir de ahora, podemos arrancar y parar la aplicación a nuestro gusto de la siguiente forma:

Arrancar:

sudo /etc/init.d/homebridge start

Parar:

sudo /etc/init.d/homebridge stop

Reiniciar:

sudo /etc/init.d/homebridge restart

Comprobar estado:

sudo /etc/init.d/homebridge status

Ficheros de log:

/var/log/homebridge.log
/var/log/homebridge.err

Para facilitar la lectura de la salidas de todos los log de homebridge:

tail -f /var/log/homebrige.*

Ahora ya sí que por fin vamos a arrancar homebridge. Para esta primera vez conviene consultar los logs que registra la aplicación, por si surge algún problema. Si tenéis algo de soltura con linux y ssh conviene tener dos consolas (sesiones o ventanas) abiertas en nuestra raspberry, una para ver los logs que nos muestre homebridge y otra para ejecutar los comandos. Si no os sentís muy cómodos con esto, podréis ver los logs que se generan después, una vez arrancado, por tanto si elegís esta segunda opción, os podéis saltar el paso de la “Sesión 1”

– Sesión 1:
Visualizar por pantalla en tiempo real los logs que genere homebridge:

# tail -f /var/log/homebridge*

– Sesión 2:
Arrancamos homebrige:

# sudo /etc/init.d/homebridge start

Si ya lo teníamos arrancado de antes, debemos pararlo y arrancarlo nuevamente:

# sudo /etc/init.d/homebridge stop
# sudo /etc/init.d/homebridge start

Una vez que lo hayamos arrancado, vamos a la primera sesión para comprobar lo que nos esté mostrando homebridge, sería algo así:

==> /var/log/homebridge.err <==
*** WARNING *** The program 'node' uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=node>
*** WARNING *** The program 'node' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=node&f=DNSServiceRegister>

==> /var/log/homebridge.log <==
Loaded plugin: homebridge-eedomus
Registering accessory 'homebridge-eedomus.eedomus'
---
Loaded config.json with 1 accessories and 0 platforms.
---
Loading 1 accessories...
[Television] Initializing eedomus accessory...
Scan this code with your HomeKit App on your iOS device to pair with Homebridge:

--------------
| 031-45-154 |
--------------

==> /var/log/homebridge.err <==
Mon, 04 Jan 2016 12:00:00 GMT Accessory [Homebridge] Creating new AccessoryInfo for our HAP server
Mon, 04 Jan 2016 12:00:00 GMT Accessory [Homebridge] Creating new IdentifierCache

==> /var/log/homebridge.log <==
Homebridge is running on port 51826.

==> /var/log/homebridge.err <==
Mon, 04 Jan 2016 12:00:00 GMT EventedHTTPServer Server listening on port 51826

Si la salida es similar a ésta, entonces todo parece ir bien. Como podéis ver, la primera parte son los WARNING que comentábamos anteriormente, y que podemos ignorar. Después nos carga nuestro plugin de homebridge-eedomus y lo registra como accesorio. Dependiendo del desarrollo del plugin puede ser accesorio o plataforma, en nuestro caso esta primera versión la he creado como accesorio, pero más adelante me gustaría intentar registrarlo como plataforma y que automáticamente descubra nuestros dispositivos de eedomus. A continuación, carga los accesorios (nuestros módulos de eedomus) que hemos añadido a nuestro fichero de configuración.

En el recuadro lo que tenemos es el código PIN que deberemos utilizar un poco más abajo para registrar nuestro homebridge dentro de la plataforma HomeKit de Apple.

Lo siguiente son logs internos del propio homebridge, que básicamente indican el puerto que ha levantado en nuestra Raspberry Pi.

Ahora ya podemos continuar con el siguiente paso para registar nuestro homebridge dentro de HomeKit.

Si sólo teníais una sesión o ventana abierta, podéis ejecutar lo siguiente para ver el log:

pi@raspi ~ $ cat /var/log/homebridge*

 

 

Aplicación Elgato Eve para control de HomeKit

Instalación de las aplicaciones en iOS

Una vez que ya tenemos homebridge instalado y arrancado con el plugin para eedomus, es hora de instalar un par de aplicaciones en el dispositivo iOS, y así poder registrar homebridge dentro de HomeKit.

Personalmente, la que más utilizo es Elgato Eve. Se trata de una aplicación muy funcional y que permite crear estancias, escenas, zonas y grupos de servicio. Podéis probar otras aplicaciones, pero recomendamos utilizar ésta para la primera integración, y después probar el resto.

Tras haber instalado la aplicación desde la App Store, procedemos a abrirla y vamos al apartado de configuración.

La aplicación nos pedirá el código PIN que configuramos y vimos en el log de homebridge para asociarlo a HomeKit.

Lo siguiente que vamos a hacer es ponerle un nombre a nuestro hogar, podemos símplemente llamarlo “Casa”.

Dejaremos de lado el apartado de “Aspecto“, cada uno lo puede personalizar con las fotos o colores que desee.

El siguiente apartado es “Estancias“, donde crearemos las habitaciones o salas donde vayamos a tener algún dispositivo (garaje, salón, despacho…) y que será útil para cuando tengamos que interactuar con Siri (Siri, enciende las luces del Salón).

Ahora vamos a configurar el apartado “Accesorios”, que será donde nos aparezcan los dispositivos que tengamos asociados a HomeKit.

Después pulsaremos en “Añadir accesorio a Casa“, tras lo cual se pondrá a buscar accesorios compatibles.

Es importante hacer este paso desde la red local, es decir, desde la misma red en la que tengamos homebridge. Si todo ha ido bien, veremos como nos aparece “HOMEBRIDGE“, que es el nombre que le habíamos puesto en la configuración.

A partir de ahora, ya podréis controlar ese módulo que pusisteis en la configuración de homebridge-eedomus a través de Siri. Ahora queda acostumbrarse a la forma de interactuar con Siri, que como veréis, algunas veces es un poco peculiar, pero de eso, hablaremos en el próximo episodio.

 

Aplicación Discovery para iOS

 

Además de esa aplicación, arriba comentábamos que es recomendable instalar “Discovery – Bonjour Browser” también desde la App Store.
Esta aplicación es un buscador de Bonjour. Bonjour es un método para descubrir servicios en una red de área local. En nuestro caso nos interesa para descubrir HAP: HomeKit Accessory Protocol

Lo que queremos ver con esta aplicación es si desde nuestro dispositivo somos capaces de “ver” en local, HAP. Y dentro de HAP: homebridge.

Me he encontrado con que en algunas ocasiones, no se me actualizaban estados o no me respondía homebridge desde el dispositivo. Al probar la aplicación “Discovery – Bonjour Browser” comprobaba que no estaba viendo a homebridge.

En casi todas las ocasiones, bastó con desactivar wifi y volver a activarla para que apareciese nuevamente HAP > homebridge dentro de la aplicación.

Con esto damos por finalizada esta tercera parte del tutorial. Si todo ha ido bien ya podréis pedir a Siri que ejecute comandos en vuestro controlador eedomus. Siri, ¡nos vemos en la siguiente entrega!

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.

4 comentarios en «Integración del controlador eedomus con HomeKit – Parte 3»

  1. Hola Carlos,

    He leído que esta funcionalidad se puede con rasp o bien con apple tv, vas a explicar en una nueva entrega dichos pasos o son muy similares a estos, evidentemente saltando varios apartados.

    Muchas gracias, un saludo.

    Responder
    • Hola Iván,
      esta serie de tutoriales está orientado a la instalación y funcionamiento en una Raspberry.
      También sería posible hacerlo funcionar en otra distribución de linux, incluso es posible hacerlo en un windows instalando los paquetes adecuados. Pero siempre debería ser un servidor o equipo que esté siempre encendido.
      Cuando hacemos referencia al AppleTV, no es por la instalación del software, sino porque es requisito imprescindible para que HomeKit de Apple funcione desde fuera de tu red wifi.

      Responder

Deja un comentario

También te puede interesar

Compatibilidad de los motores Z-Wave de Cherubini con distintos controladores

En los últimos meses, os he hablado en Domótica Doméstica de los motores de persianas, toldos y estores con tecnología Z-Wave de la marca italiana Cherubini. Concretamente os hablé de esos motores en un primer articulo de presentación, y ...

Lo que debes saber sobre el nuevo plugin Z-Wave JS para Jeedom

El equipo de Jeedom trabaja desde hace unos meses en un nuevo plugin para gestionar la tecnología Z-Wave en la solución Jeedom. Se trata ...

El Smart Dry Contact Switch 7 de WiDom ya está soportado por eedomus

Hace pocas semanas os hablaba de un módulo oculto de “contacto seco” (libre de potencial), denominado Smart Dry Contact Switch 7 de la marca ...

No es Magia

Lo que yo hago lo puedes encontrar en YouTube y hacerlo por ti mismo dedicándole muchas horas. ¡Si tienes tiempo y te gusta la tecnología, hazlo así!

Si quieres ir a tiro hecho:

Quiero trabajar con Jordi