Wyzwalacze dla programów zewnętrznych
Fotobudka zgłasza na zewnątrz kroki swojego przebiegu: pod adres w sieci albo do programu na własnym komputerze. Pozwala to podłączyć sprzęt, dla którego nie ma osobnej sekcji.
Włącza się to w obszarze administracyjnym „Sterowanie światłem i akcesoriami" > „Wyzwalacze dla programów zewnętrznych". Ten rozdział opisuje, co tam dociera i jak z tego korzystać.
Do czego to służy#
Kilka zadań z praktyki, które da się tak rozwiązać:
- Sterowanie lampą pierścieniową lub błyskową, która ma własne oprogramowanie. Rozjaśnianie podczas odliczania, wyłączenie w chwili zdjęcia.
- Załączanie gniazdka, gdy tylko zaczyna się sesja, i wyłączenie po ekranie końcowym - poprzez automatykę domową.
- Przekazywanie gotowych zdjęć: kopiowanie, zmiana nazwy, odkładanie do folderu, przekazanie do obróbki.
- Zliczanie, ile sesji i odbitek się uzbierało, bez pytania o to fotobudki.
- Wytwornica dymu, gra świateł, armatka konfetti - wszystko, co reaguje na sygnał.
- Równoległy wyświetlacz, na przykład drugi ekran w sąsiednim pomieszczeniu pokazujący, co właśnie się dzieje.
Fotobudka nie oczekuje odpowiedzi i żadnej nie analizuje. Tylko zgłasza.
Konfiguracja w trzech krokach#
- Ustalić cel. Albo adres w sieci, albo program na komputerze fotobudki. Przy programie do pola wpisuje się pełną ścieżkę wraz z rozszerzeniem.
- Zaznaczyć zdarzenia. Zgłaszane jest tylko to, co zaznaczone. Kto najpierw chce ustalić, co i kiedy przychodzi, zaznacza wszystko i później usuwa to, co zbędne.
- Przetestować. Przycisk „Przetestuj zdarzenie" wysyła pojedyncze zdarzenie z przykładowymi wartościami i pokazuje polecenie, które faktycznie wyszło - a przy błędzie także jego przyczynę.
Dwie drogi#
Adres w sieci#
Fotobudka wywołuje adres i dołącza do niego wartości jako parametry:
http://127.0.0.1:8000?event_type=session_start¶m1=photo
event_type podaje zdarzenie, od param1 do param4 wartości dodatkowe. Znaki specjalne są zakodowane, jak zwykle w adresach internetowych.
Zamiast tego można wysłać POST z JSON:
{"event_type": "session_start", "param1": "photo"}
Pierwszy format pasuje do istniejących skryptów i prostych urządzeń, drugi do nowo napisanych odbiorników.
Program na tym komputerze#
Fotobudka uruchamia podany program i przekazuje wartości jako argumenty w ustalonej kolejności - najpierw nazwa zdarzenia, potem wartości dodatkowe:
Moj-Skrypt.bat session_start photo
Program działa bez widocznego okna. Jego katalogiem roboczym jest folder, w którym leży - pliki sąsiednie można więc wywoływać samą nazwą.
Opis: dziewięć zdarzeń#
W kolejności przebiegu. Wartość, której zdarzenie nie przekazuje, pozostaje pusta, ale zachowuje swoje miejsce.
Sesja się rozpoczyna#
Gość wybrał tryb zdjęcia, sesja została utworzona.
| Wartość | Zawartość |
|---|---|
| 1 | Tryb zdjęcia: photo, gif, boomerang lub ai_portrait |
Moj-Skrypt.bat session_start photo
Odliczanie się zaczyna#
Przychodzi przed każdym pojedynczym zdjęciem, przy układzie czterozdjęciowym zatem cztery razy.
| Wartość | Zawartość |
|---|---|
| 1 | Czas odliczania - w sekundach, do wyboru w milisekundach |
Moj-Skrypt.bat countdown_start 3
Wyzwolenie migawki#
Chwila zdjęcia. Również przychodzi przed każdym pojedynczym zdjęciem, bezpośrednio zanim obraz powstanie.
To zdarzenie nie przekazuje wartości dodatkowych.
Moj-Skrypt.bat capture_start
Zdjęcie odebrane z aparatu#
Aparat dostarczył zdjęcie i leży ono na dysku. Przychodzi tylko przy podłączonym aparacie fotograficznym lub bezlusterkowcu, nie przy kamerze internetowej - tam obraz powstaje w interfejsie.
| Wartość | Zawartość |
|---|---|
| 1 | Pełna ścieżka do niezmienionego pliku z aparatu |
Moj-Skrypt.bat file_download "C:\...\sessions\20260918\dslr_raw\shot_01.jpg"
Rozpoczyna się przetwarzanie#
Wszystkie zdjęcia są gotowe, teraz liczony jest obraz końcowy: wycinanie tła, filtr, układ. Zależnie od ustawień trwa to kilka sekund.
| Wartość | Zawartość |
|---|---|
| 1 | Pliki źródłowe, oddzielone średnikami |
| 2 | Ścieżka, pod którą powstanie gotowy obraz |
Moj-Skrypt.bat processing_start "C:\...\shot_01.jpg;C:\...\shot_02.jpg" "C:\...\final.jpg"
Ścieżka docelowa jest ustalona jeszcze przed liczeniem. Skrypt może się więc przygotować zamiast przeszukiwać folder. Samego pliku w tym momencie jeszcze nie ma.
Pojawia się ekran końcowy#
Gotowy obraz jest widoczny, gość decyduje o druku i przekazaniu.
To zdarzenie nie przekazuje wartości dodatkowych.
Moj-Skrypt.bat sharing_screen
Zadanie druku wysłane#
Druk został uruchomiony - przez gościa albo automatycznie.
| Wartość | Zawartość |
|---|---|
| 1 | Ścieżka do drukowanego pliku |
| 2 | Liczba odbitek |
| 3 | Nazwa drukarki |
Moj-Skrypt.bat printing "C:\...\final.jpg" 2 "DS-RX1"
Zgłaszane jest, że zadanie opuściło fotobudkę. Czy papier rzeczywiście wyjdzie, wie tylko drukarka.
Przesyłanie zakończone#
Zdjęcie dotarło do celu w chmurze.
| Wartość | Zawartość |
|---|---|
| 1 | Ścieżka do przesłanego pliku |
| 2 | Adres do zdjęcia, o ile cel go dostarcza |
| 3 | Rozszerzenie pliku, na przykład jpg albo mp4 |
| 4 | Oznaczenie celu |
Moj-Skrypt.bat file_upload "C:\...\final.jpg" "https://.../s/abc" jpg Wesele
Sesja się kończy#
Przebieg wraca do ekranu startowego - po ekranie końcowym, po upływie czasu albo dlatego, że gość przerwał.
To zdarzenie nie przekazuje wartości dodatkowych.
Moj-Skrypt.bat session_end
Co i kiedy przychodzi#
Pełny przebieg z układem z dwóch zdjęć, drukiem i przesłaniem:
session_start photo
countdown_start 3
capture_start
file_download C:\...\shot_01.jpg
countdown_start 3
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 Wesele
session_end
Przy kamerze internetowej brakuje wierszy file_download. Gdy gość przerwie, session_end przychodzi bez poprzedzających wierszy. Druk i przesyłanie przychodzą tylko wtedy, gdy są włączone i gość je uruchomi.
Prawidłowe odczytywanie wartości#
W pliku wsadowym#
Wartości dostępne są jako %~1, %~2 i tak dalej. Tylda należy do zapisu: wartości ze spacjami, znakami równości, przecinkami lub średnikami przekazywane są w cudzysłowie, a %~2 go usuwa. Przy %2 cudzysłowy zostałyby w tekście.
@echo off
if /i "%~1"=="printing" (
rem %~2 = plik, %~3 = liczba, %~4 = drukarka
echo Drukowane sa %~3 odbitki na %~4
)
Proste wartości bez znaków specjalnych - na przykład czas odliczania - przychodzą bez cudzysłowów i dają się odczytać także przez %2.
W PowerShell#
param([string]$Zdarzenie, [string]$Wartosc1, [string]$Wartosc2, [string]$Wartosc3, [string]$Wartosc4)
Sekundy czy milisekundy#
Fabrycznie czas odliczania wychodzi w sekundach. Niektóre urządzenia oczekują milisekund - służy do tego pole „Podawaj czas odliczania w milisekundach" w obszarze administracyjnym. Z 3 robi się wtedy 3000.
Jeśli animacja odliczania pozostaje ciemna albo kończy się natychmiast, prawie zawsze odpowiada za to ta jednostka.
Gotowe przykłady#
Pliki można pobrać, umieścić we własnym folderze i wpisać jako cel w obszarze administracyjnym. Są pomyślane jako punkt wyjścia i wolno je zmieniać.
Zapisywanie każdego zdarzenia#
Zapisuje każde wywołanie z czasem, zdarzeniem i wszystkimi wartościami do pliku tekstowego obok skryptu. Pierwszy krok do wszystkiego dalszego.
Pobierz ausloeser-protokoll.bat
Sterowanie urządzeniem przez port szeregowy#
Wysyła przy odliczaniu i przy wyzwoleniu po jednym poleceniu do urządzenia na COM3 - wzorzec, według którego działają lampy pierścieniowe i podobne sterowniki. Polecenia i port wpisuje się na początku skryptu.
Kopiowanie i zmiana nazwy gotowych zdjęć#
Odkłada każde gotowe zdjęcie dodatkowo do folderu docelowego, z datą i godziną w nazwie. Przydatne dla fotografa pracującego równolegle.
Pobierz ausloeser-kopieren.ps1
Mały odbiornik dla drogi sieciowej#
Program, który nasłuchuje pod adresem i pokazuje każde zdarzenie. Do wypróbowania drogi sieciowej, zanim podłączy się właściwe urządzenie docelowe. Wymaga zainstalowanego środowiska Python.
Pobierz ausloeser-empfaenger.py
Automatyka domowa#
Systemy takie jak Home Assistant, ioBroker czy Node-RED przyjmują wywołanie przez sieć. Ich adres wpisuje się jako cel, na przykład:
http://192.168.1.50:8123/api/webhook/photobooth
Tam uruchamia się wtedy automatyzacja. Zdarzenie znajduje się w event_type, a ponieważ wartości przychodzą jako parametry, początek i koniec sesji da się rozróżnić bez zakładania osobnego adresu dla każdego zdarzenia.
Jeśli system oczekuje JSON zamiast parametrów, format zmienia się w obszarze administracyjnym.
Szukanie usterek#
Nic w ogóle nie dociera#
Sprawdzić po kolei:
- Czy „Używaj wyzwalaczy" jest włączone i zapisane?
- Czy dane zdarzenie jest zaznaczone?
- Czy przy programie w polu widnieje pełna ścieżka wraz z rozszerzeniem?
- Co mówi przycisk „Przetestuj zdarzenie"? Pokazuje polecenie, które wychodzi, a przy błędzie jego przyczynę.
- Czy wolno pisać w folderze, w którym skrypt chce utworzyć swój plik?
Skrypt działa, ale nic nie robi#
Skrypt, który szuka plików sąsiednich w folderze fotobudki, nie znajdzie ich - działa we własnym folderze. Ścieżki wewnątrz skryptu należy więc podawać w całości albo odnosić do %~dp0, własnego folderu.
Wartości stoją w złym miejscu#
Prawie zawsze różnica między %2 a %~2. Patrz wyżej „Prawidłowe odczytywanie wartości".
Przebieg dla gościa się zacina#
To nie powinno się zdarzyć i nie leży wtedy po stronie wyzwalacza: fotobudka czeka najwyżej ustawiony limit czasu i potem idzie dalej, nawet jeśli cel nie odpowiada. Limit można skrócić, gdy w grze jest powolne urządzenie.
Zdarzenie przychodzi wielokrotnie#
Zwykle tak właśnie ma być: odliczanie i wyzwolenie przychodzą przed każdym pojedynczym zdjęciem. Przy układzie z czterema zdjęciami zatem cztery razy.