Commit graph

46 commits

Author SHA1 Message Date
ppfeiffer 0ca0ffb0d1 feat: NINA BBK Warn-App Integration (v0.8.0)
Neue NINA-Integration: Automatisches Polling der BBK-Warn-API
(warnung.bund.de/api31) und Weiterleitung von Warnmeldungen ins
Meshtastic-Netz. Separate Admin-Konfigurationsseite (/nina) analog
zum Scheduler.

- meshbot/nina.py: NinaBot – Polling, De-Duplikation, Schweregrad-
  und Quellen-Filterung, WebSocket-Broadcast (nina_alert)
- nina.yaml + conf/nina.yaml: Hot-reload-faehige Konfiguration
- static/nina.html + static/js/nina.js: Konfigurationsseite mit
  AGS-Code-Verwaltung, Quellen-Auswahl und Live-Alerts-Tabelle
- webserver.py: GET/PUT /api/nina/config + GET /nina (Admin-only)
- main.py: NinaBot initialisieren, watch/start/stop im Lifecycle
- app.js: NINA-Sidebar-Eintrag (Admin-only, shield-exclamation)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 11:21:01 +01:00
ppfeiffer f2aa69333d feat: v0.7.1 - Hell-Theme als Standard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 18:49:46 +01:00
ppfeiffer fad830f6d5 feat: v0.7.0 - Docker-Verbesserungen
- Dockerfile: EXPOSE 8080 → 8081 + HEALTHCHECK auf /api/stats
- docker-compose.yml: healthcheck + json-file logging (10MB/3 Dateien)
- conf/config.yaml: Version 0.7.0, Host/Port aktualisiert

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 18:23:27 +01:00
ppfeiffer 997a29842f feat: v0.6.15 - Scheduler-Variablen, Footer, sauberer WS-Shutdown
- Scheduler Nachrichten: Template-Variablen {time}, {date}, {datetime},
  {weekday}, {nodes}, {nodes_24h} serverseitig aufgelöst
- Scheduler UI: klickbare Variablen-Badges beim Nachrichtenfeld-Modus
- Footer auf allen Seiten: © MeshDD / PPfeiffer · vX.Y.Z · MM/YYYY
- Fix: WS-Verbindungen vor runner.cleanup() explizit geschlossen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 18:13:15 +01:00
ppfeiffer 0fd401a395 feat: v0.6.14 - Pakettypen-Diagramm im Dashboard
Viertes Chart-Panel zeigt Pakettyp-Verteilung der letzten 24h als
Doughnut-Diagramm, farblich nach portnum kodiert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 18:02:15 +01:00
ppfeiffer 9306cce209 feat: v0.6.13 - Version in Navbar, Rolling 24h, Karten-Transparenz
- Version in Navbar aller Seiten (app.js holt /api/stats beim Init)
- Statistiken: Anfragen-Zähler rolling 24h statt Mitternacht-Reset
- Karte: Nodes nach Alter transparent (<24h voll, 24-48h 45%, 48-72h 20%, >72h unsichtbar)
- Legende um Alter-Sektion erweitert

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 17:54:39 +01:00
ppfeiffer ac98191143 fix: v0.6.12 - Paket-Log Typ-Badge Text immer lesbar
Badges nutzen solide bg-{color} mit text-white (warning: text-dark)
statt bg-opacity-20 text-{color} – Typ-Label dadurch in allen Themes
klar sichtbar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 17:42:46 +01:00
ppfeiffer ed3757199e fix: v0.6.11 - Paket-Log Badge/Filter-Verbesserungen
- Badges gleich breit via CSS min-width:5.5rem
- Typ-Filter-Pills in Typ-Farbe (aktiv gefüllt, inaktiv Outline)
- Undekodierbare Pakete (leerer Portnum) als "?" im Filter
- Kanal-Spalte zeigt Kanalname statt Nummer wenn verfügbar
- Statusdot nutzt classList.add/remove('connected') konsistent

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 17:33:45 +01:00
ppfeiffer 6187bb4419 feat: v0.6.10 - Paket-Log-Seite und größeres Node-Modal
- Neue öffentliche Seite /packets: Echtzeit-Tabelle aller empfangenen
  Meshtastic-Pakete via WebSocket mit Typ-Filter, Pause und Clear
- DB: packets-Tabelle + insert_packet / get_recent_packets
- bot.py: alle Pakete loggen + WS-Broadcast (public)
- webserver.py: /packets Route + /api/packets + initial_packets im WS
- Sidebar: Eintrag 'Pakete' (öffentlich)
- Node-Modal: modal-xl + scrollable, Kartenhöhe 250→300px

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 17:17:14 +01:00
ppfeiffer 6bb04ec828 fix: v0.6.9 - _on_node_updated fehlende interface-Parameter
meshtastic.node.updated sendet (node, interface), _on_node_updated
akzeptierte nur (node) -> SenderUnknownMsgDataError beim Empfang
von Node-Updates.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 16:09:55 +01:00
ppfeiffer 0b68c0417d fix: v0.6.8 - Bugfixes: Node-Sync, Modal, Badge, CSS
- bot.py: pub.subscribe vor TCPInterface verschoben; Nodes beim Start
  wurden nicht geladen da connection.established/node.updated Events
  verpasst wurden. Fallback-Sync nach Konstruktor ergaenzt.
- HTML: tabler.min.js -> bootstrap.bundle.min.js; Tabler exportiert
  bootstrap nicht global, new bootstrap.Modal() schlug fehl.
- dashboard.js: badge-pill -> rounded-pill (Bootstrap 4 -> 5)
- style.css: --tblr-bg-body Typo -> --tblr-body-bg

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 16:01:49 +01:00
ppfeiffer f2c6ba8e62 feat: v0.6.7 - Dashboard-Upgrade: Tabler-Theme, Charts, Kanalfilter, Node-Suche
- Tabler 1.4.0 als Admin-Theme: Bootstrap CSS/JS in allen 6 HTML-Seiten ersetzt
- style.css komplett ueberarbeitet: Inter-Font, Tabler CSS-Variablen, Schatten,
  verfeinerte Sidebar (Rounded Active-Links), Hover-Animation auf Info-Boxen,
  pulsierender Status-Dot
- app.js als shared Modul: Duplikation in allen JS-Dateien eliminiert (initPage,
  applyTheme, escapeHtml, Sidebar-Injektion)
- WebSocket Auth-Fix: Nachrichten nur noch an eingeloggte Clients (auth_clients)
- Bot-Uptime + Meshtastic-Verbindungsstatus in Dashboard und Stats-API
- Dark Mode Kartentiles: CartoDB Dark Matter fuer Karte + Node-Modal
- 3 Charts: Kanal-Anfragen (Doughnut), Hop-Verteilung (Bar), Hardware Top 5
- Nodes-Tabelle: Suchfeld, Online-Filter, sortierbare Spalten
- Nachrichten Kanalfilter: Filter-Buttons im Nachrichten-Card-Header

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-17 22:43:35 +01:00
ppfeiffer 822c1a0991 feat: v0.6.1 - Docker-Stack fuer Container-Betrieb
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:21:50 +01:00
ppfeiffer 78bf66d6e1 release: v0.6.0 - Node-Detail-Modal, Kanal-Tracking, taeglicher Reset
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 16:46:01 +01:00
ppfeiffer 9edc14be0a fix: v0.5.10 - Kanal-Badge in Nachrichten im Light-Mode besser lesbar
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 16:40:03 +01:00
ppfeiffer fecfb7398f fix: v0.5.9 - Kanal-Badges immer alle Kanaele sortiert anzeigen, Label entfernt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 16:35:58 +01:00
ppfeiffer 0232dfccd5 feat: v0.5.8 - Anfragen taeglich zuruecksetzen, Kommando-Badges entfernt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 16:30:45 +01:00
ppfeiffer 1d768c6921 feat: v0.5.7 - Anfragen pro Kanal mit Kanalnamen im Dashboard
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 16:24:26 +01:00
ppfeiffer 7bf58a32fb feat: v0.5.6 - Node-Detail-Modal mit Minikarte im Dashboard
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 16:18:45 +01:00
ppfeiffer 5b2a5867d5 fix: v0.5.5 - SMTP auf EmailMessage + async SMTP-Client umgestellt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 15:54:40 +01:00
ppfeiffer b1fa21504b feat: v0.5.4 - Admin-Benutzerverwaltung mit CRUD, Passwort-Reset und Info-Mail
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 20:45:30 +01:00
ppfeiffer ee361acf33 refactor: v0.5.3 - Zugangsdaten in .env auslagern
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 20:09:48 +01:00
ppfeiffer 49e8b409bd fix: v0.5.1 - Fernet key setup fuer EncryptedCookieStorage korrigiert
Fernet-Objekt direkt an EncryptedCookieStorage uebergeben statt
bytes (die intern nochmal base64-encoded wurden).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 19:46:19 +01:00
ppfeiffer 0d6b26f4f8 feat: v0.5.0 - Benutzerverwaltung mit Session-Authentifizierung
Rollen-basiertes Zugriffsystem (public/user/admin), Registrierung mit
E-Mail-Verifikation, bcrypt Passwort-Hashing, Admin-Benutzerverwaltung.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 19:38:17 +01:00
ppfeiffer 8f79c197c7 release: v0.4.0 - Minor version bump
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 18:14:50 +01:00
ppfeiffer f6bbca3fe0 chore: v0.3.15 - Remove debug logging from _send_text
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 18:13:12 +01:00
ppfeiffer cd4e31c63b feat: v0.3.14 - Change prefix to ?, wider channel select, send logging
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 18:09:25 +01:00
ppfeiffer 248ebbbc43 fix: v0.3.13 - Store and broadcast sent messages before radio send
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 18:00:42 +01:00
ppfeiffer 9b47e5202c fix: v0.3.12 - Filter own message echoes, fix sent message display
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:55:26 +01:00
ppfeiffer 211b338b23 feat: v0.3.11 - Move send input to separate card above main panels
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:48:51 +01:00
ppfeiffer 16465eb8f6 feat: v0.3.10 - Show sent messages in dashboard with distinct styling
Store bot-sent messages in DB and broadcast via WebSocket. Sent messages
appear right-aligned with green bubble in the messages panel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:46:08 +01:00
ppfeiffer 50e12fbe02 feat: v0.3.9 - /me command, weather with pressure and dewpoint
Add /me command showing requesting node's info. Add sea-level pressure
and dewpoint to weather response.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:31:49 +01:00
ppfeiffer a34162d428 feat: v0.3.8 - Ping response shows hop count
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:25:01 +01:00
ppfeiffer fb4425958f feat: v0.3.7 - Weather with location name and PLZ support
Show city name via reverse geocoding in weather response. Allow
specifying a German postal code with plz:XXXXX argument.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:07:22 +01:00
ppfeiffer d3c3806ed5 feat: v0.3.6 - Node settings page, map in sidebar layout
Add /settings page showing device, LoRa, channels, position, power and
bluetooth/network config read from the Meshtastic node. Rebuild map page
with consistent sidebar layout instead of standalone fullscreen view.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 18:06:32 +01:00
ppfeiffer 65703b6389 feat: v0.3.5 - AdminLTE-style layout, fix channel names in messages
Redesign dashboard and scheduler with AdminLTE-inspired layout: fixed sidebar
navigation, top navbar, info-boxes, card-outline styling, table-striped.
Fix channel names missing on initial load by sending channels before messages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:54:12 +01:00
ppfeiffer 6bfb1595e4 feat: v0.3.3 - Send messages from dashboard, scheduler message type, modern UI
Add message sending from web dashboard with channel selector, new POST /api/send
endpoint, scheduler support for free-text messages (type field), and modernized
dashboard layout with glassmorphism navbar, gradient stat cards, chat bubbles.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 17:40:00 +01:00
ppfeiffer c0b5c804e8 release: v0.3.0 - Production deployment as systemd service
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 15:30:32 +01:00
ppfeiffer 7a0ff15b51 docs: v0.2.6 - WordPress article, systemd service, message splitting fix
- Add WordPress blog post describing the bot (docs/)
- Add systemd service file for production deployment
- Message split numbering [x/y], increase delay to 3s

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 14:49:56 +01:00
ppfeiffer 077e0032cf feat: v0.2.5 - Message splitting, improved /mesh readability
- Split long messages at 170 bytes with 1.5s delay between parts
- /mesh: proper sections with line breaks and indentation
- Hop labels: "Direkt", "1 Hop", "2 Hops" instead of "0h", "1h"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 14:38:57 +01:00
ppfeiffer b1e08ab720 feat: v0.2.4 - Add /mesh command for mesh network overview
Shows total/online nodes, active 24h, positions, hop distribution,
and top 3 hardware models.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 14:32:03 +01:00
ppfeiffer a1fe0a297d feat: v0.2.3 - Command tracking, active nodes 24h, request breakdown
- Track bot command responses in new `commands` DB table
- Stats cards: total nodes, active 24h, total commands answered
- Full-width command breakdown row with badges per command
- Update bot /stats response

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 14:26:16 +01:00
ppfeiffer ed56628ba4 style: v0.2.2 - Compact node table layout, align SNR right, battery left
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 14:21:54 +01:00
ppfeiffer ee90e0a8dc chore: Bump to v0.2.1, add changelog entry
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 14:19:01 +01:00
ppfeiffer 9e880a1f36 feat: v0.2.0 - Config YAML, theme toggle, hop map, channel names
- Central config.yaml with live-reload file watcher
- Configurable command prefix (default: /)
- Light/dark theme toggle with localStorage persistence
- Map: hop-based node coloring with legend, hover tooltips
- Dashboard: node long names, hop column, channel names in messages
- Load existing messages on WebSocket connect
- Weather fallback to Dresden center
- Remove version.py and pre-commit hook

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 14:07:51 +01:00
ppfeiffer a6c09b19eb refactor: Replace env-based config and version.py with config.yaml
Move all configuration to config.yaml with live-reload (file watcher).
Version is now managed in config.yaml instead of version.py.
Remove pre-commit hook for automatic version bumping.
Pin meshtastic dependency to >=2.7.7.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 13:11:09 +01:00