Neue Abschnitte für v0.08.10–v0.08.15:
- Nachrichten-Seite (/messages), öffentlich ab v0.08.14
- Dashboard: RSSI/GPS-Spalten, Links-Card
- Scheduler: {nodes_online} + {version}, theme-aware Badges
- Konfiguration: web.online_threshold
- Bugfixes: Dashboard-Charts, Kartenlegende, Telemetrie-Filter, wantAck=False
- /api/links in API-Endpunkte-Tabelle ergänzt
- Versionshistorie bis v0.08.15 vervollständigt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
11 KiB
Was ist neu in MeshDD-Bot 0.8.x
Aktueller Stand: v0.08.15 · Release-Datum: 2026-02-20
Übersicht
Release 0.8 bringt die vollständige Integration des NINA BBK Warnsystems in den MeshDD-Bot, ergänzt um eine Reihe von Verbesserungen am Paket-Log, der Karte und der Verbindungsinitialisierung.
Neue Funktionen
NINA Warnmeldungs-Integration (/nina)
Der Bot ist jetzt an die NINA Warn-App des BBK (Bundesamt für Bevölkerungsschutz
und Katastrophenhilfe) angebunden. Warnmeldungen werden automatisch per HTTP-Polling
von warnung.bund.de/api31 abgerufen und ins Meshtastic-Netz gesendet.
Konfigurationsseite
Unter /nina (Admin-only) steht eine vollständige Verwaltungsseite bereit:
| Einstellung | Beschreibung |
|---|---|
| Aktiviert | NINA-Abfragen ein-/ausschalten |
| Ins Mesh senden | Aus = Monitor-Modus (nur Weboberfläche, kein Mesh-Versand) |
| Abfrageintervall | Wie oft neue Warnmeldungen abgerufen werden (Sek., min. 60) |
| Wiederholungsintervall | Aktive Warnungen werden in diesem Abstand erneut ins Mesh gesendet |
| Kanal | Meshtastic-Kanal (0–7) für den Versand |
| Mindest-Schweregrad | Gering / Mäßig / Schwerwiegend / Extrem |
| AGS-Codes | Amtliche Gemeindeschlüssel der zu überwachenden Regionen |
| Quellen | Katwarn, BIWAPP, MoWaS, DWD, LHP, Polizei |
AGS-Code-Verwaltung
- AGS-Codes werden in einer Tabelle mit Ortsname und Lösch-Button angezeigt
- Bei der Eingabe schlägt eine Combobox alle sächsischen Landkreise und kreisfreien Städte vor (Name + 12-stelliger Code)
- Voreingestellt: 5 Codes für den Raum Dresden (Stadt Dresden, LK Meißen, LK Sächsische Schweiz-Osterzgebirge, LK Bautzen, LK Görlitz)
Polling-Strategie
Zwei parallele Abfragestrategien pro Zyklus:
- Dashboard-Endpunkt (
/dashboard/{AGS12}.json) — regionale Filterung durch den BBK-Server; deckt alle Quellen für konfigurierte AGS-Codes ab. - mapData-Endpunkt (
/{quelle}/mapData.json) — wird nur verwendet, wenn keine AGS-Codes konfiguriert sind (bundesweite Abfrage ohne Geo-Filterung).
Quellenübergreifende De-Duplikation via ID-Normalisierung verhindert doppelte
Meldungen (z. B. dwdmap. ↔ dwd., mow. ↔ mowas.).
Warnmeldungen im Mesh
Nachrichten-Format im Meshtastic-Netz:
[NINA] Schwerwiegend: Sturmböen (Dresden, Stadt)
Beschreibung des Ereignisses (max. 120 Zeichen)...
[NINA] Aufgehoben: Sturmböen (Dresden, Stadt)
Das Herkunftsgebiet (AGS-Regionsname) wird automatisch an Meldung und Aufhebung angehängt.
Live-Anzeige in der Weboberfläche
Die Tabelle „Letzte Warnmeldungen" zeigt:
| Spalte | Inhalt |
|---|---|
| Schweregrad | Farbiger Badge (Extrem / Schwerwiegend / Mäßig / Gering / Aufgehoben) |
| Meldung | Headline der Warnung |
| Gebiet | AGS-Regionsname (z. B. „Dresden, Stadt") |
| Typ | Quell-Präfix (z. B. dwd, katwarn) |
| Mesh | Broadcast-Icon (gesendet) oder Auge-Icon (Monitor-Only) |
| Zeitstempel | Sendezeitpunkt der Warnung |
Beim Seitenaufruf werden alle aktuell aktiven Warnungen sofort geladen
(GET /api/nina/alerts). Neue Warnungen erscheinen live via WebSocket.
Sofortabfrage nach dem Speichern
Nach dem Klick auf „Speichern" wird unmittelbar eine NINA-Abfrage gestartet — kein Warten auf den nächsten Intervall-Zyklus. Unterhalb des Abfrageintervall-Felds wird Datum und Uhrzeit der letzten erfolgreichen Abfrage angezeigt.
Verbesserungen am Paket-Log (/packets)
Informativerer Payload
Die Info-Spalte zeigt jetzt deutlich mehr Daten je Pakettyp:
| Typ | Angezeigte Felder |
|---|---|
POSITION_APP |
Koordinaten + Höhe (m), Geschwindigkeit (km/h), Satelliten |
TELEMETRY_APP |
Akku (%), Spannung (V), Kanalauslastung (%), TX-Auslastung (%), Temperatur (°C), Luftfeuchtigkeit (%), Luftdruck (hPa) |
NODEINFO_APP |
long_name, short_name, Hardware-Modell |
ROUTING_APP |
Fehlercode (wenn vorhanden) |
TRACEROUTE_APP |
Anzahl Hops |
NEIGHBORINFO_APP |
Anzahl Nachbarn |
Unterdrückung eigener Telemetrie
Telemetriepakete vom eigenen Node werden im Paket-Log weder angezeigt noch gezählt.
Die Erkennung erfolgt automatisch per my_node_id (WebSocket-Initial-Payload) sowie als
Fallback über den Short-Name FTLW.
Verbesserungen an der Karte (/map)
Neue Legendenposition
Die Kartenlegende wurde von bottomright nach topleft verschoben — direkt
unterhalb der Zoom-Schaltfläche, wo sie auf allen Bildschirmgrößen sicher sichtbar ist.
Neues Legengendesign
Die Legende wurde komplett neu gestaltet:
- Theme-aware: passt sich automatisch Light- und Dark-Mode an (CSS-Variablen)
- Kompaktes Layout: kleine Uppercase-Abschnittsköpfe (
HOPS/ALTER) - Weicherer Schatten und dezentes Border
Bugfixes
Startup-Warning „connection.established missed" (fixes #2)
Beim Start erschien regelmäßig eine Warnung im Log:
[WARNING] meshbot.bot: connection.established missed – applying fallback
Ursache: bot.connect() läuft in einem separaten Thread. Der TCPInterface-Konstruktor
kehrte zurück, bevor das connection.established-Event aus dem Meshtastic-Bibliotheks-Thread
gefeuert wurde. Der sofortige Check sah _connected = False und löste den Fallback aus.
Fix: Ein threading.Event (_conn_event) wird in _on_connection gesetzt.
Nach dem Konstruktor wartet der Code bis zu 10 Sekunden auf dieses Event. Der
Fallback greift nur noch bei echtem Ausbleiben.
Konfigurationsdateien
nina.yaml
Separate Hot-reload-fähige Konfigurationsdatei für NINA (analog zu scheduler.yaml).
Wird automatisch angelegt wenn nicht vorhanden.
enabled: false
send_to_mesh: true
poll_interval: 300 # Sekunden, min. 60
resend_interval: 3600 # Sekunden, Wiederholung aktiver Warnungen
channel: 0 # Meshtastic-Kanal 0–7
min_severity: Severe # Minor | Moderate | Severe | Extreme
ags_codes: []
sources:
katwarn: true
biwapp: true
mowas: true
dwd: true
lhp: true
police: false
Neue API-Endpunkte
| Methode | Pfad | Beschreibung | Auth |
|---|---|---|---|
GET |
/api/nina/config |
NINA-Konfiguration lesen | Admin |
PUT |
/api/nina/config |
NINA-Konfiguration speichern + Poll auslösen | Admin |
GET |
/api/nina/alerts |
Aktuell aktive Warnmeldungen | Admin |
GET |
/api/links |
Konfigurierte Links aus config.yaml |
— |
Neue Seite: Nachrichtenverlauf (/messages)
Eine eigenständige Seite für den vollständigen Nachrichtenverlauf:
- Kanal-Farbcodierung: Jeder Kanal erhält eine eigene Farbe (Bubble-Rand + Avatar-Hintergrund)
- Richtungs-Kennzeichnung: Empfangene Nachrichten links (Absender-Avatar), gesendete Bot-Nachrichten rechts (grüne Bubble)
- Kanalfilter: Filterbuttons oben (farblich je Kanal) + Löschen-Button
- Absender-ID: Node-ID unterhalb des Absendernamens
- Sidebar-Eintrag nur für eingeloggte Benutzer sichtbar (
sidebar-user)
Ab v0.08.14 ist die Seite öffentlich zugänglich — kein Login mehr erforderlich.
initial_messages und new_message werden an alle WebSocket-Clients gesendet.
Dashboard-Erweiterungen
Nodes-Tabelle (v0.08.10)
Zwei neue Spalten in der Nodes-Tabelle:
| Spalte | Inhalt |
|---|---|
| RSSI | Signalstärke in dBm |
| GPS | Grünes Pin-Icon wenn Position bekannt, graues sonst |
Links-Card (v0.08.14)
Die bisherige Nachrichten-Card wurde durch eine frei konfigurierbare Links-Card ersetzt.
Links werden in config.yaml unter links: eingetragen:
links:
- url: "https://meshtastic.org"
label: "Meshtastic"
- url: "https://meshmap.net"
label: "MeshMap"
Scheduler: neue Template-Variablen
Zwei neue Variablen stehen in Scheduler-Nachrichten-Templates bereit (v0.08.13):
| Variable | Beschreibung |
|---|---|
{nodes_online} |
Anzahl online gesehener Nodes (innerhalb des konfigurierten Schwellwerts) |
{version} |
Aktuelle Bot-Version aus config.yaml |
Die Variablen-Badges in der Scheduler-UI sind jetzt theme-aware
(bg-secondary-subtle text-secondary-emphasis border-secondary-subtle).
Konfiguration
Online-Schwellwert (web.online_threshold, v0.08.15)
Der Online-Schwellwert (bisher hardcodiert auf 900 s) ist jetzt zentral konfigurierbar:
web:
online_threshold: 900 # Sekunden; Node gilt als online wenn last_seen < Schwellwert
Wirkt sofort auf:
- Dashboard-Tabelle (Online-Status)
?mesh-Bot-Kommando (Anzahl Online-Nodes)nodes_online-Zähler in Stats-API, WebSocket und Scheduler-Template
Bugfixes (v0.08.10–v0.08.11)
Dashboard Charts initial leer (fixes #10)
updateChannelChart wurde aufgerufen bevor der channels-WebSocket-Event eintraf — Charts
blieben bei Seitenaufruf leer. Fix: lastStats wird gespeichert und Charts werden neu gezeichnet
sobald die Channel-Daten eintreffen.
Dashboard Pakettypen-Chart immer leer (fixes #10)
packet_type_breakdown fehlte komplett in get_stats(). Die Daten werden jetzt per SQL-Abfrage
über die packets-Tabelle befüllt und über Stats-API sowie WebSocket geliefert.
Kartenlegende transparenter Hintergrund (fixes #10)
CSS-Variablen wurden im Leaflet-Control-Container nicht zuverlässig aufgelöst. Fix: explizite
Hintergrundfarben für Light- und Dark-Mode per [data-bs-theme]-Selektor.
Eigene Telemetrie aus Pakettypen-Diagramm ausgeschlossen (v0.08.11)
get_stats() akzeptiert jetzt den optionalen Parameter my_node_id. Eigene TELEMETRY_APP-
Pakete werden aus packet_type_breakdown herausgefiltert — konsistent mit der
isSuppressed()-Logik im Paket-Log.
Bot-Nachrichtenversand ohne ACK (v0.08.12, fixes #14)
sendText() verwendet jetzt wantAck=False — Nachrichten werden einmal gesendet ohne auf
Bestätigung zu warten. Reduziert unnötige ACK-Pakete im Netz; sinnvoll für Broadcasts und
periodische Status-Meldungen.
Versionshistorie 0.8.x
| Version | Datum | Schwerpunkt |
|---|---|---|
| 0.08.00 | 2026-02-19 | NINA-Integration (Grundfunktion) |
| 0.08.01 | 2026-02-19 | Wiederholungsintervall, AGS-Tabelle, Badge-Fixes |
| 0.08.02 | 2026-02-19 | mapData nur ohne AGS-Codes (geografische Filterung) |
| 0.08.03 | 2026-02-19 | Gebietsanzeige, AGS-Ortsname, Sachsen-Combobox |
| 0.08.04 | 2026-02-19 | Sofortabfrage nach Speichern, Zeitstempel letzte Abfrage |
| 0.08.05 | 2026-02-19 | Kartenlegende nach topleft verschoben (fixes #5) |
| 0.08.06 | 2026-02-19 | Informativer Paket-Payload, FTLW-Telemetrie unterdrückt (fixes #3) |
| 0.08.07 | 2026-02-19 | threading.Event-Fix für Startup-Warning (fixes #2) |
| 0.08.08 | 2026-02-19 | Kartenlegende neu gestaltet (theme-aware) |
| 0.08.09 | 2026-02-19 | Aktive NINA-Warnungen beim Seitenaufruf laden |
| 0.08.10 | 2026-02-19 | Nachrichten-Seite, Dashboard-Charts-Fix, Pakettypen-API (fixes #10) |
| 0.08.11 | 2026-02-20 | Eigene Telemetrie aus Pakettypen-Diagramm ausgeschlossen |
| 0.08.12 | 2026-02-20 | Bot-Nachrichten ohne ACK/Retry (fixes #14) |
| 0.08.13 | 2026-02-20 | Scheduler: {nodes_online} + {version}, theme-aware Badges (fixes #15) |
| 0.08.14 | 2026-02-20 | Links-Card, öffentliche Nachrichten-Seite (fixes #11) |
| 0.08.15 | 2026-02-20 | Konfigurierbarer Online-Schwellwert web.online_threshold (fixes #12) |