Configuración de Docker para Raspberry Pi Home Assistant

En este tutorial aprenderás a configurar Home Assistant, Mosquitto como broker MQTT, InfluxDB y Grafana con Docker en tu Raspberry Pi

En este tutorial aprenderás a instalar Home Assistant a través de Docker para tu Raspberry Pi.

Para un sistema completo de hogar inteligente se necesitan algunas aplicaciones adicionales junto a Home Assistant. Por lo tanto, este tutorial incluye las siguientes instalaciones a través de Docker:

  • Home Assistant como panel de control general para controlar tus dispositivos inteligentes.
  • Mosquitto como broker MQTT para recibir los datos de los sensores de tu casa.
  • InfluxDB como base de datos para almacenar los datos MQTT.
  • Grafana para crear cuadros de mando de series temporales basados en los datos de la base de datos InfluxDB.

Introducción a la configuración de Docker de Home Assistant de Raspberry Pi

En mi opinión, instalar Home Assistant a través de Docker en la Raspberry Pi es la forma más avanzada de usar Home Assistant porque este método de instalación le permite ejecutar más aplicaciones o casos de uso en incluso Pi.

Antes de comenzar la instalación, echemos un vistazo a las ventajas y desventajas de este método de instalación en comparación con la instalación de Home Assistant a través de HASS.io.

VentajasDesventajas
Puedes ejecutar otras múltiples aplicaciones y casos de uso en otros contenedores docker.No hay complementos disponibles como Graphana o InfluxDB. Pero instalaremos estos complementos en contenedores docker separados.
Si algo se rompe y hay que reinstalar Home Assistant entonces la configuración de un nuevo contenedor docker es más rápida en comparación con una reinstalación del SO.

En nuestro caso, queremos ejecutar Home Assistant en una Raspberry Pi en un contenedor Docker. En este tutorial, supongo que ya ha instalado Raspbian Buster en su Pi. Si no está familiarizado con la configuración inicial de Raspberry, este tutorial de configuración de Raspberry Pi sin cabeza es para usted. Recomiendo instalar Raspbian Buster Lite porque no necesitamos la GUI solo la línea de comando. La siguiente parte del tutorial espera que Raspbian esté instalado, la conexión a Internet y SSH habilitados.

Para este tutorial, necesita una Raspberry Pi y la siguiente tabla le brinda una descripción general de las últimas versiones de Raspberry Pi en versión independiente y también en versión de kit con hardware adicional recomendado.

Kit Raspberry Pi 4 modelo BAmazonAliExpress
Raspberry Pi 4 Modelo BAmazonAliExpress
Kit Raspberry Pi 3 B +AmazonAliExpress
Raspberry Pi 3 B+AmazonAliExpress

Cómo usar un Docker en Rasperry Pi

Este artículo no es una guía de la ventana acoplable, ya que hay algunos artículos excelentes sobre la ventana acoplable en general. Pero voy a resumir los conceptos básicos de la ventana acoplable para que pueda entender por qué la usamos.

Docker es una colección de productos de plataforma como servicio (PaaS) que aíslan las aplicaciones a través de la virtualización de contenedores. Un contenedor es una imagen aislada del software, las bibliotecas, los archivos de configuración y cualquier otro dato utilizado para ejecutar la aplicación del contenedor. Los contenedores pueden comunicarse entre sí a través de canales predefinidos y también con el sistema operativo principal para cargar una configuración predefinida, por ejemplo. La principal ventaja de la ventana acoplable sobre las máquinas virtuales es que todos los contenedores se ejecutan en un único núcleo de sistema operativo. Esto asegura que todos los recursos se utilicen de la mejor manera posible.

En nuestro caso de uso doméstico inteligente, estamos utilizando Raspberry Pi como la infraestructura de Docker con Raspbian Buster Light como sistema operativo host. Entre el sistema operativo y los contenedores en los que se ejecutan las aplicaciones, Docker es responsable de crear, eliminar y administrar imágenes y contenedores.

Dado que la Raspberry Pi se basa en la arquitectura ARM, no todas las imágenes de Docker funcionarán. Encuentra todas las imágenes en el Sitio web de Docker Hub que permite filtrar todas las imágenes según la arquitectura. Para Raspberry Pi, solo elegimos la arquitectura ARM y no ARM 64 porque Raspbian Buster está compilado como un sistema operativo de 32 bits y no es capaz de ejecutar aplicaciones de 64 bits.

Arquitectura ARM Docker Hub

Antes de que podamos comenzar a cargar imágenes y compilar contenedores, debemos instalar Docker. Inicie sesión en su Raspberry Pi a través de SSH o abra la interfaz de línea de comandos. La instalación de Docker se realiza en dos pasos:

  1. Descarga el script de instalación de Docker
  2. Ejecute el script de instalación
Instalación de Docker

En la imagen podemos ver que está instalada la versión 19.03.8 de Docker. Ahora tenemos nuestra base para instalar las aplicaciones:

  • Asistente de hogar
  • Broker Mosquitto MQTT
  • InfluxDB
  • Grafana

Antes de comenzar, encontrará las funciones de línea de comandos más utilizadas relacionadas con Docker en la siguiente tabla.

DescripciónFunción de línea de comandos
Instalar la imagen Xdocker pull
Ver todas las imágenes Docker con ID de imagendocker image ls
Borrar imagen Dockerdocker image rm
Crear un contenedor Dockerdocker run
Iniciar un contenedordocker start
Detener un contenedordetención del estibador
Ver todos los contenedores Dockerdocker container ls -a
Borrar un contenedor Dockerdocker container rm

Cómo instalar Home Assistant a través de Docker en Rasperry Pi

Desde el sitio web oficial de Home Assistant obtenemos el orden de instalación completo

docker run  --init -d  --name="home-assistant" -e "TZ=America/New_York" -v /home/pi/homeassistant:/config  --net=host homeassistant/raspberrypi3-homeassistant:stable
Asistente de bienvenida de Docker

Con el comando, verá que su contenedor de Docker Home Assistant se está ejecutando con el nombre de contenedor home-assistant.

docker container ls -a
Contenedor Docker Home Assistant

Ahora podemos abrir Home Assistant en el navegador en el puerto 8123 de la Raspberry Pi. En mi caso, la Raspberry Pi tiene la IP 102 y ejecuto Home Assistant en el navegador iniciando la url: 192.168.0.102:8123. Ahora verá el formulario de registro de Home Assistant donde puede establecer su nombre, nombre de usuario y contraseña.

Registro de asistente de hogar

Para obtener información basada en la ubicación, debe seleccionar la ubicación de su ranura en el siguiente mapa. Con el uso de su dirección IP, su ubicación se adivina cuando hace clic en el botón de detección. A continuación, puede redirigir el mapa a su ubicación exacta. La zona horaria y el sistema de unidades se establecen automáticamente en su ubicación, pero si prefiere otra configuración, puede cambiarlos.

Ubicación de la configuración del asistente doméstico

En la página siguiente y también en la última página de la configuración de Home Assistant, puede elegir diferentes dispositivos inteligentes en su hogar. Por ejemplo, si tiene enchufes inteligentes, bombillas inteligentes o un televisor inteligente encendido, debería verlos en la página de configuración actual, como si Home Assistant reconociera automáticamente mi televisor Samsung.

Dispositivos de configuración del asistente doméstico

Pero también puede agregar dispositivos inteligentes manualmente haciendo clic en el botón más y agregar los dispositivos por su dirección IP en su red local.

Ahora puede completar la configuración de Home Assistant y verá el panel de Home Assistant. Si está familiarizado con la instalación de HASS.io de Home Assistant, es posible que le falte algo, ya que la instalación de HASS.io como sistema operativo para Raspberry Pi viene con un botón Supervisor en la barra lateral izquierda.

Asistente doméstico HASSio vs Docker

Esto le permite crear instantáneas del sistema para guardar configuraciones y reiniciar o detener Home Assistant. En nuestro caso, debido a que estamos ejecutando Home Assistant en un contenedor Docker, podemos guardar las configuraciones y reiniciar o detener Home Assistant a través de la aplicación Docker.

Uno de los principales beneficios de instalar HASS.io es la tienda de complementos incorporada para instalar aplicaciones compatibles. En nuestro caso, también queremos instalar Mosquitto MQTT boroker, InfluxDB y Grafana, pero necesitamos crear un nuevo contenedor docker para cada una de estas aplicaciones.

Cómo instalar Mosquitto a través de Docker en Rasperry Pi

Para recibir datos MQTT en Home Assistant, necesitamos instalar un agente MQTT. En este tutorial utilizo el broker MQTT Mosquitto el utilizado con más frecuencia. Para encontrar la imagen de Mosquitto Docker, buscamos la aplicación en el Sitio web de Docker Hub.

En el lado derecho vemos que la imagen se puede dibujar mediante el comando.

docker pull eclipse-mosquitto
Docker Mosquitto

Antes de que podamos iniciar el contenedor, queremos compartir información útil entre el sistema host y el contenedor Docker. Esto es importante porque queremos definir una configuración individual para Mosquitto que debe cargarse al crear el contenedor Mosquitto.

Primero creamos las siguientes carpetas en una carpeta mosquitto en su directorio predeterminado: config, data y log.

Árbol Mosquitto

En la carpeta de configuración creamos un archivo llamado mosquitto.conf con el siguiente comando.

nano config/mosquitto.conf

El archivo de configuración tiene el siguiente contexto.

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /mosquitto/data/

log_dest file /mosquitto/log/mosquitto.log
log_dest stdout

password_file /mosquitto/config/mosquitto.passwd
allow_anonymous false
Configurando Mosquitto

Ahora debemos asegurarnos de que Mosquitto, como contenedor de Docker, tenga permiso para acceder a estas carpetas. Esto se hace mediante el comando chown, que significa cambio de propietario. Usamos el siguiente comando para que Mosquitto acceda a la carpeta mosquitto a través del puerto 1883.

chown -R 1883:1883 ~/mosquitto

Ahora podemos crear e iniciar el contenedor Mosquitto con el siguiente comando.

docker run -it -p 1883:1883 --name mosquitto -v ~/mosquitoconfig -v ~/mosquitto/data:/mosquitto/data -v ~/mosquitto/log:/mosquitto/log eclipse-mosquitto
  • -it: crea un shell bash interactivo en el contenedor.
  • -p: define los puertos publicados en el contenedor. Asociamos el puerto 1883 del host con el puerto 1883 del contenedor.
  • –Nombre: asigne al contenedor un nombre personalizado para detener y reiniciar el contenedor por su nombre.
  • -v: vincula los volúmenes de montaje entre el sistema host y el contenedor. El lado izquierdo de “:” define la ruta al sistema host y el lado derecho la ruta en el contenedor.
  • -d (no usado): lanza el contenedor en segundo plano para que la consola quede libre.

Por el momento podemos ejecutar el contenedor Mosquitto pero no hemos establecido ningún nombre de usuario o contraseña. Por lo tanto, debemos ir a la línea de comando del contenedor y necesitamos el ID del contenedor:

  • Busque el ID del contenedor en mi caso 5e2ec35d975b: sudo docker container ls -a
  • Acceda al casco del contenedor: docker exec -it 5e2ec35d975b sh

Con el siguiente comando, creamos un nuevo usuario (en mi caso: cdavid) y establecemos una contraseña que tenemos que confirmar por segunda vez.

Contraseña de Mosquitto

Si ahora miramos la estructura de la carpeta, hay un nuevo dato llamado mosquitto.passwd en la carpeta de configuración que almacena el nombre de usuario y la contraseña.

Contraseña del árbol Mosquitto

La contraseña para estos datos está encriptada por razones de seguridad, como puede ver en la siguiente imagen.

Archivo de contraseña de Mosquitto

Esta fue la parte más difícil de este tutorial y también me costó tiempo y también mucha investigación y fallas. Una vez que el broker MQTT está configurado con un nombre de usuario y contraseña, continuamos nuestro trabajo configurando un contenedor para InfluxDB y Grafana.

Cómo configurar InfluxDB a través de Docker en Raspberry Pi

Cuando buscamos en Docker Hub para InfluxDB encontramos la imagen oficial que podemos extraer:

docker pull influxdb

Ahora también queremos compartir los volúmenes entre el host y el contenedor para InfluxDB. Por lo tanto, creamos una nueva carpeta llamada influxdb. Para iniciar InfluxDB, solo necesita llamar a:

docker run --name influxdb -p 8086:8086 -v influxdb:/var/lib/influxdb influxdb

Cómo configurar Grafana a través de Docker en Raspberry Pi

La imagen de Grafana se encuentra en Docker Hub con el nombre grafana / grafana y puede extraer la imagen con el siguiente comando:

docker pull grafana/grafana

Para iniciar Grafana, use el siguiente comando:

docker run -d --name=grafana -p 3000:3000 grafana/grafana

Una vez que el contenedor se está ejecutando, puede acceder a la aplicación Grafana en el puerto 3000 con su navegador, en mi caso: 192.168.0.102:3000. Al final de este tutorial, debe seguir los contenedores Docker en ejecución.

Contenedor Docker todo

En este tutorial, quiero centrarme en configurar todos los componentes del hogar inteligente como Home Assistant, Mosquitto, InfluxDB y Grafana como contenedores Docker. Si desea enviar los datos del bróker MQTT a InfluxDB y ver la fecha en Grafana, visite mi tutorial de InfluxDB y Grafana, donde le mostré paso a paso cómo operar el embudo de datos. En este tutorial, verá que también necesita una aplicación Python que funcione como un puente MQTT. Este puente MQTT está suscrito a todos los temas MQTT y envía datos a la base de datos InfluxDB.

Este artículo es uno de una serie de 5 artículos actualmente sobre el tema Home Assistant. La siguiente imagen muestra cómo se relacionan los artículos entre sí.


Deja un comentario