FNA-Steuerung
Eine Ampelsteuerung für das FieldNet
Vorraussetzungen und Funktionen
Voraussetzungen
Für die Steuerung wird ein PC/Gerät benötigt, auf dem Docker läuft und installiert ist. Dies kann ein Notebook (Windows, Linux, Mac) aber auch ein PC/Raspberry Pi sein. Bei einem Gerät ohne Bildschirm, wie bei einem Raspberry wird noch ein Eingabegerät oder eine Fernbedienung benötigt. Dies kann ein Smartphone, Tablet oder ein zweites Notebook sein.
Funktionen
- Hellichkeit der Ampel einstellbar
- Lautsträke der Hupe einstellbar
- Vorlaufzeit frei definierbar
- Schusszeit wird durch Anzahl der Pfeile sowie der Zeit pro Pfeil definiert
- AB/CD Gruppen Modus
- Alternierend Einzeln
- Alternierend Mannschaft
- Nachschießen mit Anzahl der Pfeile als Zwischensequenz einstellbar
- Stechen beim Alernierend als Zwischensequenz einstellbar
- Automatisches Schießleiterprotokoll + PDF Download
- Einzelne Voreinstellungen (Halle, Finale, Liga, etc.) kann angepasst und gespeichert werden
Installation
In diesem Kampitel geht es um die Installation und Update der Software
Windows
Vorraussetungen
- Docker Dektop installiert (Anleitungen gibt es auf der Offiziellen Website oder im Internet)
Projektdateien und Software
Benötigtes Material
| Anzahl | Art | Link |
| 1 | Notebook |
Anleitung - Start/Installation der Steuerung
1. Docker Desktop starten
Die Ampelsteuerung ist in einzelne Module aufgeteilt. Diese kommunizieren miteinander über eine ValKey/Redis Datenbank. Um die Benutzung der Software möglichst einfach zu gestalten sind alle Module in Docker Container geschachtelt. Um diese starten zu können, müssen wir in Docker Desktop die einzelnen Container miteinander starten. Dies funktioniert am einfachsten über eine Docker Compose Datei. Hierfür muss starten wir als erstes Docker Desktop. Unsere Oberfläche für das starten und stopen von Docker Container.
2. Docker Compose Stack starten
Um Docker Desktop unsere Container und wie sie miteinander arbeiten sollen beizubrigen benötigen wir die bereitgestellte Docker-Compose Datei. Bei dem Compose module von Docker handelt es sich um eine automatisch installierte erweiterung, welche uns anhand einer .yaml Datei mehrere Container als einen zusammenhängenden Dienst starten lassen. Weiterhin können wir darin abhängigkeiten und Konfigurationen mitgeben. Da diese Datei nicht in der Oberfläche hinzugefügt werden kann müssen wir diese in einen Ordner legen und über die CMD einen Befehl absetzen.
- Lege die Datei in einem Ordner mit dem Namen "FNA-Steuerung" auf deinem PC ab.
- Starte eine Kommandozeile in diesem ordner. Rechtsklick in dem Ordner und "In Terminal öffnen" auswählen
- In der Komandozeile geben wir folgenden Befehl ein
docker compose up -d, dieser startet anhand der "docker-compose.yaml" Datei die entsprechenden Container im Hintergrund. (ohne -d würden wir die Ausgabe der Container sehen und beim schließen der Kommandozeile würde die Steuerng beendet werden) - Es werden nun die benötigten Docker Images heruntergeladen und dannach gestartet
- Nun ist wird dieser auch in Docker Desktop angezeigt und kann dort gestartet und gestoppt werden
3. WebUI öffnen
Nachdem die Container nun laufen kann auf die Weboberfläche (WebUI) der Steuerng zugegriffen werden. Diese läuft auf Port 80. Im Browser die URL http://127.0.0.1 eingeben.
Eine Detailierte Anleitung, wie die Steuerung bedient werden kann gibt es in anderen Kapitel.
Anleitung - Stoppen der Steuerung
Die Steuerung kann über den Docker Desktop einfach gestoppt und gestartet werden. Hierzu unter Container bei der fna-steuerung unter Aktionen Starten bzw. stoppen. Solltest du die Software nicht manuell stoppen, wird sie beim nächsten Start von Docker Desktop, oder deinem PC automatisch gestartet.
WICHTIG: Im Netzwerk darf nur eine Steuerung gleichzeitig laufen, da sonst die Anzeigegeräte unterschiedliche Informationen erhalten.
Anleitung - Update der Steuerung
Um die Steuerung auf den aktuellen Stan zu bringen müssen die Container gestoppt werden. Im Anschluss wechselt man auf den Reiter Images, wählt bei Actions die 3 Punkte aus und klickt auf Pull. Dadurch wird die neuste Version der Software heruntergeladen. Du musst dies für alle 4 Images machen einzeln machen.
Linux
Vorraussetungen
- Docker und Docker Compose installiert (Anleitungen für deine Distribution gibt es meist auf der offiziellen Docker Website)
- Diese Anleitung legt eine Debianbasierte Distribution zu grunde.
Projektdateien und Software
Benötigtes Material
| Anzahl | Art | Link |
| 1 | Linux PC / Raspberry Pi / o.ä. |
Anleitung - Start/Installation der Steuerung
1. Ordner anlegen und Docker Compose Datei ablegen
Als erstes erstellen wir im Home Verzeichnis einen Ordner namens fna-steuerung
## Optional, wenn wget nicht installiert ist
sudo apt install wget -y
## Erstellen des Ordners fna-steuerung
cd ~
mkdir fna-steuerung
cd fna-steuerung
## Downloaden der docker-compose.yaml
wget https://gitlab.gras-it.de/bsapp/fieldnet-ampel/fna-docker-infrastructur/-/blob/e561a872b02b854c72ce75088ba0750fe36b8028/docker-compose.yaml
2. Starten des Docker Compose Service
Nachdem wir die docker-compose.yaml Datei heruntergeladen haben können wir den Service starten
## Springen in den Ordner fna-steuerung
cd ~/fna-steuerung
## Starten des Services
#Je nach dem ob der Benutzer in der docker Gruppe ist mit oder ohne SUDO
#Ist der Benutzer in der docker gruppe kann das sudo weggelassen werden
sudo docker compose up -d
3. Öffnen der WebUI
Nachdem die Container nun laufen kann auf die Weboberfläche (WebUI) der Steuerng zugegriffen werden. Diese läuft auf Port 80. Im Browser die URL http://127.0.0.1 eingeben. Alternativ, wenn die Steuerung ohne Bildschirm betrieben wird, dann auf dem Gerät mit Bildschirm (Notebook / Smartphone / Tablet) die IP Adresse oder der DNS Name des "Servers" eingeben. z.B. http://10.0.1.10 oder http://sv-ampel
Anleitung - Stoppen der Steuerung
Die steuerung kann über ein docker compose down gestoppt werden. Solltest du die Software nicht manuell stoppen, wird sie beim nächsten Start von deinem PC automatisch gestartet.
## Springen in den Ordner fna-steuerung
cd ~/fna-steuerung
## Stoppen des Services
#Je nach dem ob der Benutzer in der docker Gruppe ist mit oder ohne SUDO
#Ist der Benutzer in der docker gruppe kann das sudo weggelassen werden
sudo docker compose down
WICHTIG: Im Netzwerk darf nur eine Steuerung gleichzeitig laufen, da sonst die Anzeigegeräte unterschiedliche Informationen erhalten.
Anleitung - Update der Steuerung
Die steuerung kann mit einem einfachen docker compose pull und einem neuerstellen beim Start durchgeführt werden. Hierzu muss der Servie auf jeden fall gestoppt sein.
## Springen in den Ordner fna-steuerung
cd ~/fna-steuerung
## Stoppen des Services
sudo docker compose down
## Starten des Services
#Je nach dem ob der Benutzer in der docker Gruppe ist mit oder ohne SUDO
#Ist der Benutzer in der docker gruppe kann das sudo weggelassen werden
sudo docker compose pull
sudo docker compose up --force-recreate -d
sudo docker image prune -f
Mac OS
Voraussetzungen
Docker Desktop installiert (Anleitungen gibt es auf der offiziellen Website oder im Internet)
Projektdateien und Software
Benötigtes Material
| Anzahl | Art | Link |
|---|---|---|
| 1 | Mac |
Anleitung - Start/Installation der Steuerung
1. Docker Desktop starten
Die Ampelsteuerung ist in einzelne Module aufgeteilt. Diese kommunizieren miteinander über eine ValKey/Redis Datenbank. Um die Benutzung der Software möglichst einfach zu gestalten sind alle Module in Docker Container geschachtelt. Um diese starten zu können, müssen wir in Docker Desktop die einzelnen Container miteinander starten. Dies funktioniert am einfachsten über eine Docker Compose Datei. Hierfür starten wir als erstes Docker Desktop. Unsere Oberfläche für das Starten und Stoppen von Docker Container.
2. Docker Compose Stack starten
Um Docker Desktop unsere Container und wie sie miteinander arbeiten sollen beizubringen benötigen wir die bereitgestellte Docker-Compose Datei. Bei dem Compose Modul von Docker handelt es sich um eine automatisch installierte Erweiterung, welche uns anhand einer .yaml Datei mehrere Container als einen zusammenhängenden Dienst starten lassen. Weiterhin können wir darin Abhängigkeiten und Konfigurationen mitgeben. Da diese Datei nicht in der Oberfläche hinzugefügt werden kann müssen wir diese in einen Ordner legen und über das Terminal einen Befehl absetzen.
- Lege die Datei in einem Ordner mit dem Namen "FNA-Steuerung" auf deinem Mac ab.
- Starte ein Terminal in diesem Ordner. Rechtsklick in dem Ordner im Finder und "Neues Terminal beim Ordner" auswählen oder öffne das Terminal und navigiere mit cd zum entsprechenden Ordner
- Im Terminal geben wir folgenden Befehl ein: docker compose up -d, dieser startet anhand der "docker-compose.yaml" Datei die entsprechenden Container im Hintergrund. (ohne -d würden wir die Ausgabe der Container sehen und beim Schließen des Terminals würde die Steuerung beendet werden)
- Es werden nun die benötigten Docker Images heruntergeladen und danach gestartet
- Nun wird dieser auch in Docker Desktop angezeigt und kann dort gestartet und gestoppt werden
3. WebUI öffnen
Nachdem die Container nun laufen kann auf die Weboberfläche (WebUI) der Steuerung zugegriffen werden. Diese läuft auf Port 80. Im Browser die URL http://127.0.0.1 eingeben.
Eine detaillierte Anleitung, wie die Steuerung bedient werden kann gibt es in anderen Kapiteln.
Anleitung - Stoppen der Steuerung
Die Steuerung kann über Docker Desktop einfach gestoppt und gestartet werden. Hierzu unter Container bei der fna-steuerung unter Aktionen Starten bzw. Stoppen. Solltest du die Software nicht manuell stoppen, wird sie beim nächsten Start von Docker Desktop, oder deinem Mac automatisch gestartet.
WICHTIG: Im Netzwerk darf nur eine Steuerung gleichzeitig laufen, da sonst die Anzeigegeräte unterschiedliche Informationen erhalten.
Anleitung - Update der Steuerung
Um die Steuerung auf den aktuellen Stand zu bringen müssen die Container gestoppt werden. Im Anschluss wechselt man auf den Reiter Images, wählt bei Actions die 3 Punkte aus und klickt auf Pull. Dadurch wird die neueste Version der Software heruntergeladen. Du musst dies für alle 4 Images einzeln machen.
Die WebUI
Wie wir die Webbasierte Oberfläche verwendet. Wie stelle ich die Ampel korrekt ein und wie nutze ich diese in einem Wettkampf
Benutzen der Steuerung
Hauptoberfläche (Main Interface)
Die Weboberfläche der FNA-Steuerung ist über den Browser erreichbar (z. B. http://sv-ampel oder http://127.0.0.1).
Um nicht mit jedem Gerät im Netzwerk die Ampel steuern zu können, muss man sich Anmelden. Der 6 stellige initiale Pin lautet 123456.
Je nach konfiguriertem Modus erscheint eine von zwei Ansichten: der Standard-Modus für Wettkämpfe und Liga
sowie der Alternierend-Modus
Kurzübersicht
Steuerleiste
Die vier Schaltflächen oben sind in beiden Ansichten identisch vorhanden.
| Schaltfläche | Funktion |
|---|---|
| START | Startet die aktive Schusssequenz. Die Ampel beginnt mit der konfigurierten Vorlaufzeit. |
| STOPP | Bricht die laufende Sequenz sofort ab. Die Ampel wechselt auf Rot. |
| GEFAHR | Löst ein Gefahrensignal aus: Die Hupe ertönt 5-mal, die Ampel wechselt sofort auf Rot. Nach Beenden des Gefahrenmodus setzt die Ampel an der Stelle fort, an der sie unterbrochen wurde. |
| WECHSEL | Abhängig vom aktiven Modus – siehe die jeweiligen Abschnitte unten. |
Hinweis: STOPP und GEFAHR sind unterschiedliche Aktionen. STOPP beendet die Sequenz kontrolliert und endgültig. GEFAHR unterbricht die laufende Sequenz für eine Sicherheitssituation und setzt sie danach automatisch fort.
Standard-Modus (Wettkampf / Liga)
Dieser Modus wird für normale Wettkämpfe und Ligabetrieb verwendet. Alle Ampelanlagen geben die gleichen Informationen aus.
Anzeigebereich
Der mittlere Bereich zeigt zwei Informationen nebeneinander:
Links – Ampelstatus und Zeit: Die drei farbigen Felder (Rot, Gelb, Grün) spiegeln den aktuellen Zustand der physischen Ampel wider. Inaktive Farben erscheinen dunkel/gedimmt, die aktive Farbe leuchtet hell. Die große Zahl darunter zeigt die verbleibenden Sekunden im aktuellen Schussabschnitt.
Rechts – Gruppe: Das Kürzel AB oder CD zeigt an, welche Gruppe gerade an der Reihe ist.
WECHSEL im Standard-Modus
Im Standard-Modus wechselt WECHSEL die aktive Gruppe von AB nach CD (oder umgekehrt). Dies wird eingesetzt, wenn die Gruppen abwechselnd auf die Scheibe schießen.
Untere Schaltflächen
Die untere linke Schaltfläche ändert sich je nach Konfiguration:
| Schaltfläche | Wann sichtbar | Funktion |
|---|---|---|
|
NACHSCHIESSEN |
Nachschießen nicht konfiguriert | Startet eine Nachschieß-Sequenz für einzelne Athleten, die einen oder mehrere Pfeile nachholen müssen. Die Anzahl der Nachschusspfeile ist in den Einstellungen konfigurierbar. |
| BEENDEN / ANPASSEN | Nachschießen konfiguriert | Beendet das Nachschießen und wechselt wieder in den vorherigen Modus |
| EINSTELLUNGEN | Immer | Öffnet die Konfigurationsseite für Zeiten, Modi und Voreinstellungen. |
Alternierend-Modus
Im Alternierend-Modus schießen zwei Mannschaften oder Athleten abwechselnd. Dabei sind zwei separate Ampeln (A1 links, A2 rechts) aktiv, die unabhängig voneinander gesteuert werden.
Anzeigebereich
Der Anzeigebereich ist horizontal in zwei gleichwertige Hälften geteilt:
Linke Hälfte (A1): Zeigt den Ampelstatus von Ampel 1 (Rot, Gelb, Grün) sowie darunter die verbleibenden Sekunden für diese Ampel.
Rechte Hälfte (A2): Zeigt den Ampelstatus von Ampel 2 (Rot, Gelb, Grün) sowie darunter die verbleibenden Sekunden für diese Ampel.
Beide Ampeln laufen im Wechsel: Während eine Ampel auf Grün schaltet (Schussfreigabe), bleibt die andere auf Rot.
WECHSEL im Alternierend-Modus
Im Alternierend-Modus bestimmt WECHSEL, welche Ampel (links oder rechts) den ersten Durchgang beginnt. Dies kann vor dem START genutzt werden, um die Startreihenfolge festzulegen.
Untere Schaltflächen
| Schaltfläche | Funktion |
|---|---|
| STECHEN | Startet eine Stechen-Sequenz für Entscheidungssituationen. Im Alternierend-Modus gibt es kein Nachschießen – stattdessen steht diese Schaltfläche zur Verfügung. |
| EINSTELLUNGEN | Öffnet die Konfigurationsseite. |
Schnellübersicht: Unterschiede der beiden Modi
| Merkmal | Standard-Modus | Alternierend-Modus |
|---|---|---|
| Anzahl Ampeln | 1 | 2 (A1 links, A2 rechts) |
| Zeitanzeige | Verbleibende Sekunden + Gruppe AB/CD | Verbleibende Sekunden je Ampel |
| WECHSEL-Funktion | Gruppe AB ↔ CD wechseln | Startreihenfolge (links/rechts) festlegen |
| Nachschießen | ✓ Möglich (wenn konfiguriert) | ✗ Nicht verfügbar |
| Stechen | ✗ Nicht verfügbar | ✓ Möglich |
| GEFAHR-Verhalten | Hupe 5× + sofort Rot, danach Fortsetzung | Hupe 5× + sofort Rot, danach Fortsetzung |
Einstellen der Parameter (Zeiten und Modis)
Die Einstellungsseite der FNA-Steuerung ist in zwei Bereiche aufgeteilt: Allgemein (links) und Wettkampf (rechts). Über den Button ← Zurück gelangst du jederzeit zur Hauptsteuerung zurück.
Übersicht der Einstellungsseite
Die Einstellungsseite ist unter
http://<IP-Adresse>/settingserreichbar oder direkt über den Button ⚙ EINSTELLUNGEN auf der Hauptseite.
Bereich: Allgemein
Ampel Helligkeit
Stellt die Helligkeit der Ampel-Anzeigegeräte ein.
| Eigenschaft | Wert |
|---|---|
| Minimum | 0 (aus) |
| Maximum | 100 (volle Helligkeit) |
Mit den + und − Buttons kannst du den Wert schrittweise anpassen.
Lautstärke Hupe
Stellt die Lautstärke der akustischen Signale (Hupe) ein.
| Eigenschaft | Wert |
|---|---|
| Minimum | 0 (stumm) |
| Maximum | 100 (volle Lautstärke) |
| Standard | 80 |
Mit den + und − Buttons kannst du den Wert schrittweise anpassen.
Bereich: Wettkampf
Hier werden die Parameter für den Schießbetrieb konfiguriert. Alle Änderungen werden erst mit ✓ Speichern und zurück übernommen.
Vorauswahl
Über das Dropdown-Menü kannst du ein gespeichertes Preset auswählen (z. B. Finale Einzel, Liga, Halle).
Hinweis: Das Laden einer Vorauswahl überschreibt automatisch die Felder Vorbereitungszeit, Zeit pro Pfeil, Anzahl Pfeile und Modus. Der Name sowie Helligkeit und Lautstärke bleiben unverändert.
Mit dem 🗑 (Papierkorb)-Button rechts neben der Vorauswahl kann das aktuell gewählte Preset gelöscht werden. Mit dem + (Plus)-Button links neben der Vorauswahl kann ein neues Preset erstellt werden.
Name
Der Name des aktuellen Einstellungsprofils. Dieser Name wird in der Vorauswahl-Liste angezeigt.
Vorbereitungszeit
Die Vorbereitungszeit ist die Zeit (in Sekunden) zwischen dem doppelten Hupsignal (Schützen an die Scheibe) und dem Startsignal (grünes Licht + ein Hupsignal).
| Signal | Bedeutung |
|---|---|
| 2× Hupe | Schützen begeben sich an die Schießlinie |
| Vorbereitungszeit läuft | Schützen bereiten sich vor |
| Grün + 1× Hupe | Freigabe zum Schießen |
Mit den + und − Buttons anpassen.
Zeit pro Pfeil
Gibt an, wie viel Zeit (in Sekunden) ein Schütze pro Pfeil zur Verfügung hat.
Beispiel: Bei 20 Sekunden pro Pfeil und 3 Pfeilen ergibt sich eine Gesamtschießzeit von 60 Sekunden.
Anzahl Pfeile
Legt fest, wie viele Pfeile pro Durchgang geschossen werden.
Die Gesamtschießzeit errechnet sich aus:
Schießzeit = Anzahl Pfeile × Zeit pro Pfeil
Diese Berechnung gilt für die Modi KEIN und AB/CD. Bei den alternierenden Modi (Alt. Einzel / Alt. Man.) läuft die Zeit anders ab – siehe unten.
Modus
Der Modus bestimmt, wie die Schützen bzw. Mannschaften gegeneinander schießen.
| Modus | Beschreibung |
|---|---|
| KEIN | Kein Gruppenformat – alle Schützen schießen gleichzeitig (z. B. Liga-Betrieb). Die Gesamtschießzeit ergibt sich aus Anzahl Pfeile × Zeit pro Pfeil. |
| AB/CD | Gruppenmodus: Gruppe A/B und C/D schießen abwechselnd. Die Schießzeit ergibt sich aus Anzahl Pfeile × Zeit pro Pfeil. |
| Alt. Einzel | Alternierend Einzel: Zwei Einzelschützen schießen abwechselnd. Die Ampel zeigt immer die Zeit für einen Pfeil an und wechselt nach jedem Pfeil zur anderen Seite. |
| Alt. Man. | Alternierend Mannschaft: Zwei Mannschaften schießen abwechselnd. Die Gesamtzeit wird vollständig angezeigt und nicht zurückgesetzt. Wenn eine Mannschaft ihren Pfeil geschossen hat, wird die Zeit angehalten, bis die andere Mannschaft an der Reihe war – dann läuft sie weiter. |
Ablauf Alternierend Einzel (Alt. Einzel)
Schütze A schießt Pfeil 1 → Wechsel → Schütze B schießt Pfeil 1
→ Wechsel → Schütze A schießt Pfeil 2 → ...
Die Anzeige zeigt jeweils die Zeit für einen einzelnen Pfeil. Nach jedem Pfeil wechselt die Seite.
Ablauf Alternierend Mannschaft (Alt. Man.)
Mannschaft A jeder Schütze schießt ein Pfeil → Zeit stoppt → Mannschaft B jeder Schütze schießt ein Pfeil
→ Zeit stoppt → Mannschaft A jeder Schütze schießt ein Pfeil → ...
Die Gesamtzeit läuft durch und wird nur pausiert, wenn die andere Mannschaft schießt. Sie wird nicht zurückgesetzt.
Speichern
Nach dem Anpassen aller gewünschten Parameter klicke auf:
✓ Speichern und zurück
Die Einstellungen werden gespeichert und du kehrst zur Hauptsteuerung zurück. Das aktuelle Profil wird dabei unter dem eingetragenen Namen als Vorauswahl gespeichert bzw. aktualisiert.
Tipp: Lege für häufig verwendete Wettkampfformate (z. B. Finale Einzel, Halle 18m, Liga) eigene Profile an, um schnell zwischen verschiedenen Einstellungen wechseln zu können.
Schießleiterprotokoll
Das Schießleiterprotokoll ist eine automatisch erstellte Aufzeichnung aller relevanten Aktionen, die während einer Veranstaltung über die Ampelsteuerung durchgeführt wurden. Es dient als offizieller Nachweis für den Schießleiter und kann direkt aus der WebUI geöffnet und ausgedruckt werden.
Übersicht der Protokoll-Schaltflächen
Im Bereich Protokoll der Einstellungsseite stehen vier Schaltflächen zur Verfügung:
| Schaltfläche | Funktion |
|---|---|
| 📋 Protokoll öffnen | Öffnet das aktuelle Protokoll als PDF im Browser |
| 🗑️ Protokoll löschen | Löscht alle gespeicherten Protokolleinträge unwiderruflich |
| 🕐 Uhrzeit einstellen | Ermöglicht die manuelle Synchronisation der Systemzeit |
| ⊘ Einschießen | Markiert die aktuelle Sitzung als Einschieß-Phase |
Hinweis: Die Schaltflächen befinden sich auf der Seite Einstellungen, erreichbar über den Button „EINSTELLUNGEN" auf der Hauptseite der WebUI.
Protokoll öffnen
Ein Klick auf „Protokoll öffnen" generiert das Schießleiterprotokoll als PDF und öffnet es im Browser. Das Protokoll enthält:
- Kopfbereich mit Feldern für Name, Veranstaltung, Datum und Unterschrift (manuell auszufüllen nach dem Ausdruck)
- Eine tabellarische Auflistung aller Aktionen mit:
- Zeitpunkt – genaues Datum und Uhrzeit des Ereignisses
- Aktion – z. B. START, STOPP, WECHSEL, NACHSCHIESSEN, STECHEN
- Infos – zusätzliche Details wie aktiver Modus, Gruppe (AB/CD), Anzahl Pfeile oder Schützen
Beispiel eines Protokolleintrags
| Zeitpunkt | Aktion | Infos |
|---|---|---|
| 3.4.2026, 20:50:13 | START gedrückt | AB/CD: –, Einschießen: False, Alternierend: True |
| 3.4.2026, 20:49:37 | STECHEN Einzeln | Anzahl Schützen: 2 |
| 3.4.2026, 20:48:41 | NACHSCHIESSEN | Anzahl Pfeile: 3 |
Das PDF kann direkt aus dem Browser gedruckt oder gespeichert werden.
Protokoll löschen
⚠️ Achtung: Das Löschen des Protokolls ist nicht rückgängig zu machen. Alle bisher gespeicherten Einträge werden dauerhaft entfernt.
Ein Klick auf „Protokoll löschen" (rot hinterlegt) entfernt sämtliche Protokolleinträge. Dies sollte erst nach dem Ausdruck bzw. der Speicherung des Protokolls für die zurückliegende Veranstaltung erfolgen – typischerweise zu Beginn einer neuen Veranstaltung, um ein sauberes Protokoll zu erhalten.
Uhrzeit einstellen
Da die Ampelsteuerung auch offline betrieben werden kann, kann die interne Systemzeit von der tatsächlichen Uhrzeit abweichen – etwa nach einem Neustart ohne Internetzugang.
Warum ist das wichtig?
Alle Protokolleinträge werden mit einem Zeitstempel versehen. Ist die Systemzeit falsch, stimmen die Zeitangaben im Protokoll nicht mit dem realen Ablauf überein. Durch das manuelle Einstellen der Uhrzeit werden neue Einträge mit der korrekten Zeit gespeichert.
So stellen Sie die Uhrzeit ein
- Öffnen Sie die Einstellungen über die Hauptseite der WebUI.
- Klicken Sie im Bereich „Protokoll" auf „Uhrzeit einstellen".
- Tragen Sie die aktuelle Uhrzeit in das angezeigte Eingabefeld ein.
- Bestätigen Sie die Eingabe.
⚠️ Wichtig: Die Uhrzeitkorrektur wirkt sich nur auf zukünftige Einträge aus. Bereits im Protokoll gespeicherte Einträge werden nicht nachträglich angepasst. Stellen Sie die Uhrzeit daher vor Beginn der Veranstaltung ein.
Einschießen
Die Schaltfläche „Einschießen" kennzeichnet eine Schießphase explizit als Einschieß-Durchgang. Ist der Einschieß-Modus aktiv, wird dies in jedem Protokolleintrag unter Infos vermerkt (Einschießen: True).
Verwendung
- Aktivieren Sie „Einschießen" vor dem Start einer Einschieß-Phase.
- Alle während dieser Phase protokollierten Aktionen (START, STOPP usw.) werden entsprechend als Einschießen markiert.
- Deaktivieren Sie den Modus wieder, bevor die reguläre Wettkampfphase beginnt, damit die Protokollierung korrekt unterscheidet.
Empfohlene Vorgehensweise bei einer Veranstaltung
-
Vor der Veranstaltung:
- Uhrzeit prüfen und ggf. über „Uhrzeit einstellen" synchronisieren.
- Altes Protokoll der vorherigen Veranstaltung exportieren/drucken.
- Protokoll über „Protokoll löschen" zurücksetzen.
-
Während der Veranstaltung:
- Einschießen über den Button „Einschießen" markieren.
- Die Steuerung protokolliert alle Aktionen automatisch im Hintergrund.
-
Nach der Veranstaltung:
- Über „Protokoll öffnen" das PDF generieren.
- Protokoll ausdrucken und mit Name, Veranstaltung, Datum und Unterschrift vervollständigen.
- Das ausgefüllte Protokoll zu den Veranstaltungsunterlagen nehmen.
Sicherheit
In den Einstellungen gibt es zwei bereiche zum Thema Sicherheit.
Bereich: PIN
Hier kann über die Schaltfläche PIN ändern der Loginpin für die Anmeldung angepasst werden. Der Standard PIN ist 123456.
Bereich: Geräte
Verschiedene Arten von Geräte müssen mit der Steuerung interagieren haben aber oft eine Möglichkeit zur Eingabe eines PIN's. Für dieses Problem gibt es die Möglichkeit Geräte für den Endpunkt /api/cmd freizuschalten. Sobald sich ein Gerät, zum Beispiel eine Fernbedienung für den Kampfrichter, an der Steuerung meldet, erscheint dieses in dieser Auflistung und kann genehmigt werden.
Sobald das Gerät Zugelassen wurde, kann es für 24 Stunden mit der Steuerung interagieren.
Über die Schaltfläche Widerrufen, kann ein aktives Gerät auch entfernt werden.
API Dokumentation
Die FNA-Steuerung stellt eine REST-API bereit, über die alle Funktionen der Ampelsteuerung programmatisch abgerufen und gesteuert werden können. Die API ist unter http://<ip-adresse>/api/ erreichbar.
Übersicht der Endpunkte
| Methode | Endpunkt | Beschreibung | PIN Auth | Device Auth |
|---|---|---|---|---|
| GET | /api/status |
Aktuellen Status der Ampeln abrufen | X | |
| GET | /api/cmd |
Verfügbare Befehle abrufen | X | X |
| POST | /api/cmd/{cmd} |
Befehl ausführen | X | X |
| GET | /api/config |
Alle Konfigurationen abrufen | X | |
| POST | /api/config |
Neue Konfiguration erstellen | X | |
| GET | /api/config/preset |
Aktive Voreinstellung abrufen | X | |
| GET | /api/config/volume |
Lautstärke abrufen | X | |
| PUT | /api/config/volume |
Lautstärke setzen | X | |
| GET | /api/config/brightness |
Helligkeit abrufen | X | |
| PUT | /api/config/brightness |
Helligkeit setzen | X | |
| PUT | /api/config/nach |
Nachschießen-Anzahl setzen | X | |
| DELETE | /api/config/nach |
Nachschießen deaktivieren | X | |
| GET | /api/config/{id} |
Einzelne Konfiguration abrufen | X | |
| PUT | /api/config/{id} |
Konfiguration aktualisieren | X | |
| DELETE | /api/config/{id} |
Konfiguration löschen | X | |
| GET | /api/logs |
Protokolleinträge abrufen | X | |
| DELETE | /api/logs |
Protokoll löschen | X | |
| GET | /api/logs/training |
Trainings-Modus abrufen | X | |
| PUT | /api/logs/training |
Trainings-Modus setzen | X | |
| GET | /api/time |
Systemzeit abrufen | X | |
| POST | /api/sync-time |
Systemzeit synchronisieren | X | |
| POST | /api/auth/login |
Anmelden mit PIN | ||
| GET | /api/auth/status |
Status des Session (Auth) | ||
| POST | /api/auth/logout |
Abmelden | ||
| PUT | /api/auth/pin |
Login PIN ändern | X | |
| GET | /api/devices/pending |
Liste der wartenden Geräte | X | |
| POST | /api/devices/pending/{device_id}/approve |
Gerät zulassen | X | |
| DELETE | /api/devices/pending/{device_id} |
Wartendes gerät löschen | X | |
| GET | /api/devices/approved |
Liste der zugelassenen Geräte | X | |
| DELETE | /api/devices/approved/{device_id} |
Zugelassenes Gerät löschen | X |
Status
GET /api/status
Gibt den aktuellen Betriebsstatus beider Ampeln zurück.
Antwort 200 OK
{
"a1": {
"red": true,
"yellow": false,
"green": false,
"time": 120,
"group": "A"
},
"a2": {
"red": false,
"yellow": false,
"green": true,
"time": 120,
"group": "B"
},
"run": true,
"group_mode": false,
"count_arrows": 3,
"alt_mode": false,
"shoot_break": false,
"shoot_off_mode": false
}
| Feld | Typ | Beschreibung |
|---|---|---|
a1 / a2 |
Objekt | Status von Ampel 1 und 2 |
a1.red |
Boolean | Rotes Licht aktiv |
a1.yellow |
Boolean | Gelbes Licht aktiv |
a1.green |
Boolean | Grünes Licht aktiv |
a1.time |
Integer | Verbleibende Zeit in Sekunden |
a1.group |
String | Zugewiesene Gruppe (z. B. "A" oder "B") |
run |
Boolean | Steuerung läuft aktuell |
group_mode |
Boolean | AB/CD-Gruppenmodus aktiv |
count_arrows |
Integer | Aktuell eingestellte Pfeilanzahl |
alt_mode |
Boolean | Alternierend-Modus aktiv |
shoot_break |
Boolean | Schießpause aktiv |
shoot_off_mode |
Boolean | Gibt an, ob Nachschießen oder Stechen eingestellt ist |
Befehle
GET /api/cmd
Gibt zurück, welche Befehle aktuell verfügbar (ausführbar) sind.
Antwort 200 OK
{
"CommandStatus": {
"START": true,
"STOP": false,
"SWITCH": false,
"BREAK": false
}
}
| Befehl | Beschreibung |
|---|---|
START |
Schießsequenz starten |
STOP |
Schießsequenz stoppen |
SWITCH |
Gruppe wechseln (bei Alternierend-Modus) |
BREAK |
Schießpause einleiten |
POST /api/cmd/{cmd}
Führt einen Steuerungsbefehl aus.
Pfadparameter
| Parameter | Typ | Beschreibung |
|---|---|---|
cmd |
String | Befehl: START, STOP, SWITCH oder BREAK |
Beispiel
POST /api/cmd/START
Antworten
| Code | Beschreibung |
|---|---|
200 OK |
Befehl erfolgreich ausgeführt |
400 Bad Request |
Ungültiger oder nicht erlaubter Befehl |
500 Internal Server Error |
Serverfehler |
Konfigurationen
Konfigurationen enthalten alle Einstellungen für einen Schießbetrieb (z. B. Zeit pro Pfeil, Pfeilanzahl, Modus). Es können mehrere Konfigurationen gespeichert werden.
GET /api/config
Gibt alle gespeicherten Konfigurationen zurück.
Antwort 200 OK – Array von Konfigurationsobjekten (siehe Felder unten)
POST /api/config
Erstellt eine neue Konfiguration.
Anfrage-Body
{
"name": "Halle 18m",
"time_per_arrow": 40,
"prepare_time": 10,
"count_arrows": 3,
"group_mode": false,
"alt_single": false,
"alt_team": false
}
| Feld | Typ | Beschreibung |
|---|---|---|
name |
String | Bezeichnung der Konfiguration |
time_per_arrow |
Integer | Zeit pro Pfeil in Sekunden |
prepare_time |
Integer | Vorlaufzeit in Sekunden |
count_arrows |
Integer | Anzahl der Pfeile pro Durchgang |
group_mode |
Boolean | AB/CD-Gruppenmodus aktivieren |
alt_single |
Boolean | Alternierend Einzeln aktivieren |
alt_team |
Boolean | Alternierend Mannschaft aktivieren |
Antwort 200 OK – Die erstellte Konfiguration inkl. id und preset-Flag
GET /api/config/{id}
Gibt eine einzelne Konfiguration anhand ihrer ID zurück.
PUT /api/config/{id}
Aktualisiert eine vorhandene Konfiguration. Body entspricht POST /api/config.
DELETE /api/config/{id}
Löscht eine Konfiguration anhand ihrer ID.
GET /api/config/preset
Gibt die aktuell als Voreinstellung markierte Konfiguration zurück.
Antworten
| Code | Beschreibung |
|---|---|
200 OK |
Voreinstellung gefunden |
404 Not Found |
Keine Voreinstellung gesetzt |
Lautstärke & Helligkeit
GET /api/config/volume
Gibt die aktuelle Lautstärke der Hupe zurück.
Antwort 200 OK
{ "amp_horn_vol": 80 }
PUT /api/config/volume?vol={wert}
Setzt die Lautstärke der Hupe.
Abfrageparameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
vol |
Integer | Ja | Lautstärkewert |
GET /api/config/brightness
Gibt die aktuelle Helligkeit der Ampeln zurück.
Antwort 200 OK
{ "amp_bright": 100 }
PUT /api/config/brightness?bright={wert}
Setzt die Helligkeit der Ampeln.
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
bright |
Integer | Ja | Helligkeitswert |
Nachschießen
PUT /api/config/nach?count={anzahl}
Aktiviert das Nachschießen mit der angegebenen Pfeilanzahl. Bei Alternierendem Modus wird hiermit das Stecken mit angegebener Schützenzahl aktiviert.
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
count |
Integer | Ja | Anzahl der Pfeile für das Nachschießen / Schützen für Stechen |
DELETE /api/config/nach
Deaktiviert das Nachschießen.
Protokoll (Logs)
GET /api/logs
Gibt alle Protokolleinträge zurück.
Antwort 200 OK
[
{
"id": 1,
"timestamp": "2026-04-03T10:00:00",
"action": "START",
"description": "Schießsequenz gestartet"
}
]
| Feld | Typ | Beschreibung |
|---|---|---|
id |
Integer | Eindeutige ID des Eintrags |
timestamp |
DateTime | Zeitstempel des Ereignisses |
action |
String | Ausgeführte Aktion |
description |
String | Beschreibung des Ereignisses |
DELETE /api/logs
Löscht alle Protokolleinträge.
GET /api/logs/training
Gibt zurück, ob der Trainings-Modus aktiv ist (Protokolleinträge werden im Trainings-Modus nicht für das Schießleiterprotokoll gewertet).
Antwort 200 OK
{ "training": false }
PUT /api/logs/training?training={wert}
Aktiviert oder deaktiviert den Trainings-Modus.
| Parameter | Typ | Pflicht | Standard | Beschreibung |
|---|---|---|---|---|
training |
Boolean | Nein | false |
true = Trainings-Modus aktiv |
Zeit
GET /api/time
Gibt die aktuelle Systemzeit der Steuerung zurück.
Antwort 200 OK
{ "time": "2026-04-03T10:00:00" }
POST /api/sync-time
Synchronisiert die Systemzeit der Steuerung.
Anfrage-Body
{ "time": "2026-04-03T10:00:00" }
Antwort 200 OK – Bestätigung mit der gesetzten Zeit
Auth
POST /api/auth/login
Authentifiziert die UI
Anfrage-Body
{ "pin": "123456" }
Antwort 200 OK
{ "token": "AA-BB-CC-DD" }
GET /api/auth/status
Gibt den Auth Status zurück
Antwort 200 OK
{ "authenticated": true }
POST /api/auth/logout
Meldet die Session ab
Antwort 200 OK
POST /api/auth/pin
Änder die Anmeldepin
Anfrage-Body
{ "new_pin": "987654" }
Antwort 200 OK
Devices
GET /api/devices/pending
Gibt eine Liste der wartenden Geräte zurück
Antwort 200 OK
[
{
"id": 1,
"ip": "192.168.1.10",
"first_seen": "2026-04-27T15:02:44.310Z",
"last_seen": "2026-04-27T15:02:44.310Z",
"request_count": 5,
"app_name": "amp",
"device_type": "remote",
"discover_checked": true
}
]
| Feld | Typ | Beschreibung |
|---|---|---|
id |
Integer | Eindeutige ID des Eintrags |
ip |
String | IP des Gerätes |
first_seen |
TimeStamp | Wann hat sich das Gerät zum ersten mal gemeldet |
last_seen |
TimeStamp | Wann hat sich das Gerät zum letzten mal gemeldet |
request_count |
Integer | Wie oft hat sich das Gerät gemeldet |
app_name |
String | Info aus dem /discover feld App (Wenn vorhanden) |
device_type |
String | Info aus dem /discover feld Type (Wenn vorhanden) |
discover_checked |
Boolean | Gibt an, ob /discover geprüft werden konnte |
POST /api/devices/pending/{device_id}/approve
Gibt ein Gerät anhand der device_id frei, sodass dieses die Ampel steuern kann.
Abfrageparameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
device_id |
Integer | Ja | Device ID |
Antwort 200 OK
DELETE /api/devices/pending/{device_id}
Weist ein wartendes Gerät zurück anhand der device_id.
Abfrageparameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
device_id |
Integer | Ja | Device ID |
Antwort 200 OK
GET /api/devices/approved
Gibt eine Liste der zugelassenen Geräte zurück
Antwort 200 OK
[
{
"id": 1,
"ip": "192.168.1.10",
"app_name": "amp",
"device_type": "remote",
"approved_at": "2026-04-27T15:13:04.210Z",
"expires_at": "2026-04-27T15:13:04.210Z"
}
]
| Feld | Typ | Beschreibung |
|---|---|---|
id |
Integer | Eindeutige ID des Eintrags |
ip |
String | IP des Gerätes |
app_name |
String | Info aus dem /discover feld App (Wenn vorhanden) |
device_type |
String | Info aus dem /discover feld Type (Wenn vorhanden) |
approved_at |
TimeStamp | Gibt an, wann das Gerät zugelassen wurde |
expires_at |
TimeStamp | Gibt an, ab wann das Gerät nicht mehr zugelassen ist |
DELETE /api/devices/approved/{device_id}
Weist ein zugelassenes Gerät zurück anhand der device_id. Dannach ist das Gerät nicht mehr berechtigt Anfragen an /api/cmd zu senden
Abfrageparameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
device_id |
Integer | Ja | Device ID |
Antwort 200 OK
Antwortformate
Erfolg / Fehler (DefaultStatusOUT)
Viele Endpunkte antworten bei Erfolg oder Fehler mit folgendem Format:
{ "status": "ok" }
Hinweise
Wichtig: Im Netzwerk darf nur eine Steuerung gleichzeitig laufen, da sonst die Anzeigegeräte widersprüchliche Informationen erhalten könnten.
- Alle Zeitangaben im Format ISO 8601 (
YYYY-MM-DDTHH:MM:SS) - Die API ist nur durch eine PIN Authentifizierung gesichert – sie sollte nur in einem gesicherten, lokalen Netzwerk betrieben werden
- Basis-URL:
http://<ip-adresse>/api/
Fehlerbehebung
PIN vergessen
Solltest du einen PIN vergessen haben, kannst du über docker mit folgendem Befehl den PIN zurücksetzen
# Setzt den PIN auf 123456 zurück.
# Verwendung im laufenden Container:
docker exec <container_name> sh /app/reset_pin.sh
# Wenn du z.B. die Docker Infrastruktur Datei aus der Installationsanleitung genommen hast
docker exec fna-webui sh /app/reset_pin.sh