Instalación de Home Assistant en Raspberry Pi (Parte 2)
Chema
En esta segunda parte, vamos a iniciar todos los contenedores que ya tenemos descargados y a configurarlos para integrarlos con Home Assistant
9- Portainer
Comenzaremos iniciando y configurando portainer, ya que va a ser nuestro gestor gráfico del resto de contenedores y a través de los log's de portainer podremos ver si tenemos algún problema con ellos.
Para iniciarlo simplemente escribimos:
~/iot $ docker-compose up -d portainer
En unos segundos, deberías poder acceder a Portainer localmente desde la dirección http://192.168.1.30:9000 (La IP será la que hayas configurado como estática en tu RPI).
La primera vez que accedas te pedirá un nombre de usuario y una contraseña.

Tras acceder a Portainer, debemos seleccionar la opción local en el asistente.

Dentro del Dashboard, veremos nuestro Stack con 1 contenedor activo y 11 imágenes descargadas.

Si entramos en Containers, veremos el contenedor de Portainer que acabamos de iniciar.

10- InfluxDB
La mayoría de las imágenes crean automáticamente una configuración si no existe ninguna (por ejemplo, Home Assistant), pero InfluxDB necesita un poco de ayuda.
Lo siguiente ejecuta la imagen "influxdb" como un nuevo contenedor sin nombre, pasa el comando "influxd config", vuelca la salida a nuestro nuevo archivo de configuración y luego elimina el contenedor debido a "--rm".
~/iot $ sudo docker run --rm influxdb:1.8.9 influxd config > /home/pi/iot/influxdb/influxdb.conf
Una vez creado el archivo de configuración, iniciamos influxdb con:
~/iot $ docker-compose up -d influxdb
Si vamos a los contenedores en Portainer, veremos que ya tenemos funcionando el de InfluxDB, ahora necesitamos crear la base de datos que utilizaremos luego para Home Assistant, para ello entraremos en la consola de influx y teclearemos lo siguiente (nota: debes escribir solo lo que está en negrita):
~/iot $ docker exec -it influxdb /bin/bash
root@719772e93c28:/# influx
Connected to http://localhost:8086 version 1.8.9
InfluxDB shell version: 1.8.9
> CREATE DATABASE "home_assistant"
Para comprobar que se ha creado correctamente, sin salir de la consola de influxDB escribiremos:
> SHOW DATABASES
Y si todo ha ido bien veremos algo asi:

Para salir de la consola tecleamos exit (2 veces) y volveremos donde estábamos antes.
11 - Mosquitto
Se podría decir que MQTT es fundamental en todo sistema domótico, nos permitirá comunicarnos e interactuar con multitud de dispositivos inalámbricos como ESPHome, Tasmota, Zigbee2Mqtt, etc. a través de Home Assistant.
Antes de iniciar mosquitto, vamos a crear un nuevo archivo de configuración con el editor nano:
~/iot $ sudo nano /home/pi/iot/mosquitto/config/mosquitto.conf
Pegaremos en ese archivo lo siguiente:
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
allow_anonymous false
password_file /mosquitto/config/passwd
port 1883
Guardamos y cerramos el archivo.
Ahora crearemos un usuario y su correspondiente contraseña en base a la configuración que hemos creado anteriormente, en el ejemplo pongo como usuario mqtt_user, cámbialo a lo que tu quieras:
~/iot $ docker run --rm -ti -v /home/pi/iot/mosquitto/config:/mosquitto/config eclipse-mosquitto mosquitto_passwd -c /mosquitto/config/passwd mqtt_user
Te preguntará 2 veces la contraseña a asignar a ese usuario y la almacenará en el archivo mosquitto/config/passwd.
Con la configuración hecha, iniciamos mosquitto con:
~/iot $ docker-compose up -d mosquitto
Mosquitto no tiene interfaz gráfica, para comprobar si funciona, puedes usar un programa como MQTT Explorer, descárgalo, y conecta a la IP de tu raspberry con el usuario y contraseña creados, si todo ha salido bien podrás ver una pantalla similar a esta:

12 - MariaDB Y phpMyAdmin
MariaDB es un sistema de gestión de bases de datos relacionales, lo usaremos para sustituir a la base de datos por defecto de Home Assistant por ser mas robusta y rápida que la que lleva de serie.
Iniciaremos MariaDB por primera vez con:
~/iot $ docker-compose up -d mariadb
MariaDB no tiene entorno gráfico, por lo que para ver si esta funcionando puedes hacerlo desde portainer, si actualizas la lista de contenedores deberías tener algo así:

Para poder gestionar las bases de datos de MariaDB, usaremos phpMyAdmin, que podemos iniciar con:
~/iot $ docker-compose up -d phpmyadmin
En unos segundos, deberías poder acceder a phpMyAdmin localmente desde http://192.168.1.30:90/phpmyadmin/ (normalmente phpMyAdmin se ejecuta en el puerto 80, pero lo hemos cambiado al 90 en la configuración del docker-compose para no interferir con Nginx-Proxy-Manager.

Entraremos en el panel de control con root como usuario y la contraseña que pusiste en MYSQL_ROOT_PASSWORD del archivo docker-compose.yaml, una vez dentro pincha en Bases de datos y en la casilla Crear base de datos escribe home_assistant, pulsa Crear y tendremos lista la base de datos que usaremos en Home Assistant.
Podríamos configurar un usuario y contraseña específicos para ella, pero lo dejaremos por ahora para no complicar las cosas.

13- Configurator
Configurator es un addon de Home Assistant que nos permite editar los archivos de configuración desde la propia interfaz de HA. Puede instalarse fácilmente con la versión Supervisor de HA, pero como nosotros estamos instalando Home Assistant Core en docker, añadiremos el addon como un contenedor mas.
Antes de iniciarlo crearemos dentro de la carpeta /iot/configurator/ un archivo de configuración para el addon, para ello introducimos el siguiente comando:
~/iot $ sudo nano /home/pi/iot/configurator/settings.conf
Pegaremos en el lo siguiente:
{
"LISTENIP": "0.0.0.0",
"PORT": 3218,
"GIT": false,
"BASEPATH": "/hass-config",
"ENFORCE_BASEPATH": true,
"SSL_CERTIFICATE": null,
"SSL_KEY": null,
"IGNORE_SSL": false,
"HASS_API": "http://127.0.0.1:8123/api/",
"HASS_WS_API": null,
"HASS_API_PASSWORD": null,
"USERNAME": null,
"PASSWORD": null,
"ALLOWED_NETWORKS": [],
"ALLOWED_DOMAINS": [],
"BANNED_IPS": [],
"BANLIMIT": 0,
"IGNORE_PATTERN": ["*.db*"],
"DIRSFIRST": true,
"HIDEHIDDEN": true,
"SESAME": null,
"SESAME_TOTP_SECRET": null,
"VERIFY_HOSTNAME": null,
"ENV_PREFIX": "HC_",
"NOTIFY_SERVICE": "persistent_notification.create"
}
Guardamos, cerramos e iniciamos el addon con:
~/iot $ docker-compose up -d hass-configurator
El addon, además de permitirnos usarlo desde la interfaz de HA, también se puede acceder desde http://192.168.1.30:3218 (recuerda que la IP debe ser la que has asignado como fija en la raspberry), pero al no tener instalado todavía Home Assistant no tenemos nada en su explorador de archivos integrado.

14- Home Assistant
Teniendo preparado lo básico para hacer funcionar Home Assistant, lo iniciaremos como hemos hecho anteriormente con otros contenedores:
~/iot $ docker-compose up -d homeassistant
En unos segundos podremos acceder a su interfaz desde http://192.168.1.30:8123
Si tienes una instalación anterior de Home Assistant, puedes recuperarla copiando sus archivos de configuración a la carpeta /home/pi/iot/homeassistant/ que hemos creado anteriormente, en caso contrario HA te pedirá un nombre de usuario y contraseña para identificarte en el sistema, en este tutorial haremos una instalación limpia.

El asistente de inicio te guiará para configurar tu ubicación y terminarás con una pantalla como la siguiente:

Ahora integraremos en Home Assistant la base de datos de MariaDB, la de InfluxDB, el addon Configurator y Mosquitto, para ello tendremos que editar el archivo configuration.yaml de HA que puedes localizar desde tu pc en tu red local gracias a tener instalado el servidor samba. Recomiendo editar este archivo con un programa como Notepad++, podríamos hacerlo también desde la consola de la raspberry, pero así es mas sencillo y aprendemos algo nuevo.

Como vemos en la siguiente imagen, nuestro configuration.yaml no tiene mucho contenido, ya que está usando la configuración por defecto debido a default_config: así que hemos de añadir algunas configuraciones adicionales.

Si nunca has trabajado con archivos YAML, te recomiendo que revises el artículo sobre el tema de HA https://www.home-assistant.io/docs/configuration/yaml/
MariaDB
La db_url debe ser: mysql://user:password@SERVER_IP/DB_NAME?charset=utf8mb4
en nuestro caso vamos a utilizar el usuario root con contraseña root y la base de datos que hemos creado antes con phpMyAdmin que era home_assistant.
También hemos configurado en 15 los días que Home Assistant va a guardar los valores en la BD, ya que tendremos otra base de datos de InfluxDB para guardarlos durante mas tiempo, el valor puedes modificarlo a tu gusto.
# Base de datos MariaDB
# - https://www.home-assistant.io/integrations/recorder/
recorder:
db_url: mysql://root:root@127.0.0.1/home_assistant?charset=utf8mb4
purge_keep_days: 15
auto_purge: true
InfluxDB
La integración de InfluxDB puede ser tan simple como lo siguiente o tan compleja como nosotros necesitemos, ya que podemos configurar que valores van a incluirse (o no) en la base de datos, así como modificar las métricas por defecto, visita https://www.home-assistant.io/integrations/influxdb para mas información.
# Base de datos InfluxDB
# - https://www.home-assistant.io/integrations/influxdb
influxdb:
host: 127.0.0.1
port: 8086
database: home_assistant
default_measurement: state
Configurator
Para añadir el addon Configurator a Home Assistant, vamos a usar la integración panel_iframe, esta integración lo que hace es agregar en nuestro menú izquierdo un enlace que nos abrirá la url indicada dentro de la interfaz de HA.
# Panel iframe
# - https://www.home-assistant.io/integrations/panel_iframe/
panel_iframe:
configurator:
title: Editor
icon: mdi:wrench
url: http://192.168.1.30:3218
require_admin: true
Con lo anterior añadido, nuestro configuration.yaml tendrá este aspecto:

Solo nos falta guardarlo y reiniciar Home Assistant desde Configuración -> Controles del servidor.

Si todo ha ido bien, tendremos en el menú izquierdo un nuevo icono con el nombre Editor y ningún error en el registro de HA.

Ahora, en el Editor podremos ver que tenemos acceso a todos los archivos de configuración de Home Assistant desde su propia interfaz.

Podemos comprobar que la base de datos de MariaDB se ha integrado correctamente desde phpMyAdmin y se han creado las tablas necesarias.

Necesitamos integrar Mosquitto en HA, podríamos haberlo hecho antes en el configuration.yaml, pero para aprender algo mas lo haremos desde la propia interfaz añadiendo la integración MQTT.
Vamos a Configuración -> Integraciones y Añadir integración

Buscamos la integración MQTT y la añadimos escribiendo la IP de tu raspberry, el puerto, el usuario que hemos creado anteriormente, su contraseña y pulsamos en ENVIAR.

Si abrimos el programa MQTT Explorer que hemos instalado anteriormente, podremos ver que Home Assistant ha enviado un mensaje con el status = online

Nos faltaría comprobar que los datos también fluyen hacia InfluxDB, lo veremos en el siguiente paso.
15- Chronograf
Chronograf puede hacer muchas cosas, nosotros lo utilizaremos como interfaz gráfica de InfluxDB, nos permitirá gestionar nuestra base de datos sin necesidad de entrar en la consola de InfluxDB.
Para iniciarlo, volvemos a nuestra Raspberry y por SSH introducimos lo siguiente:
~/iot $ docker-compose up -d chronograf
Ahora podemos acceder a Chronograf desde http://192.168.1.30:8888
Si todo ha ido bien, podremos ver desde la pestaña de InfluxDB Admin que tenemos acceso a la base de datos home_assistant que hemos creado anteriormente.

Y desde la pestaña Explore, vemos que tenemos ya algunos datos registrados en ella.

16- Grafana
Home Assistant proporciona una interfaz gráfica un tanto escasa, por ello para tener estadísticas de datos y gráficas avanzadas usaremos Grafana.
Grafana necesita unos parámetros de configuración adicionales para permitir que se muestren los paneles en Home Assistant, crearemos el archivo con:
~/iot $ sudo nano /home/pi/iot/grafana/grafana.ini
Pegaremos en el lo siguiente y guardaremos el archivo:
[security]
allow_embedding = true
[auth.anonymous]
enabled = true
Y arrancaremos Grafana con:
~/iot $ docker-compose up -d grafana
Ahora deberías poder acceder a Grafana localmente desde http://192.168.1.30:4000 si todo ha ido bien, verás una pantalla como la inferior, el nombre de usuario y contraseña por defecto son admin y admin, deberías cambiarlos en el primer acceso.

Una vez dentro, conectaremos Grafana a la base de datos de InfluxDB, para ello vamos a Configuration -> Data sources -> Add data source

Dentro de las opciones que nos ofrece de bases de datos, seleccionamos InfluxDB.

Configuramos el acceso a InfluxDB como se ve en la imagen y pulsamos Save & test, si todo es correcto nos aparecerá un mensaje diciendo que el origen de datos es válido.

Desde el menú Explore podemos hacer nuestra primera consulta a la base de datos de InfluxDB y comprobar que tenemos acceso a los mismos.

17- Node-RED
Node-RED nos permite, mediante programación visual, modificar a nuestro antojo los datos a los que tenemos acceso en nuestro sistema, podremos usarlos para por ejemplo, separar datos y enviarlos a InfluxDB como nos interese, incluso podremos realizar automatizaciones complejas que serían complicadas de realizar en Home Assistant.
Para iniciarlo, lo haremos como en ocasiones anteriores:
~/iot $ docker-compose up -d nodered
Para acceder al panel de control de Node-RED lo haremos desde http://192.168.1.30:1880
Si no se ha roto nada, podrás ver la siguiente pantalla en la que el programa te guiará en la primera visita por sus diferentes menús y opciones.

18- Nginx-Proxy-Manager
Con Nginx-Proxy-Manager podremos configurar un acceso externo seguro a Home Assistant, así como gestionar los diferentes certificados SSL de nuestro sistema.
Lo iniciaremos simplemente con:
~/iot $ docker-compose up -d nginx
Nginx-Proxy-Manager estará ahora accesible en http://192.168.1.30:81, en el primer acceso te predirá el usuario y contraseña por defecto que son admin@example.com y changeme, tendrás que cambiarlos a los de tu elección.

19- Autorun
En este punto ya tenemos levantados y funcionando todos nuestros servicios, pero si ahora reinicias la Raspberry, podría ocurrir que nuestros contenedores no se inicien automáticamente, para saberlo lo mejor es comprobarlo reiniciando la Raspberry.
~/iot $ sudo reboot
Espera un poquito a que el sistema se reinicie, y comprueba si puedes acceder a todo lo que hemos instalado, si es así, simplemente realiza un ultimo update && upgrade y ya tienes tu sistema domótico básico listo, ahora te tocará surfear un poco para aprender a usar y configurar todo el sistema, en internet hay muchos tutoriales sobre ello.
Para comprobar si esta todo en orden, volveremos a conectar a la Raspberry por SSH y comprobaremos el estado de los contenedores con:
~ $ docker ps
Si todo esta correcto, deberías ver algo como la imagen inferior y poder acceder a todo

En caso contrario, crearemos un servicio para que nuestro docker-compose se inicie automáticamente al arrancar la Raspberry, para eso vamos a crear el archivo docker-compose-opt.service:
~$ sudo nano /etc/systemd/system/docker-compose-opt.service
Y pegamos el siguiente contenido:
# /etc/systemd/system/docker-compose-opt.service
[Unit]
Description=Docker Compose Opt Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/pi/iot
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose stop
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
Guardamos, cerramos y habilitamos el servicio con:
~ $ sudo systemctl enable docker-compose-opt
Para comprobar si funciona, detendremos nuestros contenedores y reiniciaremos con lo siguiente:
~$ cd iot
~/iot $ docker-compose-down
~/iot $ sudo reboot
Una vez reiniciada, volvemos a comprobar con:
~$ docker ps
20 - Actualizar servicios
No podíamos olvidarnos de esto, cada vez que haya una nueva versión de Home Assistant u otro programa, necesitaremos actualizarlos.
Se podría hacer por consola, pero gracias a Portainer lo realizaremos de una forma mucho mas sencilla.
En el transcurso de la realización de este tutorial, Home Assistant ha sacado una nueva versión, podemos verlo porque el sensor Updater integrado en HA nos muestra que tenemos una actualización disponible.

También podemos ver que versión tenemos instalada desde Configuración -> Información, donde nos muestra que tenemos la 2021.11.1, sin embargo en la página principal de Home Assistant nos dice que la última versión es la 2021.11.2

Para actualizar, entramos en Portainer -> Containers y pinchamos en homeassistant para abrir la ventana de detalles del contendedor y en ella pinchamos en Recreate

Nos mostrará una ventana en la que activaremos la opción Pull latest image y le damos a Recreate.

En un ratito tendremos de nuevo Home Assistant actualizado a la última versión.

Para terminar, si entramos en Images de Portainer, veremos que tenemos una marcada como Unused, es la anterior imagen de Home Assistant que hemos actualizado a la última versión, y que si la seleccionamos podremos eliminar fácilmente pulsando en Remove.

Y eso es todo, ahora deberías tener todo activo y funcionando, recuerda que si tienes algún problema me puedes contactar en Telegram para intentar solucionarlo.