From 087cccd35cb9289011ebafeca4759f704e5f4f45 Mon Sep 17 00:00:00 2001 From: ppfeiffer Date: Fri, 20 Feb 2026 14:00:49 +0100 Subject: [PATCH] refactor(version): Versionsformat auf 2-stellige Minor- und Patch-Level umgestellt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Alle eigenen Projektversionsnummern wurden auf das neue Format umgeschrieben: 0.X.Y → 0.XX.YY (z.B. 0.8.11 → 0.08.11, 0.6.7 → 0.06.07) Betrifft 130 Zeilen in 9 Dateien; externe Bibliotheksversionen unverändert. Co-Authored-By: Claude Sonnet 4.6 --- CHANGELOG.md | 138 ++++++++++++++++----------------- README.md | 2 +- config.yaml | 2 +- docs/bot-beschreibung.md | 68 ++++++++-------- docs/dashboard-improvements.md | 18 ++--- docs/whats-new-0.8.md | 22 +++--- meshbot/bot.py | 2 +- meshbot/webserver.py | 4 +- scheduler.yaml | 24 +++++- 9 files changed, 149 insertions(+), 131 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7d8f06..cea2f84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## [0.8.11] - 2026-02-20 +## [0.08.11] - 2026-02-20 ### Fixed - **Pakettypen-Diagramm: eigene Telemetrie ausgeschlossen**: `get_stats()` akzeptiert @@ -9,7 +9,7 @@ `isSuppressed()`-Logik im Paket-Log-Frontend). Alle Aufrufer (`bot.py`, `webserver.py`) übergeben `get_my_node_id()`. -## [0.8.10] - 2026-02-19 +## [0.08.10] - 2026-02-19 ### Added - **Neue Nachrichten-Seite** (`/messages`, User-only): Komplett eigenständige Seite für @@ -35,7 +35,7 @@ wurden nicht zuverlässig aufgelöst. Fix: explizite Hintergrundfarben für Light- und Dark-Mode per `[data-bs-theme]`-Selektor statt CSS-Variablen. -## [0.8.9] - 2026-02-19 +## [0.08.09] - 2026-02-19 ### Added - **NINA aktive Warnmeldungen beim Seitenaufruf laden**: Neuer Endpunkt @@ -44,14 +44,14 @@ Warnungen die bereits vor dem Seitenaufruf ins Mesh gesendet wurden. Neu eintreffende WS-Events (`nina_alert`) werden per ID dedupliziert. -## [0.8.8] - 2026-02-19 +## [0.08.08] - 2026-02-19 ### Changed - **Kartenlegende neu gestaltet**: Theme-aware (CSS-Variablen für Light/Dark-Mode), kompaktes Design mit kleinen Uppercase-Abschnittsköpfen statt `` + `
`, weicherer Schatten, angepasste Altersdots für beide Themes. -## [0.8.7] - 2026-02-19 +## [0.08.07] - 2026-02-19 ### Fixed - **Startup-Warning "connection.established missed"** (fixes #2): Der Fallback-Check @@ -60,7 +60,7 @@ Fix: `threading.Event` wartet jetzt bis zu 10 Sekunden auf das Event; der Fallback greift nur noch bei echtem Ausbleiben des Events. -## [0.8.6] - 2026-02-19 +## [0.08.06] - 2026-02-19 ### Added - **Paket-Log informativer Payload** (fixes #3): `bot.py` speichert nun vollständige @@ -76,13 +76,13 @@ Node (per `my_node_id` oder short_name `FTLW`) werden im Paket-Log nicht angezeigt und gehen nicht in die Zählung ein. -## [0.8.5] - 2026-02-19 +## [0.08.05] - 2026-02-19 ### Fixed - **Kartenlegende Position**: Legende von `bottomright` nach `topleft` verschoben, neben die Zoom-Steuerung (fixes Issue #5). -## [0.8.4] - 2026-02-19 +## [0.08.04] - 2026-02-19 ### Added - **NINA Sofortabfrage nach Speichern**: Nach dem Speichern der Konfiguration wird @@ -92,7 +92,7 @@ - **Letzte Abfrage anzeigen**: Unterhalb des Abfrageintervall-Felds wird Datum und Uhrzeit der letzten erfolgreichen NINA-Abfrage angezeigt (`last_poll`-Feld im Config-Response). -## [0.8.3] - 2026-02-19 +## [0.08.03] - 2026-02-19 ### Added - **NINA Gebietsanzeige**: Warnmeldungen zeigen jetzt das Herkunftsgebiet (AGS-Regionsname) @@ -106,7 +106,7 @@ ### Fixed - **colspan**: Leere Zeile in der Alerts-Tabelle auf 6 Spalten aktualisiert. -## [0.8.2] - 2026-02-19 +## [0.08.02] - 2026-02-19 ### Fixed - **NINA mapData geografische Filterung**: mapData-Endpunkte werden nur noch abgefragt, @@ -114,7 +114,7 @@ Dashboard-Endpunkt bereits serverseitig regional (deckt alle Quellen inkl. DWD ab). Vorher wurden bundesweite Meldungen außerhalb der konfigurierten Regionen angezeigt. -## [0.8.1] - 2026-02-19 +## [0.08.01] - 2026-02-19 ### Added - **NINA Wiederholungsintervall** (`resend_interval`): Zweiter konfigurierbarer Intervall, @@ -129,7 +129,7 @@ Hintergründen und in beiden Themes lesbar bleibt. - **colspan**: Leere Zeile in der Alerts-Tabelle korrekt auf 5 Spalten gesetzt. -## [0.8.0] - 2026-02-19 +## [0.08.00] - 2026-02-19 ### Added - **NINA-Integration**: Anbindung an die NINA Warn-App des BBK (Bundesamt für Bevölkerungsschutz @@ -159,22 +159,22 @@ - **NINA-Sidebar-Eintrag** in allen Seiten (Admin-only, Icon: `bi-shield-exclamation`). - **`nina.yaml`** als Hot-reload-fähige Konfigurationsdatei (analog zu `scheduler.yaml`). -## [0.7.1] - 2026-02-18 +## [0.07.01] - 2026-02-18 ### Changed - **Standard-Theme**: Hell-Theme (Light) ist jetzt der Default für neue Besucher (bisher: Dark). Gespeicherte Benutzereinstellung bleibt erhalten. -## [0.7.0] - 2026-02-18 +## [0.07.00] - 2026-02-18 ### Changed - **Dockerfile**: `EXPOSE` von 8080 auf 8081 korrigiert (entspricht Web-Port in config.yaml). - **Dockerfile**: `HEALTHCHECK` hinzugefügt – prüft `/api/stats` alle 30s, Timeout 5s, Start-Wartezeit 20s, max. 3 Versuche. - **docker-compose.yml**: `healthcheck` und `logging` (json-file, 10 MB / 3 Dateien) ergänzt. -- **conf/config.yaml**: Version auf 0.7.0 und Verbindungsdaten aktualisiert. +- **conf/config.yaml**: Version auf 0.07.00 und Verbindungsdaten aktualisiert. -## [0.6.15] - 2026-02-18 +## [0.06.15] - 2026-02-18 ### Added - **Scheduler Template-Variablen**: Nachrichten-Jobs können Platzhalter nutzen: @@ -190,13 +190,13 @@ explizit geschlossen (`ws_manager.close_all()`), so dass der Prozess nicht mehr auf hängende WS-Loops wartet. -## [0.6.14] - 2026-02-18 +## [0.06.14] - 2026-02-18 ### Added - **Dashboard**: Viertes Diagramm "Pakettypen (24h)" – Doughnut-Chart mit Pakettyp-Verteilung der letzten 24h aus der `packets`-Tabelle, farblich nach Typ kodiert. -## [0.6.13] - 2026-02-18 +## [0.06.13] - 2026-02-18 ### Added - **Version in Navbar** aller Seiten sichtbar (via `app.js initPage()` + `/api/stats`). @@ -208,21 +208,21 @@ - **Statistiken Rolling Window**: Anfragen-Zähler und Kanal-Breakdown nutzen jetzt rollendes 24h-Fenster (jetzt minus 24h) statt Mitternacht-Reset. -## [0.6.12] - 2026-02-18 +## [0.06.12] - 2026-02-18 ### Fixed - **Paket-Log**: Typ-Badges nutzen jetzt solide `bg-{color}`-Hintergründe mit `text-white` (bei Warning: `text-dark`) statt `bg-opacity-20 text-{color}` – garantiert lesbaren Typ-Label-Text in jedem Theme. -## [0.6.11] - 2026-02-18 +## [0.06.11] - 2026-02-18 ### Changed - **Paket-Log**: Badges gleich breit (CSS `min-width:5.5rem`, zentriert), Typ-Filter-Pills in Typ-Farbe eingefärbt (aktiv: gefüllt, inaktiv: Outline), unbekannte/undekodierbare Pakete (leerer Portnum) als Typ „?" im Filter sichtbar, Kanal-Spalte zeigt Kanalname wenn verfügbar. -## [0.6.10] - 2026-02-18 +## [0.06.10] - 2026-02-18 ### Added - **Paket-Log** (`/packets`): neue öffentliche Seite zeigt alle empfangenen Meshtastic-Pakete @@ -238,14 +238,14 @@ - **Node-Modal**: von `modal-lg` auf `modal-xl` + `modal-dialog-scrollable` vergrößert, Karten-Höhe von 250 px auf 300 px erhöht. -## [0.6.9] - 2026-02-18 +## [0.06.09] - 2026-02-18 ### Fixed - **bot.py**: `_on_node_updated` Signatur um `interface=None` ergänzt – `meshtastic.node.updated` sendet `(node, interface)`, fehlender Parameter führte zu `SenderUnknownMsgDataError` und Absturz des Node-Handlers. -## [0.6.8] - 2026-02-18 +## [0.06.08] - 2026-02-18 ### Fixed - **bot.py**: `pub.subscribe()` wurde nach `TCPInterface()` aufgerufen → `connection.established` @@ -256,21 +256,21 @@ - **dashboard.js**: Bootstrap-4-Klasse `badge-pill` durch `rounded-pill` (Bootstrap 5) ersetzt. - **style.css**: CSS-Variablen-Typo `--tblr-bg-body` → `--tblr-body-bg`. -## [0.6.7] - 2026-02-17 +## [0.06.07] - 2026-02-17 ### Changed - **Tabler 1.4.0** als Admin-Theme eingebunden: ersetzt Bootstrap CSS/JS in allen 6 HTML-Seiten - `style.css` komplett überarbeitet mit Tabler-Variablen: Inter-Font, subtile Karten-Schatten, verfeinerte Sidebar (Rounded Active-Links), Hover-Animation auf Info-Boxen, pulsierender Status-Dot - Navbar-Höhe 46px → 48px, Sidebar-Breite auf 210px, Karten-Header-Schrift verfeinert -## [0.6.6] - 2026-02-17 +## [0.06.06] - 2026-02-17 ### Added - Nachrichten-Kanalfilter: Filter-Buttons im Nachrichten-Card-Header ("Alle" + ein Button pro Kanal) - Neue Nachrichten werden sofort gefiltert; `data-channel`-Attribut auf jedem `.msg-item` - `renderMsgFilterBar()` und `applyMsgFilter()` in `dashboard.js` -## [0.6.5] - 2026-02-17 +## [0.06.05] - 2026-02-17 ### Added - Dark Mode Kartentiles: CartoDB Dark Matter bei dunklem Theme, OpenStreetMap bei hellem (Karte + Node-Modal) @@ -278,32 +278,32 @@ - 3 Charts im Dashboard: Kanal-Anfragen (Doughnut), Hop-Verteilung (Bar), Hardware Top 5 (Bar) - Charts passen sich automatisch dem Dark/Light Mode an - Nodes-Tabelle: Suchfeld + Online-Filter + Sortierung per Klick auf Spaltenköpfe -## [0.6.4] - 2026-02-17 +## [0.06.04] - 2026-02-17 ### Added - Bot-Uptime als 4. Info-Box im Dashboard (live via WebSocket) - Meshtastic-Verbindungsstatus als zweiter Status-Dot in der Navbar - `bot_status` WebSocket-Event bei Connect/Disconnect des Meshtastic-Nodes - `uptime` und `bot_connected` in `stats_update` und `/api/stats` -## [0.6.3] - 2026-02-17 +## [0.06.03] - 2026-02-17 ### Fixed - WebSocket sendet `initial_messages` und `new_message` nur noch an authentifizierte Clients - `WebSocketManager` unterscheidet jetzt `clients` (alle) und `auth_clients` (eingeloggt) -## [0.6.2] - 2026-02-17 +## [0.06.02] - 2026-02-17 ### Changed - Refactor: Gemeinsames `static/js/app.js` Modul extrahiert - Eliminiert ~360 Zeilen doppelten Code aus allen 5 Seiten (Navbar, Sidebar, Theme, escapeHtml) - Sidebar-HTML wird jetzt dynamisch per `initPage()` injiziert mit automatischer Active-Link-Erkennung -## [0.6.1] - 2026-02-17 +## [0.06.01] - 2026-02-17 ### Added - Dockerfile fuer Container-Betrieb (python:3.12-slim) - docker-compose.yml mit Host-Netzwerk und Named Volume fuer SQLite - conf/ Verzeichnis mit Beispiel-Konfigurationsdateien fuer Docker - .dockerignore fuer saubere Docker-Builds -## [0.6.0] - 2026-02-17 +## [0.06.00] - 2026-02-17 ### Summary - Node-Detail-Modal mit Minikarte im Dashboard - Anfragen-Tracking pro Kanal mit taeglichem Reset @@ -319,38 +319,38 @@ - Kanal-Badges zeigen immer alle Kanaele aufsteigend sortiert (auch bei 0 Anfragen) - Kanal-Badge in Nachrichten im Light-Mode besser lesbar -## [0.5.10] - 2026-02-17 +## [0.05.10] - 2026-02-17 ### Fixed - Kanal-Badge in Nachrichten im hellen Modus besser lesbar (bg-secondary statt bg-body-secondary) -## [0.5.9] - 2026-02-17 +## [0.05.09] - 2026-02-17 ### Changed - Kanal-Badges zeigen immer alle Kanaele aufsteigend sortiert mit Kanalnamen (auch bei 0 Anfragen) - Label-Zeile "Anfragen/Kanal" entfernt -## [0.5.8] - 2026-02-17 +## [0.05.08] - 2026-02-17 ### Changed - Anfragen-Zaehler zeigt nur noch Anfragen von heute (Reset um Mitternacht) - Kommando-Badges entfernt, nur noch Kanal-Aufschluesselung angezeigt -## [0.5.7] - 2026-02-17 +## [0.05.07] - 2026-02-17 ### Added - Anfragen-Aufschluesselung pro Kanal mit Kanalnamen im Dashboard - Channel-Spalte in der commands-Tabelle (mit DB-Migration fuer bestehende DBs) -## [0.5.6] - 2026-02-17 +## [0.05.06] - 2026-02-17 ### Added - Node-Detail-Modal im Dashboard: Klick auf Node-Zeile oeffnet Modal mit allen Node-Daten - Leaflet-Minikarte im Modal zeigt Node-Position (oder "Keine Position" Hinweis) - Zwei-Spalten-Layout: Datentabelle links, Karte rechts (responsive) -## [0.5.5] - 2026-02-17 +## [0.05.05] - 2026-02-17 ### Changed - SMTP-Versand auf EmailMessage + aiosmtplib.SMTP (async context manager) umgestellt - Plaintext-Fallback fuer nicht-HTML-faehige E-Mail-Clients - SMTP-Host zurueck auf ssl0.ovh.net -## [0.5.4] - 2026-02-16 +## [0.05.04] - 2026-02-16 ### Added - Admin: Benutzer direkt anlegen mit Passwort und Rollenwahl - Admin: Benutzer bearbeiten (Name, E-Mail, Rolle) per Modal @@ -363,22 +363,22 @@ - Admin-Seite komplett ueberarbeitet mit Modals fuer alle Aktionen - E-Mail-Funktionen um `send_user_info_email` erweitert -## [0.5.3] - 2026-02-16 +## [0.05.03] - 2026-02-16 ### Changed - Zugangsdaten (AUTH_SECRET_KEY, SMTP-*) aus config.yaml in .env-Datei ausgelagert - Neuer `config.env()` Helper fuer Umgebungsvariablen - `.env.example` als Vorlage hinzugefuegt - E-Mail-Versand in gemeinsame `_send_email()` Hilfsfunktion refaktoriert -## [0.5.2] - 2026-02-16 +## [0.05.02] - 2026-02-16 ### Fixed - SMTP-Versand: TLS (Port 465) und STARTTLS (Port 587) automatisch anhand des Ports -## [0.5.1] - 2026-02-16 +## [0.05.01] - 2026-02-16 ### Fixed - Fernet key setup fuer EncryptedCookieStorage korrigiert (doppelte Base64-Kodierung) -## [0.5.0] - 2026-02-16 +## [0.05.00] - 2026-02-16 ### Added - Benutzerverwaltung mit Session-basierter Authentifizierung - Registrierung mit E-Mail-Verifikation (OTP-Token via aiosmtplib) @@ -402,7 +402,7 @@ - config.yaml: auth + smtp Sektionen hinzugefuegt - requirements.txt: bcrypt, aiohttp-session, cryptography, aiosmtplib -## [0.4.0] - 2026-02-16 +## [0.04.00] - 2026-02-16 ### Summary - Node-Einstellungen Seite, Karte im Sidebar-Layout - Wetter mit Ortsnamen, PLZ-Support, Luftdruck und Taupunkt @@ -410,47 +410,47 @@ - Gesendete Nachrichten im Dashboard mit gruener Bubble - Sende-Card als eigene Komponente, Command-Prefix "?" -## [0.3.15] - 2026-02-16 +## [0.03.15] - 2026-02-16 ### Changed - Debug-Logging aus _send_text entfernt -## [0.3.14] - 2026-02-16 +## [0.03.14] - 2026-02-16 ### Changed - Command-Prefix von "/" auf "?" geaendert - Channel-Combobox in Sende-Card breiter (180px) fuer vollstaendige Channelnamen - Debug-Logging in _send_text fuer Diagnose der Nachrichtenspeicherung -## [0.3.13] - 2026-02-16 +## [0.03.13] - 2026-02-16 ### Fixed - Gesendete Nachrichten werden jetzt vor dem Radio-Send gespeichert und broadcastet - Getrenntes Exception-Handling fuer DB-Store und Radio-Send -## [0.3.12] - 2026-02-16 +## [0.03.12] - 2026-02-16 ### Fixed - Eigene Nachrichten-Echos werden in _handle_packet gefiltert (keine Doppelspeicherung) - Bot-Nachrichten erscheinen korrekt im Dashboard-Nachrichtenfenster -## [0.3.11] - 2026-02-16 +## [0.03.11] - 2026-02-16 ### Changed - Sende-Zeile als eigene Card mit gruener Oberkante oberhalb der Nodes/Nachrichten-Cards - Nachrichten-Card ohne Footer (schlanker) -## [0.3.10] - 2026-02-16 +## [0.03.10] - 2026-02-16 ### Added - Gesendete Bot-Nachrichten werden im Nachrichtenfenster angezeigt - Eigene Nachrichten mit gruener Bubble und rechtsbuendiger Ausrichtung - Bot-Nachrichten werden in DB gespeichert und via WebSocket broadcastet -## [0.3.9] - 2026-02-16 +## [0.03.09] - 2026-02-16 ### Added - Neuer Befehl `/me` zeigt eigene Node-Infos (Name, HW, Hops, SNR, RSSI, Batterie, Position) - Wetter zeigt Luftdruck NN (hPa) und Taupunkt (°C) -## [0.3.8] - 2026-02-16 +## [0.03.08] - 2026-02-16 ### Changed - Ping-Antwort zeigt Hop-Anzahl des anfragenden Nodes (z.B. "Pong ueber 2 Hops!") -## [0.3.7] - 2026-02-16 +## [0.03.07] - 2026-02-16 ### Added - Weather-Befehl zeigt Ortsnamen via Reverse-Geocoding (Nominatim) - Optionales Argument `plz:XXXXX` fuer Wetter nach deutscher Postleitzahl @@ -459,7 +459,7 @@ ### Changed - Help-Text zeigt `plz:XXXXX` Option beim Weather-Befehl -## [0.3.6] - 2026-02-15 +## [0.03.06] - 2026-02-15 ### Added - Node-Einstellungen Seite (`/settings`) zeigt Geraet, LoRa, Channels, Position, Power, Bluetooth/Netzwerk - Neuer API-Endpoint `GET /api/node/config` liest Config vom lokalen Meshtastic-Node @@ -473,7 +473,7 @@ - Map-Styles (Tooltip, Legende) in zentrale `style.css` verschoben - Sidebar-Navigation auf allen 4 Seiten konsistent (Dashboard, Scheduler, Karte, Einstellungen) -## [0.3.5] - 2026-02-15 +## [0.03.05] - 2026-02-15 ### Changed - Dashboard und Scheduler auf AdminLTE-Style umgestellt - Feste Sidebar-Navigation (Dashboard, Scheduler, Karte) mit Active-State @@ -485,7 +485,7 @@ - Sidebar responsive: auf Mobile als Overlay mit Backdrop - Einheitliches Layout auf Dashboard und Scheduler -## [0.3.4] - 2026-02-15 +## [0.03.04] - 2026-02-15 ### Fixed - Kanalnamen in Nachrichten fehlten beim Laden (Channels werden jetzt vor Messages gesendet) @@ -494,7 +494,7 @@ - Stat-Cards, Navbar, Panels und Nachrichten platzsparender - Hover-Animationen und Pulse-Effekt entfernt (schlichter) -## [0.3.3] - 2026-02-15 +## [0.03.03] - 2026-02-15 ### Changed - Dashboard-Layout modernisiert: Glassmorphism-Navbar (sticky, blur-Effekt) - Stat-Cards mit Gradient-Akzentlinie, dezenten Hintergrund-Icons und Hover-Lift @@ -506,7 +506,7 @@ - Status-Dot mit sanfter Pulse-Animation bei Verbindung - Breakdowns-Leiste mit subtilerem Hintergrund -## [0.3.2] - 2026-02-15 +## [0.03.02] - 2026-02-15 ### Added - Nachrichten senden direkt aus dem Dashboard (Channel-Dropdown + Textfeld) - Neuer API-Endpoint `POST /api/send` zum Senden von Textnachrichten @@ -515,7 +515,7 @@ - Typ-Auswahl (Kommando/Nachricht) im Scheduler-Modal mit dynamischem Label - Typ-Spalte in der Scheduler-Tabelle -## [0.3.1] - 2026-02-15 +## [0.03.01] - 2026-02-15 ### Added - Scheduler-Feature: zeitgesteuerte Bot-Kommandos via Cron-Ausdruecke - Neue Datei `scheduler.yaml` fuer Job-Konfiguration mit File-Watcher (Live-Reload) @@ -526,11 +526,11 @@ - `execute_command()` Methode im Bot fuer programmatische Kommando-Ausfuehrung - Scheduler-Link in der Dashboard-Navbar -## [0.3.0] - 2026-02-15 +## [0.03.00] - 2026-02-15 ### Added - Produktiver Betrieb als Systemd-Service -## [0.2.6] - 2026-02-15 +## [0.02.06] - 2026-02-15 ### Added - WordPress-Beitrag unter docs/wordpress-beitrag.html - Systemd Service-File meshdd-bot.service @@ -539,7 +539,7 @@ ### Changed - Pause zwischen gesplitteten Nachrichten auf 3 Sekunden erhöht -## [0.2.5] - 2026-02-15 +## [0.02.05] - 2026-02-15 ### Added - Automatisches Aufteilen langer Nachrichten (max 170 Zeichen) mit 1,5s Pause @@ -547,11 +547,11 @@ - /mesh Befehl: bessere Lesbarkeit mit Absätzen und Einrückungen - Hop-Verteilung: "Direkt", "1 Hop", "2 Hops" statt "0h", "1h", "2h" -## [0.2.4] - 2026-02-15 +## [0.02.04] - 2026-02-15 ### Added - Neuer Befehl /mesh - zeigt Mesh-Netzwerk-Infos (Nodes online/gesamt, aktiv 24h, Positionen, Hop-Verteilung, Top-Hardware) -## [0.2.3] - 2026-02-15 +## [0.02.03] - 2026-02-15 ### Added - Kommando-Tracking in der Datenbank (neue Tabelle `commands`) - Stats Card "Aktiv (24h)" zeigt Nodes der letzten 24 Stunden @@ -562,20 +562,20 @@ - Stats Cards von 4er auf 3er Grid umgestellt plus Breakdown-Zeile - Bot /stats Kommando zeigt aktualisierte Statistiken -## [0.2.2] - 2026-02-15 +## [0.02.02] - 2026-02-15 ### Changed - SNR-Spalte rechtsbündig, Batterie-Spalte linksbündig - Spaltenabstände in der Nodesliste reduziert (kompakteres Layout) - Spaltenüberschrift "Zuletzt gesehen" zu "Zuletzt" gekürzt -## [0.2.1] - 2026-02-15 +## [0.02.01] - 2026-02-15 ### Changed - Stats Cards kompakter (kleinerer Padding und Schrift) - Batteriestatus mit Bootstrap Icons und Farbcodierung (grün/gelb/rot) - Version wird in der Navbar angezeigt - Karte fittet beim Öffnen auf alle Nodes -## [0.2.0] - 2026-02-15 +## [0.02.00] - 2026-02-15 ### Added - Zentrale config.yaml mit Live-Reload (File-Watcher) - Konfigurierbarer Command-Prefix (Standard: /) @@ -596,18 +596,18 @@ - Git pre-commit Hook (manuelle Versionierung) - version.py (ersetzt durch config.yaml) -## [0.1.2] - 2026-02-15 +## [0.01.02] - 2026-02-15 ### Changed - Auto-commit update -## [0.1.1] - 2026-02-15 +## [0.01.01] - 2026-02-15 ### Changed - Dashboard auf Bootstrap 5.3 Dark Theme umgestellt - Bootstrap Icons hinzugefügt - Responsive Stat-Cards, verbessertes Node-Table-Layout - Online-Nodes werden grün hervorgehoben -## [0.1.0] - 2026-02-15 +## [0.01.00] - 2026-02-15 ### Added - Initial release - Meshtastic Bot mit TCP-Verbindung diff --git a/README.md b/README.md index 931fd70..4ebb297 100644 --- a/README.md +++ b/README.md @@ -80,4 +80,4 @@ anderem weitere Befehle, erweiterte Statistiken und zusätzliche Visualisierungen auf der Karte. Der Quellcode ist auf unserem Forgejo-Server verfügbar. -*Aktueller Stand: Version 0.2.5* +*Aktueller Stand: Version 0.02.05* diff --git a/config.yaml b/config.yaml index 98fda72..8c3a8dd 100644 --- a/config.yaml +++ b/config.yaml @@ -1,4 +1,4 @@ -version: "0.8.11" +version: "0.08.11" bot: name: "MeshDD-Bot" diff --git a/docs/bot-beschreibung.md b/docs/bot-beschreibung.md index e647841..247e7b1 100644 --- a/docs/bot-beschreibung.md +++ b/docs/bot-beschreibung.md @@ -1,6 +1,6 @@ # MeshDD-Bot — Vollständige Beschreibung -> Aktueller Stand: **v0.8.9** · Letztes Update: 2026-02-19 +> Aktueller Stand: **v0.08.09** · Letztes Update: 2026-02-19 --- @@ -390,7 +390,7 @@ Alle Seiten verwenden ein einheitliches Layout: Tabler 1.4.0 (Bootstrap 5.3), fi ### `config.yaml` — Hauptkonfiguration ```yaml -version: "0.8.9" +version: "0.08.09" bot: name: "MeshDD-Bot" @@ -559,38 +559,38 @@ Die folgende Tabelle zeigt die wichtigsten Entwicklungsmeilensteine von der erst | Version | Datum | Erweiterungsschritt | |---|---|---| -| **0.1.0** | 2026-02-15 | **Grundgerüst:** Meshtastic TCP-Bot, SQLite-DB, Web-Dashboard mit WebSocket, Leaflet-Karte, Bot-Kommandos (ping, nodes, info, help, weather, stats, uptime) | -| **0.2.0** | 2026-02-15 | **Konfiguration & Karte:** Zentrale `config.yaml` mit Live-Reload, Hop-Farbcodierung auf der Karte, Theme-Toggle (Hell/Dunkel), Kanalnamen in Nachrichten | -| **0.2.5** | 2026-02-15 | **Nachrichten-Splitting:** Automatisches Aufteilen langer Nachrichten mit `[x/y]`-Nummerierung und Pause | -| **0.3.1** | 2026-02-15 | **Scheduler:** Zeitgesteuerte Bot-Kommandos via Cron-Ausdrücke, `scheduler.yaml` mit File-Watcher, REST-CRUD-API, Live-Updates via WebSocket | -| **0.3.2** | 2026-02-15 | **Nachrichten senden:** Direktes Senden aus dem Dashboard (`POST /api/send`); Scheduler-Typ „Nachricht" | -| **0.3.5** | 2026-02-15 | **AdminLTE-Layout:** Einheitliches Sidebar-Layout für alle Seiten mit Active-State | -| **0.3.6** | 2026-02-15 | **Node-Einstellungen:** `/settings`-Seite liest Gerät, LoRa, Kanäle, Position, Power, Bluetooth via Protobuf vom Node | -| **0.4.0** | 2026-02-16 | **UX-Verbesserungen:** `?me`-Kommando, Ping mit Hop-Anzahl, PLZ-Support fürs Wetter, Luftdruck & Taupunkt, gesendete Nachrichten im Dashboard | -| **0.5.0** | 2026-02-16 | **Benutzerverwaltung:** Session-Auth mit bcrypt, E-Mail-Verifikation, Rollen (public/user/admin), Admin-Panel, Passwort-Reset | -| **0.5.3** | 2026-02-16 | **Secrets in .env:** AUTH_SECRET_KEY und SMTP-Einstellungen aus config.yaml in Umgebungsvariablen ausgelagert | -| **0.5.4** | 2026-02-16 | **Admin erweitert:** Benutzer direkt anlegen mit Passwort, Bearbeiten-Modal, Passwort-Reset, Passwort-Generator | -| **0.6.0** | 2026-02-17 | **Node-Detail-Modal:** Klick auf Node → Modal mit allen Feldern + Leaflet-Minikarte | -| **0.6.1** | 2026-02-17 | **Docker-Support:** Dockerfile, docker-compose.yml, .dockerignore | -| **0.6.2** | 2026-02-17 | **Geteiltes app.js:** ~360 Zeilen duplizierten Frontend-Code in gemeinsames Modul extrahiert | -| **0.6.3** | 2026-02-17 | **WebSocket-Sicherheit:** `auth_clients` vs. `clients` — Nachrichten nur an authentifizierte WS-Clients | -| **0.6.5** | 2026-02-17 | **Dark-Mode-Karte + Charts:** CartoDB Dark Matter, 3 Charts (Kanal, Hops, Hardware) | -| **0.6.7** | 2026-02-17 | **Tabler 1.4.0:** Professionelleres CSS-Framework, überarbeitetes style.css | -| **0.6.10** | 2026-02-18 | **Paket-Log:** Neue `/packets`-Seite, `packets`-Tabelle in DB, Typ-Filter, Echtzeit via WebSocket | -| **0.6.13** | 2026-02-18 | **Karten-Alter-Transparenz:** Nodes >72h werden ausgeblendet; Legende mit Alter-Sektion | -| **0.6.14** | 2026-02-18 | **Pakettypen-Chart:** Viertes Doughnut-Chart mit Pakettyp-Verteilung 24h | -| **0.6.15** | 2026-02-18 | **Scheduler Template-Variablen:** `{time}`, `{date}`, `{weekday}`, `{nodes}` etc.; Footer auf allen Seiten | -| **0.7.0** | 2026-02-18 | **Docker-Verbesserungen:** HEALTHCHECK, Logging-Config, korrigierter Port | -| **0.8.0** | 2026-02-19 | **NINA-Integration:** BBK Warn-App angebunden; duales Polling (Dashboard + mapData); Konfigurationsseite; Monitor-Modus; Live-Tabelle via WebSocket | -| **0.8.1** | 2026-02-19 | **NINA Resend-Loop:** Aktive Warnungen werden zyklisch wiederholt; AGS-Code-Tabelle statt Badges | -| **0.8.2** | 2026-02-19 | **NINA geografische Filterung:** mapData nur noch ohne AGS-Codes aktiv (verhindert bundesweite Meldungen) | -| **0.8.3** | 2026-02-19 | **NINA Gebietsanzeige:** Regionsname aus AGS-Labels in Meldung und Mesh-Text; Sachsen-Combobox | -| **0.8.4** | 2026-02-19 | **NINA Sofortabfrage:** Nach Speichern der Config sofort pollen; `last_poll`-Zeitstempel anzeigen | -| **0.8.5** | 2026-02-19 | **Kartenlegende Position:** von bottomright nach topleft verschoben | -| **0.8.6** | 2026-02-19 | **Paket-Log informativer:** Erweiterte Payload-Zusammenfassung; eigene Telemetrie unterdrückt | -| **0.8.7** | 2026-02-19 | **Race-Condition-Fix:** `threading.Event` verhindert falsche Startup-Warning „connection.established missed" | -| **0.8.8** | 2026-02-19 | **Kartenlegende neu gestaltet:** Theme-aware CSS-Variablen, kompaktes Design | -| **0.8.9** | 2026-02-19 | **NINA aktive Warnungen:** `GET /api/nina/alerts` gibt beim Seitenaufruf alle aktiven Warnungen zurück | +| **0.01.00** | 2026-02-15 | **Grundgerüst:** Meshtastic TCP-Bot, SQLite-DB, Web-Dashboard mit WebSocket, Leaflet-Karte, Bot-Kommandos (ping, nodes, info, help, weather, stats, uptime) | +| **0.02.00** | 2026-02-15 | **Konfiguration & Karte:** Zentrale `config.yaml` mit Live-Reload, Hop-Farbcodierung auf der Karte, Theme-Toggle (Hell/Dunkel), Kanalnamen in Nachrichten | +| **0.02.05** | 2026-02-15 | **Nachrichten-Splitting:** Automatisches Aufteilen langer Nachrichten mit `[x/y]`-Nummerierung und Pause | +| **0.03.01** | 2026-02-15 | **Scheduler:** Zeitgesteuerte Bot-Kommandos via Cron-Ausdrücke, `scheduler.yaml` mit File-Watcher, REST-CRUD-API, Live-Updates via WebSocket | +| **0.03.02** | 2026-02-15 | **Nachrichten senden:** Direktes Senden aus dem Dashboard (`POST /api/send`); Scheduler-Typ „Nachricht" | +| **0.03.05** | 2026-02-15 | **AdminLTE-Layout:** Einheitliches Sidebar-Layout für alle Seiten mit Active-State | +| **0.03.06** | 2026-02-15 | **Node-Einstellungen:** `/settings`-Seite liest Gerät, LoRa, Kanäle, Position, Power, Bluetooth via Protobuf vom Node | +| **0.04.00** | 2026-02-16 | **UX-Verbesserungen:** `?me`-Kommando, Ping mit Hop-Anzahl, PLZ-Support fürs Wetter, Luftdruck & Taupunkt, gesendete Nachrichten im Dashboard | +| **0.05.00** | 2026-02-16 | **Benutzerverwaltung:** Session-Auth mit bcrypt, E-Mail-Verifikation, Rollen (public/user/admin), Admin-Panel, Passwort-Reset | +| **0.05.03** | 2026-02-16 | **Secrets in .env:** AUTH_SECRET_KEY und SMTP-Einstellungen aus config.yaml in Umgebungsvariablen ausgelagert | +| **0.05.04** | 2026-02-16 | **Admin erweitert:** Benutzer direkt anlegen mit Passwort, Bearbeiten-Modal, Passwort-Reset, Passwort-Generator | +| **0.06.00** | 2026-02-17 | **Node-Detail-Modal:** Klick auf Node → Modal mit allen Feldern + Leaflet-Minikarte | +| **0.06.01** | 2026-02-17 | **Docker-Support:** Dockerfile, docker-compose.yml, .dockerignore | +| **0.06.02** | 2026-02-17 | **Geteiltes app.js:** ~360 Zeilen duplizierten Frontend-Code in gemeinsames Modul extrahiert | +| **0.06.03** | 2026-02-17 | **WebSocket-Sicherheit:** `auth_clients` vs. `clients` — Nachrichten nur an authentifizierte WS-Clients | +| **0.06.05** | 2026-02-17 | **Dark-Mode-Karte + Charts:** CartoDB Dark Matter, 3 Charts (Kanal, Hops, Hardware) | +| **0.06.07** | 2026-02-17 | **Tabler 1.4.0:** Professionelleres CSS-Framework, überarbeitetes style.css | +| **0.06.10** | 2026-02-18 | **Paket-Log:** Neue `/packets`-Seite, `packets`-Tabelle in DB, Typ-Filter, Echtzeit via WebSocket | +| **0.06.13** | 2026-02-18 | **Karten-Alter-Transparenz:** Nodes >72h werden ausgeblendet; Legende mit Alter-Sektion | +| **0.06.14** | 2026-02-18 | **Pakettypen-Chart:** Viertes Doughnut-Chart mit Pakettyp-Verteilung 24h | +| **0.06.15** | 2026-02-18 | **Scheduler Template-Variablen:** `{time}`, `{date}`, `{weekday}`, `{nodes}` etc.; Footer auf allen Seiten | +| **0.07.00** | 2026-02-18 | **Docker-Verbesserungen:** HEALTHCHECK, Logging-Config, korrigierter Port | +| **0.08.00** | 2026-02-19 | **NINA-Integration:** BBK Warn-App angebunden; duales Polling (Dashboard + mapData); Konfigurationsseite; Monitor-Modus; Live-Tabelle via WebSocket | +| **0.08.01** | 2026-02-19 | **NINA Resend-Loop:** Aktive Warnungen werden zyklisch wiederholt; AGS-Code-Tabelle statt Badges | +| **0.08.02** | 2026-02-19 | **NINA geografische Filterung:** mapData nur noch ohne AGS-Codes aktiv (verhindert bundesweite Meldungen) | +| **0.08.03** | 2026-02-19 | **NINA Gebietsanzeige:** Regionsname aus AGS-Labels in Meldung und Mesh-Text; Sachsen-Combobox | +| **0.08.04** | 2026-02-19 | **NINA Sofortabfrage:** Nach Speichern der Config sofort pollen; `last_poll`-Zeitstempel anzeigen | +| **0.08.05** | 2026-02-19 | **Kartenlegende Position:** von bottomright nach topleft verschoben | +| **0.08.06** | 2026-02-19 | **Paket-Log informativer:** Erweiterte Payload-Zusammenfassung; eigene Telemetrie unterdrückt | +| **0.08.07** | 2026-02-19 | **Race-Condition-Fix:** `threading.Event` verhindert falsche Startup-Warning „connection.established missed" | +| **0.08.08** | 2026-02-19 | **Kartenlegende neu gestaltet:** Theme-aware CSS-Variablen, kompaktes Design | +| **0.08.09** | 2026-02-19 | **NINA aktive Warnungen:** `GET /api/nina/alerts` gibt beim Seitenaufruf alle aktiven Warnungen zurück | --- diff --git a/docs/dashboard-improvements.md b/docs/dashboard-improvements.md index 7852a2b..d551a89 100644 --- a/docs/dashboard-improvements.md +++ b/docs/dashboard-improvements.md @@ -1,10 +1,10 @@ -# Dashboard-Verbesserungen – Übersicht (v0.6.2 – v0.6.7) +# Dashboard-Verbesserungen – Übersicht (v0.06.02 – v0.06.07) Alle Änderungen wurden in der Session vom 2026-02-17 durchgeführt. --- -## Prio 1 – Shared `app.js` Modul (v0.6.2) +## Prio 1 – Shared `app.js` Modul (v0.06.02) **Problem:** ~360 doppelte Zeilen identischer Boilerplate-Code in allen 6 JS-Dateien (`applyTheme`, `updateNavbar`, `updateSidebar`, `escapeHtml`, Sidebar-HTML). @@ -18,7 +18,7 @@ Alle Änderungen wurden in der Session vom 2026-02-17 durchgeführt. --- -## Prio 2 – WebSocket Auth-Fix (v0.6.2) +## Prio 2 – WebSocket Auth-Fix (v0.06.02) **Problem:** `initial_messages` und `new_message` WS-Events wurden an alle Clients gesendet, auch nicht eingeloggte. @@ -30,7 +30,7 @@ Alle Änderungen wurden in der Session vom 2026-02-17 durchgeführt. --- -## Prio 3 – Bot-Uptime & Meshtastic-Status (v0.6.4) +## Prio 3 – Bot-Uptime & Meshtastic-Status (v0.06.04) **Problem:** Uptime nur per `?uptime`-Kommando abrufbar; kein Indikator ob Bot mit Meshtastic verbunden. @@ -41,7 +41,7 @@ Alle Änderungen wurden in der Session vom 2026-02-17 durchgeführt. --- -## Prio 4 – Dark Mode Kartentiles (v0.6.5) +## Prio 4 – Dark Mode Kartentiles (v0.06.05) **Problem:** OpenStreetMap-Kacheln sind immer hell – passt nicht zum Dark Theme. @@ -54,7 +54,7 @@ Alle Änderungen wurden in der Session vom 2026-02-17 durchgeführt. --- -## Prio 5 – Charts (v0.6.5) +## Prio 5 – Charts (v0.06.05) **Bibliothek:** Chart.js 4.4.4 (CDN in `index.html`) @@ -72,7 +72,7 @@ Alle Änderungen wurden in der Session vom 2026-02-17 durchgeführt. --- -## Prio 6 – Nodes-Tabelle Interaktivität (v0.6.5) +## Prio 6 – Nodes-Tabelle Interaktivität (v0.06.05) **Neue Features in `dashboard.js` + `index.html`:** - **Suchfeld** `#nodeSearch`: filtert `long_name`, `short_name`, `hw_model`, `node_id` @@ -82,7 +82,7 @@ Alle Änderungen wurden in der Session vom 2026-02-17 durchgeführt. --- -## Prio 7 – Nachrichten Kanalfilter (v0.6.6) +## Prio 7 – Nachrichten Kanalfilter (v0.06.06) **Neue Features in `dashboard.js` + `index.html`:** - Filter-Buttons im Nachrichten-Card-Header: „Alle" + ein Button pro Kanal @@ -94,7 +94,7 @@ Alle Änderungen wurden in der Session vom 2026-02-17 durchgeführt. --- -## Extra – Tabler 1.4.0 Admin-Theme (v0.6.7) +## Extra – Tabler 1.4.0 Admin-Theme (v0.06.07) **Motivation:** Eleganteres, professionelleres Erscheinungsbild. diff --git a/docs/whats-new-0.8.md b/docs/whats-new-0.8.md index 5eae43e..c14b3b3 100644 --- a/docs/whats-new-0.8.md +++ b/docs/whats-new-0.8.md @@ -1,6 +1,6 @@ # Was ist neu in MeshDD-Bot 0.8.x -> Aktueller Stand: **v0.8.9** · Release-Datum: 2026-02-19 +> Aktueller Stand: **v0.08.09** · Release-Datum: 2026-02-19 --- @@ -193,13 +193,13 @@ sources: | 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 | +| 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 | diff --git a/meshbot/bot.py b/meshbot/bot.py index 42392d6..c264d00 100644 --- a/meshbot/bot.py +++ b/meshbot/bot.py @@ -388,7 +388,7 @@ class MeshBot: elif cmd == f"{prefix}info": uptime = self._format_uptime() - response = f"ℹ️ {config.get('bot.name', 'MeshDD-Bot')} v{config.get('version', '0.0.0')}\nUptime: {uptime}" + response = f"ℹ️ {config.get('bot.name', 'MeshDD-Bot')} v{config.get('version', '0.00.00')}\nUptime: {uptime}" elif cmd == f"{prefix}help": response = ( diff --git a/meshbot/webserver.py b/meshbot/webserver.py index bbc007c..e95f1dc 100644 --- a/meshbot/webserver.py +++ b/meshbot/webserver.py @@ -108,7 +108,7 @@ class WebServer: my_id = self.bot.get_my_node_id() if self.bot else None stats = await self.db.get_stats(my_node_id=my_id) - stats["version"] = config.get("version", "0.0.0") + stats["version"] = config.get("version", "0.00.00") if self.bot: stats["uptime"] = self.bot.get_uptime() stats["bot_connected"] = self.bot.is_connected() @@ -158,7 +158,7 @@ class WebServer: async def _api_stats(self, request: web.Request) -> web.Response: my_id = self.bot.get_my_node_id() if self.bot else None stats = await self.db.get_stats(my_node_id=my_id) - stats["version"] = config.get("version", "0.0.0") + stats["version"] = config.get("version", "0.00.00") if self.bot: stats["uptime"] = self.bot.get_uptime() stats["bot_connected"] = self.bot.is_connected() diff --git a/scheduler.yaml b/scheduler.yaml index 1c4d5f8..cb30b6e 100644 --- a/scheduler.yaml +++ b/scheduler.yaml @@ -2,12 +2,30 @@ jobs: - name: Wetterbericht enabled: true cron: 0 7 * * * - command: /weather + command: ?weather channel: 0 description: Taeglicher Wetterbericht + type: command - name: Mesh-Status enabled: true cron: 0 18 * * * - command: /mesh - channel: 0 + command: ?mesh + channel: 1 description: Mesh-Netzwerk Uebersicht + type: command +- name: Bot-Bake + description: Bot-Bake LongFast + type: message + command: '{datetime} MeshDD-Bot Version v0.08.11 aktiv, {nodes_24h} Nodes aktiv, + Hilfe mit "?help"' + cron: 0 */6 * * * + channel: 0 + enabled: false +- name: Bot-Bake Mei + description: Bot-Bake INFO MEI O + type: message + command: '{datetime} MeshDD-Bot Version v0.08.11 aktiv, {nodes_24h} Nodes aktiv, + Hilfe mit "?help"' + cron: 1 */6 * * * + channel: 4 + enabled: true