# 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 (``) 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 |