A pesar de que la domótica avanza a la velocidad de la luz y por fin parece que empieza a calar en nuestro país, hay aspectos que los fabricantes siguen sin terminar de afinar. Posiblemente sea fruto de su propia concepción por ingenieros y geeks apasionados, que generalmente tenemos pocas dotes de comunicación, marketing y sobre todo pensamos que si nosotros lo hicimos el resto también puede. Olvidamos que no todo el mundo está dispuesto a perder parte de su tiempo en cacharrear y nadie como Steve Jobs para entender este problema y darle solución.
Hoy queremos darle solución a un problema básico no resuelto por los fabricantes: la detección de presencia por nuestro sistema domótico. Las posibles escenas que pueden generarse son infinitas en función de la detección de presencia. Por ejemplo, podremos conectar la alarma si no hay nadie en casa, bajar las persianas automáticamente cuando salgamos, apagar la calefacción, etc. Cuando regresemos, dependiendo de quién llegue a casa, podremos personalizar las estancias al gusto de esa persona.
Si esto es lo que estabas buscando y quieres perder 30 minutos, te invitamos a seguir leyendo. Queremos agradecer a Sébastien Joly el desarrollo de este sistema, y os adjuntamos el enlace a su artículo en la web francesa Domotique-Info.
¿Qué hardware necesitamos?
En general los controladores domóticos son sistemas cerrados que no permiten instalar software de terceros, excepto algún que otro plugin. Salvo que vuestro controlador esté basado en un sistema Linux (como Jeedom), tendremos que buscar un sistema Linux básico. Yo propongo usar una Raspberry Pi e instalar la última versión de Raspbian (versión de Debian Linux adaptada a la Raspberry Pi).
Además, vamos a hacer uso de uno de los avances más desconocidos por el gran público: el BT4 (Bluetooth versión 4 o Low Energy).Una de las ventajas de BT4 es su bajísimo consumo y la posibilidad de conocer la distancia (hasta 100 m) entre dos dispositivos que incluyen este sistema. En nuestro caso, el sistema fijo que estará en casa será la Raspberry Pi y el sistema móvil nuestro propio smartphone con BT4.
La mejor forma de añadir BT4 a nuestro sistema Linux Raspbian es mediante un adaptador BT4 por USB compatible con el sistema. En mi caso, uso un modelo de Asus y funciona de perlas. En resumen, necesitamos:
- RaspBerry Pi con Raspbian configurado
- Un adaptador BT4 por USB
- Un móvil con BT4
El software
Sobre la base de un Raspbian ya instalado vamos a instalar:
- La pila bluetooth
- Un servidor FHEM que sirva de pasarela entre el sistema BT4 y nuestro controlador Z-Wave
Comencemos: Accedemos a nuestra RaspBerry via telnet e instalamos la pila bluetooth.
sudo apt-get install bluetooth bluez-utils blueman
A continuación probamos si el módulo ha sido detectado:
pi@raspberrypi ~ $ lsusb Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 0b05:17cb ASUSTek Computer, Inc.
Como podéis ver, en mi caso detecta el módulo USB BT4 de Asus.
Para hacer más fácil la instalación, haremos uso de los script ya preparados por Sébastien, aunque podemos hacer su instalación a mano sin ellos. No obstante, Sébastien nos ha permitido su uso (Merci Seb!!!) y está encantado de su difusión.
Descargamos el siguiente script:
wget http://domotique-info.fr/wp-content/uploads/2014/04/domotique-info-bluez-setup.txt -O bluez-setup.sh
Cuyo contenido pretende únicamente facilitarnos la instalación y configuración del sistema tal como hemos dicho. Éste es el contenido del script:
#!/bin/sh echo ================================================================================ echo - Installation bluez python-gobject python-dbus bluez-utils echo ================================================================================ sudo apt-get upgrade sudo apt-get update sudo apt-get install bluez python-gobject python-dbus bluez-utils BTDIRS=`ls /var/lib/bluetooth/` HOSTNAME=`hostname` BTNAME=`echo $HOSTNAME | sed 's/.zoo.lan//'` #BTNAME=$HOSTNAME for BTDIR in $BTDIRS do echo ================================================================================ echo Configuration du nom en $BTNAME , adresse $BTDIR echo Configuration Bluez echo name $BTNAME > "/var/lib/bluetooth/$BTDIR/config" echo pairable yes >> "/var/lib/bluetooth/$BTDIR/config" echo class 0x420100 >> "/var/lib/bluetooth/$BTDIR/config" echo onmode discoverable >> "/var/lib/bluetooth/$BTDIR/config" echo mode discoverable >> "/var/lib/bluetooth/$BTDIR/config" echo ommode connectable >> "/var/lib/bluetooth/$BTDIR/config" echo mode connectable >> "/var/lib/bluetooth/$BTDIR/config" done hciconfig hci0 name $BTNAME echo " " echo - Redémarrage des services echo ================================================================================ /etc/init.d/bluetooth restart sleep 2 echo ================================================================================ echo - La configuration est la suivante : echo ================================================================================ hciconfig -a read -p "Pressez [enter] pour continuer ..." cd echo ================================================================================ echo - Couches logicielles Bluetooth cmd: "dmesg | grep Bluetooth" echo ================================================================================ dmesg | grep Bluetooth read -p "Pressez [enter] pour continuer ..." cd echo ================================================================================ echo - Etat USB dmesg cmd: "dmesg |grep usb" echo ================================================================================ dmesg |grep usb read -p "Pressez [enter] pour continuer ..." cd echo ================================================================================ echo - Enumérer USB cmd: lsusb echo ================================================================================ lsusb echo ================================================================================ echo - Configuration terminée echo ================================================================================
Damos permisos de ejecución al script:
pi@raspberrypi ~ $ sudo chmod +x bluez-setup.sh
Ejecutamos el script:
pi@raspberry - $ sudo sh bluez-setup.sh
Reiniciamos la Raspberry Pi:
pi@raspberrypi ~ $ sudo reboot
Mientras se reinicia la Raspberry, cogemos nuestro smartphone. Activamos el Bluetooth en nuestro teléfono y le indicamos al dispositivo que siempre debe estar visible. Funciona tanto en Android, iOS o BlackBerry. Debemos buscar en nuestro sistema la MAC BT, o lo que es lo mismo, la dirección física bluetooth de nuestro teléfono. Supongamos que es la siguiente:
00:00:00:00:00:00
A continuación, hacemos un ping al teléfono y vemos si lo encuentra. Posiblemente nos indique en el teléfono que hay una conexión desde la Raspberry Pi. Aceptamos y veremos algo así en el terminal:
pi@raspberrypi ~ $ sudo l2ping -c 1 00:00:00:00:00:00 Ping: 00:00:00:00:00:00 from Raspberry (data size 44) ... 40 bytes from Raspberry id 0 time 39.93ms 1 sent, 1 received, 0% loss
Si has llegado hasta aquí, ya sólo te queda el 50%. Ahora vamos a instalar el servidor FHEM y nos apoyaremos nuevamente en un script:
#!/bin/sh echo ================================================================================ echo "Installation de FHEM 5.5" echo ================================================================================ sudo apt-get install perl libdevice-serialport-perl libio-socket-ssl-perl libwww-perl sudo apt-get install -f cd $HOME rm -r fhem-install mkdir fhem-install cd fhem-install sudo wget http://fhem.de/fhem-5.5.deb sudo dpkg -i fhem-5.5.deb sudo /etc/init.d/fhem start IP=`ifconfig eth0 | grep "inet adr" | sed 's/.*adr:([0-9]*.[0-9]*.[0-9]*.[0-9]*).*/1/'` echo ================================================================================ echo "Vous pouvez maintenant vous connecter avec votre navigateur sur http://"$IP":8083/fhem" echo ================================================================================
Podemos descargarlo con el siguiente comando:
pi@raspberrypi ~ $ wget http://domotique-info.fr/wp-content/uploads/2014/04/domotique-info-fhem-setup.txt -O fhem-setup.sh
Le damos permisos de ejecución:
pi@raspberrypi ~ $ sudo chmod +x fhem-setup.sh
Lo ejecutamos e instalamos FHEM:
pi@raspberrypi ~ $ sudo sh fhem-setup.sh
Y reiniciamos nuevamente la Raspberry Pi:
pi@raspberrypi ~ $ sudo reboot
Entramos a la pasarela FHEM desde un navegador web:
http://IPDETURASPBERRY:8083/fhem
Si ya estas dentro, ahora únicamente te queda configurarlo. FHEM se va a encargar de hacer de pasarela entre el sistema BT4 embarcado en la Raspberry Pi y vuestro controlador domótico.
Cuando detecte un cambio en el estado de BT4 (presencia/ausencia del móvil) modificará el estado de una variable global que después podrás utilizar en las escenas que quieras. En este caso, se pulsa un botón en un dispositivo virtual del controlador Fibaro HC2. En cualquier caso, ésta es la parte que os tocará personalizar en función de la API de vuestro controlador. Pinchamos en:
Edit Files –>fhem.cfg
A continuación, incluimos lo siguiente en el archivo y grabamos (no olvides personalizar la mac BT4 del dispositivo, el usuario, la contraseña, la IP y el comando de la API):
#Gestión de presencia #-------------------------------- # Gestión de presencia smartphone Antonio (modificar 00:00:00:00:00:00 par la mac BT de vuestro dispositivo) #-------------------------------- define Antonio PRESENCE local-bluetooth 00:00:00:00:00:00 10 10 attr Antonio event-on-change-reading state define CMD_ACTIVE_AMG notify Antonio:absent { system("curl --user USUARIO:PASSWD "http://IP/api/callAction?deviceID=XX&name=pressButton&arg1=X"") } define CMD_DESACTIVE_AMG notify Antonio:present { system("curl --user USUARIO:PASSWD "http://IP/api/callAction?deviceID=XX&name=pressButton&arg1=X"") }
En este caso, cuando el dispositivo pierde cobertura BT4, automáticamente se hace una llamada a un dispositivo virtual que al presionar el botón modifica el contenido de una variable global donde indicamos el status (presencia o ausencia).
Si has podido leer todo te felicito, eres un geek profesional. Si además has conseguido que te funcione… ¡disfrútalo! En mi caso funciona perfectamente y le ha dado otra dimensión a mi sistema domótico.
Tremendo Antonio!!
llevaba unos días dándole vueltas a la cabeza buscando como hacer que Jeedom supiera quién está en casa en cada momento en función del móvil. Y me lo has traido hecho, jejje.
Muchísimas gracias por el aporte, es un placer contar con vosotros para ayudarnos a conocer este fantástico y amplísimo mundo.
Por cierto, supongo que este sistema se puede instalar en una Rpi en la que corre Jeedom, sin problemas de que este deje de funcionar, por modificar alguno de sus archivos, verdad?
Me alegro de que sea de ayuda.
Efectivamente puedes montar el sistema junto a Jeedom, a fin de cuentas es un linux. Lástima que Fibaro tenga su sistema encriptado. Si fuese abierto ya tendríamos solucionados los problemas de la v4 dedicándole entre todos unas horitas.
¡Fantástico artículo! La Rpi nos puede deparar aún un gran número de sorpresas en el sector domótico. En especial con la nueva versión.
Se pone la cosa interesante. ¡Muchas gracias por tu aportación!
Antonio,
el principal problema que tengo ahora mismo es que mi móvil no tiene BT 4.0, crees que funcionaría el invento con un llavero alarma/antipérdidas con BT 4.0?
En teoría debería valer, y sería muy versatil, pues cada miembro de la familia tendría asignado uno, y así se podrí saber quién está en casa, por un módico precio.
Pues nunca he probado, pero a priori debería funcionar. Prueba y nos cuentas! Yo haría la prueba con una pulsera inteligente como por ejemplo la de Xiaomi, es barata y te servirá para mas cosas como por ejemplo cuantificar el sueño.
Hola Antonio,
por fín hoy he podido ponerme con esta instalación, ya que hasta ahora no tenía el material ni tiempo.
El problema es que he llegado hasta la instalación del servidor fhem.
Cuando intento acceder mediante explorador web a: http://IPDETURASPBERRY:8083/fhem
me sale el famoso mensaje de error 404 not found…
He intentando buscar en google una solución, pero no he encontrado nada de primeras.
Tienes idea a qué se debe?. Y lo que es mejor, sabrías decirme como podría solucionarlo?
Me interesa muchísimo esta aplicación.
Saludos.
Hola Miguel Angel,
Si no responde solo hay una posibilidad: FHEM no está funcionando. Lo primero que debes probar es a reiniciar la Rasp. Quizás el servicio no esté activo. Si sigues teniendo problemas prueba nuevamente a instalar FHEM y copiame aquí lo que sale en pantalla. Posiblemente estés haciendo algo mal.
Hola Antonio,
he vuelto a reinstalar FHEM y hoy si parecía que todo había ido bien, ya que ayer en la parte donde dice: “Saving to fhem 5.5.deb” se quedó estancado un buen rato en el 0% sin avanzar.
Hoy sin embargo ha cargado al 100% casi instantáneamente.
El problema es que sigo con el mismo error al intentar acceder desde el navegador web….
Te pego lo que tengo en mi terminal de putty:
pi@raspberrypi ~ $ sudo sh fhem-setup.sh
================================================================================
Installation de FHEM 5.5
================================================================================
Reading package lists… Done
Building dependency tree
Reading state information… Done
libdevice-serialport-perl is already the newest version.
libio-socket-ssl-perl is already the newest version.
libwww-perl is already the newest version.
perl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 119 not upgraded.
Reading package lists… Done
Building dependency tree
Reading state information… Done
0 upgraded, 0 newly installed, 0 to remove and 119 not upgraded.
–2015-05-01 07:34:24– http://fhem.de/fhem-5.5.deb
Resolving fhem.de (fhem.de)… 82.165.184.33
Connecting to fhem.de (fhem.de)|82.165.184.33|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 8912882 (8.5M) [application/x-debian-package]
Saving to: `fhem-5.5.deb’
100%[===================================================================================================================>] 8,912,882 3.71M/s in 2.3s
2015-05-01 07:34:26 (3.71 MB/s) – `fhem-5.5.deb’ saved [8912882/8912882]
(Reading database … 80364 files and directories currently installed.)
Preparing to replace fhem 5.5 (using fhem-5.5.deb) …
Unpacking replacement fhem …
update-rc.d: using dependency based boot sequencing
update-rc.d: using dependency based boot sequencing
Setting up fhem (5.5) …
update-rc.d: using dependency based boot sequencing
Starting fhem…
Starting fhem…
================================================================================
Vous pouvez maintenant vous connecter avec votre navigateur sur http://:8083/fhem
================================================================================
pi@raspberrypi ~ $ sudo reboot
A ver si ves algo raro, aunque a mi me parece que está todo ok.
Saludos.
Efectivamente parece todo correcto.
Prueba por favor lo siguiente:
sudo ifconfig
Debería salirte algo así:
wlan0 Link encap:Ethernet HWaddr 00:26:82:ba:59:0a
inet addr:192.168.1.41 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::226:82ff:feba:590a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:43662 errors:0 dropped:0 overruns:0 frame:1010134
TX packets:27593 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:30872362 (29.4 MiB) TX bytes:4090305 (3.9 MiB)
Interrupt:17
En caso de que uses cable en lugar de wifi debería cambiar wlan por eth. Lo importante no es eso, sino:
inet addr:192.168.1.41
Esa es tu ip interna.Suponiendo que tu IP sea 192.168.1.41 o cualquier otra… Prueba en el navegador:
http://192.168.1.41:8083/fhem
Dime que aparece.
Esto es lo que aparece:
pi@raspberrypi ~ $ ifconfig
eth0 Link encap:Ethernet HWaddr b8:27:eb:a5:08:b4
inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12230 errors:0 dropped:0 overruns:0 frame:0
TX packets:4339 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3168709 (3.0 MiB) TX bytes:1229998 (1.1 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:33628 errors:0 dropped:0 overruns:0 frame:0
TX packets:33628 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5421782 (5.1 MiB) TX bytes:5421782 (5.1 MiB)
Intento acceder como indicas, y sigue dando el mismo error.
El problema creo que viene por el número de puerto que usa fhem, que es el mismo que usa la Razberry para acceder al servicio Zwave-me.
Al estar ocupado ese puerto con el servicio de la Razberry no puedo usarlo también para Fhem.
Entonces sólo te queda una opción… Cambiar el puerto donde escucha FHEM. Para ello tendrás que editar el fichero fhem.cfg a mano con cualquier editor de texto (por ejemplo: vi). En las primeras líneas del fichero encuentras los diferentes puertos en los que escucha fhem, cambialos a tu elección para que no interfieran con otros servicios.
Antonio, disculpa las molestias que te causo, pero no consigo encontrar el archivo fhem.conf.
He probado con sudo vi fhem.cfg pero aparece vacío.
Sabrías indicarme la ruta o el comando que tengo que escribir en la terimnal?
Prueba desde el directorio raiz:
sudo find -name fhem.cfg
Te devolverá el directorio donde está el archivo.
Puedes hacer algo parecido con WiFi. Si tu teléfono se conecta a la WiFi de casa, solo tienes que hacer un pequeño programa que ha “ping” periódicamente y detecte si el telefono esta en la red WiFi o no. Es una idea del creador de “HomeGenie”, un programa domótico que funciona en Windows y Linux (incluido Raspberry Pi)
Yo lo tengo funcionando en mi casa, donde tengo varios puntos de acceso y asi conectividad en toda la casa. Funciona perfectamente.
Si, es una localización pasiva que se usa mucho en domótica y que tiene muchas ventajas, aunque en los dispositivos iOS no vale porque cuando el dispositivo entra en reposo desconecta la Wifi y ya no responde al ping, aunque esté en casa.