6.3 KiB
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
- Admin öffnet
/admin→ „Mitarbeiter einladen" - Modal: Name + E-Mail eingeben
- Backend generiert automatisch ein 12-stelliges Passwort
- Einladungsmail mit Login-URL und Passwort wird versendet
- Erster Login: Weiterleitung zu
/auth/change-password(Pflichtänderung) - 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/exceptgekapselt –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_nodeRace-Condition behoben:INSERT OR IGNORE+UPDATEstatt SELECT → INSERT – keinUNIQUE constraint failedmehr 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 |