MeshDD-Bot/docs/whats-new-0.8.md
ppfeiffer 3bcb44afe3 docs: Release Notes 0.8.x auf v0.08.15 vervollständigt
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>
2026-02-20 15:31:18 +01:00

319 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 (07) 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:
1. **Dashboard-Endpunkt** (`/dashboard/{AGS12}.json`) — regionale Filterung durch den
BBK-Server; deckt alle Quellen für konfigurierte AGS-Codes ab.
2. **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.
```yaml
enabled: false
send_to_mesh: true
poll_interval: 300 # Sekunden, min. 60
resend_interval: 3600 # Sekunden, Wiederholung aktiver Warnungen
channel: 0 # Meshtastic-Kanal 07
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:
```yaml
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:
```yaml
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.10v0.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) |