Browser-App für MeshCore-Companions per USB (Web Serial), Bluetooth LE oder TCP/WiFi. Eine einzige HTML-Datei, keine Installation, kein Server – nur für TCP/WiFi wird zusätzlich die kleine TCP-Bridge benötigt.
Live: https://saarmesh-bot.github.io/meshcore-webapp/
Dein Companion im Browser: Seite öffnen, per USB, Bluetooth oder WLAN verbinden, loslegen. Kein Konto, kein Server dazwischen. Auf Wunsch als App aufs Handy oder den Desktop installieren, sie startet dann auch offline.
Chatten mit Zustellbestätigung, @Erwähnungen und Benachrichtigungen pro Chat. Jedes empfangene Paket live mit Route, Hops und SNR. Eine Karte mit allen Knoten und Nachbar-Linien nach Signalqualität. Repeater-Verwaltung mit Terminal, Telemetrie mit Verlauf, Trace-Route und öffentliche Kanäle, die die Webapp selbst im Funkverkehr entdeckt.
Die offizielle MeshCore-App ist ein Messenger. Die SaarMesh-Webapp ist zusätzlich ein Werkzeugkasten fürs Netz: Sie zeigt, was im Mesh tatsächlich passiert – rohe Pakete, Pfade, Signalwerte, entdeckte Kanäle und Regionen – und Repeater-Betreiber verwalten ihre Knoten an einem Ort. Sie ist komplett quelloffen (MIT), auf Deutsch, eine einzige HTML-Datei und wird von der SaarMesh-Community laufend weiterentwickelt.
Sie ersetzt die offizielle App nicht, sondern ergänzt sie: Kanäle und Kontakte lassen sich per QR-Code im Format der offiziellen App austauschen.
- Live-Traffic – alle empfangenen Pakete mit Typ, Route, Hop-Pfad (inkl. Pfad-Hash-Größe 1/2/3 Byte), SNR/RSSI, Region; Filter, Detailansicht mit Rohdaten, CSV/JSON-Export, Pakete/Minute; gleiche Pakete nach Hash gruppieren (wie oft und über welche Wege empfangen)
- Chat – Kanäle und Direktnachrichten, Zustellbestätigung mit Laufzeit, erneut senden, Antworten per
@[Name], Direktnachricht an Absender, anklickbare Links und#kanäle, Suche im gesamten Verlauf, @Erwähnungen hervorgehoben - Benachrichtigungen – aus / nur Direktnachrichten & @Erwähnungen / alle, optional mit Ton, pro Chat einstellbar oder stumm
- QR-Codes – Kanäle, Kontakte und das eigene Gerät als QR (Format der offiziellen MeshCore-App), Scannen per Kamera, Bild oder eingefügtem Link
- Regionen – Standard-Region des Geräts, Region pro Kanal, Anzeige der Region und Hash-Größe bei empfangenen Nachrichten
- Öffentliches Verzeichnis – erkennt öffentliche Kanäle und Regionsnamen im Live-Traffic, liest unbekannte öffentliche Kanäle mit („Entdeckt“), Kanäle mit einem Klick zum Gerät hinzufügen
- Karte – alle Companions, Repeater, Room-Server und Sensoren mit Standort aus Adverts, Nachbar-Linien nach SNR, Ebene „Eigener Empfang“, Paketpfad auf der Karte, eigene Position per Klick
- Verbindung – USB, Bluetooth LE oder TCP/WiFi (über die TCP-Bridge)
- Adverts – Zero-Hop und Flood
- Kontakte – speichern, löschen, teilen, Entfernung, neu gehörte Knoten bestätigen, Export als CSV/GPX, Auto-Speichern pro Knotentyp
- Pfade – Weg zu einem Kontakt oder Repeater selbst festlegen: per Klick auf der Karte, aus einer Liste, per Kennung oder als Umkehrung des Advert-Weges
- Knotendetails – Empfangsverlauf mit SNR-Diagramm, alle Aktionen an einer Stelle, Link zu CoreScope
- Repeater-Admin – Fernverwaltung von Repeatern und Room-Servern: Login mit Admin- oder Gast-Passwort, Status (Akku, Laufzeit, Uhr, Rauschen, Airtime, Paketzähler), Nachbarn mit SNR (auch auf der Karte), Zugriffsliste, Einstellungen als Formular, Regionen verwalten, Uhr synchronisieren, Adverts, Neustart und ein Terminal für alle CLI-Befehle; Übersicht aller Repeater mit gesammelter Abfrage und Hinweis auf neuere Firmware; Abfrage ohne Anmeldung (Name, Owner, Uhr, Regionen)
- Telemetrie – von Repeatern, Sensoren, Kontakten und dem eigenen Gerät (Spannung, Temperatur, Luftfeuchte, Luftdruck, GPS u. a.), Verlauf mit Diagrammen und CSV-Export, optional automatisch in großen Abständen, Freigaben für die eigene Telemetrie
- Netz-Tools – Trace-Route mit SNR pro Strecke (auch auf der Karte), Repeater in der Nähe per Zero-Hop-Suche mit SNR hin/zurück
- Mobil & App – eigene Handy-Ansicht mit Reiterleiste unten; als App installierbar (PWA) mit Offline-Start; auf Android per Bluetooth oder TCP/WiFi, auf iOS per TCP/WiFi
- Gerät – Name, Position, TX-Leistung, Pfad-Hash-Größe, Batterie, Rauschpegel, Airtime, Paketstatistik, Neustart, Protokoll-Log, Einrichtungsassistent, Sicherung von Kontakten & Kanälen als Datei
- Companion mit Firmware „Companion USB“ (oder BLE) flashen.
- Seite in Chrome, Edge oder Opera (Desktop) öffnen – entweder die Live-Version oben, lokal
index.htmloder über einen lokalen Server:→python -m http.server 8000http://localhost:8000 - „USB verbinden“, „BLE“ oder „TCP/WiFi“ klicken und das Gerät wählen.
Firefox und Safari unterstützen Web Serial / Web Bluetooth nicht – TCP/WiFi über die Bridge funktioniert dort trotzdem.
Browser dürfen keine direkten TCP-Verbindungen öffnen. Für Companions mit WiFi-Firmware gibt es deshalb die MeshCore TCP-Bridge – ein kleines Programm ohne Installation, das auf dem eigenen PC läuft:
Webapp ──WebSocket──► TCP-Bridge (localhost:8765) ──TCP──► WiFi-Companion
- Passende Datei unter Releases herunterladen:
System Datei Windows meshcore-tcp-bridge-windows-x64.exeMac (Apple Silicon / Intel) meshcore-tcp-bridge-macos-apple-silicon/…-macos-intelLinux / Raspberry Pi …-linux-x64,…-linux-arm64,…-linux-armv7 - Starten und das Fenster offen lassen.
- Windows: Doppelklick. Erscheint „Windows hat den PC geschützt“: Weitere Informationen → Trotzdem ausführen (die Datei ist nicht kostenpflichtig signiert).
- macOS: Im Terminal
chmod +x meshcore-tcp-bridge-macos-*undxattr -d com.apple.quarantine meshcore-tcp-bridge-macos-*, dann./meshcore-tcp-bridge-macos-…starten. - Linux:
chmod +x meshcore-tcp-bridge-linux-*und starten.
- In der Webapp auf „TCP/WiFi“ klicken, IP-Adresse und Port (Standard
5000) des Companions eintragen. - Fragt der Browser nach Zugriff auf Geräte im lokalen Netzwerk: Zulassen.
Wo stelle ich die Adresse meiner Node ein? In der Webapp, nicht in der Bridge. Die Bridge braucht keine Einstellungen – sie reicht nur die Verbindung durch. IP-Adresse und Port gibst du im Dialog „TCP/WiFi“ an; die Webapp merkt sich die Angaben.
IP-Adresse herausfinden: in der Geräteliste deines Routers (z. B. FritzBox: Heimnetz → Netzwerk) oder – bei Geräten mit Display – direkt auf der Node. Am besten der Node im Router eine feste IP geben.
Voraussetzungen: Auf der Node läuft die WiFi-Companion-Firmware, Node und PC sind im selben Netz. Die Bridge erlaubt ab v1.0.2 die Ports 5000–5005. Nutzt die Node einen anderen Port, die Bridge mit
-ports <port>starten (Windows:meshcore-tcp-bridge-windows-x64.exe -ports 5000-5005,6000).
Sicherheit: Die Bridge lauscht nur auf 127.0.0.1, akzeptiert nur die offizielle Webapp (bzw. lokal geöffnete Dateien und localhost) und verbindet standardmäßig nur zu Adressen im lokalen Netz auf den Ports 5000–5005. Ein Companion erlaubt immer nur eine Verbindung gleichzeitig.
Optionen (meshcore-tcp-bridge -h):
| Option | Bedeutung |
|---|---|
-ports 5000-5005 |
erlaubte Ziel-Ports, einzeln oder als Bereich, komma-getrennt (* = alle) |
-listen 127.0.0.1:8765 |
Adresse/Port der Bridge |
-allow-origin https://… |
eigene Webseite mit der Webapp zulassen |
-any-host |
auch Ziele außerhalb des lokalen Netzes erlauben |
Ein Companion erlaubt nur eine TCP-Verbindung. Sollen Webapp, Handy-App und andere Clients gleichzeitig verbunden sein, hilft der meshcore-tcp-mux. Er verbindet sich als einziger mit der Node und verteilt die Verbindung an mehrere Clients.
- In der Webapp unter „TCP/WiFi“ die IP des Rechners mit dem Mux und einen Port des Mux eintragen, nicht IP und Port der Node.
- Empfohlen: ein eigener Port nur für die Webapp, z. B.
5003(im Mux--listen-dedicated-client-port 5003). Dann hält der Mux Nachrichten vor, die eingehen, während die Webapp geschlossen ist. - Alternativ der gemeinsame Port
5001. Dort kommen nur Nachrichten an, solange die Webapp verbunden ist. - Die Mux-Ports liegen im Standardbereich 5000–5005 der Bridge,
-portsist also nicht nötig. Läuft der Mux außerhalb des lokalen Netzes (z. B. über Tailscale), die Bridge mit-any-hoststarten.
Der Mux verteilt Live-Traffic und Adverts an alle Clients und setzt die Region pro Kanal nur für die eigene Nachricht. Einstellungen wie Name, Kanäle und Standard-Region gelten aber für alle Clients gemeinsam.
Selbst bauen: cd bridge && go build . (Go ≥ 1.24).
Gehörte Knoten, Chatverläufe und Kanal-Regionen werden nur lokal im Browser gespeichert.
Die Webapp kann öffentliche Kanäle und Regionen erkennen, ähnlich wie die App KiekR:
- Kanäle: Für jedes empfangene Kanalpaket (
GRP_TXT) werden die eigenen Kanäle und die öffentlich bekannten Kanäle durchprobiert. Passt der Schlüssel (HMAC-Prüfung), wird die Nachricht entschlüsselt und angezeigt. Unbekannte öffentliche Kanäle erscheinen im Chat unter „Entdeckt · nur mitlesen“ und lassen sich mit einem Klick zum Gerät hinzufügen. - Regionen: Region-Codes (
T-FLOOD) werden erst gegen die eigenen Regionen und dann gegen alle bekannten Regionsnamen geprüft. Treffer aus dem Verzeichnis sind mit ≈ markiert – Region-Codes sind nur 16 Bit lang, bei rund 2000 Namen kann ein Treffer zufällig falsch sein. - Kanal hinzufügen: Im Chat über + – Namen aus dem Verzeichnis werden vorgeschlagen, Hashtag-Kanäle (
#name) brauchen keinen Schlüssel.
Die Daten stammen vom EU MeshCore Analyzer und werden täglich per GitHub Actions als catalog.json ins Repo übernommen (tools/build_catalog.py). Die Webapp lädt nur diese Datei herunter – es werden keine Daten hochgeladen. Abschaltbar unter Gerät → Öffentliches Verzeichnis.
- Reines HTML/CSS/JavaScript, Leaflet für die Karte
- TCP-Bridge in Go (coder/websocket), Builds per GitHub Actions
- Kartenkacheln: Esri (ohne API-Key); OSM/OpenTopoMap zusätzlich, wenn über http(s) ausgeliefert
- Als PWA installierbar; der Service Worker speichert die App, Bibliotheken und bereits angesehene Kartenkacheln (kein Massen-Download, Nutzungsbedingungen der Kartenanbieter)
- Tests: Playwright gegen eine simulierte Companion, bei jedem Push per GitHub Action – siehe test/README.md
- Companion-Protokoll gemäß MeshCore companion_radio
Die Webapp ist kostenlos und quelloffen. Sie entsteht im Umfeld von SaarMesh, dem MeshCore-Netz für die Region SaarLorLux – mit Repeatern, Live-Karte (live.saarmesh.de), Bot und Server, die privat betrieben werden.
Wenn dir die Webapp hilft und du das Projekt unterstützen möchtest (Hardware, Repeater-Standorte, Serverkosten), freuen wir uns über einen Kaffee:
Genauso willkommen: Fehler melden, Ideen einbringen oder einen eigenen Repeater ins Netz stellen.
MIT – siehe LICENSE.
SaarMesh.de – MeshCore-Netz für die Region SaarLorLux