Pantalla Táctil LCD de Raspberry Pi 4 con Home Assistant
Instalar y Configurar el Tablero de la Interfaz Web de Home Assistant en una Pantalla Táctil LCD de Raspberry Pi usando Chromium en Modo Kiosko con Openbox y Xserver
Hoy vamos a conectar y configurar una pantalla táctil LCD en una Raspberry Pi con nuestro servidor Home Assistant en funcionamiento. La pantalla de Home Assistant con pantalla táctil se utilizará para controlar dispositivos inteligentes en el hogar.
Suponemos que tienes instalado el sistema operativo Raspbian Lite, junto con una instancia de Home Assistant ejecutándose dentro de un contenedor Docker, como en la publicación anterior "ESPHome Home Assistant en Docker Containers en Raspberry Pi".
Esto nos permitirá tener un servidor Home Assistant y una interfaz de control en un solo dispositivo: la Raspberry Pi.
Dado que el sistema operativo Raspbian Lite no tiene ninguna interfaz gráfica, tampoco tiene las bibliotecas necesarias para mostrar nada en la pantalla. Pero no te preocupes, porque iremos paso a paso para hacer que nuestra Raspberry y la interfaz de usuario de Home Assistant funcionen con la pantalla táctil LCD.
Además, la razón por la que elegimos el sistema operativo Raspbian Lite anteriormente, es para mantener nuestro sistema ligero. Continuaremos con este enfoque y, en lugar de ejecutar el entorno de escritorio, ejecutaremos un navegador Chromium en modo kiosko que abrirá automáticamente la interfaz web de Home Assistant, pero hablaremos más sobre eso más adelante.
Instalación de los controladores de la pantalla LCD #
Por ahora, si conectas la pantalla a la Raspberry, probablemente la retroiluminación de la LCD se encenderá, pero la pantalla estará vacía.
Para poder ver algo en la pantalla, primero necesitamos instalar los controladores de la LCD.
Otros tipos de pantallas compatibles se pueden encontrar en el readme del repositorio LCD-show.
Después de conectar la pantalla LCD a tu Raspberry según las instrucciones del fabricante, podemos comenzar la integración.
- SSH en la Raspberry Pi
Como en la publicación anterior, abre una terminal y escribe
ssh rpi@192.168.129.13
Asegúrate de reemplazar la dirección IP con la IP de tu Raspberry
- Instalar git
Primero, necesitamos clonar el repositorio git LCD-show, que tiene los controladores necesarios para la pantalla LCD. Sin embargo, el sistema operativo Raspberry Pi Lite no tiene git. Vamos a configurarlo.
Otra opción sería clonar el repositorio en tu computadora y transferir los archivos usando scp
sudo apt install git
- Clonar el repositorio LCD-show
git clone https://github.com/goodtft/LCD-show.git
chmod -R 755 LCD-show
cd LCD-show/
- Instalar los controladores
Según el tipo de tu pantalla LCD, ejecuta el controlador correspondiente: Estamos utilizando la pantalla LCD de 3.5”, por lo tanto, instalaremos “LCD35-show”
sudo ./LCD35-show
Esto instalará todos los paquetes necesarios para que la pantalla funcione, incluyendo Xserver, por ejemplo, que el sistema operativo Raspberry Pi Lite no tiene, ya que no usa la interfaz gráfica.
Tu computadora perderá la conexión SSH, ya que la Raspberry Pi se reiniciará automáticamente después de una instalación exitosa de LCD-show
- Verificar la pantalla de la Raspberry Pi
Después de que la Raspberry Pi se reinicie, deberías ver la terminal de la Raspberry Pi en la pantalla LCD.
- Eliminar la carpeta LCD-show
Hemos instalado los controladores para nuestra pantalla LCD y ya no necesitaremos los scripts que descargamos anteriormente, por lo tanto, podemos eliminarlos.
sudo rm -rf LCD-show
¡Tenemos la pantalla funcionando! Eso está bien, pero ahora solo vemos una terminal. No es exactamente lo que necesitamos.
Vamos a abrir el navegador Chromium en lugar de la terminal en la pantalla LCD en el siguiente paso.
Ejecución de HASS en Modo Kiosko #
El modo kiosko es un modo de operación restringido que limita un dispositivo o aplicación de software a una función específica, a menudo de un solo propósito, o conjunto de funciones. Impide a los usuarios acceder a funciones o aplicaciones no relacionadas, y se utiliza típicamente para información pública, terminales de autoservicio o tareas dedicadas.
¿Alguna vez has visto, por ejemplo, en una tienda un ordenador que tiene un sitio web con una presentación abierta y has pensado: "Voy a buscar en Google en eso", pero rápidamente te diste cuenta de que no hay barra de direcciones? Eso es un navegador que funciona en modo kiosko.
Otro ejemplo podría ser un cajero automático. Siempre está ejecutando un programa específico en la pantalla, y no querrías que la gente lo cambiara a otra cosa, ¿verdad?.. Bueno, ejecuta la aplicación en modo kiosko.
Hay múltiples opciones para ejecutar aplicaciones en modo kiosko, pero vamos a usar Openbox en este tutorial para el kiosko de pantalla táctil de Raspberry Pi.
- Obtener permisos de root
Como vamos a hacer bastante configuración en los próximos pasos que requieren permisos de root, para evitar escribir sudo cada vez, obtengamos permisos de root. Abre una terminal y escribe:
sudo su
- Instalar Openbox y xinit Para que las aplicaciones funcionen en modo kiosko, utilizaremos Openbox. Y Openbox se ejecutará en el Xserver que se instaló durante la instalación de LCD-show. Para facilitar las cosas, utilizaremos una herramienta llamada "xinit", que ejecutará la aplicación Openbox. Vamos a instalarlos.
apt install openbox xinit
- Configurar xinit (Xserver) para ejecutar Openbox
Ahora que tenemos ambas herramientas necesarias instaladas, necesitamos indicarle a Xserver que ejecute la aplicación Openbox al iniciar. Haremos esto utilizando la herramienta xinit.
Abre la configuración de xinit (xinitrc) para editar:
nano /etc/X11/xinit/xinitrc
Comenta esta línea:
. /etc/X11/xsession
Agrega esta línea:
exec openbox-session
Ahora, cada vez que Xserver se inicie, ejecutará la sesión de Openbox, en lugar de una sesión x predeterminada.
- Instalar Chromium
Para abrir la interfaz web de Home Assistant, necesitamos un navegador. Chromium es un navegador de código abierto de Google, que elegimos por sus capacidades integradas de pantalla táctil. Instala el navegador Chromium ejecutando lo siguiente:
apt install --no-install-recommends chromium-browser
- Editar la configuración de Openbox
Ahora que tenemos nuestra aplicación Openbox configurada y el navegador Chromium instalado, vamos a indicarle a Openbox que ejecute Chromium al iniciar.
Abre el archivo de configuración de inicio automático de Openbox para editar:
nano /etc/xdg/openbox/autostart
Agrega al final del archivo:
chromium-browser --noerrdialogs --disable-infobars --kiosk $KIOSK_URL
Esto se ejecutará cada vez que se abra la aplicación Openbox. Ten en cuenta el flag --kiosk
y la variable $KIOSK_URL
.
- Editar el entorno de Openbox
Hemos utilizado una variable $KIOSK_URL
en el paso anterior, pero nunca la hemos definido.
Edita la configuración del entorno de Openbox:
nano /etc/xdg/openbox/environment
Agrega al final del archivo:
export KIOSK_URL=http://localhost:8123
La URL http://localhost:8123 es la URL de la interfaz web de Home Assistant que queremos que se abra en Chromium cada vez que se ejecute desde Openbox.
- Probar la pantalla LCD y la pantalla táctil
Ahora que tenemos nuestra configuración lista, probemos a iniciar el XServer, que lanzará Openbox con Chromium y debería ir automáticamente a la interfaz web de Home Assistant.
Inicia Xserver escribiendo:
startx
Verifica tu pantalla LCD y deberías ver la página de inicio de sesión de Home Assistant. Intenta hacer clic en la pantalla táctil.
Si quieres salir de la aplicación Openbox, haz clic en "ctrl + c" y volverás a la terminal de la Raspberry
En caso de que notes que los clics no son precisos (y probablemente estén invertidos), procede al paso 8.
- Calibrar la pantalla táctil (Opcional)
Solo necesitas hacer esto si los controles táctiles están invertidos
A veces, por defecto, los controles táctiles están invertidos, lo que hace que la pantalla táctil sea inusable de cierta manera. Vamos a cambiar eso.
Abre la configuración de calibración de la pantalla para editar:
nano /etc/X11/xorg.conf.d/99-calibration.conf
Busca la línea:
Option "SwapAxes" “1”
Y cambia el valor de "SwapAxes" de 1 a 0.
Guarda el archivo y vuelve a ejecutar Xserver escribiendo:
startx
Los controles táctiles ahora deberían funcionar como se espera.
- Ejecutar Xserver automáticamente cuando arranque la Raspberry
Si reinicias la Raspberry ahora, volverás a ver solo la terminal en la pantalla LCD. Para abrir la interfaz de usuario de Home Assistant, tendrías que conectarte a la Raspberry mediante SSH y ejecutar “startx” de nuevo.
Pero no queremos eso. En su lugar, vamos a iniciar Xserver automáticamente cuando la Raspberry se inicie.
Edita el archivo rc.local:
nano /etc/rc.local
Agrega esto antes de la línea “exit 0”:
sudo startx -nocursor
Ten en cuenta el flag -nocursor
. Probablemente notaste antes que, aunque estamos utilizando una pantalla táctil, un cursor del ratón era visible en la pantalla. No queremos ver el cursor del ratón en la pantalla táctil, por lo tanto, necesitamos usar el flag -nocursor
.
- Reinicia la Raspberry
Type
sudo reboot
Y espera a que la Raspberry se reinicie. Después del reinicio, la página de inicio de sesión de Home Assistant debería aparecer automáticamente.
Evitar el inicio de sesión en la interfaz web de Home Assistant #
Entonces, ahora tenemos la pantalla de Home Assistant funcionando, pero vemos la pantalla de inicio de sesión de Home Assistant. Necesitamos evitar esta pantalla de inicio de sesión, ya que no tendremos ningún teclado en nuestra pantalla táctil de Home Assistant. Afortunadamente, no es muy difícil de hacer.
- Crear un nuevo usuario de Home Assistant
Dado que necesitaremos configurar un panel diferente para ver en la pantalla LCD, que el que veremos al acceder desde el móvil o el portátil, primero necesitamos crear un nuevo usuario de Home Assistant.
- Ve a la interfaz web de Home Assistant y abre “Configuración”. Selecciona “Personas” y haz clic en “Añadir persona”.
- Ingresa el nombre de tu elección, usaremos “rpi” para este ejemplo.
- Haz clic en “Crear”
- Haz clic en el usuario recién creado
Activa:
- “Permitir que la persona inicie sesión”
- “Solo puede iniciar sesión desde la red local”
- Obtener el user_id del nuevo usuario
Para iniciar sesión automáticamente con nuestro nuevo usuario creado, necesitaremos obtener su user_id.
En tu Raspberry (a través de ssh), ve a la carpeta de almacenamiento de Home Assistant:
cd homeassistant/.storage/
Lee el archivo "auth":
tac auth
El comando Tac leerá el archivo de abajo hacia arriba, ya que la información que estamos buscando está en la parte superior del archivo
Busca el usuario con el nombre "rpi" y copia su "id", que es un UUIDv4 y debería parecerse a "fb15473b331e41a983cd680d0c6b2a52". Necesitaremos este ID de usuario en un momento.
- Editar la configuración de Home Assistant
Vuelve a la carpeta de Home Assistant.
cd homeassistant/
Abre archivo configuration.yaml para editar:
nano configuration.yaml
Agrega al final del archivo:
homeassistant:
auth_providers:
- type: trusted_networks
trusted_networks:
- 127.0.0.1
- ::1
trusted_users:
127.0.0.1: user_id
"::1": user_id
allow_bypass_login: true
- type: homeassistant
Asegúrate de cambiar el ‘user_id’ con el ID del usuario que anotaste en el paso anterior.
El “- type: trusted_networks” permitirá que el cliente que proviene de la Raspberry Pi, que ejecuta Home Assistant, evite la pantalla de inicio de sesión e inicie sesión automáticamente con nuestro usuario previamente creado llamado “rip”.
El “- type: homeassistant” mantendrá la pantalla de inicio de sesión predeterminada para los clientes que provienen de otras IPs que no sean la Raspberry Pi local.
- Reinicia la Raspberry
Escribe:
sudo reboot
Esto aplicará la nueva configuración de Home Assistant y ejecutará Chromium en Openbox con la interfaz web de Home Assistant. Después del reinicio, deberías ver en la pantalla de tu Raspberry la interfaz de Home Assistant con un usuario que inicia sesión automáticamente.
Solución de Problemas #
En caso de que aún veas la terminal en la pantalla de tu Raspberry después de ejecutar Openbox, no significa que Openbox no esté funcionando. Probablemente la ventana de la terminal esté encima de Openbox.
sudo nano /etc/rc.local
Y comenta la línea:
fbcp &
Esto debería evitar que la terminal se inicie en tu pantalla y solo inicie Openbox, lo que solucionará el problema.
Conclusión #
Después de todo, hemos configurado con éxito la Raspberry Pi para iniciar automáticamente en el arranque el navegador Chromium en modo Kiosk utilizando Openbox con Xserver y herramientas xinit. En otras palabras, hemos configurado el quiosco de pantalla táctil de la Raspberry Pi.
Hemos configurado Chromium para abrir la interfaz web de Home Assistant e iniciar sesión automáticamente con nuestro usuario dedicado a la Raspberry Pi, lo que a su vez abre un panel de control de Home Assistant.
El siguiente paso sería configurar el panel de control del usuario de Home Assistant, para incluir tus accesorios favoritos, como lámparas u otros controles o sensores.
Con esta configuración, podemos tener un solo dispositivo (Raspberry Pi) ejecutando el servidor de Home Assistant y usar el mismo dispositivo para mostrar un panel de control de Home Assistant en la pantalla LCD, que puede ser controlado utilizando las capacidades de pantalla táctil de Home Assistant.