Casa inteligente con Raspberry Pi Zero W y HomeBridge

15 Junio 2017 · 11 minutos

Raspberry Pi   HomeBridge  
Casa inteligente con Raspberry Pi Zero W y HomeBridge

Configurar Homebridge desde 0 en la Raspberry Pi 3 B+ y Pi Zero W

Seguimos trabajando en el post, perdona por las molestias.

1. Instalar Raspbian

Nos vamos a la página oficial de Raspberry Pi y descargamos Raspbian Stretch with Desktop si queremos la versión con escritorio o Raspbian Stretch Lite si queremos la versión sin escritorio.

Después de la descarga extraemos el .zip y obtendremos un .img

Descargamos SD Memory Card Formatter 5.0 for SD/SDHC/SDXC compatible con MacOS y Windows. Lo usaremos para formatear nuestra tarjeta SD y que no nos de ningún problema a la hora de instalar el sistema operativo.

SD Card Formatter

Descargamos Etcher compatible con MacOS, Linux y Windows. Lo usaremos para instalar la imagen de Raspbian en la tarjeta SD.

Etcher

2. Configurar ssh sin pantalla (headless)

Creamos un archivo en la raiz de la SD en la particion de boot con el nombre de ssh sin extension

   2.1. Acceder a la Raspberry Pi a través de ssh

Si usamos macOS o Linux es tan fácil como abrir un terminal y escribir

introducimos la contraseña por defecto raspberry y listo.

SSH Terminal

Sin embargo si usamos Windows tendríamos que descargar PuTTY introduciríamos la IP de la Raspberry Pi, el usuario por defecto que es pi y la contraseña por defecto raspberry y listo.

3. Configurar Wi-Fi sin pantalla (headless)

Creamos un archivo en la raiz de la SD en la particion de boot con el nombre de wpa_supplicant.conf con una de las siguientes opciones:

   3.1. Si tu red esta protegida por contraseña
country=ES
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="TU_SSID"
    psk="TU_CONTRASEÑA"
}
   3.2. Si tu red no esta protegida por contraseña
network={
    ssid="TU_SSID"
    key_mgmt=NONE
}
   3.3. Si tu red esta oculta
network={
    ssid="TU_SSID_OCULTO"
    scan_ssid=1
    psk="TU_CONTRASEÑA"
}

Wi-Fi en la Raspberry Pi 3 B+

Al iniciar sesión a través de ssh nos indica que el Wi-Fi esta desactivado porque el país no esta definido. Tenemos dos opciones:

1. Desde el terminal hacer sudo raspi-config y configurar el país.

2. Añadimos country = ES en el wpa_supplicant.conf como vemos arriba.

El motivo de esto es que esta Raspberry es compatible con la banda de 5gHz y por lo tanto necesita saber en que país se encuentra para configurar el canal de dicha banda.

Wi-Fi en la Raspberry Pi Zero W

Si no consigues configurar el Wi-Fi, te recomiendo instalar Noobs y a través de este instalar Raspbian y no tendrás problemas.

Imposible conectar el Wi-Fi

Si piensas que nada funciona, intenta conectar tu Raspberry Pi a través de Ethernet, prueba accediendo a través de VNC y configura el Wi-Fi desde el escritorio.

Fuente: desertbot.io

4. VNC (Computación Virtual en Red)

Real VNC

Ventajas

1. Viene instalado por defecto en Raspbian, solo hay que activarlo.

2. Al activarlo se inicia automaticamente al encender la Raspberry Pi.

3. Podemos acceder a nuestra Raspberry Pi desde cualquier lugar si nos hemos registrado en Real VNC e iniciado sesión con nuestra cuenta.

Accedemos a través de ssh

sudo raspi-config

Nos vamos a Interfacing Options y ponemos VNC en Yes. Este se iniciaría automaticamente al encender la Raspberry Pi.

El usuario y la contraseña que usaríamos para acceder al escritorio remoto serían los mismos que vienen por defecto para iniciar sesión en la RaspBerry Pi, usuario: pi y contraseña: raspberry Para cambiar la contraseña del VNC desde el terminal introducimos el comando

vncpasswd

y seguimos las instrucciones que se nos indican.

Para hacer uso de Real VNC nos descargamos VNC Viewer que es compatible con todas las plataformasque y nos permitirá acceder a nuestro escritorio remoto.

Fuente: raspberrypi.org

4. Instalar Homebridge y sus dependencias

   4.1. Instalar Node y NPM
     4.1.1. Raspberry Pi 3 B+

Raspberry Pi 3 B+

Instalamos NodeJS

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

Comprobamos que esta todo correcto

nodejs -v

y deberíamos obtener la siguiente versión v8.11.3

npm -v

y deberíamos obtener la siguiente versión 5.6.0

     4.1.2. Raspberry Pi Zero W

Raspberry Pi 3 B+

Miramos el procesador que tiene nuestra Respberry Pi con el siguietne comando

uname -m

En este caso ARMv6l

Copiamos el enlace de ARMv6l de la web oficial de NodeJS y le añadimos delante curl -O

curl -O https://nodejs.org/dist/latest-v9.x/node-v9.11.2-linux-armv6l.tar.gz

Lo extraemos

tar -xzf node-v9.11.2-linux-armv6l.tar.gz

Lo copiamos a /usr/local y creamos el enlace simbolico

sudo cp -r node-v9.11.2-linux-armv6l/* /usr/local/

Comprobamos que todo ha salido bien con los siguientes comandos

node -v

y deberíamos obtener la siguiente versión v9.11.2

npm -v

y deberíamos obtener la siguiente versión 5.6.0

Para actualizar npm

npm install -g npm

y deberíamos obtener la siguiente versión 6.1.0 o superior

Creamos un package.json

npm init

Presionamos enter en todos los campos

package name: (pi)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
Is this OK? (yes)

y ya estaría completa la instalación de npm

Fuentes:

nodejs.org

itp.nyu.edu

instructables.com

thepolyglotdeveloper.com

   4.2. Instalamos libavahi-compat-libdnssd-dev
sudo apt-get install libavahi-compat-libdnssd-dev
   4.3. Instalamos homebridge

HomeBridge

sudo npm install -g --unsafe-perm homebridge

5. Plugins

Instalamos los plugins que queramos con el comando

npm install -g <plugin-name>
Si tienes problemas de permisos a la hora de instalar los plugins, comprobamos el directorio en el que esta instalado npm

npm config get prefix

Normalmente es /usr/local

Cambiamos el dueño de npm al nombre del usuario que ha iniciado la sesión en la raspberry pi:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

Fuente: github.com

   5.1. Plugin de Yeelight
Importante

Si queremos usar dispositivos BLE la versión más reciente sin problemas es la 0.0.16 sudo npm install -g --unsafe-perm [email protected]

Si queremos usar la ultima versión (Actualmente la 0.0.18) que no es compatible con dispositivos BLE continuamos con la instalación saltándonos el punto 5.1.1

sudo npm install -g --unsafe-perm homebridge-yeelight
     5.1.1. Dispositivos BLE (Ej. Bedside lamp)

Instalación de Noble y sus dependencias

sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
sudo npm install -g --unsafe-perm noble
Si nos da un error del estilo:

node-pre-gyp WARN Tried to download(404): https://github.com/tessel/node-usb/releases/download/1.3.2/usb_bindings-v1.3.2-node-v48-linux-arm.tar.gz node-pre-gyp WARN Pre-built binaries not found for [email protected] and [email protected] (node-v48 ABI, glibc) (falling back to source compile with node-gyp)

Hacemos lo siguiente:

sudo npm install -g --unsafe-perm usb
sudo apt-get install libcap2-bin

Fuente: github.com

   5.2. Plugin de Temperatura Pi
sudo npm install -g --unsafe-perm homebridge-raspberrypi-temperature

Fuente: github.com

   5.3. Plugin de Dash Button
Hay que instalar este sin usar sudo , si lo usamos da errores de permisos

Instalamos sus dependencias

sudo apt-get install libpcap-dev
npm install node-dash-button

Para descubrir la MAC de nuestros Dash buttons

cd node_modules/node-dash-button
sudo node bin/findbutton

Instalamos el plugin para homebridge

npm install -g --unsafe-perm homebridge-dash

Fuentes:

github.com

github.com

6. Configurando el config.json
Para comprobar que no tiene errores lo pasamos por [JSONLint](https://jsonlint.com)
   6.1. Para configurar tu .json y ejecutar homebridge sin usar sudo desde el terminal
Algunos plugins no funcionarán si los usamos sin sudo
sudo nano ~/.homebridge/config.json

Para ejecutar homebridge tendríamos que usar el comando

homebridge
{
	"bridge": {
		"name": "HomeBridge",
		"username": "XX:XX:XX:XX:XX:XX",
		"port": 51825,
		"pin": "012-34-567"
	},
	"accessories": [{
			"accessory": "RaspberryPiTemperature",
			"name": "Iniciando Temperatura CPU Raspberry Pi sin sudo",
			"updateInterval": 1000
		},
		{
			"accessory": "Dash",
			"name": "Iniciando Dash Button 1 sin sudo",
			"protocol": "udp",
			"mac": "XX:XX:XX:XX:XX:XX"
		},
		{
			"name": "Iniciando Dash Button 2 sin sudo",
			"protocol": "udp",
			"mac": "XX:XX:XX:XX:XX:XX"
		}
	],
	"platforms": [{
		"platform": "yeelight",
		"name": "Iniciando Yeelight sin sudo"
	}]
}
   6.2. Para configurar tu .json y ejecutar homebridge usando sudo desde el terminal
sudo nano /root/.homebridge/config.json

Para ejecutar homebridge tendríamos que usar el comando

sudo homebridge
{
	"bridge": {
		"name": "HomeBridge",
		"username": "XX:XX:XX:XX:XX:XX",
		"port": 51825,
		"pin": "012-34-567"
	},
	"accessories": [{
			"accessory": "RaspberryPiTemperature",
			"name": "Iniciando Temperatura CPU Raspberry Pi con sudo",
			"updateInterval": 1000
		},
		{
			"accessory": "Dash",
			"name": "Iniciando Dash Button 1 con sudo",
			"protocol": "udp",
			"mac": "XX:XX:XX:XX:XX:XX"
		},
		{
			"name": "Iniciando Dash Button 2 con sudo",
			"protocol": "udp",
			"mac": "XX:XX:XX:XX:XX:XX"
		}
	],
	"platforms": [{
		"platform": "yeelight",
		"name": "Iniciando Yeelight con sudo"
	}]
}
   6.3. Para configurar tu .json si tienes activado un servicio con ` systemd` para el inicio automático tienes que crearlo en la siguiente ruta

Creamos el directorio

sudo mkdir /var/lib/homebridge/

y creamos un nuevo config.json

sudo nano /var/lib/homebridge/config.json
{
	"bridge": {
		"name": "HomeBridge",
		"username": "XX:XX:XX:XX:XX:XX",
		"port": 51825,
		"pin": "012-34-567"
	},
	"accessories": [{
			"accessory": "RaspberryPiTemperature",
			"name": "Iniciando Temperatura CPU Raspberry Pi con sudo",
			"updateInterval": 1000
		},
		{
			"accessory": "Dash",
			"name": "Dash Button 1",
			"protocol": "udp",
			"mac": "XX:XX:XX:XX:XX:XX"
		},
		{
			"name": "Dash Button 2",
			"protocol": "udp",
			"mac": "XX:XX:XX:XX:XX:XX"
		}
	],
	"platforms": [{
		"platform": "yeelight",
		"name": "Iniciando Yeelight con sudo"
	}]
}
7. Aplicación de Casa en iOS 11

Home App