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>
This commit is contained in:
parent
077e0032cf
commit
7a0ff15b51
|
|
@ -1,5 +1,14 @@
|
|||
# Changelog
|
||||
|
||||
## [0.2.6] - 2026-02-15
|
||||
### Added
|
||||
- WordPress-Beitrag unter docs/wordpress-beitrag.html
|
||||
- Systemd Service-File meshdd-bot.service
|
||||
- Nachrichten-Splitting mit [x/y] Nummerierung
|
||||
|
||||
### Changed
|
||||
- Pause zwischen gesplitteten Nachrichten auf 3 Sekunden erhöht
|
||||
|
||||
## [0.2.5] - 2026-02-15
|
||||
### Added
|
||||
- Automatisches Aufteilen langer Nachrichten (max 170 Zeichen) mit 1,5s Pause
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
version: "0.2.5"
|
||||
version: "0.2.6"
|
||||
|
||||
bot:
|
||||
name: "MeshDD-Bot"
|
||||
|
|
|
|||
66
docs/wordpress-beitrag.html
Normal file
66
docs/wordpress-beitrag.html
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
<h2>MeshDD-Bot - Ein Meshtastic Bot für das Dresdner Mesh-Netzwerk</h2>
|
||||
|
||||
<p>Mit dem <strong>MeshDD-Bot</strong> haben wir einen eigenentwickelten Bot für unser Meshtastic Mesh-Netzwerk in Dresden in Betrieb genommen. Der Bot verbindet sich per TCP mit einem Meshtastic-Knoten, empfängt und verarbeitet Nachrichten aus dem Mesh und stellt ein Web-Dashboard mit Live-Karte bereit.</p>
|
||||
|
||||
<h3>Was kann der Bot?</h3>
|
||||
|
||||
<p>Der MeshDD-Bot reagiert auf Befehle, die direkt im Mesh-Chat gesendet werden. Aktuell stehen folgende Kommandos zur Verfügung:</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>/ping</strong> - Prüft, ob der Bot erreichbar ist</li>
|
||||
<li><strong>/nodes</strong> - Zeigt die Anzahl der bekannten Nodes im Netzwerk</li>
|
||||
<li><strong>/mesh</strong> - Liefert eine detaillierte Übersicht des Mesh-Netzwerks: Online-Nodes, aktive Nodes der letzten 24 Stunden, Hop-Verteilung und die am häufigsten verwendeten Hardware-Modelle</li>
|
||||
<li><strong>/weather</strong> - Zeigt das aktuelle Wetter an der Position des anfragenden Nodes (Fallback: Dresden Zentrum)</li>
|
||||
<li><strong>/stats</strong> - Statistiken zu Nodes und beantworteten Anfragen</li>
|
||||
<li><strong>/info</strong> - Bot-Name, Version und Laufzeit</li>
|
||||
<li><strong>/uptime</strong> - Wie lange der Bot bereits läuft</li>
|
||||
<li><strong>/help</strong> - Liste aller verfügbaren Kommandos</li>
|
||||
</ul>
|
||||
|
||||
<p>Längere Antworten werden automatisch auf mehrere Nachrichten aufgeteilt und mit einer Nummerierung wie <code>[1/3]</code> versehen, damit im Mesh nichts verloren geht.</p>
|
||||
|
||||
<h3>Web-Dashboard mit Live-Updates</h3>
|
||||
|
||||
<p>Unter <code>http://<server>:8080</code> steht ein Web-Dashboard zur Verfügung, das in Echtzeit via WebSocket aktualisiert wird. Es zeigt:</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>Status-Karten</strong> mit der Gesamtzahl der Nodes, aktiven Nodes (24h) und beantworteten Anfragen inkl. Aufschlüsselung nach Kommando</li>
|
||||
<li><strong>Nodes-Tabelle</strong> mit Name, Hardware-Modell, SNR, Batteriestatus (farbcodiert), Hop-Anzahl und letzter Aktivität</li>
|
||||
<li><strong>Nachrichten-Feed</strong> mit Absender, Kanalname und Zeitstempel</li>
|
||||
<li><strong>Hell/Dunkel-Modus</strong> per Knopfdruck umschaltbar</li>
|
||||
</ul>
|
||||
|
||||
<h3>Live-Karte</h3>
|
||||
|
||||
<p>Über den Karten-Link im Dashboard öffnet sich eine Leaflet-Karte mit OpenStreetMap, auf der alle Nodes mit bekannter Position dargestellt werden. Die Marker sind farblich nach Hop-Anzahl kodiert:</p>
|
||||
|
||||
<ul>
|
||||
<li><span style="color:#2196F3;"><strong>Blau</strong></span> - Direkt erreichbar (0 Hops)</li>
|
||||
<li><span style="color:#4CAF50;"><strong>Grün</strong></span> - 1 Hop</li>
|
||||
<li><span style="color:#FF9800;"><strong>Orange</strong></span> - 2 Hops</li>
|
||||
<li><span style="color:#F44336;"><strong>Rot</strong></span> - 3 Hops</li>
|
||||
<li><span style="color:#9C27B0;"><strong>Lila</strong></span> - 4 Hops</li>
|
||||
<li><span style="color:#795548;"><strong>Braun</strong></span> - 5+ Hops</li>
|
||||
</ul>
|
||||
|
||||
<p>Beim Überfahren eines Markers mit der Maus erscheint ein Tooltip mit detaillierten Node-Informationen: Name, Hardware, Hops, SNR, Batteriestatus, Höhe und letzte Aktivität.</p>
|
||||
|
||||
<h3>Technik im Hintergrund</h3>
|
||||
|
||||
<p>Der Bot ist in Python geschrieben und nutzt folgende Technologien:</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>meshtastic</strong> - Python-Bibliothek für die TCP-Verbindung zum Meshtastic-Gerät</li>
|
||||
<li><strong>aiohttp</strong> - Asynchroner Webserver mit WebSocket-Unterstützung</li>
|
||||
<li><strong>SQLite</strong> - Lokale Datenbank für Nodes, Nachrichten und Kommando-Statistiken</li>
|
||||
<li><strong>Leaflet.js</strong> - Interaktive Karte mit OpenStreetMap-Tiles</li>
|
||||
<li><strong>Bootstrap 5.3</strong> - Responsive Dashboard mit Dark/Light Theme</li>
|
||||
</ul>
|
||||
|
||||
<p>Die gesamte Konfiguration erfolgt über eine zentrale <code>config.yaml</code>, die zur Laufzeit überwacht wird - Änderungen werden automatisch ohne Neustart übernommen.</p>
|
||||
|
||||
<h3>Ausblick</h3>
|
||||
|
||||
<p>Der MeshDD-Bot wird kontinuierlich weiterentwickelt. Geplant sind unter anderem weitere Befehle, erweiterte Statistiken und zusätzliche Visualisierungen auf der Karte. Der Quellcode ist auf unserem Forgejo-Server verfügbar.</p>
|
||||
|
||||
<p><em>Aktueller Stand: Version 0.2.5</em></p>
|
||||
|
|
@ -217,12 +217,15 @@ class MeshBot:
|
|||
async def _send_text(self, text: str, channel: int, max_len: int = 170):
|
||||
if not self.interface:
|
||||
return
|
||||
parts = self._split_message(text, max_len)
|
||||
# Reserve space for "[x/y] " prefix (max 7 bytes)
|
||||
parts = self._split_message(text, max_len - 7)
|
||||
total = len(parts)
|
||||
for i, part in enumerate(parts):
|
||||
if i > 0:
|
||||
await asyncio.sleep(1.5)
|
||||
await asyncio.sleep(3.0)
|
||||
msg = f"[{i+1}/{total}] {part}" if total > 1 else part
|
||||
try:
|
||||
self.interface.sendText(part, channelIndex=channel)
|
||||
self.interface.sendText(msg, channelIndex=channel)
|
||||
except Exception:
|
||||
logger.exception("Error sending text")
|
||||
|
||||
|
|
|
|||
14
meshdd-bot.service
Normal file
14
meshdd-bot.service
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
[Unit]
|
||||
Description=MeshDD-Bot - Meshtastic Bot with Web Dashboard
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=peter
|
||||
WorkingDirectory=/home/peter/meshdd-bot
|
||||
ExecStart=/home/peter/meshdd-bot/venv/bin/python main.py
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Loading…
Reference in a new issue