Home automation (Parte 2) – Home Assistant

Hace algunos meses estoy escuchando hablar del proyecto Home Assistant (HA). En palabras literales del propio proyecto:

Automatización del hogar, de código abierto, que prioriza el control local y la privacidad. Desarrollado por una comunidad mundial de entusiastas del bricolaje y DIY (Do it yourself). Perfecto para ejecutarse en una Raspberry Pi o en un servidor local.

NOTA: La traducción literal pierde un poco de entusiasmo

La idea de este proyecto es que permite a los usuarios del mismo, una vez instalado encajar nuevos hardware/software a tu ecosistema de una manera fluida. Encaja a la perfección con ESPHome, que es quien me permitirá agregar dispositivos (crafteados usando la línea de productos ESP) de una manera fácil.

El otro “gran pez” en el mercado open source (y gratis) del mundo de la automatización es OpenHAB.

Una pequeña investigación muestra que: OpenHAB es un proyecto un tanto mayor que ofrece mayor flexibilidad en el desarrollo del IoT, pero una mayor flexibilidad viene atado a más tiempo a dedicar al estudio. Siguiendo esta discusión de Reddit, al parecer es una tendencia de los usuarios de OpenHAB a migrar hacia HA debido a las facilidades de configuración que ofrece el último ya que permite la configuración de prácticamente todo usando YAML, a los ciclos más rápidos de actualizaciones de HA (mensuales/semanales) y a la vistosa webUI que ofrece. Ambos soportan NodeRed.

 


Home Assistant, instalación

El proceso de instalación del HA en una RPi es bastante sencillo, lo único que hay que hacer es seguir las instrucciones proveídas en la propia documentación del sitio de HA.

Me gustaría agregar que HA puede ser instalado en una variedad de arquitecturas/hardware, desde ODroid, Tinkerboard de ASUS, hasta en Linux/Windows como VMs descargables.

El software para “quemar” el Sistema Operativo en la microSD que utilicé es el Balena Etcher.

Una vez que el OS está en la micro SD, se inserta la misma en la RPi, se engancha el cable de red de la RPi al router y luego se conecta a la corriente. Esperamos a que la RPi inicialice y cuando termine el proceso procedemos a ver qué IP obtuvo, para esto podemos o bien utilizar algún software de escaneo de redes (yo utilizo el NetScan) o bien entrar a la página de Status de nuestro OpenWRT y veremos el lease del DHCP server:

Cuando encontremos el IP solamente tendremos que acceder vía el IP encontrado, o usando el link http://homeassistant:8123/. Una vez accedemos veremos la siguiente pantalla:

Como se aprecia en la imagen dice que “esto puede tomar hasta 20 minutos”. Si hacemos click en el círculo pulsante de color azul, accederemos a los logs del proceso. En varios momentos pensé que el proceso se había detenido pues decía que iba a descargar algunos contenedores y sabiendo que dockerhub está bloqueado para Cuba temía que necesitara utilizar yo una vpn en router Wi-Fi, pero leyendo bien, utilizaba GitHub Container Registry:

El último paso del proceso mostrado en los logs, y en el que más demoró, incluso más que en el anterior, fue:

Una vez terminado el proceso, el cual tomó un aproximado de 45 minutos (la imagen del Supervisor pesa casi 1.5GB), nos sale una pantalla como la siguiente y se procederá con el proceso que los desarrolladores de HA definen como “Onboarding”:

.

Si leen la documentación este proceso es fácil y se deben de responder algunas preguntas sencillas. En mi caso el GPS me ubicaba en el Vedado, cuando en realidad vivo en otra zona de la Habana, supongo que sea debido a la geolocalización por el IP con el que mi conexión sale a internet.

Una vez terminado el proceso se puede ver en el navegador algo como:

.

Algo que me causó mucha gracia, es que en el proceso del Onboarding te deja seleccionar la moneda que se utiliza en tu país y obviamente reconoce el MN:


Home Assistant, primera conexión

Lo primero que noté es que no tengo acceso a la terminal SSH de mi Home Assistant, pues vamos a habilitarlo/instalarlo. Lo primero es habilitar el modo avanzado, para ello seleccionamos nuestro perfil:

Nos saldrán algunas opciones, necesitaremos bajar un poco hasta encontrarla:

Una vez habilitado el modo avanzado, necesitamos instalar un Add-On (que estaba inhabilitado debido a cuestiones de facilidades de la web UI):

Luego presionamos en Add-On store:

Y si utilizamos el buscador buscando por la palabra SSH:

Seleccionamos el Add-on Terminal & SSH y luego le damos a Install:

Y… Voilá:

Ok, intenta descargar alguna imagen desde dockerhub, por lo que no voy a poder hacerlo saliendo a internet desde un IP cubano. Para ello utilicé una vpn en el router que utilizo siguiendo este tutorial.

Una vez instalado (la imagen de este add-on pesa casi 200MB) podremos abrir una consola web (si queremos tener acceso vía PuTTY o algún otro cliente SSH leer aquí):

Y veremos nuestra consola web:

________________________________________________________________________________________________________

Incluso si nos conectamos utilizando el usuario `root` no seremos un usuario con privilegios. Esto se debe a que este add-on habilita el acceso por SSH al contenedor del propio add-on, o sea el que se descarga y corre cuando “instalamos” este add-on en nuestro HA.

Para entender esto nos basta con entender la arquitectura del sistema operativo del HomeAssistant, el cual se basa en 3 partes:

 El Sistema Operativo es la base que sustenta todo, es donde corren los contenedores, se enruta la red y… bueno, todo lo que hace un sistema operativo.

.

 El Supervisor se encarga de vigilar al Core; instalar y manejar los Add-ons, DNS, audio y algunas otras.
 El Core es el encargado de cumplir las tareas para las que fueron pensadas Home Assistant: automatizar la casa:

________________________________________________________________________________________________________

Home Assistant, como servidor de archivos

Una de las bondades de la RaspberryPi es que viene con 4 puertos USB y la suficiente potencia de cómputo como para hacer la función de servidor de archivos compartiendo en toda nuestra red el contenido de algún disco duro externo USB.

Primeramente vamos a instalar un add-on que nos permitirá, desde la web de nuestro Home Assistant navegar por los ficheros de nuestra Raspberry, vamos lo que viene siendo un explorador de archivos de toda la vida. Este add-on no viene en los repositorios oficiales, así que vamos a agregar el repo; este proceso es bien sencillo: Settings -> Add-ons -> Add-on Store -> Repositories.

En la barra para escribir que se nos ofrece, insertamos el link: https://github.com/alexbelgium/hassio-addons, quedando algo así (ya yo lo tengo insertado):

Luego de hacer click en Add dejamos que se conecte al repo. La gran mayoría de los add-ons que he utilizado de este repo utiliza GHCR así que no hace falta VPN para instalarlos. Luego de que el sistema cargue correctamente el repositorio (debido a la conexión tan esplendorosa tuve que intentarlo par de veces) veremos los nuevos add-ons disponibles, siendo el que nos interesa Filebrowser:

Una vez instalado el nuevo add-on (la imagen de este add-on pesa unos 115MB) sólo resta iniciarlo, recuerde marcar los check boxs resaltados:

Si lo abrimos podremos ver algo como esto (en su configuración se puede cambiar del modo Light que trae por defecto al modo Dark):

Bien, el segundo paso será montar el dispositivo USB. En este caso los devs de Home Assistant nos las han puesto difícil, porque no es conectar el USB y ya lo tenemos funcionando, nooo!!!

En realidad no es tan complejo, solamente necesitamos acceso al Sistema Operativo de nuestro Home Assistant. Para ello, y siguiendo las instrucciones de Debbuging, nos encontraremos con un acceso SSH a la capa del mencionado Sistema Operativo.

Los pasos a seguir son sencillos: generar un par de llaves privada/pública, utilizar una memoria USB (formateada en FAT (preferentemente), ext4 o NTFS), la memoria debe de llevar el nombre CONFIG (en mayúsculas). Una vez la memoria esté formateada crear un archivo llamado `authorized_keys` y dentro copiar la llave pública (usualmente llamada `id_rsa.pub`)

NOTA: el contenido de los archivos que configuración que copiemos dentro de la memoria deben de seguir ciertos parámetros

 La secuencia de fin de línea no debe de ser `CRLF`, sino debe de ser `LF`
 La codificación del archivo no debe de ser UTF-8, sino `ISO 8859-1`

Para la configuración correcta de este archivo debe de seguirse éste tutorial en el cual se utiliza VSCode para la generación de los archivos de configuración.

Una vez tengamos los archivos copiados a nuestra memoria, sólo resta insertarla en la RPi, abrir el acceso SSH utilizando el add-on de Terminal & SSH y escribir el comando `ha os import`. También podremos reiniciar nuestro HA mientras la memoria preparada está insertada en algún puerto USB de nuestra RPi. Una vez completado solamente tendremos que, utilizando la llave privada generada anteriormente, conectarnos al IP de nuestro HA usando el puerto `22222`:

`ssh [email protected] -p 22222`

Ahora podremos listar nuestros dispositivos conectados usando el comando `lsblk` y montarlos usando el comando `mount`. Pero la idea es automatizar el proceso y no tener que acceder a la consola y correr los comandos cada vez que necesitemos montar un dispositivo.

Existen dos métodos para lograr el objetivo: usando reglas udev y usando fstab.

 Para usar el método de udev se debe de utilizar la misma memoria formateada anteriormente, la que lleva el nombre de `CONFIG`. Dentro de la misma, si no se ha borrado aún está el archivo `authorized_keys`. Se crea una carpeta llamada `udev` en la raíz de la memoria, y dentro de crea un archivo llamado `80-mount-usb-to-media-by-label.rules`, el mismo tendrá el contenido que se puede encontrar aquí. Basta con seguir el procedimiento anterior: insertar la memoria, y desde la consola SSH aplicar el comando `ha os import`.

Ahora se puede insertar el dispositivo USB que quiere ser montado en la RPi, el cual usando el add-on FileBrowser podrá ser encontrado en la carpeta `/media`. En este punto el dispositivo podrá ser visto desde el mencionado add-on pero aún no es accesible, para ello se necesita reiniciar el HomeAssistant, para ello solamente debe de, en la consola, escribir `reboot`.

Créditos por este método aquí.

 Para usar el método de fstab… Bueno, hay varios tutoriales online y no vale la pena explicarlo aquí. Hacer notar que se debe de utilizar el UUID del dispositivo USB en vez de su nombre canónico (sdX…)

Desventajas del método udev: al utilizar los nombres canónicos si se retira un dispositivo y se vuelve a insertar luego de haber insertado otro previamente, con total certeza existirán errores en los puntos de montaje. Ventajas: es más fácil y requiero menos conocimiento.

Desventajas del método fstab: requiere un poco más de conocimiento técnico, no mucho. Ventajas: mucho más personalizable y vas a tener la certeza en todo momento de saber lo que estás haciendo.

Una vez que tenga accesible su dispositivo de almacenamiento USB desde el FileBrowser, resta poder compartirlo por la red. Para ello se necesita instalar otro add-on, en este caso será el Samba share. El procedimiento es el mismo que para el anterior add-on, Settings -> Add-ons -> Add-on Store y utilizamos la barra de búsqueda para escribir la palabra samba:

Instalamos el add-on (la imagen de este add-on pesa unos 150MB) y una vez completado el proceso, resta su configuración:

Para ello:

La configuración, como se ve en la captura anterior, es bastante sencilla para quien está en el mundillo (vamos, un smb de toda la vida). Nótese el último apartado, en mi caso mi red local es la `192.168.100.0/24`, así que si su caso es diferente, basta con sólo agregar el valor.

Una vez configurado e inicializado ya se puede observar el contenido de los archivos compartidos desde un dispositivo en la red local. En el caso de que tenga un dispositivo USB de almacenamiento estará bajo la carpeta:

________________________________________________________________________________________________________

Habilitando el acceso web por https

NOTA: Este paso no es del todo necesario!!!

 

Hasta ahora el acceso web que he utilizado ha sido mediante el protocolo http, y aunque es funcional cuando intentemos (en la siguiente entrega de esta serie) utilizar el add-on que nos permitirá configurar nuestros ESP8266/32 terminaremos con un error parecido al siguiente:

Esto tiene una solución bastante sencilla y es utilizando otro add-on, en este caso el DuckDNS. Obviamente hay muchas más soluciones; pero esta, amén de que requiere una cantidad considerable de pasos, es la más sencilla y funcional que encontré.

La instalación del mismo va a ser como siempre: Settings -> Add-ons -> Add-on Store -> DuckDNS

La configuración de este add-on es fácil pero requiere vpn ya que utiliza el registro público de contenedores de dockerhub, para sortear este problemilla utilicé una vpn en el router, siguiendo este tutorial.

Los pasos para la configuración de este add-on (la imagen de este add-on pesa unos 120MB) están en la propia página del add-on:

Una vez configurada la conexión a través de una vpn lo siguiente es ir a DuckDNS y registrarse:

.

Se pueden utilizar varios métodos para crearse una cuenta. Con la cuenta creada, se nos dará la opción obtener el token de nuestra propia cuenta, cópielo en algún lugar que no se le olvide. También podremos crear un nuevo subdominio, solo escriba en la caja de textos un subdominio y DuckDNS hará el resto:

Una vez obtenido el token y el subdominio basta con entrar en la configuración del add-on y agregar los datos generados/obtenidos (domain, token), cambiar la opción `accept_terms` de false a true, en el apartado “Let’s Encrypt”; en el apartado de Seconds yo cambié de los 300 que trae por defecto a 2591997, lo que si hacemos las matemáticas resulta en casi un día (puede dejarlo por defecto). Como último paso recuerde hacer click en el botón Save:

Recuerde inicializar el contenedor:

Aún no seremos capaces de usar https cuando intentemos acceder a nuestro HomeAssistant, para ello falta un último paso. Accederemos a nuestros archivos compartidos por la red, el cual habilitamos anteriormente utilizando el add-on Samba share; en Windows es sencillo: abrir el explorador de archivos y escribir en la barra de navegación: \\homeassistant\config, esto nos llevará a algo como:

Abrimos con nuestro editor de textos favoritos (en este caso utilicé Sublime) el archivo llamado `configuration.yaml`, y agregamos lo siguiente:

http:
  base_url: https://su-subdominio-generado-en-duckdns.duckdns.org
  ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem

Quedando como sigue:

Recuerde guardar los cambios hechos en el archivo.

Y ahora queda reiniciar nuestro Home Assistant para que surtan efecto los cambios hechos en el último archivo. Para reiniciar tenemos varias vías:

 Acceder vía SSH utilizando las credenciales de root y usando el puerto 22222 como de explicó anteriormente. Una vez dentro basta con correr el comando: `ha core restart`, esto reiniciará el contenedor `core`, que es en realidad el único que necesitamos reiniciar.
 Vía web. Yendo a: Settings -> System -> [Botón de encendido en la esquina superior derecha] -> Advanced options -> Reboot system:

Una vez que el sistema reinicia/contenedor core pues ya podremos acceder a nuestro Home Assistant utilizando el protocolo https y por la dirección https://homeassistant.local:8123/

NOTA: Este add-on requiere conexión a internet constante para funcionar, así que en caso de perder la conexión probablemente la conexión https se perderá. Ser recomienda utilizarse solamente cuando se requiera de ello (para la totalidad de las funciones de ESPHome).

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 5 / 5. Recuento de votos: 5

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.