Wiki

[ESP32] MMDVM Display

Aktualisiert vor 15 T. von Martin D.

MMDVM Display Wiki

Diese Wiki erklärt die Voraussetzungen, die erste Einrichtung, die wichtigsten Einstellungen der Weboberfläche sowie optionale Funktionen wie DVSwitch, FRN, SSH-Actions, SVXLink, APRS, Wetter, Autobahn-Verkehr, HAMQSL, ADSB, Hinweise, SD-Dateimanager, SD-gehostete Weboberfläche, Screen Mirror, Desktop-Simulator, OTA, Target-Listen und das Flashen der unterstützten Displays.

Stand dieser Wiki

Diese Fassung ist auf die Firmware v0.0.2.3 aktualisiert.

1. Kurzbeschreibung

Das MMDVM Display ist eine ESP32-basierte Touchscreen-Firmware zur Anzeige von Live-, Heard-, Watch- und Statusdaten eines MMDVM-Hotspots. Unterstützt werden Pi-Star und WPSD als MMDVM-Backend.

Zusätzlich können optionale WATCH-Quellen aktiviert werden:

- DVSwitch Übersicht
- Free Radio Network (FRN)
- SVXLink
- APRS.fi
- OpenWeather
- HAMQSL / N0NBH
- ADSB / dump1090 / readsb
- Screen Mirror

Zusätzlich kann die Firmware aktuelle Warnungen, Sperrungen und Baustellen der deutschen Autobahn-API als scrollenden Footer anzeigen. Die Verkehrsmeldungen können nach Autobahnen, Radius und Positionsquelle gefiltert werden.

Außerdem unterstützt die Firmware optionale Popup-Warnungen:

- Deutschland / KATWARN-NINA über den öffentlichen NINA-Dashboard-/Map-Feed, optional positionsbezogen
- MeteoAlarm Europa über EDR oder Atom
- NOAA / NWS Hinweise für US-Wetterzonen

Die Konfiguration erfolgt über die integrierte Weboberfläche. Bei fehlender oder ungültiger Konfiguration startet das Gerät automatisch einen Setup-Access-Point.

2. Voraussetzungen

Hardware

Benötigt wird ein unterstütztes ESP32-Touchdisplay. Die Standard-Firmwaretargets sind:

Display / Board                         Target             Firmware-Prefix
ESP32-2432S028R ILI9341                CYD_ILI9341        esp32-2432S028R-ILI9341
ESP32-2432S028R ILI9341 V2             CYD_ILI9341_V2     esp32-2432S028R-ILI9341-V2
ESP32-2432S028R ST7789                 CYD_ST7789         esp32-2432S028R-ST7789
JC3248W535C                            JC3248W535C        esp32s3-JC3248W535C
WS8048S043C                            WS8048S043C        esp32s3-WS8048S043C
WS8048S070C                            WS8048S070C        esp32s3-WS8048S070C
EC8048S070C                            EC8048S070C        esp32s3-EC8048S070C
EC8048S070B                            EC8048S070B        esp32s3-EC8048S070B
EC8048S070CT                           EC8048S070CT       esp32s3-EC8048S070CT
WSTOUCHLCD28                           WSTOUCHLCD28       esp32s3-WSTOUCHLCD28


Jedes Ziel kann einzeln gebaut werden, indem der Targetname an
build_firmware.bat
übergeben wird.

Netzwerk

Benötigt wird:

- ein 2,4-GHz-WLAN für das ESP32-Display,
- ein Pi-Star- oder WPSD-Hotspot im selben Netzwerk,
- die IP-Adresse oder der Hostname des Dashboards, zum Beispiel
pi-star.local
oder
192.168.1.50
,
- optional Internetzugriff für RadioID, Target-Listen, OpenWeather, APRS.fi, HAMQSL, MeteoAlarm, NINA/KATWARN, NOAA, die Autobahn-Verkehrs-API und die FRN-System-Manager-Passwortabfrage.

Optional: SSH

SSH wird nur benötigt, wenn über den Touchscreen oder die Weboberfläche Befehle ausgeführt werden sollen, zum Beispiel:

- DigiMode-Umschaltung auf Pi-Star/WPSD oder DVSwitch,
- Talkgroup-, Reflector- oder DVSwitch-Zielaktionen,
- Disconnect-Befehle,
- eigene Skripte auf dem Hotspot,
- SVXLink-DTMF- oder Steuerbefehle.

Dafür müssen SSH-Server, Benutzername, Passwort und Port des Zielsystems bekannt sein. Passwörter werden lokal auf dem Display gespeichert. Diese Funktion sollte nur in vertrauenswürdigen Netzwerken verwendet werden.

Optional: SD-Karte / lokaler Speicher

Einige Zusatzfunktionen nutzen lokale Dateien:

- Target-Listen im Ordner
/lookup

- Länderflaggen als PNG oder 24-Bit-BMP im Ordner
/flags
beziehungsweise als Ausweichlösung im SD-Hauptverzeichnis
- Wetter-Icons im Ordner
/weather

- APRS-Icons im Ordner
/aprs

- ADSB-Airline-Logos im Ordner
/adsb

- optional
/adsb/airlines.dat
zur Zuordnung von ICAO-Airline-Prefixen zu IATA-Logo-Dateien
- ab v0.0.2.3 die komplette Weboberfläche im Ordner
/webui

- weitere Dateien, die über Application -> SD files verwaltet werden können

Für größere Darstellungsbereiche können optionale
_64
-Varianten verwendet werden, zum Beispiel
/flags/DE_64.png
,
/weather/01d_64.png
oder
/adsb/LH_64.png
. Die Firmware skaliert und zentriert unterstützte Flaggen, Wetter-Icons und Airline-Logos passend zur Displaygröße.

Je nach Display-Backend wird SD oder SD_MMC verwendet. Ab v0.0.2.3 werden die HTML-, CSS- und JavaScript-Dateien der Weboberfläche nicht mehr als große Seiten in die Firmware eingebettet, sondern aus
/webui
geladen. Deshalb sollte der komplette mitgelieferte
sdcard/webui
-Ordner auf die SD-Karte kopiert werden. Fehlt eine benötigte Datei, meldet der Webserver ausdrücklich
Missing SD WebUI asset
. Für reine Displayfunktionen sind Icons/Logos weiterhin optional, die Weboberfläche benötigt jedoch ihr WebUI-Bundle.

Software / Build-Umgebung

Für das Kompilieren aus der .ino-Datei werden je nach Display unter anderem verwendet:

- ESP32 Arduino Core,
- WiFi, WiFiClientSecure, HTTPClient, WebServer, WebSocketsServer, Update, FS, SD / SD_MMC, SPI,
- ArduinoJson,
- PNGdec,
- TJpg_Decoder,
- je nach Display TFT_eSPI und XPT2046_Touchscreen,
- oder Arduino_GFX_Library, Wire und teilweise lvgl,
- für ZIP-Entpacken zlib, wenn ZIP im Build aktiviert ist,
- für SSH-Actions: libssh_esp32 / libssh.

Für die Desktop-Version werden zusätzlich SDL2, zlib und die plattformspezifischen Netzwerk-/Thread-Bibliotheken verwendet. Der Remote-Screen-Mirror-Sender nutzt unter Windows die native GDI-Aufnahme; unter Linux kann OpenCV verwendet werden. Das Makefile besitzt ab v0.0.2.3 getrennte Release- und Debug-Profile.

Für OTA-Updates muss die erste Firmware per USB mit einer passenden OTA-Partitionstabelle geflasht werden. OTA erwartet später nur die Application
.bin
, nicht
.ino
,
.zip
, Bootloader-, Partition- oder Merged-Flash-Dateien.

3. Firmware bauen und Displays flashen

3.1 Empfohlenes Windows-Projektlayout

Die Batch-Dateien sind für ein portables Arduino IDE 2 Layout gedacht:

C:\ArduinoIDE\Data\Arduino15
C:\ArduinoIDE\Data\Sketchbook
C:\ArduinoIDE\Data\Lib


Empfohlener Projektordner:

C:\ArduinoIDE\Project\MMDVM-Display\content


Im Ordner
content
sollten liegen:

content\build_firmware.bat
content\flash_firmware.bat
content\esptool.exe
content\Makefile
content\partitions.csv
content\partitions_ota.csv
content\mmdvm-display\mmdvm-display.ino
content\firmware\
content\sdcard\
content\sdcard\webui\index.html
content\sdcard\webui\styles.css
content\sdcard\webui\app.js
content\sdcard\webui\bind.js
content\svxlink\


Der Ordner
content\sdcard\webui
gehört ab v0.0.2.3 zur auszuliefernden Weboberfläche. Beim Kopieren auf die SD-Karte muss daraus
/webui/index.html
usw. werden.

Partitionstabellen:

content\partitions_ota.csv

ESP32 CYD 4 MB OTA-Layout mit app0/app1 OTA-Slots.

content\partitions.csv

ESP32 CYD 4 MB Factory-/Huge-App-Layout mit einer großen App-Partition, aber ohne OTA.

Der Arduino CLI wird normalerweise aus Arduino IDE 2 gefunden, zum Beispiel:

C:\ArduinoIDE\resources\app\lib\backend\resources\arduino-cli.exe


Wenn Arduino CLI woanders liegt, kann der Pfad vorher gesetzt werden:

set "ARDUINO_CLI=C:\path\to\arduino-cli.exe"
build_firmware.bat --check


3.2 Firmware unter Windows bauen

Zum Bauen wird
build_firmware.bat
verwendet. Das Flashen erfolgt separat mit
flash_firmware.bat
.

Doppelklick:

build_firmware.bat


Menü:

1) Build firmware for all displays
2) Build Windows desktop version only
3) Build firmware for all displays + desktop
4) Install/update Arduino ESP32 core and libraries
5) Check paths/configuration
6) Toggle ESP32 partition: OTA / Factory
7) Show Help
0) Exit


Ersteinrichtung der Build-Umgebung:

build_firmware.bat --install


Pfade und Konfiguration prüfen:

build_firmware.bat --check


Alle Standard-Display-Firmwares bauen:

build_firmware.bat --firmware-only


Nur Windows-Desktop-Version bauen:

build_firmware.bat --desktop-only


Firmware und Desktop-Version bauen:

build_firmware.bat --all


Ein einzelnes Displaytarget bauen:

build_firmware.bat WS8048S070C
build_firmware.bat CYD_ILI9341
build_firmware.bat CYD_ILI9341_V2
build_firmware.bat CYD_ST7789
build_firmware.bat EC8048S070B


Ausgabedateien landen in:

content\firmware


Beispiel für ein ESP32-S3-Target:

content\firmware\esp32s3-WS8048S070C.bin
content\firmware\esp32s3-WS8048S070C.boot.bin
content\firmware\esp32s3-WS8048S070C.bootloader.bin
content\firmware\esp32s3-WS8048S070C.partitions.bin


Hinweis: Bei einigen ESP32-S3-Targets wird keine
.boot.bin
erzeugt. Das Flash-Tool erkennt das automatisch.

3.3 ESP32 CYD Partition: OTA oder Factory/Huge-App

Die originalen ESP32 CYD Boards haben meist 4 MB Flash. Deshalb gibt es zwei sinnvolle Partition-Modi.

OTA-Modus

build_firmware.bat --ota CYD_ST7789
build_firmware.bat --ota CYD_ILI9341


Nutzt:

content\partitions_ota.csv


OTA-Modus erstellt zwei App-Slots:

app0 / ota_0
app1 / ota_1


Maximale App-Größe im OTA-Modus:

0x1F0000 bytes = 2,031,616 bytes = ca. 1.94 MiB


Diesen Modus verwenden, wenn spätere OTA-Updates über die Weboberfläche gewünscht sind. Wenn die Firmware-
.bin
größer ist, funktioniert OTA nicht. Dann muss entweder die Firmware verkleinert oder Factory/Huge-App genutzt werden.

Factory-/Huge-App-Modus

build_firmware.bat --factory CYD_ST7789
build_firmware.bat --factory CYD_ILI9341


Nutzt:

content\partitions.csv


Factory-Modus erstellt eine große App-Partition.

Maximale App-Größe im Factory-Modus:

0x3E0000 bytes = 4,063,232 bytes = ca. 3.88 MiB


Dieser Modus ist für große USB-Flash-Builds gedacht und unterstützt keine OTA-Updates.

Wichtig:

-
--ota
und
--factory
betreffen die originalen ESP32 CYD Targets.
- ESP32-S3-Targets nutzen das generierte 16 MB Custom-OTA-Layout des Build-Tools.
- Nach Änderung des Partition-Modus immer neu bauen und neu flashen.
- Beim Flashen muss die passende
.partitions.bin
zur passenden Firmware-
.bin
verwendet werden.
- OTA- und Factory-/Huge-App-Binaries sind nicht austauschbar.

3.4 Flashen unter Windows - empfohlene Methode

Zum Flashen wird die separate Datei verwendet:

flash_firmware.bat


Sie gehört in den
content
-Ordner neben
esptool.exe
und den Firmware-Ordner:

content\flash_firmware.bat
content\esptool.exe
content\firmware\


Doppelklick:

flash_firmware.bat


Menü:

1) Flash firmware to a display
2) List serial COM ports
3) Check paths and firmware folder
0) Exit


Ablauf beim Flashen:

1. Das Tool listet erkannte COM-Ports.
2. Der passende COM-Port wird ausgewählt.
3. Das Display-/Device-Target wird ausgewählt.
4. Das Tool prüft, ob die benötigten .bin-Dateien in
content\firmware
vorhanden sind.
5. Nach Bestätigung wird der Flash gelöscht und die Firmware geschrieben.

Kommandozeilen-Beispiele:

flash_firmware.bat --target WS8048S070C --port COM5
flash_firmware.bat --target EC8048S070B --port COM7
flash_firmware.bat CYD_ILI9341 COM5
flash_firmware.bat CYD_ST7789 COM5
flash_firmware.bat WS8048S070C COM5


Ohne vorheriges Löschen flashen, falls nötig:

flash_firmware.bat --target WS8048S070C --port COM5 --no-erase


COM-Ports anzeigen:

flash_firmware.bat --list-ports


Flash-Tool prüfen:

flash_firmware.bat --check


Wenn der Flashvorgang bei
Connecting...
hängen bleibt: BOOT-Taste gedrückt halten, während das Display verbunden wird oder der Flash startet. Sobald die Verbindung beginnt, BOOT loslassen.

3.5 Manuelles Flashen mit esptool.exe unter Windows

Die empfohlene Methode ist
flash_firmware.bat
. Die folgenden Befehle sind nur für manuelles Flashen gedacht.
COM7
muss durch den richtigen Port ersetzt werden.

2432S028R - ILI9341

esptool.exe --chip esp32 --port COM7 --baud 460800 write-flash -z 0x1000 firmware\esp32-2432S028R-ILI9341.bootloader.bin 0x8000 firmware\esp32-2432S028R-ILI9341.partitions.bin 0xe000 firmware\esp32-2432S028R-ILI9341.boot.bin 0x10000 firmware\esp32-2432S028R-ILI9341.bin


2432S028R - ILI9341 V2

esptool.exe --chip esp32 --port COM7 --baud 460800 write-flash -z 0x1000 firmware\esp32-2432S028R-ILI9341-V2.bootloader.bin 0x8000 firmware\esp32-2432S028R-ILI9341-V2.partitions.bin 0xe000 firmware\esp32-2432S028R-ILI9341-V2.boot.bin 0x10000 firmware\esp32-2432S028R-ILI9341-V2.bin


2432S028R - ST7789

esptool.exe --chip esp32 --port COM7 --baud 460800 write-flash -z 0x1000 firmware\esp32-2432S028R-ST7789.bootloader.bin 0x8000 firmware\esp32-2432S028R-ST7789.partitions.bin 0xe000 firmware\esp32-2432S028R-ST7789.boot.bin 0x10000 firmware\esp32-2432S028R-ST7789.bin


ESP32-S3 Display mit boot.bin, Beispiel WS8048S070C

esptool.exe --chip esp32s3 --port COM7 --baud 460800 write-flash -z 0x0000 firmware\esp32s3-WS8048S070C.bootloader.bin 0x8000 firmware\esp32s3-WS8048S070C.partitions.bin 0xe000 firmware\esp32s3-WS8048S070C.boot.bin 0x10000 firmware\esp32s3-WS8048S070C.bin


ESP32-S3 Display ohne boot.bin, Beispiel JC3248W535C

esptool.exe --chip esp32s3 --port COM7 --baud 460800 write-flash -z 0x0000 firmware\esp32s3-JC3248W535C.bootloader.bin 0x8000 firmware\esp32s3-JC3248W535C.partitions.bin 0x10000 firmware\esp32s3-JC3248W535C.bin


Passende Firmware-Prefixe:

esp32-2432S028R-ILI9341
esp32-2432S028R-ILI9341-V2
esp32-2432S028R-ST7789
esp32s3-JC3248W535C
esp32s3-WS8048S043C
esp32s3-WS8048S070C
esp32s3-EC8048S070C
esp32s3-EC8048S070B
esp32s3-EC8048S070CT
esp32s3-WSTOUCHLCD28


3.6 Flashen mit Python / Linux

Zuerst esptool installieren:

pip install esptool


Unter Linux erscheint das Gerät normalerweise als
/dev/ttyUSB0
oder
/dev/ttyACM0
. Der Port muss angepasst werden.

2432S028R - ILI9341

python -m esptool --chip esp32 --port /dev/ttyUSB0 --baud 460800 write-flash -z 0x1000 firmware/esp32-2432S028R-ILI9341.bootloader.bin 0x8000 firmware/esp32-2432S028R-ILI9341.partitions.bin 0xe000 firmware/esp32-2432S028R-ILI9341.boot.bin 0x10000 firmware/esp32-2432S028R-ILI9341.bin


2432S028R - ILI9341 V2

python -m esptool --chip esp32 --port /dev/ttyUSB0 --baud 460800 write-flash -z 0x1000 firmware/esp32-2432S028R-ILI9341-V2.bootloader.bin 0x8000 firmware/esp32-2432S028R-ILI9341-V2.partitions.bin 0xe000 firmware/esp32-2432S028R-ILI9341-V2.boot.bin 0x10000 firmware/esp32-2432S028R-ILI9341-V2.bin


2432S028R - ST7789

python -m esptool --chip esp32 --port /dev/ttyUSB0 --baud 460800 write-flash -z 0x1000 firmware/esp32-2432S028R-ST7789.bootloader.bin 0x8000 firmware/esp32-2432S028R-ST7789.partitions.bin 0xe000 firmware/esp32-2432S028R-ST7789.boot.bin 0x10000 firmware/esp32-2432S028R-ST7789.bin


ESP32-S3 Display mit boot.bin, Beispiel WS8048S070C

python -m esptool --chip esp32s3 --port /dev/ttyUSB0 --baud 460800 write-flash -z 0x0000 firmware/esp32s3-WS8048S070C.bootloader.bin 0x8000 firmware/esp32s3-WS8048S070C.partitions.bin 0xe000 firmware/esp32s3-WS8048S070C.boot.bin 0x10000 firmware/esp32s3-WS8048S070C.bin


ESP32-S3 Display ohne boot.bin, Beispiel JC3248W535C

python -m esptool --chip esp32s3 --port /dev/ttyUSB0 --baud 460800 write-flash -z 0x0000 firmware/esp32s3-JC3248W535C.bootloader.bin 0x8000 firmware/esp32s3-JC3248W535C.partitions.bin 0x10000 firmware/esp32s3-JC3248W535C.bin


3.7 Wichtige Flash-Hinweise

-
build_firmware.bat
nur zum Bauen verwenden.
-
flash_firmware.bat
nur zum Flashen verwenden.
- Die Firmware-Dateien müssen vor dem Flashen in
content\firmware
vorhanden sein.
-
build_firmware.bat --install
einmal vor dem ersten Arduino-CLI-Build ausführen.
- Nach Änderung von Partition-Modus oder Build-Optionen neu bauen und neu flashen.
- Bei OTA-Problemen prüfen, ob das Gerät mit OTA-Partition geflasht wurde und ob die
.bin
in den freien OTA-Slot passt.
- Wenn Arduino CLI Bibliotheken nicht findet,
C:\ArduinoIDE\Data\Lib
und
C:\ArduinoIDE\Data\Sketchbook\libraries
prüfen.
- Wenn SSH-Funktionen genutzt werden, muss die passende SSH-Bibliothek in den Arduino-Libraries vorhanden sein.
- Alles erfolgt auf eigenes Risiko.


3.8 Desktop-Version und Remote-Sender mit Makefile

Die Desktop-Version verwendet denselben UI-Code wie das ESP32-Display, läuft aber in einem SDL2-Fenster. Ab v0.0.2.3 besitzt der Desktop-Build vollständigere Netzwerk-, WebSocket-, SD- und Screen-Mirror-Funktionen.

Wichtige Makefile-Ziele:

make release
make release-desktop
make release-remote
make debug
make debug-desktop
make debug-remote


Release verwendet größenoptimierte Compiler-/Linker-Optionen. Unter unterstützten Plattformen können LTO und Strip gesteuert werden. Debug baut mit Debugsymbolen und ohne Release-Optimierung.

Der Desktop-Simulator startet standardmäßig im Vollbildmodus. Umschalten ist mit
F11
oder
Alt+Enter
möglich. Fenstergrößenänderungen, High-DPI-Skalierung, Maus und native Touch-Ereignisse werden auf die interne Displayauflösung umgesetzt.

Die Option Show mouse cursor (desktop) unter Display legt fest, ob der Mauszeiger über dem simulierten Display sichtbar ist.

SD-Karten-Root für Desktop:

- Zuerst wird
MMDVM_SDCARD_DIR
verwendet, falls gesetzt.
- Sonst sucht die Anwendung nach einem passenden
sdcard
-Ordner neben Projekt beziehungsweise ausführbarer Datei.
- Der Ordner sollte insbesondere
webui/index.html
,
webui/styles.css
und
webui/app.js
enthalten.

Netzwerkabfragen sind im Desktop-Build standardmäßig aktiv. Für einen reinen UI-Test können sie mit
MMDVM_DESKTOP_NETWORK=0
deaktiviert werden.

4. Erste Einrichtung nach dem Flashen

Schritt 1: Display starten

Nach dem Flashen wird das Display per USB oder über die normale Stromversorgung gestartet. Wenn noch keine gültige Konfiguration vorhanden ist, öffnet das Gerät automatisch einen Setup-Access-Point.

Schritt 2: Mit dem Setup-WLAN verbinden

Mit Handy, Tablet oder PC das WLAN verbinden:

MMDVM-Display-xxxxxx


Die genaue Adresse wird auf dem Display angezeigt. In der Regel wird die Weboberfläche über die auf dem Display angezeigte IP geöffnet.

Schritt 3: Grundkonfiguration speichern

In der Weboberfläche mindestens folgende Felder ausfüllen:

- Aktiv backend: Pi-Star oder WPSD auswählen.
- Pi-Star / WPSD Host or IP: Hostname oder IP des Hotspots eintragen.
- WiFi SSID 1 und WiFi Passwort 1: eigenes WLAN eintragen.
- Optional: Device callsign setzen.

Danach auf Speichern configuration klicken.

Schritt 4: Normale Verbindung verwenden

Nach dem Speichern verbindet sich das Display mit dem eingetragenen WLAN. Die neue IP-Adresse wird auf dem Display angezeigt. Danach die Weboberfläche über diese neue Adresse öffnen.

5. Aufbau der Weboberfläche

Die Weboberfläche ist in zwei Hauptbereiche aufgeteilt.

Konfiguration

Hier werden die allgemeinen Geräteeinstellungen vorgenommen:

- System mode
- MMDVM
- Quick actions
- Network
- Wifi
- Display
- Weather
- Traffic
- Lookup
- Design

Application

Hier liegen Zusatzseiten und Wartungsfunktionen:

- DVSwitch
- FRN
- SVXLink
- APRS
- HAMQSL
- Screen Mirror
- ADSB
- Hinweise
- Ziel lists
- SD files
- OTA firmware

Oben in der Weboberfläche stehen Import- und Export-Funktionen für die Konfiguration zur Verfügung.

Ab v0.0.2.3 werden die sichtbaren Seiten aus
/webui
auf der SD-Karte ausgeliefert. Gemeinsame Darstellung und Bindings liegen in
styles.css
,
app.js
und
bind.js
. Die aktuellen Konfigurations- und Laufzeitwerte werden über
/api/webui/state
geladen. Dadurch zeigt die Oberfläche unter anderem Firmwareversion, Board/Controller, FRN-Laufzeitstatus und Traffic-Status dynamisch an.

6. System mode

Aktiv backend

Hier wird ausgewählt, welches MMDVM-System für die normalen LIVE- und HEARD-Seiten verwendet wird:

- Pi-Star
- WPSD

DVSwitch und FRN ersetzen diese Backend-Auswahl nicht. DVSwitch wird unabhängig unter Application -> DVSwitch als zusätzliche WATCH-/HEARD-Quelle aktiviert; FRN wird unter Application -> FRN als direkte zusätzliche WATCH-Quelle konfiguriert.

Device callsign

Hier kann ein eigenes Rufzeichen für Bootscreen, Statusanzeigen und Weboberfläche eingetragen werden. Bleibt das Feld leer, wird der Standardwert verwendet.

Start Seite after boot

Wenn zusätzliche WATCH-Quellen aktiviert sind, kann die Startseite nach dem Booten ausgewählt werden.

Mögliche Startseiten sind, abhängig von den aktivierten Funktionen:

- MMDVM LIVE / WATCH
- MMDVM HEARD
- DVSwitch LIVE / WATCH
- DVSwitch HEARD
- SVXLink LIVE / WATCH
- SVXLink HEARD
- FRN LIVE / WATCH
- FRN CLIENTS
- APRS WATCH
- Weather WATCH
- HAMQSL WATCH
- ADSB WATCH
- Screen Mirror WATCH

Wenn eine gewählte Quelle später deaktiviert oder unvollständig konfiguriert wird, fällt die Firmware beim Booten auf MMDVM LIVE zurück.

7. MMDVM settings

Dieser Bereich verbindet das Display mit Pi-Star oder WPSD.

Pi-Star / WPSD Host or IP

Hier wird die Adresse des Dashboards eingetragen, zum Beispiel:

pi-star.local
192.168.1.50


Das Display liest darüber die Live- und Last-Heard-Daten.

Enable SSH remote control

Diese Option aktiviert SSH-Steuerung für Touch-Bedienung und Quick Aktionen.

Nur aktivieren, wenn wirklich Befehle vom Display auf dem Hotspot ausgeführt werden sollen.

SSH user / Passwort / port

Standardwerte:

User: pi-star
Port: 22


Das Passwort muss zum Zielsystem passen. Bei WPSD oder angepassten Installationen können andere Zugangsdaten nötig sein.

8. Quick actions

Quick Aktionen sind bis zu vier frei definierbare SSH-Befehle. Sie erscheinen im Touchscreen-Popup ACTIONS auf der Live-Seite und können auch direkt aus der Weboberfläche gestartet werden.

Pro Preset gibt es:

- Enable preset: Schaltet den Slot ein.
- Prefix command with sudo: Führt den Befehl mit sudo aus.
- Button label: Beschriftung des Buttons auf dem Display.
- Remote shell command: Der auszuführende Shell-Befehl.

Beispiele für sinnvolle Aktionen:

DMR TG91
DMR TG263
REF001C
Disconnect


Wichtig: Das Display führt exakt den Befehl aus, der eingetragen wird. Befehle sollten vorher manuell per SSH getestet werden.

9. Network

Refresh interval

Legt fest, wie oft das Display neue Daten vom MMDVM-Backend abfragt. Standard ist etwa 1500 ms.

Ein kleiner Wert aktualisiert schneller, erzeugt aber mehr Netzwerk- und CPU-Last. Ein größerer Wert ist ruhiger und stabiler bei schwachen Netzwerken.

Callsign hold

Legt fest, wie lange ein empfangenes Rufzeichen auf dem Display gehalten wird, bevor der normale Idle-Zustand wieder erscheint.

Convert API UTC time to local device time

Wenn aktiv, werden UTC-Zeitangaben aus der API in lokale Zeit umgerechnet.

Zeit zone rule

Für Deutschland kann diese POSIX-Zeitzonenregel verwendet werden:

CET-1CEST,M3.5.0/2,M10.5.0/3


10. Wifi

Die Firmware unterstützt bis zu 5 gespeicherte WLAN-Profile.

Für jedes Profil gibt es:

- WiFi SSID
- WiFi Passwort

Nicht genutzte Zeilen bleiben leer.

Retries per WiFi Profil

Legt fest, wie oft ein sichtbares WLAN erneut versucht wird, bevor das nächste Profil verwendet wird.

Beispiele:

- 0: nur ein Versuch,
- 2: erster Versuch plus zwei Wiederholungen.

Wenn kein gespeichertes WLAN funktioniert, bleibt der Setup-Access-Point aktiv, damit die Konfiguration erneut geändert werden kann.

Hinweis: Neuere Versionen speichern auch SSIDs und Passwörter mit Leerzeichen sauber und stellen sie korrekt wieder her.

11. Display

Brightness

Helligkeit von 0 bis 255.

Design base color

Basisfarbe der Weboberfläche und Display-Akzentfarbe, zum Beispiel:

#35C2FF


Flip screen 180°

Dreht die Anzeige um 180 Grad.

Show mouse cursor (desktop)

Diese Option gilt nur für den Desktop-Simulator. Wenn deaktiviert, bleibt der Mauszeiger über dem simulierten Display verborgen.

Enable scrolling Text

Lange Texte scrollen automatisch, statt abgeschnitten zu werden.

Enable screensaver

Aktiviert den normalen Bildschirmschoner. Nach Inaktivität wird die Hintergrundbeleuchtung gedimmt.

Use Weather for Screensaver

Wenn aktiv, zeigt der Screensaver die volle Weather-Seite. Wenn deaktiviert, bleibt der normale Screensaver aktiv und kann bei aktivierter Wetterfunktion ein kompaktes Wetter-Badge anzeigen.

Voraussetzung ist eine funktionierende Weather-Konfiguration.

Screensaver timeout

Zeit bis zum Start des Screensavers in Millisekunden.

Screensaver brightness

Helligkeit im Screensaver-Modus von 0 bis 255.

Eine Berührung des Displays beendet den Screensaver.

Ab v0.0.2.1 verwenden Länderflaggen, Wetter-Badges und Last-Heard-Badges responsive Größen und werden auf den verschiedenen Displayauflösungen zentriert. Der normale schwarze Screensaver bietet dadurch mehr Platz für längere Zielinformationen.

12. Weather / OpenWeather

Die Wetterfunktion ist optional und erscheint als WATCH-Quelle sowie optional im Screensaver.

Benötigt werden:

- Enable Weather WATCH + screensaver
- Refresh time
- Latitude
- Longitude
- OpenWeather API key

Beispielkoordinaten:

Latitude: 50.11552
Longitude: 8.68417


Die Firmware nutzt OpenWeather für aktuelle Wetterdaten und zusätzlich Forecast-Daten. Dadurch gibt es neben der aktuellen Wetteransicht auch eine Forecast/Cast-Seite mit mehreren kommenden Tagen.

Wenn SVXLink GPS-Koordinaten verfügbar sind, kann die Firmware diese Koordinaten automatisch für Wetterinformationen verwenden. Ändern sich die SVXLink-Koordinaten deutlich, werden die Wetterkoordinaten angepasst und die Wetterdaten neu geladen.

Wetter-Icons

Wetter-Icons können lokal auf der SD-Karte liegen:

/weather


Die Firmware sucht nach mehreren Varianten, zum Beispiel:

/weather/01d_64.png
/weather/01d_32.png
/weather/01d.png
/weather/01d_24.png
/weather/01_64.png
/weather/01_32.png
/weather/01.png
/weather/01_24.png


Fehlen Icons, funktioniert die Wetterseite trotzdem, nur ohne Symbolgrafik.


13. Traffic / deutsche Autobahn

Ab v0.0.2.3 kann die Firmware aktuelle Verkehrsinformationen der deutschen Autobahn-API als scrollenden Footer anzeigen.

Einstellungen im Hauptbereich Traffic:

- Enable Autobahn traffic footer
- Coordinate source
- Refresh interval minutes
- Ort radius km
- Static latitude
- Static longitude
- Highways

Enable Autobahn traffic footer

Wenn aktiviert, ersetzt der Traffic-Text den normalen Footer und scrollt automatisch. Die eigentliche Abfrage läuft getrennt vom normalen Display-Refresh, damit Web-/Displaydarstellung nicht auf langsame API-Aufrufe warten muss.

Coordinate source

Mögliche Quellen:

- Auto: SVXLink, Weather, APRS, Static
- SVXLink latitude / longitude
- Weather latitude / longitude
- APRS center / current position
- Static latitude / longitude

Bei Auto wird zuerst eine gültige SVXLink-GPS-Position versucht, danach Weather, APRS-Mittelpunkt beziehungsweise aktuelle APRS-Position und zuletzt die statischen Traffic-Koordinaten.

Refresh interval minutes

Erlaubter Bereich: 1 bis 120 Minuten. Standard ist 5 Minuten. Bei Fehlern versucht die Firmware später automatisch erneut.

Ort radius km

Erlaubter Bereich: 10 bis 500 km. Standard ist 120 km. Wenn gültige Koordinaten vorhanden sind, werden nur Meldungen innerhalb dieses Radius berücksichtigt.

Highways

Bis zu acht Autobahnen können eingetragen werden. Trennzeichen dürfen Semikolon, Komma oder Leerzeichen sein.

Standard:

A3;A5;A45;A66


Die Firmware fragt pro Autobahn aktuelle warnings, closures und roadworks ab. Zukünftige Einträge werden übersprungen. Sperrungen erhalten eine höhere Priorität; bei vorhandener Position fließt zusätzlich die Entfernung in die Sortierung ein. Im Footer werden bis zu drei relevante Meldungen gezeigt.

Wenn keine aktuelle Meldung gefunden wird, erscheint eine entsprechende Meldung für die konfigurierten Autobahnen beziehungsweise den gewählten Radius.

14. Lookup / RadioID

RadioID fallback

Wenn aktiviert, kann das Display fehlende Rufzeicheninformationen online über RadioID oder eine kompatible API nachladen.

Standard-URL:

https://radioid.net/api/users?callsign=


Bei eigenen APIs kann
%CALLSIGN%
im URL-Template verwendet werden. Die Firmware ersetzt diesen Platzhalter automatisch durch das Rufzeichen.

Unterstützte Antwortformate:

- RadioID-ähnliches JSON
- JSON-Objekt oder JSON-Array mit Namensfeld
- Plain-Text mit Operatornamen

Ab v0.0.2.1 werden Namen, Orte und andere externe Texte für die Displaydarstellung normalisiert. Dazu gehören unter anderem lesbare deutsche Umlaute und Gradzeichen, soweit die verwendete Display-Schrift dies erfordert.

15. Ziel lists

Target-Listen lösen Talkgroups, Reflectoren und Räume in lesbare Namen auf. Die Dateien liegen im Ordner:

/lookup


Verwendete Dateien:

/lookup/dmr.txt
/lookup/dstar.txt
/lookup/ysf.txt
/lookup/p25.txt
/lookup/nxdn.txt


Unterstütztes Format:

262|Germany


Akzeptiert werden auch Semikolon, Komma, Tab oder einfache Leerzeichen als Trennzeichen.

Source URLs

Standard-Basis-URL:

https://w0chp.radio/digital-radio-lists/


Standardpfade:

brandmeister-talkgroups/
xlx-reflectors/
ysf-reflectors/
p25-reflectors/
nxdn-reflectors/


Es können eigene URLs pro Mode eingetragen werden. Bleibt ein Feld leer, verwendet das Display die Standardpfade.

Update

Über Application -> Ziel lists -> Update können Listen für folgende Modi heruntergeladen werden:

- DMR
- D-STAR / XLX
- YSF
- P25
- NXDN

Internetverbindung wird nur für das Aktualisieren benötigt. Die Anzeige selbst nutzt danach die lokalen Dateien.

16. DVSwitch

DVSwitch ist ab v0.0.2.2 eine eigenständige optionale WATCH- und HEARD-Quelle. Die normale MMDVM-Verbindung zu Pi-Star oder WPSD bleibt dabei unverändert aktiv.

Die Einstellungen liegen unter:

Application -> DVSwitch


DVSwitch Übersicht

Einstellungen:

- Enable DVSwitch
- DVSwitch host/IP or base URL
- Last-heard path
- Status path

Beispiele für Host oder Basis-URL:

192.168.1.60
http://dvswitch.local


Standardpfade einer typischen DVSwitch-Dashboard-Installation:

Last-heard path: /include/lh.php
Status path:     /include/status.php


Die Firmware liest die HTML-Ausgaben dieser Seiten und übernimmt daraus je nach vorhandenen Dashboarddaten unter anderem:

- Callsign
- Mode und DMR-Timeslot
- Ziel beziehungsweise Quelle
- Dauer
- Loss und BER
- aktuell ausgewählten DVSwitch-Digitalmode

Nach dem Speichern erscheint DVSwitch im WATCH-Auswahlfenster. Auf dem Display stehen eine DVSwitch-LIVE-Ansicht und eine DVSwitch-HEARD-Ansicht zur Verfügung. Beide können außerdem unter Start Seite after boot als Startseite gewählt werden.

Wenn DVSwitch deaktiviert wird oder kein Host eingetragen ist, fällt die Anzeige sicher auf MMDVM zurück.

DVSwitch SSH Anmelden

SSH ist nur erforderlich, wenn DVSwitch-Modi oder gespeicherte Ziele direkt vom Touchscreen geschaltet werden sollen.

Einstellungen:

- Enable DVSwitch SSH actions
- DVSwitch SSH user
- DVSwitch SSH Passwort
- DVSwitch SSH port
- Ziel switch script

Standardwerte:

User: root
Port: 22
Script: /opt/MMDVM_Bridge/dvswitch.sh


Dashboard-Zugriff und SSH verwenden denselben eingetragenen DVSwitch-Host. Der Host muss deshalb sowohl die Dashboardseiten bereitstellen als auch per SSH erreichbar sein, wenn die Steuerfunktionen genutzt werden.

Mode-Umschaltung auf dem Display

Auf der DVSwitch-LIVE-Seite können folgende Modi über die Mode-Buttons gewählt werden:

- DMR
- D-STAR
- YSF
- P25
- NXDN

Nach dem Antippen erscheint eine Bestätigung. Die Firmware führt anschließend über SSH sinngemäß folgenden Befehl aus:

/opt/MMDVM_Bridge/dvswitch.sh mode DMR


Der Modename wird passend zum gewählten Button eingesetzt. Bei einem anderen Installationspfad muss Ziel switch script angepasst werden. Für einen Nicht-root-Benutzer wird der Aufruf über sudo ausgeführt.

DVSwitch target presets

Es stehen vier frei definierbare Ziel-Presets zur Verfügung. Jeder Slot enthält:

- Aktiviert
- Use sudo
- Button label
- SSH command / target command

Die aktivierten Presets erscheinen über den ACTIONS-Button auf der DVSwitch-LIVE-Seite und verwenden die separaten DVSwitch-SSH-Zugangsdaten.

Beispiele:

/opt/MMDVM_Bridge/dvswitch.sh DMR 262 262 'DMR TG 262'
/opt/MMDVM_Bridge/dvswitch.sh mode DMR && /opt/MMDVM_Bridge/dvswitch.sh tune 262


Das Display führt den eingetragenen Shell-Befehl exakt aus. Befehle, Scriptpfade und sudo-Berechtigungen sollten deshalb zuerst manuell per SSH getestet werden.

17. Free Radio Network / FRN

FRN ist ab v0.0.2.3 eine eigenständige optionale WATCH-Quelle. Das Display verbindet sich direkt mit einem FRN-Server und arbeitet dabei als receive-only PC client. Es fordert keine Aussendung an und spielt kein Audio ab.

Die Einstellungen liegen unter:

Application -> FRN


Direkter FRN-Monitor

Einstellungen:

- Enable FRN WATCH
- FRN server hostname / IP
- FRN server port
- FRN net / room

Der Standardport im Formular ist
10024
, der tatsächlich benötigte Port hängt jedoch vom verwendeten FRN-Server ab. Server, Port und Net/Raum müssen zu den Daten passen, die auch ein normaler FRN-Client verwendet.

FRN Anmelden identity

FRN benötigt auch für einen reinen Monitor eine Login-Identität:

- FRN E-Mail
- FRN main Passwort / dynamic Passwort
- Callsign and user
- Country
- City / area
- Beschreibung

Vor der Verbindung fragt die Firmware automatisch
sysman.freeradionetwork.de
nach einem dynamischen Passwort. Ist diese Abfrage nicht verfügbar oder wurde bereits ein dynamisches Passwort eingetragen, wird auf den konfigurierten Wert zurückgegriffen.

Wichtig: Das direkte Legacy-FRN-Protokoll verwendet kein TLS. Passwort und Accountdaten werden lokal auf dem Display gespeichert und nach FRN-Protokoll an den Server übertragen. FRN sollte deshalb nur mit einem vertrauenswürdigen Server/Netz verwendet werden. Wenn möglich, ist ein eigener Monitor-Account sinnvoll.

FRN LIVE

Nach dem Speichern erscheint FRN im WATCH-Auswahlfenster. Die LIVE-Seite zeigt unter anderem:

- Verbindungsstatus, zum Beispiel Getting FRN Passwort, Connecting, Logging in oder Online
- FRN-Server, Port und Net/Raum
- aktiven Absender beziehungsweise aktuell sendenden Client
- Callsign/Benutzer
- City/Country
- Band/Channel
- Zahl der verbundenen Clients
- Access-Level und Client-Typ

FRN CLIENTS

Die CLIENTS-Seite zeigt die vom FRN-Server gelieferte Clientliste. Der aktuell sendende Eintrag wird hervorgehoben. Auf speicherarmen CYD-Builds wird bewusst nur ein kleinerer Ausschnitt der Liste lokal gehalten; die Gesamtzahl der verbundenen Clients wird separat angezeigt.

Startseite und Wiederverbindung

FRN LIVE und FRN CLIENTS können unter Start Seite after boot gewählt werden. Ist FRN deaktiviert oder unvollständig konfiguriert, fällt die Firmware sicher auf MMDVM LIVE zurück.

Normale Netzwerkabbrüche führen zu automatischen Wiederverbindungsversuchen. Authentifizierungsfehler werden langsamer erneut versucht, damit der FRN-Server nicht mit Loginversuchen belastet wird.

18. SVXLink

SVXLink ist optional und wird getrennt von Pi-Star/WPSD konfiguriert.

Enable SVXLink

Aktiviert SVXLink als zusätzliche WATCH- und HEARD-Quelle. Danach kann auf dem Display zwischen MMDVM und SVXLink gewechselt werden.

SVXLink source

Es gibt zwei Varianten:

- URL / dashboard HTML: liest eine bestehende SVXLink-Dashboardseite
- API / JSON bridge: nutzt einen JSON-Endpunkt wie
display-json.php


SVXLink Host/IP or full URL

Beispiele:

192.168.1.60
https://svxlink-host/index.php


SVXLink URL/API path

Beispiele:

/index.php
/api/display-json.php


SVXLink SSH actions

Für SVXLink gibt es separate SSH-Daten und separate Action-Slots. Diese erscheinen nur, wenn SVXLink als aktive WATCH-Quelle ausgewählt ist.

Einstellungen:

- Enable SVXLink SSH actions
- SVXLink SSH user
- SVXLink SSH Passwort
- SVXLink SSH port
- vier eigene SVXLink Action-Slots

SVXLink GPS für Wetter

Wenn SVXLink gültige GPS-Koordinaten liefert, kann die Firmware diese Koordinaten für die Wetterfunktion verwenden. Das ist besonders nützlich bei mobilen oder wechselnden Standorten.

19. APRS.fi

APRS kann als WATCH-Quelle aktiviert werden. Das Display verwendet den aktuellen LIVE- oder Last-Heard-Callsign als Suchrufzeichen und kann zusätzlich mehrere zuletzt gehörte Callsigns in einer Anfrage berücksichtigen.

Einstellungen unter Application -> APRS:

- Enable APRS
- APRS.fi API key
- Refresh interval minutes
- Area radius km
- Area center latitude
- Area center longitude

Area radius km

Legt fest, in welchem Umkreis APRS-Stationen angezeigt werden. Standard ist 50 km.

Area center latitude / longitude

Legt den Mittelpunkt für die APRS-Radar-/Umkreis-Anzeige fest.

Wenn leer, verwendet die Firmware nach Möglichkeit aktuelle/APRS-/Wetterpositionen als Mittelpunkt.

APRS Radar und Stations-Popups

Die APRS-Seite kann Stationen im konfigurierten Radius anzeigen. Beim Antippen beziehungsweise über die Detailansicht werden Informationen wie diese angezeigt:

- Callsign
- Entfernung
- Position
- Geschwindigkeit
- Kurs
- Höhe
- Kommentar oder Status
- Pfad
- Zuletzt gesehen

APRS-Icons können im Ordner
/aprs
liegen. Die Firmware sucht je nach APRS-Symbol nach passenden PNG-Dateien.

Rate-Limits

Die Firmware begrenzt APRS-Abfragen, um Rate-Limits zu vermeiden:

- Mindest-Refresh: 10 Minuten
- Requests werden mindestens 5 Minuten auseinandergezogen
- bei Rate-Limit-Antworten wird eine 60-Minuten-Pause eingelegt
- bei Fehlern wird mit Backoff erneut versucht

Die APRS-Seite zeigt einen sichtbaren aprs.fi-Credit.

20. HAMQSL

HAMQSL zeigt Solar- und Ausbreitungsdaten als WATCH-Seite.

Die Einstellungen liegen unter:

Application -> HAMQSL


Einstellungen:

- Enable HAMQSL
- HAMQSL XML URL
- Refresh interval minutes

Standard-URL:

https://www.hamqsl.com/solarxml.php


Die minimale Aktualisierungszeit beträgt 60 Minuten.

Die Anzeige enthält unter anderem:

- Solar Flux
- Sunspots
- A-Index / K-Index
- X-Ray
- Geomagnetic Field
- Signal Noise
- Solar Wind
- MUF / foF2
- HF-Bandbedingungen
- VHF-Bedingungen

Die Displayseite zeigt einen sichtbaren HAMQSL/N0NBH-Credit.

21. ADSB / dump1090 / readsb

ADSB ist eine optionale WATCH-/RADAR-Quelle für Flugzeugdaten aus einem lokalen dump1090-, dump1090-fa- oder readsb-Server.

Die Einstellungen liegen unter:

Application -> ADSB


Einstellungen:

- Enable ADSB WATCH
- dump1090 Host/IP or full URL
- Aircraft JSON path
- Refresh interval seconds
- Radar radius km
- Radar center latitude
- Radar center longitude

Host und JSON-Pfad

Beispiele:

192.168.1.70:8080
http://dump1090.local


Häufige JSON-Pfade:

/dump1090-fa/data/aircraft.json
/data/aircraft.json


Refresh interval seconds

Standard ist 10 Sekunden. Erlaubter Bereich ist 5 bis 600 Sekunden.

Radar radius km

Standard ist 150 km. Erlaubter Bereich ist 1 bis 999 km.

Radar center latitude / longitude

Wenn diese Felder leer bleiben, nutzt die Firmware nach Möglichkeit Wetter- oder APRS-Koordinaten als Mittelpunkt.

ADSB Detail-Popup

Die ADSB-Radaransicht zeigt Flugzeuge im konfigurierten Bereich. Die Detailansicht kann unter anderem anzeigen:

- Hex-ID
- Flight / Callsign
- Squawk
- Position
- Entfernung
- Flughöhe
- Geschwindigkeit
- Track / Kurs
- Seen-Zeit

Airline-Logos

Optionale Airline-Logos werden aus folgendem Ordner geladen:

/adsb


Beispiele:

/adsb/LH_64.png
/adsb/LH.png
/adsb/U2_64.png
/adsb/U2.png


Auf größeren Displays wird zuerst nach einer passenden
_64
-Variante gesucht. Fehlt sie, verwendet die Firmware das normale Logo und zentriert es im verfügbaren Bereich.

Wenn die Datei vorhanden ist, kann eine Zuordnung über folgende Datei erfolgen:

/adsb/airlines.dat


Damit können ICAO-Callsign-Prefixe wie DLH auf IATA-Logo-Dateien wie LH.png gemappt werden. Fehlende Logos werden übersprungen.

22. Hinweise / Warnmeldungen

Hinweise sind optionale Popup-Warnungen auf dem Display. Die Einstellungen liegen unter:

Application -> Alerts


Die Firmware unterstützt drei Warnquellen:

- Deutschland: KATWARN/NINA über öffentliche NINA-Dashboard-/Map-Daten, optional positionsbezogen
- Europa: MeteoAlarm über EDR oder Atom
- USA: NOAA / National Weather Service Hinweise

Warnungen erscheinen als scrollbares Popup mit PREV / CLOSE / NEXT-Bedienung, wenn neue passende Meldungen gefunden werden.

22.1 Germany alerts / KATWARN-NINA

Einstellungen:

- Enable Germany alerts
- NINA / KATWARN location id

Für Deutschland kann weiterhin eine regionale ARS-ID eingetragen werden, wie sie von warnung.bund.de / NINA verwendet wird.

Beispiel:

064350000000


Ab v0.0.2.3 versuchen ESP32-Builds jedoch zuerst eine positionsbezogene Prüfung, wenn gültige Koordinaten vorhanden sind. Die Reihenfolge der möglichen Koordinatenquellen ist: SVXLink GPS, Weather, APRS center und ADS-B center. Die Firmware lädt dafür die NINA/KATWARN-Kartendaten und prüft die GeoJSON-Polygone der Warnungen gegen die aktuelle Position. Nur Warnungen, deren Polygon die Position enthält, werden angezeigt.

Wenn keine gültigen Koordinaten vorhanden sind, bleibt die konfigurierte ARS-ID als Ausweichlösung aktiv. Die Firmware bezeichnet die Anzeige als KATWARN/NINA und verwendet die öffentlichen NINA-Dashboard-/Map-Endpunkte als HTTP-Quelle.

22.2 MeteoAlarm Europe alerts

Einstellungen:

- Enable MeteoAlarm alerts
- MeteoAlarm mode
- MeteoAlarm country / feed settings
- optional EDR URL und Token, falls eine EDR-Quelle genutzt wird

Für viele Anwendungsfälle reicht der öffentliche Atom-Modus. Dabei wird je nach Land der passende MeteoAlarm-Feed verwendet. Wenn ein Dienst oder Server eine EDR-Quelle benötigt, können entsprechende URL-/Token-Felder genutzt werden. Für die koordinatenbasierte EDR-Filterung werden dieselben konfigurierten Positionsquellen verwendet, die auch der Alert-Laufzeitstatus der Weboberfläche meldet.

22.3 NOAA / NWS alerts

Einstellungen:

- Enable NOAA alerts
- NOAA zone oder passende NWS-Zonenkennung

Diese Funktion ist für US-Wetterzonen gedacht. Für Europa ist MeteoAlarm sinnvoller, für Deutschland KATWARN/NINA.

22.4 Alert-Popups

Neue Warnungen erscheinen als Popup. Die Bedienung erfolgt über:

- PREV: vorherige Warnung
- CLOSE: Popup schließen
- NEXT: nächste Warnung

Längere Texte werden gewrappt und können über die Popup-Seite gelesen werden.

23. SD files / SD-Dateimanager

Ab v0.0.2.0 gibt es eine eigene SD-Dateiverwaltung in der Weboberfläche.

Adresse:

/app/files


Die Seite zeigt einen Browser mit:

- Name
- Type
- Größe
- Ordnernavigation
- Back / Refresh
- Auswahl-Popup für Aktionen

Mögliche Aktionen:

- Datei hochladen
- Datei herunterladen
- Ordner erstellen
- Datei oder Ordner umbenennen
- Datei oder Ordner löschen
- kleine Textdateien im Browser öffnen und speichern
- optional ZIP-Datei hochladen und direkt entpacken

Texteditor

Kleine Textdateien bis 64 KB können direkt im Browser bearbeitet werden. Beim Speichern wird zuerst eine temporäre Datei geschrieben und danach die Originaldatei ersetzt. Dadurch wird das Risiko reduziert, dass eine Datei bei einem fehlgeschlagenen Speichern beschädigt wird.

ZIP-Upload

Wenn ZIP-Unterstützung im Build aktiviert ist, können ZIP-Dateien hochgeladen und in den aktuellen SD-Ordner entpackt werden.

Sicherheitsregeln:

- normale stored/deflated ZIP-Einträge werden unterstützt,
- Pfade wie
../
werden blockiert,
- CRC-Prüfungen werden genutzt,
- maximal 512 ZIP-Einträge,
- maximal 32 MB entpackte Daten,
- problematische oder unsichere Pfade werden übersprungen.

Hinweis: Auf ESP32-2432S028R / CYD OTA-Builds kann ZIP-Entpacken automatisch deaktiviert sein, um Flash und RAM zu sparen. Der normale Dateimanager bleibt trotzdem verfügbar.

Geschützte Dateien

Konfigurationsdateien und temporäre Systemdateien werden gegen versehentliches Löschen geschützt, soweit die Firmware sie als geschützt erkennt.


24. SD-gehostete Weboberfläche

Ab v0.0.2.3 wird die Weboberfläche als eigenes Dateienpaket auf der SD-Karte ausgeliefert. Dadurch können HTML, CSS und JavaScript gepflegt werden, ohne die Firmware mit großen eingebetteten Seiten zu belasten.

Benötigter Ordner auf der SD-Karte:

/webui


Zum Kernpaket gehören insbesondere:

/webui/index.html
/webui/styles.css
/webui/app.js
/webui/bind.js
/webui/message.html
/webui/dvswitch.html
/webui/svxlink.html
/webui/frn.html
/webui/aprs.html
/webui/hamqsl.html
/webui/screen-mirror.html
/webui/adsb.html
/webui/alerts.html
/webui/target-lists.html
/webui/files.html
/webui/ota.html


Die normale Geräteadresse
/
lädt
/webui/index.html
. Auch die bekannten
/app/...
-Adressen bleiben bestehen und liefern die jeweilige Seite aus dem WebUI-Ordner.

Runtime-State API

Die JavaScript-Bindings laden aktuelle Werte über:

/api/webui/state


Die Antwort enthält die gespeicherte Konfiguration und Laufzeitdaten, unter anderem:

- Firmwareversion
- IP-Adresse
- Display-/Controller-Bezeichnung
- Backend und Build
- Callsign
- Traffic-Text und verwendete Traffic-Positionsquelle
- FRN-Status, Clientzahl und aktiven FRN-Client
- verfügbare Alert-Koordinaten und deren Quelle
- OTA-/Partitionsstatus, soweit auf dem jeweiligen Build verfügbar

Dadurch kann ein statischer HTML-Header noch einen älteren Platzhaltertext enthalten;
bind.js
ersetzt die sichtbaren Statuswerte beim Laden mit den tatsächlichen Runtime-Daten der Firmware.

Zusätzliche Assets

Dateien unter
/webui
, die nicht zu den fest registrierten Kernseiten gehören, können ebenfalls direkt ausgeliefert werden. Der Webserver ermittelt dafür den MIME-Typ anhand der Dateiendung.

Fehlendes WebUI-Bundle

Wenn eine benötigte Datei fehlt, liefert die Firmware eine klare 404-Meldung wie:

Missing SD WebUI asset: /webui/index.html
Copy the complete supplied /webui directory to the SD-card root.


In diesem Fall den vollständigen
content/sdcard/webui
-Ordner erneut auf die SD-Karte kopieren.

25. Screen Mirror

Screen Mirror ist eine optionale WATCH-Quelle. Sie empfängt Frames über WebSocket von einem PC-Sender und zeichnet sie zwischen Header und Footer. JPEG bleibt unterstützt; ab v0.0.2.3 kann der Desktop-/Remote-Sender zusätzlich direkte RGB565-Frames in der vom Display angeforderten Größe liefern.

Die Einstellungen liegen unter:

Application -> Screen Mirror


Einstellungen:

- Enable Screen Mirror
- WebSocket port
- Frame width
- Frame height
- Maximum JPEG KB
- Refresh interval ms

Die Seite zeigt außerdem die aktuelle Receiver-URL, zum Beispiel:

ws://<display-ip>:<port>


Typische Framegrößen:

320x240
480x320
800x480


Für die beste Darstellung sollte der PC-Sender dieselbe Größe senden, die auf der Screen-Mirror-Seite eingestellt ist.

Nutzung auf dem Display

1. Screen Mirror in der Weboberfläche aktivieren.
2. Einstellungen speichern.
3. Auf dem Display WATCH antippen.
4. MIRROR auswählen.
5. Den PC-Sender mit der WebSocket-URL des Displays verbinden.

Die Firmware fordert Frames im eingestellten Refresh-Intervall an. Bei JPEG werden zu große Bilder auf den verfügbaren Bereich zwischen Header und Footer begrenzt. Der aktuelle Desktop-Remote-Sender versteht zusätzlich
REQUEST_FRAME_RGB565:<breite>x<höhe>
und sendet danach einen RGB565-Frame in genau dieser Größe. Dadurch entfällt JPEG-Decoding auf dem Empfänger für diesen Pfad.

Touch-Eingaben können an den aktiven WebSocket-Sender weitergereicht werden. Beim RGB565-Pfad werden die Touch-Koordinaten an die tatsächlich angeforderte Framegröße angepasst.

26. OTA firmware

OTA-Updates erfolgen über:

Application -> OTA firmware


Die OTA-Seite ist für Application-
.bin
-Dateien gedacht.

Nicht verwenden:

-
.ino

-
.zip

- Bootloader-
.bin

- Partition-
.bin

- Merged-/Full-Flash-Dateien

Ab v0.0.2.0 zeigt die OTA-Seite zusätzliche Statusinformationen:

- Sketch Größe
- OTA free space
- OTA partition Status
- Upload-/Update-Status
- klarere Fehlermeldungen bei falscher Datei, falscher Größe oder fehlender OTA-Partition

Wichtig:

- Das Gerät muss vorher per USB mit OTA-Partition geflasht worden sein.
- Für CYD 4 MB muss die App in den OTA-Slot passen.
- Factory-/Huge-App-CYD-Builds unterstützen keine OTA-Updates.
- Nach einem erfolgreichen OTA-Update startet das Gerät neu.

27. Import / Export und Konfiguration sichern

Die Weboberfläche bietet Import und Export der Konfiguration. Vor größeren Änderungen, OTA-Updates oder einem Factory-Flash sollte die Konfiguration exportiert werden.

Die Konfiguration enthält unter anderem:

- Backend und Hotspot-Adresse
- WLAN-Profile
- Display- und Theme-Einstellungen
- Screensaver-Einstellungen
- Weather, Lookup und Target-Listen
- SSH Quick Aktionen
- DVSwitch inklusive Dashboardpfaden, SSH-Zugang und Ziel-Presets
- FRN inklusive Server, Net/Raum und Login-Identität
- Autobahn-Traffic inklusive Intervall, Radius, Positionsquelle, Koordinaten und Autobahnliste
- SVXLink, APRS, HAMQSL, ADSB und Hinweise
- Screen Mirror Einstellungen
- Desktop-Cursor-Einstellung

Bei der Desktop-Version wird die Konfiguration vollständig als Snapshot gespeichert. Ab v0.0.2.3 gehören auch FRN-, Traffic- und Desktop-Cursor-Einstellungen dazu.

28. Fehlersuche

Display startet Setup-AP

Prüfen:

- WLAN-SSID korrekt?
- WLAN-Passwort korrekt?
- 2,4-GHz-WLAN aktiv?
- Hotspot-IP/Hostname korrekt?
- Backend Pi-Star/WPSD richtig gewählt?

Keine Live-Daten

Prüfen:

- Pi-Star/WPSD Übersicht im Browser erreichbar?
- IP-Adresse oder Hostname im MMDVM-Bereich korrekt?
- Backend richtig gewählt?
- Hotspot und Display im selben Netzwerk?

DVSwitch wird nicht angezeigt oder liefert keine Daten

Prüfen:

- DVSwitch unter Application -> DVSwitch aktiviert?
- Host/IP oder Basis-URL korrekt?
- Dashboardseiten
/include/lh.php
und
/include/status.php
im Browser erreichbar?
- Abweichende Dashboardpfade in der Weboberfläche angepasst?
- Display und DVSwitch-System im selben Netzwerk beziehungsweise über das Netzwerk erreichbar?

DVSwitch Mode-Buttons oder Presets schlagen fehl

Prüfen:

- Enable DVSwitch SSH actions aktiviert?
- SSH-Benutzer, Passwort und Port korrekt?
- DVSwitch-Host per SSH erreichbar?
- Pfad zu
dvswitch.sh
korrekt?
- Befehl manuell per SSH getestet?
- Bei Nicht-root-Benutzern sudo-Berechtigung vorhanden?
- SSH-Unterstützung in diesem Firmware-Build enthalten?


FRN wird nicht angezeigt oder bleibt offline

Prüfen:

- FRN unter Application -> FRN aktiviert?
- Serverhostname/IP und Serverport korrekt?
- Net/Raum exakt richtig geschrieben?
- E-Mail, Passwort beziehungsweise dynamisches Passwort und Callsign/Benutzer eingetragen?
- Internetzugriff auf
sysman.freeradionetwork.de:10025
für die automatische Dynamic-Password-Abfrage möglich?
- FRN-Server aus dem verwendeten Netzwerk erreichbar?
- Bei wiederholten Authentifizierungsfehlern Zugangsdaten mit einem normalen FRN-Client gegenprüfen.

Traffic-Footer zeigt keine Meldungen

Prüfen:

- Enable Autobahn traffic footer aktiviert?
- Mindestens eine gültige Autobahn wie
A3
eingetragen?
- Internetzugriff auf
verkehr.autobahn.de
möglich?
- Bei aktivem Radius gültige Positionsquelle vorhanden?
- Testweise Coordinate source auf Static setzen und bekannte Latitude/Longitude eintragen.
- Radius testweise vergrößern.
- Im Web UI den angezeigten Traffic-Status und die verwendete Positionsquelle kontrollieren.

KATWARN/NINA zeigt keine lokale Warnung

Prüfen:

- Germany alerts aktiviert?
- Sind gültige SVXLink-, Weather-, APRS- oder ADS-B-Koordinaten vorhanden?
- Im Web UI unter Runtime-State prüfen, welche Alert-Koordinaten verwendet werden.
- Wenn keine Koordinaten verfügbar sind: gültige NINA-/ARS-Location-ID als Ausweichlösung eintragen.
- Eine Warnung wird im Koordinatenmodus nur angezeigt, wenn die Position innerhalb des gelieferten NINA-GeoJSON-Polygons liegt.

Weboberfläche fehlt oder zeigt Missing SD WebUI asset

Prüfen:

- Existiert
/webui/index.html
auf der SD-Karte?
- Wurden
styles.css
,
app.js
und
bind.js
mitkopiert?
- Am besten immer den kompletten mitgelieferten
content/sdcard/webui
-Ordner kopieren.
- Desktop:
MMDVM_SDCARD_DIR
prüfen oder den
sdcard
-Ordner neben Projekt/EXE ablegen.

OTA schlägt fehl

Prüfen:

- Wurde zuerst per USB mit OTA-Partition geflasht?
- Ist die hochgeladene Datei wirklich die Application-
.bin
?
- Passt die Datei in den freien OTA-Slot?
- CYD: eventuell
 --ota
oder Factory/Huge-App für USB-Flash verwenden.

Flashen schlägt bei Connecting fehl

BOOT-Taste gedrückt halten, während das Flashen startet, danach loslassen. Anderes USB-Kabel, underen USB-Port oder niedrigere Baudrate probieren, wenn es weiterhin fehlschlägt.

SD-Dateien fehlen oder Icons werden nicht angezeigt

Prüfen:

- SD-Karte korrekt formatiert und eingesteckt?
- Richtiger Ordnername, zum Beispiel
/weather
,
/lookup
,
/aprs
,
/adsb
?
- Dateinamen exakt passend?
- Bei CYD OTA: ZIP-Entpacken kann deaktiviert sein, normaler Upload einzelner Dateien bleibt möglich.

Screen Mirror verbindet nicht

Prüfen:

- Screen Mirror in der Weboberfläche aktiviert?
- Display-IP und WebSocket-Port korrekt?
- PC und Display im selben Netzwerk?
- Firewall auf dem PC blockiert den Absender?
- Port 80 vermeiden; die Firmware setzt ihn auf den Default-Port zurück.
- Auf dem Display WATCH -> MIRROR auswählen.
- Bei Verwendung des aktuellen Desktop-Remote-Senders prüfen, ob RGB565-Frameanforderungen beantwortet werden und die angeforderte Breite/Höhe zur Displayfläche passt.

29. Hinweise

- Firmware-Dateien müssen zum Displaytarget passen.
- Bootloader, Partition und Application müssen aus demselben Build stammen.
- Nach Änderung des Partition-Modus immer neu bauen und komplett per USB flashen.
- OTA ist bequem, aber nur möglich, wenn das Gerät vorher mit OTA-Partition geflasht wurde.
- SD-Dateien und Konfiguration vor größeren Aktualisierungen sichern.
- Ab v0.0.2.3 gehört
/webui
zum benötigten SD-Weboberflächenpaket; Firmware und WebUI-Bundle sollten gemeinsam aktualisiert werden.
- FRN verwendet ein Legacy-Protokoll ohne TLS; Zugangsdaten nur in vertrauenswürdigen Netzen/Servern verwenden.
- Autobahn-Traffic und positionsbezogene Warnungen hängen von externen APIs und gültigen Koordinaten ab.
- SSH-Befehle immer vorher manuell testen.
- Externe APIs können Rate-Limits oder Ausfälle haben.
- DVSwitch-, Pi-Star/WPSD- und SVXLink-SSH-Befehle werden auf dem jeweiligen Zielsystem ausgeführt und sollten nur in vertrauenswürdigen Netzwerken verwendet werden.
- Nutzung auf eigenes Risiko.