En una reunión, Parte 2: La CLI
Hace dos años, escribí un artículo sobre cómo encender un cartel de “EN DIRECTO” cuando la webcam está encendida (y apagarlo cuando la webcam se apaga).
Como mencioné en el post original, esto es muy útil para mí, ya que comparto el despacho en casa con mi mujer. Nos permite saber cuándo el otro está en una reunión, incluso si no está hablando, para que podamos evitar hacer ruido.
Gracias al poder de Home Assistant, el caso de uso se ha vuelto más complejo. Por ejemplo, ahora enciendo una pantalla de 32x32 píxeles, los Govee Hexa y otros dispositivos cuando estamos “en directo”.
Cuando me uní a New Relic en 2024, empecé a usar un ordenador macOS y necesité encontrar una forma de hacer lo mismo en un Mac, ya que el método de detección (v4l2) no funciona en macOS. Adapté el script que @antonmry creó para macOS, pero macOS Tahoe cambió la entrada de registro monitorizada por el script, así que tuve que modificarlo.
Fue en ese momento cuando pensé en crear una herramienta de CLI para simplificar esto tanto para Linux como para macOS:
on-a-meet CLI
Esta es una herramienta de CLI sencilla. Solo necesitas instalarla usando Homebrew:
brew tap sergiocarracedo/homebrew-tap
brew install on-a-meet
Luego ejecuta el asistente de configuración (onboarding):
on-a-meet onboard
Te preguntará sobre:
- El modo de detección: en Linux, podemos usar v4l2 o lsof
- La cámara a monitorizar: todas las cámaras o una cámara específica
- Los tiempos de debounce y polling
- Los comandos a ejecutar cuando el estado cambie a ON u OFF. Pueden contener variables de entorno. Por ejemplo, para establecer el input boolean en Home Assistant:
curl -X POST http://192.168.0.104:8123/api/states/input_boolean.on_a_meet -H 'Content-Type: application/json' -d '{\"state\": \"on\"}' -H 'Authorization: Bearer ${HASS_TOKEN}' - El archivo desde el cual cargar las variables de entorno, si las usas (opcional)
- Te pedirá que pruebes que todo funciona y que se detecta el estado de la cámara
- Si deseas instalar el servicio
Después de eso, la herramienta se instala como un servicio que gestiona los cambios en el estado de la cámara.
Consulta la documentación para más detalles: https://github.com/sergiocarracedo/on-a-meet#configuration
Míralo en acción (de nuevo)
Trabajando con múltiples ordenadores en Home Assistant
Como mencioné antes, comparto esta señal de “EN DIRECTO” con mi mujer. Esto significa que la luz debe estar encendida si la webcam de uno de los ordenadores está encendida, pero no debe apagarse inmediatamente cuando una cámara se apaga si la otra sigue encendida.
En Home Assistant, gestiono eso creando un ayudante (helper) de tipo input boolean para cada ordenador y encendiendo la luz mediante una automatización:
Automatización de encendido (Turn ON)
alias: On a meet light
description: ''
triggers:
- entity_id:
- input_boolean.on_a_meet
to:
- 'on'
trigger: state
- entity_id:
- input_boolean.on_a_meet_mac
to:
- 'on'
trigger: state
- entity_id:
- input_boolean.on_a_meet_patri
to:
- 'on'
trigger: state
- trigger: state
entity_id:
- input_boolean.on_a_meet_patri_xps
to:
- 'on'
conditions:
- condition: state
entity_id: input_boolean.office_sleep_mode
state: 'off'
actions:
- action: scene.turn_on
metadata: {}
target:
entity_id: scene.office_on_a_meet
data: {}
mode: single
Automatización de apagado (Turn OFF)
alias: On a meet off
triggers:
- entity_id:
- input_boolean.on_a_meet
to: 'off'
trigger: state
- entity_id:
- input_boolean.on_a_meet_mac
to: 'off'
trigger: state
- entity_id:
- input_boolean.on_a_meet_patri
to: 'off'
trigger: state
- trigger: state
entity_id:
- input_boolean.on_a_meet_patri_xps
to:
- 'off'
conditions:
- condition: state
entity_id: input_boolean.on_a_meet
state: 'off'
- condition: state
entity_id: input_boolean.on_a_meet_mac
state: 'off'
- condition: state
entity_id: input_boolean.on_a_meet_patri
state: 'off'
- condition: state
entity_id: input_boolean.on_a_meet_patri_xps
state: 'off'
actions:
- action: scene.turn_on
metadata: {}
target:
entity_id: scene.office_on_a_meet_off
mode: single
Como puedes ver, usamos este método para cuatro ordenadores (portátiles personales y de trabajo), y funciona bien.
Espero que encuentres útil esta herramienta de CLI, y cualquier comentario es bienvenido, como de costumbre.
Sergio Carracedo