Vom Bot zum Dashboard…

Dieser Beitrag ist ein Update zum ursprünglichen Artikel über den MeshDD-Bot. Seitdem hat sich das Projekt grundlegend weiterentwickelt – aus einem einfachen Bot ist ein vollständiges Webdashboard geworden.


Vom Bot zum Dashboard – MeshDD-Dashboard (MDDB) v0.9

Was als schlichter Kommando-Bot für unser Dresdner Meshtastic-Netz gestartet ist, hat sich in den vergangenen Wochen zu einem vollwertigen Webdashboard mit Echtzeit-Monitoring, Benutzerverwaltung, NINA-Warnintegration und RF-Statistiken entwickelt. Der offizielle Name ist jetzt MeshDD-Dashboard (MDDB) – der Bot steckt weiterhin drin, ist aber nur noch eine von vielen Komponenten.

Dieser Beitrag gibt einen Überblick über den aktuellen Stand und einen Ausblick auf das, was als Nächstes kommt.


Was das Dashboard heute kann

Das Dashboard-Hauptfenster

Die Startseite ist öffentlich zugänglich und zeigt in Echtzeit per WebSocket:

  • Vier Statusboxen: Gesamt-Nodes, im letzten 24h-Fenster aktive Nodes, aktuell online (konfigurierbar, Standard: 15 Minuten) und beantwortete Bot-Anfragen
  • Nodes-Tabelle mit Name, Hardware-Modell, RSSI, Batteriestatus (farbcodiert), Hop-Anzahl, GPS-Indikator und letzter Aktivität – per Spaltenklick sortierbar und mit Suchfeld
  • Node-Detail-Modal: Klick auf eine Zeile öffnet alle Daten des Nodes inklusive einer Leaflet-Minikarte mit seiner Position
  • Vier Diagramme: Kanal-Anfragen (Doughnut), Hop-Verteilung (Balken), Hardware-Top-5 (Balken), Pakettypen der letzten 24h (Doughnut)
  • Nachrichten direkt senden (für eingeloggte Mitarbeiter und Admins): Kanal wählen, Text eingeben, abschicken – ohne Meshtastic-App
  • Konfigurierbare Links-Karte: Frei befüllbar mit eigenen Links (z.B. MeshMap, Meshtastic.org)
Live-Karte

Die Karte zeigt alle Nodes mit bekannter GPS-Position auf einer Leaflet-Karte. Die Marker sind farbcodiert nach Hop-Anzahl (blau = direkt, grün = 1 Hop, orange = 2 Hops, …) und werden mit zunehmendem Alter transparenter – Nodes die älter als 72 Stunden sind werden ausgeblendet. Das Kartentileset wechselt automatisch mit dem Hell-/Dunkel-Theme (OpenStreetMap ↔ CartoDB Dark Matter).

Paket-Log

Alle empfangenen Meshtastic-Pakete laufen in Echtzeit auf – öffentlich einsehbar. Die Tabelle zeigt Zeit, Absender, Empfänger, Pakettyp, Kanal, SNR, RSSI, Hop-Limit und dekodierte Nutzdaten (Position, Telemetrie, NodeInfo usw.). Eine mehrstufige Filterzeile erlaubt das kombinierte Filtern nach Absender, Empfänger, Kanal, maximaler Hop-Anzahl und Freitext.

Nachrichtenverlauf

Der Nachrichtenverlauf zeigt empfangene und gesendete Textnachrichten im Chat-Bubble-Design: empfangene Nachrichten links mit farbigem Kanalrand, vom Bot gesendete Nachrichten rechts in Grün. Kanalfilter-Buttons ermöglichen das schnelle Ein- und Ausblenden einzelner Kanäle. Die Seite ist öffentlich zugänglich.

NINA-Warnmeldungen

Die NINA-Integration war eines der komplexeren Features. Der Bot fragt die NINA-API des BBK (Bundesamt für Bevölkerungsschutz und Katastrophenhilfe) ab und kann neue Warnmeldungen automatisch ins Mesh senden.

Seit Version 0.9.2 ist die Konfiguration pro Schweregrad möglich:

Stufe Beispiel Standardverhalten
Minor – Gering Allgemeine Hinweise Abgerufen, kein Mesh-Versand, Abfrage alle 10 Min.
Moderate – Mäßig Unwetterwarnungen Stufe 1 Abgerufen, kein Mesh-Versand, Abfrage alle 5 Min.
Severe – Schwerwiegend Sturmböen, Hochwasser Mesh-Versand aktiv, Abfrage alle 5 Min., Wiederholung alle 30 Min.
Extreme – Extrem BBK-Zivilschutzwarnung Mesh-Versand aktiv, Abfrage alle 60 Sek., Wiederholung alle 10 Min.

Jede Stufe hat ihren eigenen Abfrageintervall, Wiederholungsintervall (0 = nur Änderungen senden), Zielkanal und Mesh-Freigabe. Wenn man z.B. Minor-Meldungen nur im Dashboard beobachten, aber nicht ins Netz senden will, kann das je Stufe einstellt werden.

Ein Versandlog protokolliert jede Aussendung mit Zeit, Kanal, Schweregrad und Meldungstext – filterbar nach Neu/Wiederholung, live per WebSocket aktualisiert.

Warnmeldungen werden regional über AGS-Codes (Amtliche Gemeindeschlüssel) gefiltert – bei uns sind die Stadt Dresden sowie die umliegenden Landkreise konfiguriert. Verfügbare Quellen: Katwarn, BIWAPP, MoWaS, DWD, LHP und Polizei.

Scheduler

Der Scheduler ermöglicht zeitgesteuerte Bot-Aktionen per Cron-Ausdruck. Jobs können entweder Bot-Kommandos ausführen oder freie Textnachrichten senden. Nachrichten unterstützen Template-Variablen wie {time}, {date}, {nodes}, {nodes_online} oder {version} – nützlich für automatische Statusmeldungen ins Netz.

RF-Statistiken

Unter /rf-stats gibt es einen interaktiven Zeitgraph mit drei Datenserien:

  • Air Util TX – tatsächlich gemessene Kanalauslastung des eigenen Nodes (aus Telemetriepaketen)
  • Channel Util – gesamte Kanalnutzung aus Gerätesicht
  • Geschätzte Airtime – berechnet aus Paketanzahl und LoRa-Airtime-Formel (abhängig vom konfigurierten Preset)

Zeitraum (1h / 6h / 24h / 7d) und Fenstergröße (1 / 5 / 15 / 60 Minuten) sind frei wählbar. Vier Stat-Karten zeigen die aktuellen Werte des letzten Zeitfensters.

Konfiguration im Dashboard

Über die Konfigurationsseite können Admins Bot-Name, Befehlspräfix, Meshtastic-Host/Port, Webserver-Port, Online-Schwellwert und benutzerdefinierte Links direkt im Browser bearbeiten – ohne die YAML-Datei anfassen zu müssen. Außerdem gibt es einen Toggle „Kommandos aktiv“: bei Deaktivierung ignoriert der Bot eingehende Mesh-Anfragen stumm, sendet aber weiterhin Scheduler- und NINA-Nachrichten.

Benutzerverwaltung und Rollen

Das Dashboard kennt drei Zugriffsebenen:

  • Public: Dashboard, Karte, Pakete, Nachrichten – keine Anmeldung nötig
  • Mitarbeiter: Zusätzlich Scheduler und NINA (Lesezugriff), Nachrichten senden
  • Admin: Vollzugriff inkl. Konfiguration, Benutzerverwaltung und alle Schreibrechte

Neue Mitarbeiter werden per E-Mail eingeladen: ein automatisch generiertes Passwort wird zugesendet, beim ersten Login ist ein Passwortwechsel Pflicht.

Bot-Kommandos

Die klassischen Mesh-Kommandos sind natürlich noch an Bord. Alle mit dem konfigurierten Präfix (Standard: ?):

Kommando Funktion
?ping Pong mit Hop-Anzahl des Absenders
?nodes Nodes online und gesamt
?mesh Detaillierte Netzübersicht (Online, 24h, Hops, Hardware)
?me Eigene Node-Daten (Hardware, Hops, SNR, RSSI, Batterie, Position)
?weather [plz:XXXXX] Aktuelles Wetter an der Node-Position oder per PLZ
?stats Bot-Statistiken
?info Bot-Name, Version, Laufzeit
?uptime Laufzeit
?help Übersicht aller Kommandos

Lange Antworten werden automatisch in Teilnachrichten mit Nummerierung [1/3] aufgeteilt.


Technischer Hintergrund

Das Projekt ist komplett in Python (asyncio) geschrieben und läuft als systemd-Service. Die wichtigsten Technologien:

  • meshtastic – Python-Bibliothek für die TCP-Verbindung zum Meshtastic-Gerät
  • aiohttp – Asynchroner Webserver mit WebSocket-Unterstützung
  • aiosqlite / SQLite – Lokale Datenbank (WAL-Modus) für Nodes, Nachrichten, Pakete, NINA-Log, Benutzer
  • aiohttp-session + bcrypt – Session-Authentifizierung mit verschlüsselten Cookies
  • Bootstrap 5.3 + Tabler CSS – Responsives Dashboard mit Hell-/Dunkel-Theme
  • Leaflet.js – Interaktive Karte
  • Chart.js 4 – Zeitgraphen und Diagramme
  • aiosmtplib – Asynchroner E-Mail-Versand für Einladungen und Passwort-Reset

Die gesamte Konfiguration liegt in config/config.yaml (live-reloaded, Änderungen werden ohne Neustart aktiv). NINA- und Scheduler-Konfiguration haben eigene YAML-Dateien.


Was als Nächstes geplant ist

Das Projekt wird aktiv weiterentwickelt. In Planung sind drei größere Themenblöcke:

Nachrichten-Warteschlange

Aktuell werden ausgehende Nachrichten ohne Wartezeit direkt gesendet. Geplant ist eine Warteschlange, die zwischen Sendungen automatisch pausiert – orientiert an der aktuellen Airtime-Auslastung des Nodes. So bleibt der Bot dutycycle-konform und verhält sich netzfreundlich, auch wenn NINA oder der Scheduler mehrere Nachrichten auf einmal produzieren.

MQTT-Anbindung

Ein eigener MQTT-Client soll den Bot mit einem Broker verbinden:

  • Publisher: Node-Updates, empfangene Nachrichten und NINA-Warnungen werden an den Broker gemeldet
  • Subscriber: Nachrichten vom Broker können direkt ins Mesh gesendet werden
  • Dashboard-Statusanzeige: Verbindungsstatus und Statistiken auf der Hauptseite sichtbar

Das öffnet die Möglichkeit, den MDDB in bestehende Heimautomations- oder Monitoring-Infrastruktur einzubinden.

Docker-Deployment

Für eine einfachere Installation soll es ein Docker-Image geben – mit separaten Bind-Mounts für config/ und data/ sowie einem docker-compose.yml. Dazu kommt ein GET /health-Endpunkt (JSON mit Status, Version, Meshtastic-Verbindungsstatus und Uptime) und eine vollständige Quickstart-Dokumentation im README.


Mitmachen und Quellcode

Das Projekt ist auf unserem Forgejo-Server gehostet und steht als Open Source zur Verfügung. Wer den MDDB ebenfalls betreiben oder zum Projekt beitragen möchte, ist herzlich eingeladen.

Der aktuelle Stand (v0.09.02, Februar 2026) ist stabil und läuft im Dresdner Mesh produktiv.

73 de Mesh Dresden

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen