Elecrow ESP32-P4: integración con HA Container en una Raspberry Pi 4
Si hemos decidido utilizar la pantalla de Elecrow como monitor adicional de Home Assistant, el procedimiento es muy sencillo: basta con instalar el complemento correspondiente desde HA, tal y como se explica en su manual de usuario.
Sin embargo, este procedimiento solo es válido para quienes utilizan Home Assistant OS (HAOS), que incluye Supervisor y permite instalar complementos (add-ons).
¿Y qué ocurre con los que usamos Home Assistant Container? En esta modalidad no disponemos de Supervisor ni de la tienda de complementos, por lo que no podemos seguir directamente las instrucciones (ni la ayuda) de Elecrow. La solución pasa por ejecutar el servicio necesario en un contenedor Docker independiente. Precisamente eso es lo que hemos conseguido en PCDEMANO: adaptar el complemento original para que funcione también con instalaciones basadas en Docker, sin necesidad de cambiar a HAOS manteniendo intactos los servicios que ya funcionan en la Raspberry Pi.
Entorno de trabajo
La instalación se ha realizado sobre el siguiente entorno:
| Elemento | Configuración |
|---|---|
| Hardware servidor | Raspberry Pi 4 8GB de RAM |
| Arquitectura | ARM64 / aarch64 |
| Sistema | Raspberry Pi OS (Debian 13.3 Trixie) |
| Contenedores | Docker |
| Docker Compose | 5.0.1 |
| Home Assistant | Home Assistant Container |
| Imagen HA | linuxserver/homeassistant |
| Directorio de Docker | /opt/mydockers |
| Pantalla | Elecrow ESP32-P4 Advance Panel |
| Tamaño de pantalla | 10,1 pulgadas |
| Resolución | 1024 × 600 píxeles |
| Servidor Elecrow | grovety/crow-ws-server:1.2.5 |
Home Assistant se ejecuta en el contenedor homeassistant, utilizando el modo de red host y escuchando en el puerto 8123.
Arquitectura de la solución
El proyecto utiliza el software disponible en el repositorio:
https://github.com/fintros/crow-ha
El servidor se ejecuta independientemente de Home Assistant y establece la comunicación con el panel ESP32-P4.
La arquitectura puede resumirse así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ELECROW ESP32-P4 Pantalla 10,1" | | Wi-Fi / WebSocket seguro (WSS) | Puerto 3000 | v RASPBERRY PI 4 | Docker: crow-ha | +------+------+ | | v v Bridge Chromium | + Xvfb | | +------+------+ | v HOME ASSISTANT 127.0.0.1:8123 |
El panel no ejecuta directamente Home Assistant ni necesita disponer de un navegador web completo.
El contenedor crow-ha ejecuta Chromium en un entorno virtual Xvfb. El navegador abre la interfaz web de Home Assistant, mientras que el bridge se encarga de capturar la pantalla, transmitir las imágenes al panel y recibir los eventos táctiles.
La comunicación utiliza WebSocket seguro (WSS), con certificados TLS generados y conservados en el almacenamiento persistente del contenedor.
Preparación del servidor
En primer lugar, clonamos el repositorio en el directorio de trabajo de la RPi:
1 2 | cd /opt/mydockers git clone https://github.com/fintros/crow-ha.git crow-ha-source |
El repositorio contiene la estructura original del complemento de Home Assistant, incluyendo el código del servidor, los scripts de arranque y los archivos de configuración.
Como hemos comentado nuestra instalación no dispone de Supervisor por lo que no podemos utilizar el complemento directamente. En su lugar, ejecutamos la imagen Docker del servidor.
Para ello, creamos un directorio independiente:
1 2 | mkdir -p /opt/mydockers/crow-ha cd /opt/mydockers/crow-ha |
Configuración de Docker Compose
Creamos el archivo compose.yaml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | services: crow-ha: image: grovety/crow-ws-server:1.2.5 container_name: crow-ha network_mode: host restart: unless-stopped environment: URL_BASE: "http://127.0.0.1:8123" SCREEN_COUNT: "1" PANEL_AUTH: "on" AUDIO_ENABLED: "1" volumes: - ./data:/data - ./audio-service/alarma.wav:/tmp/alarma.wav:ro |
Hay varios detalles importantes en esta configuración.
network_mode: host
Es fundamental para nuestra instalación. Al utilizar la red del anfitrión, el contenedor puede acceder a Home Assistant mediante 127.0.0.1:8123, ya que ambos servicios comparten el espacio de red de la Raspberry Pi.
URL_BASE
Indica al servidor dónde encontrar Home Assistant. No debemos utilizar el nombre de un servicio Docker ni una dirección IP diferente, puesto que estamos utilizando el modo de red host.
SCREEN_COUNT
Establece el número de pantallas virtuales que gestionará el servidor. En nuestro caso, una.
PANEL_AUTH
Mantiene habilitado el mecanismo de autenticación del panel.
AUDIO_ENABLED
Habilita las funciones de audio del servidor para poder reproducir «alarmas» directamente en la pantalla de ELECROW.
Persistencia de datos
El volumen ./data:/data es especialmente importante. Conserva los certificados TLS, las sesiones y los tokens de autenticación entre reinicios y recreaciones del contenedor.
No debemos borrar este directorio una vez que la instalación está funcionando.
Arranque y comprobación
Desde el directorio del proyecto ejecutamos:
1 2 3 | cd /opt/mydockers/crow-ha docker compose config docker compose up -d |
Comprobamos que el contenedor está funcionando:
1 | docker ps --filter name=crow-ha |
Para consultar los registros:
1 | docker logs crow-ha |
El servidor escucha por defecto en el puerto TCP 3000.
Una vez conectado el panel, el servidor autentica el dispositivo y establece la sesión correspondiente.
La instalación quedó funcionando correctamente, conectándose primero a la WiFi y luego mostrando Home Assistant en la pantalla Elecrow y permitiendo la interacción táctil.
Autenticación y seguridad
El servidor utiliza TLS para proteger la comunicación WebSocket entre el panel y la Raspberry Pi.
Los certificados se conservan en:
1 | /opt/mydockers/crow-ha/data/tls |
Las sesiones de Home Assistant se guardan en:
1 | /opt/mydockers/crow-ha/data/tokens/ |
Los archivos de sesión contienen tokens de acceso y renovación de Home Assistant. Por tanto, deben protegerse adecuadamente y no compartirse públicamente.
Si te preocupa la Seguridad, también es recomendable utilizar una cuenta de Home Assistant específica para el panel, con los permisos estrictamente necesarios.
68
Como era de esperar, después de dejar nuestro kit de impresión 3D «olvidado» en la buhardilla durante bastante tiempo, hemos descubierto que nos falta alguna pieza y que, por mucho que lo hemos intentado, no conseguimos montar la carcasa que teníamos prevista.
Así que, para salir del paso, hemos tenido que buscar una solución alternativa que permita «descansar» cómodamente a nuestra pantalla ELECROW. De momento, no hemos encontrado nada mejor que un sencillo atril que teníamos por ahí, y que está cumpliendo dignamente su cometido. No es la solución más elegante ni la definitiva, pero al menos nuestra pantalla ya tiene dónde apoyarse mientras seguimos buscando las piezas perdidas… ¡o una alternativa mejor!