Disparadores para programas externos
El fotomatón comunica hacia fuera los pasos de su flujo: a una dirección de la red o a un programa de su propio ordenador. Así se puede conectar tecnología para la que no hay una sección propia.
Se activa en el área de administración, "Control de luces y accesorios" > "Disparadores para programas externos". Este capítulo describe lo que llega allí y cómo se puede trabajar con ello.
Para qué sirve#
Algunas tareas prácticas que se pueden resolver así:
- Controlar una luz de anillo o un equipo de flash que trae su propio software. Encenderlo con la cuenta atrás y apagarlo en el momento de la captura o si se cancela.
- Conmutar un enchufe en cuanto empieza una sesión y apagarlo de nuevo tras la pantalla de cierre, mediante un sistema domótico.
- Pasar las fotos terminadas: copiarlas, renombrarlas, guardarlas en una carpeta, pasarlas a un programa de edición de imágenes.
- Llevar la cuenta de cuántas sesiones e impresiones se han hecho, sin preguntar al fotomatón.
- Máquina de humo, órgano de luces, cañón de confeti: todo lo que reaccione a una señal.
- Tener una pantalla en paralelo, por ejemplo un segundo monitor en la sala de al lado que muestre lo que está pasando.
El fotomatón no espera ninguna respuesta ni evalúa ninguna. Solo informa.
Configuración en tres pasos#
- Fijar el destino. Una dirección de la red o un programa en el ordenador del fotomatón. En el caso de un programa, en el campo va la ruta completa con la extensión del archivo; el botón "Seleccionar programa" la busca en lugar de tener que teclearla.
- Marcar los eventos. Solo se comunica lo marcado. Quien quiera averiguar primero qué llega y cuándo marca primero todo y después quita lo que no necesita.
- Probar. El botón "Probar evento" envía un único evento con valores de ejemplo y muestra la orden que se ha enviado realmente y, si hay un error, además su causa.
Las dos vías#
Dirección de la red#
El fotomatón llama a una dirección y añade los valores como parámetros:
http://127.0.0.1:8000?event_type=session_start¶m1=photo
event_type indica el evento; de param1 a param4, los valores adicionales. Los caracteres especiales van codificados, como es habitual en las direcciones de internet.
Como alternativa se envía un POST con JSON:
{"event_type": "session_start", "param1": "photo"}
El primer formato encaja con scripts existentes y dispositivos sencillos; el segundo, con receptores escritos de nuevo.
Programa en este ordenador#
El fotomatón inicia el programa indicado y le pasa los valores como argumentos en un orden fijo: primero el nombre del evento y después los valores adicionales:
Mein-Skript.bat session_start photo
El programa se ejecuta sin ventana visible. Su directorio de trabajo es la carpeta en la que está; por tanto, los archivos vecinos se pueden llamar solo con el nombre.
Referencia: los once eventos#
En el orden del flujo. Un valor que un evento no aporta queda vacío, pero mantiene su posición.
Empieza la sesión#
El invitado ha elegido el modo de captura y la sesión está creada.
| Valor | Contenido |
|---|---|
| 1 | Modo de captura: photo, gif, boomerang o ai_portrait |
Mein-Skript.bat session_start photo
Empieza la cuenta atrás#
Llega antes de cada captura; con un diseño de cuatro fotos, por tanto, cuatro veces.
| Valor | Contenido |
|---|---|
| 1 | Duración de la cuenta atrás, en segundos o, opcionalmente, en milisegundos |
Mein-Skript.bat countdown_start 3
La cuenta atrás termina o se cancela#
La cuenta atrás ha terminado. Sigue exactamente una vez a cada "Empieza la cuenta atrás": al llegar a cero, justo antes del disparo, o porque la cuenta atrás se canceló antes.
| Valor | Contenido |
|---|---|
| 1 | completed si se llega a cero; aborted si se cancela |
Mein-Skript.bat countdown_stop completed
Una cuenta atrás se cancela cuando el invitado cancela o la sesión termina por otro motivo antes de llegar a cero. Tras aborted no sigue ningún capture_start: una luz de anillo encendida con la cuenta atrás debería apagarse aquí.
Disparo#
El momento de la captura. Llega también antes de cada captura, justo antes de que se haga la foto.
Este evento no lleva valores adicionales.
Mein-Skript.bat capture_start
Captura recibida de la cámara#
La cámara ha entregado una imagen y esta está en el disco. Solo llega con una cámara de fotos o sin espejo conectada, no con una webcam: allí la imagen se crea en la interfaz.
| Valor | Contenido |
|---|---|
| 1 | Ruta completa al archivo original de la cámara |
Mein-Skript.bat file_download "C:\...\sessions\20260918\dslr_raw\shot_01.jpg"
Empieza el procesamiento#
Todas las capturas están disponibles y ahora se calcula la imagen final: recorte, filtro, diseño. Según los ajustes, tarda unos segundos.
| Valor | Contenido |
|---|---|
| 1 | Los archivos de origen, separados por punto y coma |
| 2 | Ruta en la que se creará la imagen final |
Mein-Skript.bat processing_start "C:\...\shot_01.jpg;C:\...\shot_02.jpg" "C:\...\final.jpg"
La ruta de destino ya está fijada antes del cálculo. Así, un script puede prepararse en lugar de rastrear la carpeta. El archivo en sí aún no existe en ese momento.
Premio en el sorteo#
Una sesión ha ganado en el sorteo. Se comunica al primer cierre de la sesión; repetir la captura no lo vuelve a comunicar.
| Valor | Contenido |
|---|---|
| 1 | Nombre del premio |
| 2 | Código de premio, por ejemplo K7P-4XM |
Mein-Skript.bat prize_won "Bebida gratis" K7P-4XM
Aparece la pantalla de cierre#
Se ve la imagen terminada y el invitado decide sobre la impresión y el envío.
Este evento no lleva valores adicionales.
Mein-Skript.bat sharing_screen
Sale un trabajo de impresión#
Se ha lanzado una impresión, por el invitado o automáticamente.
| Valor | Contenido |
|---|---|
| 1 | Ruta del archivo que se imprime |
| 2 | Número de copias |
| 3 | Nombre de la impresora |
Mein-Skript.bat printing "C:\...\final.jpg" 2 "DS-RX1"
Se comunica que el trabajo ha salido del fotomatón. Si el papel realmente sale, solo lo sabe la impresora.
Subida terminada#
Una imagen ha llegado al destino en la nube.
| Valor | Contenido |
|---|---|
| 1 | Ruta del archivo subido |
| 2 | Dirección de la imagen, si el destino la proporciona |
| 3 | Extensión del archivo, por ejemplo jpg o mp4 |
| 4 | Identificador del destino |
Mein-Skript.bat file_upload "C:\...\final.jpg" "https://.../s/abc" jpg Hochzeit
Termina la sesión#
El flujo vuelve a la pantalla de inicio: tras la pantalla de cierre, cuando se agota el temporizador o porque el invitado ha cancelado.
Este evento no lleva valores adicionales.
Mein-Skript.bat session_end
Qué llega y cuándo#
Una pasada completa con un diseño de dos capturas, impresión y subida:
session_start photo
countdown_start 3
countdown_stop completed
capture_start
file_download C:\...\shot_01.jpg
countdown_start 3
countdown_stop completed
capture_start
file_download C:\...\shot_02.jpg
processing_start C:\...\shot_01.jpg;C:\...\shot_02.jpg C:\...\final.jpg
sharing_screen
printing C:\...\final.jpg 1 DS-RX1
file_upload C:\...\final.jpg https://.../s/abc jpg Hochzeit
session_end
Con una webcam faltan las líneas file_download. Si el invitado cancela, llega session_end sin las líneas anteriores. Si la cancelación ocurre durante una cuenta atrás, justo antes de session_end llega además countdown_stop aborted. La impresión y la subida solo llegan si están activadas y el invitado las activa.
Leer bien los valores#
En un archivo por lotes#
Los valores están disponibles como %~1, %~2, etc. La tilde es necesaria: los valores con espacios, signo igual, coma o punto y coma se pasan entre comillas, y %~2 las vuelve a quitar. Con %2 aparecerían en el texto.
@echo off
if /i "%~1"=="printing" (
rem %~2 = Datei, %~3 = Anzahl, %~4 = Drucker
echo Es werden %~3 Ausdrucke auf %~4 gemacht
)
Los valores simples sin caracteres especiales (por ejemplo, la duración de una cuenta atrás) llegan sin comillas y también se pueden leer con %2.
En PowerShell#
param([string]$Ereignis, [string]$Wert1, [string]$Wert2, [string]$Wert3, [string]$Wert4)
Segundos o milisegundos#
La duración de la cuenta atrás se envía de fábrica en segundos. Algunos dispositivos esperan milisegundos; para ello está en el área de administración la casilla "Indicar la duración de la cuenta atrás en milisegundos". 3 se convierte entonces en 3000.
Si una animación de cuenta atrás se queda oscura o termina al instante, casi siempre se debe a esta unidad.
Ejemplos listos#
Los archivos se pueden descargar, guardar en una carpeta propia e indicar como destino en el área de administración. Están pensados como punto de partida y se pueden modificar.
Registrar cada evento#
Escribe cada llamada con la hora, el evento y todos los valores en un archivo de texto junto al script. El primer paso para todo lo demás.
Descargar ausloeser-protokoll.bat
Controlar un dispositivo por el puerto serie#
Envía una orden a un dispositivo en COM3 con la cuenta atrás y otra con el disparo, y lo apaga de nuevo tras una cuenta atrás cancelada: el patrón con el que funcionan las luces de anillo y controles similares. Las órdenes y la conexión se introducen al principio del script.
Descargar ausloeser-seriell.bat
Copiar y renombrar las fotos terminadas#
Guarda además cada foto terminada en una carpeta de destino, con la fecha y la hora en el nombre. Útil para un fotógrafo que sigue trabajando en paralelo.
Descargar ausloeser-kopieren.ps1
Un pequeño receptor para la vía de red#
Un programa que escucha en una dirección y muestra cada evento. Para probar la vía de red antes de conectar el dispositivo de destino real. Necesita un entorno de Python instalado.
Descargar ausloeser-empfaenger.py
Domótica#
Sistemas como Home Assistant, ioBroker o Node-RED aceptan una llamada a través de la red. Como destino se introduce su dirección, por ejemplo:
http://192.168.1.50:8123/api/webhook/fotobox
Allí se dispara entonces una automatización. El evento está en event_type y, como los valores llegan como parámetros, se puede distinguir entre el inicio y el final de la sesión sin crear una dirección propia para cada evento.
Si el sistema espera JSON en lugar de parámetros, se cambia el formato en el área de administración.
Solución de problemas#
No llega nada#
Comprobar en orden:
- ¿Está "Usar disparadores" activado y guardado?
- ¿Está marcado el evento deseado?
- En el caso de un programa, ¿está en el campo la ruta completa con la extensión del archivo?
- ¿Qué dice el botón "Probar evento"? Muestra la orden que se envía y, si hay un error, su causa.
- ¿Se puede escribir en la carpeta en la que el script quiere crear su archivo?
El script se ejecuta, pero no hace nada#
Un script que busca archivos vecinos en la carpeta del fotomatón no los encuentra: se ejecuta en su propia carpeta. Por eso, las rutas dentro del script deben indicarse completas o referirse a la propia carpeta con %~dp0.
Los valores aparecen en el lugar equivocado#
Casi siempre es la diferencia entre %2 y %~2. Véase más arriba, en "Leer bien los valores".
El flujo del invitado se detiene#
No debería pasar, y entonces no se debe al disparador: el fotomatón espera como máximo el límite de tiempo ajustado y después continúa, aunque el destino no responda. El límite se puede acortar si interviene un dispositivo lento.
Un evento llega varias veces#
Casi siempre es correcto: el inicio de la cuenta atrás, su final y el disparo llegan antes de cada captura. Con un diseño de cuatro fotos, por tanto, cuatro veces.