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 Docker-Compose Datei 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 Docker Compose YAML Datei 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 Docker-Compose Datei 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:///settings erreichbar 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:///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:///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 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