MeshDD-Bot/docs/whats-new-0.9.md
ppfeiffer fa03bcaac2 release: v0.09.00 – Mitarbeiter-Rolle, /config-Seite, Paket-Log-Filter
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 23:01:46 +01:00

199 lines
6.3 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-Dashboard 0.9.x
> Aktueller Stand: **v0.09.00** · Release-Datum: 2026-02-20
---
## Übersicht
Release 0.9 bündelt alle seit v0.08.15 eingeführten Erweiterungen. Schwerpunkte sind
das neue **Rollensystem** (Mitarbeiter statt User), eine vollständige
**Konfigurationsseite** im Dashboard, eine erweiterte **Paket-Log-Filterzeile**
sowie eine Reihe struktureller Bereinigungen (Konfiguration, Datenbank, Benennung).
---
## Neues Rollensystem: Mitarbeiter
### Rollenhierarchie
```
Public → Mitarbeiter → Admin
```
Die bisherige Rolle `user` entfällt vollständig. Alle bestehenden `user`-Accounts
werden automatisch per DB-Migration zu `mitarbeiter` umgeschrieben.
| Bereich | Public | Mitarbeiter | Admin |
|---|---|---|---|
| Dashboard, Karte, Pakete, Nachrichten | Ja | Ja | Ja |
| Nachrichten senden | Nein | Ja | Ja |
| Scheduler, NINA, Einstellungen lesen | Nein | Ja | Ja |
| Scheduler, NINA, Einstellungen bearbeiten | Nein | Nein | Ja |
| Benutzerverwaltung `/admin` | Nein | Nein | Ja |
### Einladungs-Workflow
1. Admin öffnet `/admin` → „Mitarbeiter einladen"
2. Modal: Name + E-Mail eingeben
3. Backend generiert automatisch ein 12-stelliges Passwort
4. Einladungsmail mit Login-URL und Passwort wird versendet
5. Erster Login: Weiterleitung zu `/auth/change-password` (Pflichtänderung)
6. Nach dem Passwortwechsel: normaler Zugang
### Sidebar: staff-sichtbare Einträge
Scheduler, NINA und Einstellungen sind jetzt in einer Gruppe **„Konfigurationen"**
zusammengefasst und für alle Mitarbeiter (und Admins) sichtbar. Reine Admin-Links
(Benutzerverwaltung) sind davon getrennt.
### Read-only-Modus für Mitarbeiter
Mitarbeiter sehen Scheduler-Jobs und NINA-Konfiguration, können aber nicht bearbeiten:
- **Scheduler**: Schaltflächen „Neuer Job", „Bearbeiten", „Löschen" deaktiviert;
Badge „Nur Lesezugriff" in der Aktionen-Spalte.
- **NINA**: Alle Eingabefelder und der Speichern-Button sind disabled.
---
## Neue Konfigurationsseite (`/config`)
Eine neue Admin-Seite ermöglicht die Bearbeitung der Bot-Konfiguration direkt
im Dashboard — ohne SSH-Zugriff auf den Server.
### Bearbeitbare Bereiche
| Abschnitt | Felder |
|---|---|
| **Bot** | Name, Kommando-Präfix |
| **Meshtastic** | Host, Port |
| **Web** | Port, Online-Schwellwert (s) |
| **Links** | Liste mit URL + Bezeichnung (hinzufügen/entfernen) |
Die Konfiguration wird direkt in `config/config.yaml` geschrieben.
Der Live-Reload-Mechanismus übernimmt Änderungen ohne Neustart.
---
## Paket-Log: Erweiterte Filterzeile
Unterhalb des bestehenden Typ-Filter-Balkens steht jetzt eine zweite Filterzeile:
```
[ Von: __ ] [ An: __ ] [ Kanal: [Alle ▾] ] [ Hops ≤: __ ] [ 🔍 Freitext ] [ ✕ ]
```
| Filter | Funktion |
|---|---|
| **Von** | Teilstring auf Node-ID, Langname oder Kurzname |
| **An** | Teilstring; `alle`/`broadcast` für Broadcast-Pakete |
| **Kanal** | Dropdown mit bekannten Kanälen (aus WS-`channels`-Event) |
| **Hops ≤** | Zahl; filtert auf berechneten Hop-Wert (`hop_start hop_limit`) |
| **Freitext** | Suche über alle Spalten (Von, An, Typ, Kanal, Info) |
| **✕** | Alle Zusatzfilter zurücksetzen |
Alle Filter wirken kombiniert (AND-Logik). Typ-Filter und Zusatzfilter greifen
unabhängig voneinander.
Die Filterung erfolgt rein im DOM `buildRow()` befüllt beim Rendern
`data-from/to/channel/hops/search` für maximale Performance ohne Re-Render.
---
## NINA-Verbesserungen
### Quellenkennung im Mesh
Meldungen tragen jetzt die Quelle als Präfix:
```
[DWD@NINA] Schwerwiegend: Sturmböen (Dresden, Stadt)
[KATWARN@NINA] Mäßig: Starkregen (Meißen)
[NINA] Aufgehoben: ...
```
### UI-Verbesserungen
- **Schalter nebeneinander**: „Aktiviert" und „Ins Mesh senden" in einer Zeile
- **Intervalle in Minuten**: Eingabe und Anzeige in Minuten (intern weiter Sekunden)
- **Zuletzt gesendet**: Zeitstempel der letzten Mesh-Aussendung sichtbar
---
## Konfiguration: Strukturelle Bereinigung
### Verzeichnisstruktur
```
config/
config.yaml ← zentrale Konfiguration (Bot, Web, Auth, SMTP, Links)
scheduler.yaml ← Scheduler-Jobs
nina.yaml ← NINA-Konfiguration
data/
meshdd.db ← SQLite-Datenbank
*.db-wal ← WAL-Journal (gitignored)
*.db-shm ← Shared Memory (gitignored)
```
### `.env` abgeschafft
Alle Konfigurationswerte (`auth.secret_key`, `smtp.*`) sind direkt in
`config/config.yaml` keine separate Secrets-Datei mehr nötig.
### Datenbank robuster
- WAL-Checkpoint (`PRAGMA wal_checkpoint(FULL)`) vor dem Schließen
keine Daten bleiben im Journal
- Jeder Shutdown-Schritt ist einzeln mit `try/except` gekapselt
`db.close()` wird auch bei Fehlern in anderen Komponenten immer ausgeführt
---
## Umbenennung: MeshDD-Bot → MeshDD-Dashboard
Alle Seiten-Titel (`<title>`) und Navbar-Texte wurden von „MeshDD-Bot" auf
„MeshDD-Dashboard" umgestellt.
---
## API-Änderungen
### Neue Endpunkte
| Methode | Pfad | Beschreibung | Auth |
|---|---|---|---|
| `GET` | `/api/config` | Bot-/Web-/Link-Konfiguration lesen | Admin |
| `PUT` | `/api/config` | Konfiguration speichern | Admin |
| `POST` | `/api/admin/invite` | Mitarbeiter einladen (Passwort auto-generiert) | Admin |
| `GET` | `/auth/change-password` | Pflicht-Passwortänderungs-Seite | — |
| `POST` | `/auth/change-password` | Neues Passwort setzen | Login |
### Auth-Änderungen bestehender Endpunkte
| Endpunkt | Vorher | Jetzt |
|---|---|---|
| `POST /api/send` | `require_user_api` | `require_staff_api` |
| `GET /api/node/config` | `require_admin_api` | `require_staff_api` |
| `GET /api/nina/config` | `require_admin_api` | `require_staff_api` |
| `GET /api/nina/alerts` | `require_admin_api` | `require_staff_api` |
| `GET /api/scheduler/jobs` | ohne Auth | `require_staff_api` |
---
## Sonstige Fixes
- **`upsert_node` Race-Condition** behoben: `INSERT OR IGNORE` + `UPDATE` statt
SELECT → INSERT kein `UNIQUE constraint failed` mehr bei parallelen Node-Updates.
- **Karte: Legende theme-aware** (closes #5): CSS-Variablen + JS-Inline-Styles
für zuverlässige Light/Dark-Umschaltung im Leaflet-Control-Kontext.
- **Dashboard**: `channelBreakdown`-Card entfernt; Nachrichten-Trenner stärker
(Padding + Border-Breite), closes #1.
---
## Versionshistorie 0.9.x
| Version | Datum | Schwerpunkt |
|---|---|---|
| 0.09.00 | 2026-02-20 | Mitarbeiter-Rolle, /config-Seite, Paket-Log-Filter, Bereinigungen |