Servicio HTTP para reproducir sonidos
El siguiente paso fue permitir que Home Assistant pudiera solicitar la reproducción de un sonido sin tener que ejecutar directamente comandos Docker.
Para ello creamos un pequeño servicio HTTP en Python que escucha en la Raspberry Pi y, cuando recibe una petición POST, solicita al contenedor crow-ha que reproduzca el archivo WAV.
La estructura utilizada ha sido::
1 2 3 4 5 6 7 8 9 | /opt/mydockers/crow-ha/ | +-- compose.yaml | +-- data/ | +-- audio-service/ | +-- server.py |
El archivo de sonido de alarma se encuentra dentro del contenedor:
1 | /tmp/alarma.wav |
Lo copiamos mediante:
1 | docker cp /tmp/alarma.wav crow-ha:/tmp/alarma.wav |
El servicio HTTP utiliza el puerto 8765 y escucha exclusivamente en la dirección local:
1 | 127.0.0.1:8765 |
La petición de reproducción es:
1 | POST http://127.0.0.1:8765/play |
Servicio systemd
Para que el servicio se inicie automáticamente con la Raspberry Pi, lo registramos mediante systemd.
Archivo:
1 | /etc/systemd/system/crow-audio.service |
Contenido:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [Unit] Description=Local audio service for Elecrow crow-ha After=docker.service Requires=docker.service [Service] Type=simple User=pi Group=docker ExecStart=/usr/bin/python3 /opt/mydockers/crow-ha/audio-service/server.py Restart=always RestartSec=5 [Install] WantedBy=multi-user.target |
La cuenta pi pertenece al grupo docker, por lo que puede ejecutar los comandos necesarios para controlar el contenedor.
Después de crear o modificar el servicio:
1 2 3 4 5 | sudo systemctl daemon-reload sudo systemctl enable crow-audio.service sudo systemctl restart crow-audio.service |
Comprobamos su estado:
1 | systemctl status crow-audio.service |
El resultado esperado es:
1 | Active: active (running) |
Prueba directa del servicio
Desde la Raspberry Pi:
1 | curl -i -X POST http://127.0.0.1:8765/play |
El servicio responde:
1 2 3 | HTTP/1.0 202 Accepted Audio playback requested |
El código HTTP 202 indica que la petición ha sido aceptada para su procesamiento.
71
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!