refactor(version): Versionsformat auf 2-stellige Minor- und Patch-Level umgestellt

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 <noreply@anthropic.com>
This commit is contained in:
ppfeiffer 2026-02-20 14:00:49 +01:00
parent a6988fbb1f
commit 087cccd35c
9 changed files with 149 additions and 131 deletions

View file

@ -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 `<strong>` + `<hr>`,
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

View file

@ -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*

View file

@ -1,4 +1,4 @@
version: "0.8.11"
version: "0.08.11"
bot:
name: "MeshDD-Bot"

View file

@ -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 |
---

View file

@ -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.

View file

@ -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 |

View file

@ -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 = (

View file

@ -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()

View file

@ -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