MeshDD-Bot/docs/whats-new-0.8.md
ppfeiffer 79f80563c8 docs: vollständige Bot-Beschreibung und 0.8.x Release-Notes hinzugefügt
- docs/bot-beschreibung.md: umfassende Dokumentation mit Architektur,
  Komponenten, API-Referenz, Konfiguration, Datenbank-Schema, Deployment
  und chronologischer Erweiterungshistorie (v0.1.0–v0.8.9)
- docs/whats-new-0.8.md: Neuigkeiten der 0.8.x-Release-Serie (NINA,
  Paket-Log, Karte, Bugfixes, API-Endpunkte, Versionshistorie)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 17:53:39 +01:00

206 lines
7.1 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.8.9** · Release-Datum: 2026-02-19
---
## Ü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 |
---
## Versionshistorie 0.8.x
| Version | Datum | Schwerpunkt |
|---|---|---|
| 0.8.0 | 2026-02-19 | NINA-Integration (Grundfunktion) |
| 0.8.1 | 2026-02-19 | Wiederholungsintervall, AGS-Tabelle, Badge-Fixes |
| 0.8.2 | 2026-02-19 | mapData nur ohne AGS-Codes (geografische Filterung) |
| 0.8.3 | 2026-02-19 | Gebietsanzeige, AGS-Ortsname, Sachsen-Combobox |
| 0.8.4 | 2026-02-19 | Sofortabfrage nach Speichern, Zeitstempel letzte Abfrage |
| 0.8.5 | 2026-02-19 | Kartenlegende nach topleft verschoben (fixes #5) |
| 0.8.6 | 2026-02-19 | Informativer Paket-Payload, FTLW-Telemetrie unterdrückt (fixes #3) |
| 0.8.7 | 2026-02-19 | threading.Event-Fix für Startup-Warning (fixes #2) |
| 0.8.8 | 2026-02-19 | Kartenlegende neu gestaltet (theme-aware) |
| 0.8.9 | 2026-02-19 | Aktive NINA-Warnungen beim Seitenaufruf laden |