Commit graph

38 commits

Author SHA1 Message Date
ppfeiffer f36a126200 feat(nina): aktive Warnmeldungen beim Seitenaufruf laden (GET /api/nina/alerts)
_active speichert jetzt msgType/area/monitor_only. get_active_alerts() gibt
sortierte Liste zurück. nina.js lädt beim Init und dedupliziert per ID.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 17:37:49 +01:00
ppfeiffer 6adc3cedcf style(map): Kartenlegende neu gestaltet (theme-aware, kompakt)
CSS-Variablen für Light/Dark-Mode, Uppercase-Sektionsköpfe,
kein <strong>+<hr> mehr, weicherer Schatten.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 17:35:04 +01:00
ppfeiffer cc392a125a fix(packets): informativer Payload + eigene Telemetrie unterdrücken (fixes #3)
- bot.py: vollständige Payload-Daten für Position, Telemetry (Device+Env),
  NodeInfo (hw_model), Routing (error), Traceroute (hops), Neighborinfo (count)
- packets.js: fmtPayload() zeigt alle Felder; TELEMETRY_APP vom eigenen Node
  (my_node_id / short_name FTLW) wird unterdrückt und nicht gezählt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 17:20:35 +01:00
ppfeiffer 407addc919 fix(map): Legende nach topleft verschoben (fixes #5)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 17:11:41 +01:00
ppfeiffer 2db03510c8 v0.8.4: NINA Sofortabfrage nach Speichern + Zeitstempel letzte Abfrage
- Konfiguration speichern löst sofort eine NINA-Abfrage aus (trigger_poll)
- Frontend lädt Config 5s nach Save neu um last_poll-Zeitstempel zu zeigen
- Unterhalb Abfrageintervall-Feld: Datum/Uhrzeit der letzten Abfrage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 16:18:15 +01:00
ppfeiffer 33928fca7b v0.8.3: NINA Gebietsanzeige + AGS-Ortsname + Sachsen-Combobox
- Warnmeldungen zeigen jetzt das Herkunftsgebiet (AGS-Regionsname) in
  der Weboberfläche (neue Spalte "Gebiet") und im Mesh-Nachrichtentext
  (z.B. "[NINA] Schwerwiegend: Sturmböen (Dresden, Stadt)")
- AGS-Code-Tabelle zeigt lesbaren Ortsnamen als zweite Spalte
- Datalist mit allen sächsischen AGS-Codes bei der Eingabe

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 16:09:55 +01:00
ppfeiffer 2feff2c2c7 feat: NINA Wiederholungsintervall, AGS-Tabelle, Badge-Fix (v0.8.1)
- resend_interval: zweiter Intervall fuer erneutes Senden aktiver
  Warnmeldungen ins Mesh (nur bei send_to_mesh=true). Standard 3600s.
  NinaBot._resend_loop() laeuft als eigener asyncio-Task; _active-Dict
  haelt aktive Warnungen vor (Cancel entfernt Eintraege).
- AGS-Code-Verwaltung als Tabelle mit Trash-Button je Zeile statt
  Badges mit X-Button.
- Severity-Badges: explizite text-white/text-dark, kein bg-opacity-85
  mehr - lesbar in beiden Themes.
- colspan-Fix: leere Alerts-Zeile auf 5 Spalten korrigiert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 12:44:29 +01:00
ppfeiffer ee3208769c feat: NINA send_to_mesh-Schalter + Dresden-AGS-Codes
- send_to_mesh: true/false – trennt Abfrage vom Mesh-Versand.
  false = Monitor-Modus: Warnmeldungen werden abgerufen und in der
  Weboberfläche angezeigt, aber NICHT ins Meshtastic-Netz gesendet.
  WebSocket-Event enthaelt monitor_only-Flag (Anzeige per Icon).
- nina.yaml/conf/nina.yaml: send_to_mesh=false als sichere Voreinstellung
  + 5 AGS-Codes fuer den Raum Dresden vorbelegt:
  Stadt Dresden (146120000000), LK Meissen (146270000000),
  LK Saechs. Schweiz-Osterzgebirge (146280000000),
  LK Bautzen (146250000000), LK Goerlitz (146260000000)
- nina.html: zweiter Toggle "Ins Mesh senden"
- nina.js: Schalter in load/save + Statusbadge (Mesh+Web / Nur Web)
  + Mesh-Spalte in Alerts-Tabelle mit broadcast/eye-Icon

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 11:41:42 +01:00
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 95fade502d fix: Badge-Beschriftung im Scheduler sichtbar machen (#1)
Explizite Textfarben (text-dark/text-white) für Typ-Badges hinzugefügt,
damit die Beschriftung auf bg-warning/bg-info Hintergrund lesbar ist.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 07:20:57 +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 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 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 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 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 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 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 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 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 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 0dbb1e0184 feat: Smaller stat cards, battery icons, version in navbar, map fit
- Stats cards compacter with smaller font and padding
- Battery status with Bootstrap Icons and color coding
- Version displayed in navbar from config
- Map fits all nodes on open with invalidateSize

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 14:17:15 +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 d5ea4eee4a feat: Redesign dashboard with Bootstrap 5.3 dark theme
Replace custom CSS layout with Bootstrap 5.3, add Bootstrap Icons,
responsive card grid for stats, improved nodes table with hardware
column, and styled message list. Online nodes highlighted in green.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 13:02:34 +01:00
ppfeiffer 15955cf8d7 feat: Add Meshtastic bot with web dashboard and live map
Implements full MeshDD-Bot with TCP connection to Meshtastic devices,
SQLite storage for nodes/messages, aiohttp web dashboard with WebSocket
live updates, and Leaflet.js map view with color-coded node markers.
Includes bot commands (!ping, !nodes, !info, !help, !weather, !stats,
!uptime) and automatic version bumping via pre-commit hook.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 12:46:32 +01:00