Arranque y parada automática del servidor Docker según la presencia de la pantalla

Una de las cosas que hemos observado durante las pruebas con nuestra pantalla Elecrow ESP32-P4 es que el servidor crow-ha, encargado de gestionar la comunicación entre el panel y Home Assistant, sigue funcionando aunque apaguemos la pantalla. Y eso significa mantener en ejecución Chromium, sus procesos auxiliares y el resto de servicios asociados sin que haya nadie al otro lado que los necesite.

Como ya que estamos intentando optimizar los recursos de nuestra Raspberry Pi, ¿por qué no detener automáticamente el contenedor cuando la pantalla esté apagada y volver a arrancarlo de froma automática cuando la encendamos?

La solución ha resultado bastante sencilla y, además, no necesita ninguna integración adicional de Home Assistant.

Identificando la pantalla en nuestra red

Lo primero fue localizar la dirección IP de la Elecrow. Para ello revisamos los registros del contenedor crow-ha, donde encontramos la conexión WebSocket de nuestro panel:

Así identificamos la dirección IP 192.168.1.65 y, consultando la tabla ARP de la Raspberry Pi, pudimos asociarla a su dirección MAC:

Para evitar que la dirección cambie en el futuro, en nuestro router FRITZ!Box reservamos la IP 192.168.1.65 para la pantalla.

Después comprobamos que el panel respondía a las peticiones ICMP cuando estaba encendido y que dejaba de hacerlo al apagarlo. Ya teníamos, por tanto, un mecanismo bastante fiable para conocer su estado sin necesidad de comunicarnos con el propio servidor crow-ha.

Creando un vigilante con systemd

En lugar de recurrir a una automatización de Home Assistant, hemos preferido utilizar un pequeño script ejecutado directamente en la Raspberry Pi. De esta manera, el sistema puede arrancar o detener Docker incluso cuando el propio contenedor está parado.

El script /usr/local/sbin/crow-ha-watchdog.sh realiza las siguientes operaciones:

  • Comprueba si la pantalla responde a un ping.
  • Si está disponible, arranca crow-ha cuando el contenedor está detenido.
  • Si no responde, incrementa un contador de fallos.
  • Tras cuatro comprobaciones consecutivas sin respuesta, detiene el contenedor.
  • Si vuelve a detectar la pantalla, reinicia el contador y arranca el servidor cuando sea necesario.

El contenido del script es el siguiente:

Una vez guardado, le damos permisos de ejecución:

Programando las comprobaciones

Para ejecutar el script periódicamente hemos creado dos unidades de systemd.

La primera, /etc/systemd/system/crow-ha-watchdog.service, define el servicio que ejecuta nuestro script:

La segunda, /etc/systemd/system/crow-ha-watchdog.timer, establece la periodicidad:

Con ello, systemd ejecutará el vigilante cada 30 segundos, comenzando 30 segundos después del arranque de la Raspberry Pi.

Finalmente, activamos el temporizador:

Podemos comprobar que está funcionando mediante:

Y consultar las operaciones realizadas por el vigilante con:

Comprobando que funciona el servicio de aogado / encendido

Lo mejor de todo es que no nos hemos limitado a confiar en que el invento funcione. Hemos realizado pruebas reales apagando y encendiendo la pantalla.

Esta es la secuencia que hemos obtenido en nuestros registros:

También hemos comprobado con docker ps -a que el contenedor pasa correctamente de estado Up a Exited (0) y vuelve a arrancar cuando la pantalla reaparece en la red.

En resumen, el comportamiento queda así:

Estado de la pantallaAcción del vigilante
Encendida y conectadaArranca crow-ha si está detenido.
Apagada o desconectadaAcumula cuatro fallos consecutivos.
Sin respuesta durante cuatro comprobacionesDetiene crow-ha.
Vuelve a conectarseArranca automáticamente crow-ha.

La solución tiene otra ventaja: no depende de Home Assistant, por lo que seguirá funcionando aunque este último tenga problemas o esté reiniciándose. Tampoco hemos tenido que modificar el código de crow-ha ni su configuración Docker Compose.

Y así conseguimos algo bastante razonable: que nuestra Raspberry Pi no tenga que trabajar para una pantalla de ELECROW que está apagada. Que bastante tiene ya con todo lo demás.

72
Suscribirse
Notificación
1 Comment
1
0
¡Aquí puedes dejar tus comentarios!x