Der Meshhessen Client ist ein kostenloser, nativer Windows-Client für Meshtastic-Geräte (WPF/.NET 8) für Windows 10/11. Verbinde dein Meshtastic-Gerät (LILYGO T-Beam, T-Deck, RAK4631, Heltec u.a.) per USB/Serial, TCP/WiFi oder Bluetooth mit deinem Windows-PC – vollständig offline-fähig, keine Cloud, keine Installation. Entwickelt von und für die Meshhessen Community.
English summary: Free Windows app for Meshtastic devices – offline map (OSM/OpenTopo), telemetry, traceroute, PKI decryption, full device configuration, USB/Serial/TCP/BLE support, remote admin, favorites, telemetry dashboard & Virtual Node TCP proxy. No installation, no cloud. By the Meshhessen community (Hesse, Germany). → English version below
- .NET 8 Desktop Runtime herunterladen und installieren
- Download: Neueste
MeshhessenClient.exeaus den Releases herunterladen - Gerät anschließen: Meshtastic-Device per USB anstecken
- Starten: Doppelklick auf
MeshhessenClient.exe– keine Installation nötig - Verbinden: Verbindungstyp wählen (Serial, TCP oder Bluetooth) → „Verbinden" klicken
- Loslegen: 3–10 Sekunden warten bis Kanäle geladen sind, dann Nachrichten senden
Die App ist vollständig offline-fähig. Keine Cloud, keine Registrierung, keine Telemetrie zum Entwickler.
- Nachrichten senden und empfangen (Broadcast & Direct Messages)
- Multi-Channel – alle Kanäle deines Geräts automatisch geladen
- Direktnachrichten (DMs) mit separatem Chat-Fenster im Tabbed-Layout
- PKI-Entschlüsselung – client-seitige Entschlüsselung von PKI-verschlüsselten DMs (X25519 + AES-256-CTR); Private Key wird automatisch vom verbundenen Gerät geladen
- Node-Public-Key-Datenbank – lokale CSV-Datei (
node_keys.csv) zum Verwalten von Public Keys für PKI-Entschlüsselung - Tap-Back Reaktionen – auf Nachrichten mit Emoji reagieren (32 Emojis, wie Android-App)
- Rechtsklick auf Nachricht → Emoji-Picker
- Reaktionen werden direkt an Sender/Kanal übermittelt und angezeigt
- Funktioniert in Kanal-Chat und DMs
- Antwort-Funktion – auf einzelne Nachrichten antworten (Protokoll-Level)
- Zitat-Block mit farblicher Hervorhebung der Originalnachricht
- Funktioniert in Kanal-Chat und DMs
- Nachrichten auswählbar & kopierbar – Texte markieren, in Zwischenablage kopieren, Links anklicken
- Rechtsklick auf beliebige Nachricht → „Nachricht kopieren" im Kontextmenü
- Kopiert immer die angeklickte Nachricht (nicht die zuletzt selektierte)
- Kontextmenü auch bei Nachrichten von unbekannten Sendern
- 🚨 Alert Bell Support – Senden und Empfangen von Notrufen
- 🚨 SOS-Button in Chat und DMs
- Visuell: rote blinkende Umrandung + Notification-Bar mit „Zur Karte springen"-Button
- Persistente Nachrichten-Datenbank – Kanal- und DM-Nachrichten dauerhaft in lokaler SQLite-DB speichern (optional, aktivierbar in Einstellungen)
- Letzten 24 Stunden beim Verbinden automatisch geladen; ältere Nachrichten per Hochscrollen nachladen
- DM-History: Alle Konversationen der letzten 24 h erscheinen beim Öffnen des DM-Fensters automatisch
- Pro-Kanal-Löschung direkt im Kanäle-Tab: „Nachrichten-DB leeren"-Spalte mit Zeitraum-Dialog (Alle / 30 / 90 / 365 Tage)
- Bestätigung vor dem Löschen einer DM-Konversation (kein versehentliches Wischen)
- Aufbewahrungsdauer konfigurierbar (30 / 90 / 365 Tage)
- Persistente Telemetrie-Datenbank – empfangene Paket- und Gerätedaten werden lokal in einer SQLite-Datenbank gespeichert
- Telemetrie-Dashboard – frei konfigurierbares Widget-Dashboard mit benannten Dashboards (📊-Button in der Toolbar):
- 11 Widget-Typen: Linie, Fläche, Balken, Scatter, Gauge, Stat-Wert, Heatmap, Histogramm, Candlestick, State-Timeline, Uhrzeit
- Multi-Node-Support, alle Metriken: SNR, RSSI, Batterie, Spannung, Kanal-/TX-Auslastung, Temperatur, Luftfeuchtigkeit, Luftdruck, Pakete/h
- Widgets per Drag-and-Drop anordnen, frei skalierbar (Resize-Griff), editierbar, Auto-Refresh
- Dark & Light Mode, Theme-adaptiv (OxyPlot + WPF)
- Persistenz in
dashboards.json - Unabhängiges Fenster – kann auf einem zweiten Monitor platziert werden
- Node-Statistik-Fenster – detaillierte Auswertung pro Node:
- Tag/Nacht-Auswertung der Empfangsqualität
- Zeitreihen-Graphen für SNR, RSSI, Paketrate und Gerätedaten (Batterie, Spannung)
- LED-Indikatoren im Hauptfenster zeigen auf einen Blick den Status des verbundenen Nodes:
- 📶 Signal – Empfangsqualität (SNR/RSSI-Trend)
- 👥 Nachbarn – Anzahl und Stabilität direkter Nachbar-Nodes
- 🛤️ Pfad-Stabilität – Stabilität des Traceroute-Pfads
- 🌐 Mesh-Health – Gesamtzustand des sichtbaren Meshes;
- 🌤️ Wetter – für Nodes mit Umweltsensor
- Drei Kartentypen: OSM Standard, OSM Dark Mode, OpenTopoMap (topografisch)
- NEU: Vektorkarten (umschaltbar in den Einstellungen, Raster bleibt Standard):
- Gestochen scharf in jeder Zoomstufe (MapLibre GL), deutlich kleinere Offline-Daten, Kartenstil-Updates ohne Client-Update
- 🚒 Feuerwehr-/Rettungs-Layer zuschaltbar – alle Objekttypen im Abschnitt „Feuerwehr-/Rettungs-Layer" direkt unter dieser Liste
- Layer-Auswahl in den Einstellungen und über den 🗂️-Button direkt auf der Karte; solange ein Layer aus ist, wird kein Byte dafür geladen
- Automatischer Offline-Cache: online betrachtete Gebiete sind ohne Internet weiter nutzbar; zusätzlich Vektor-Offlinepaket-Downloader (Bundesland/eigene Bounding-Box, Topo-Extras und Zusatz-Layer als Opt-in)
- Voller Funktionsumfang: Node-Pins, Traceroutes, Nachbar-Linien, Positionsverläufe und Rechtsklick-Menü auch auf der Vektorkarte
- Benötigt die Microsoft-WebView2-Runtime (auf Windows 11 vorinstalliert); ohne sie fällt der Client automatisch auf Raster zurück
Zuschaltbarer Fach-Layer für Feuerwehr, Rettungsdienst und Katastrophenschutz – gedacht als Unterstützung im Einsatz- und Übungsfall (z. B. „Wo ist der nächste Hydrant / Rettungspunkt?"). Die Daten kommen live aus OpenStreetMap (tägliche Updates auf dem Meshhessen-Server) – die Abdeckung hängt also vom lokalen Mapping-Stand ab. Farbkonvention wie im Feuerwehrplan: rot = Löschmittel/Meldung, blau = Löschwasser-Vorrat, grün = Rettung, orange = Katastrophenschutz.
| Symbol | Objekttyp | sichtbar ab Zoom |
|---|---|---|
| 🔴 H (gefüllt = Überflur, Ring = Unterflur) | Hydrant | 15 |
| 🔴 Flamme + Name | Feuerwache | 13 |
| 🔴 Kreuz + Name | Rettungswache | 13 |
| 🔴 Sirene | Sirene | 13 |
| 🔴 Leiter | Anleiterstelle | 14 |
| 🔴 E / F / M / C / K | Einspeisung / Feuerlöscher / Feuermelder / Löschschlauch / Feuerwehrschlüsseldepot (FSD) | 16 |
| 🔵 S | Saugstelle | 14 |
| 🔵 T | Löschwasserbehälter | 14 |
| 🔵 L | Löschteich | 13 |
| 🔵 N | Notrufsäule | 15 |
| 🟢 Kreuz + Nummer | Rettungspunkt | 13 |
| 🟢 Sammelplatz | Sammelplatz / Evakuierungspunkt | 13 |
| 🟢 Herz (AED) | Defibrillator | 15 |
| 🟢 Kreuz | Erste-Hilfe-Kasten | 16 |
| 🟢 Rettungsring | Rettungsring / Wasserrettung | 14–16 |
| 🟠 Kreuz | Katastrophenschutz-Anlaufstelle | 13 |
| 🔴 Kreuz | Bergrettung | 13 |
| Helipad | Hubschrauberlandeplatz | 13 |
- Klick auf ein Objekt öffnet ein Detail-Popup mit allen in OSM gepflegten Attributen: Bauart (z. B. Unterflur/Überflur/Wandhydrant), Kupplungen, Durchfluss, Druck, Wasserquelle, Wasservolumen, Betreiber, Öffnungszeiten, Standortbeschreibung (bei Defis z. B. „Foyer, 1. OG") und Erfassungsdatum
- Icons überlappen bewusst („im Einsatz will man jeden Punkt sehen") und verdrängen keine Kartenbeschriftung
- Offline nutzbar: online betrachtete Gebiete landen automatisch im Cache; im Vektor-Offlinepaket-Downloader lässt sich der Layer gezielt für ein Gebiet mitladen
- Solange der Layer ausgeschaltet ist, wird kein einziges Byte dafür übertragen
- Die Architektur ist für weitere Fach-Layer vorbereitet (z. B. THW, Krankenhäuser)
- Vier Karten-Modi (umschaltbar in Einstellungen):
- Offline (Standard) – vorher heruntergeladene Tiles vom Meshhessen-Server, kein Internet, nur Deutschland
- Online – Meshhessen-Server – Tiles werden on-demand von
tile.meshhessenclient.degeladen und dauerhaft lokal gespeichert; alle drei Stile, nur Deutschland - Online – eigener Tile-Server – wie oben, aber mit den selbst konfigurierten Tile-URLs aus den Einstellungen; öffentliche OSM-/OpenTopoMap-Server sind hier nicht zulässig (Tile-Usage-Policy)
- Online – OpenStreetMap – weltweite Abdeckung über
tile.openstreetmap.org; nur Standardkarte; OSM-Tile-Policy-konform (kein Bulk-Download, Tiles lokal gecacht)
- Node-Positionen als farbige Pins auf der Karte
- Node-Pfade – GPS-Positionsverläufe aufzeichnen und auf der Karte anzeigen
- Direkte Nachbar-Linien – aktivierbar im Legenden-Feld: zieht Linien von der eigenen Position zu allen Nodes, die wir direkt über HF (0 Hops, kein MQTT) empfangen haben
- Farbverlauf wählbar nach SNR (rot → gelb → grün) oder Alter der letzten direkten Verbindung (cyan → violett)
- Option „Dauerhaft" zeigt alle je direkt gehörten Nachbarn (statt nur der letzten 24 h); historische 0-Hop-Kontakte kommen aus der Telemetrie-DB
- Dunkler Umriss unter jeder Linie für gute Sichtbarkeit auch auf der Topo-Karte
- Wegpunkte (Waypoints) – empfangene Wegpunkte werden auf der Karte angezeigt; Wegpunkte per Karte-Rechtsklick erstellen und senden
- Traceroute starten – direkt aus dem Node-Kontextmenü (Nodes-Liste, Karte, Nachrichtenliste)
- Eigenes Fenster pro Ziel-Node mit:
- Hop-Tabelle: Node-Name, Entfernung, SNR (in dB), MQTT-Indikator (⚡ Blitz-Symbol)
- Live-Status (Warten / Empfangen)
- Karte: Route mit Linien plotten
- Durchgezogene Linie wo Positionen bekannt
- Gestrichelte Linie wo Positionen fehlen
- Richtungspfeile auf Segmenten
- Klick auf Segment → SNR-Popup für diesen Hop
- Fallback auf eingestellte Kartenposition wenn eigene GPS fehlt
- Mehrere Traceroutes gleichzeitig auf der Karte – jede bekommt eine eindeutige Farbe
- Speichern & Laden – Traceroutes werden automatisch in
traceroutes/gespeichert (JSON)- Pfade unterschiedlicher Zeitpunkte vergleichen
- Mehrere Dateien gleichzeitig laden
- Historische Traceroutes direkt aus der Datenbank laden
- Zeitreihenfilter – Traceroutes nach Zeitraum filtern (3d / 7d / 14d / 30d / 90d / Alle)
- Deduplizierung – nur neueste Traceroute pro Node-Paar anzeigen (optional)
- Karten-Legende – zeigt alle aktiven Traces mit Farbe und ✕-Button zum Entfernen
- TCP-Proxy-Server – verbinde Meshtastic-Apps (Android/iOS) direkt mit dem Meshhessen Client, als wäre er ein echtes Meshtastic-Gerät
- Konfigurierbar im Tools-Tab: Port (Standard: 4404), ein-/ausschalten, Admin-Befehle blockieren
- Automatischer Start sobald eine Verbindung mit dem physischen Node besteht (wenn aktiviert)
- Config-Replay: verbindende Apps erhalten sofort alle Kanäle, Node-Liste und Gerätekonfig
- Bidirektionale Sichtbarkeit: Nachrichten aus der App erscheinen in verbundenen Apps – und umgekehrt
- Multi-Client: mehrere Apps gleichzeitig verbindbar; Status und verbundene IPs werden im Tools-Tab angezeigt
- SD-Karte vorbereiten – geführter 6-Schritt-Assistent zum Bespielen einer SD-Karte mit Offline-Karten für das Meshtastic T-Deck
- Schritt 1 – Willkommen: Erklärt den Workflow; Hinweis: nur Deutschland verfügbar
- Schritt 2 – Laufwerk: Zeigt alle Wechseldatenträger mit Größe, freiem Speicher und Dateisystem
- Schritt 3 – Formatierung:
- Empfiehlt exFAT mit 4096-Byte-Zuordnungseinheiten (T-Deck-optimal; kleine Tiles ≈100 Bytes → kleine AU spart erheblich Speicher)
- Formatierung per UAC-elevated PowerShell direkt aus dem Client; zwei Bestätigungsdialoge
- Schritt 4 – Bereich: Nach Bundesland (Checkboxen), ganz Deutschland, oder Freestyle (eigenes Rechteck auf interaktiver Mapsui-Karte zeichnen)
- Schritt 5 – Zoom & Kartentyp: Zoom 8–17, Warnhinweise bei hohen Stufen; OSM / OSM Dark / OpenTopoMap
- Schritt 6 – Transfer: Additiv – SD-Tile vorhanden → skip; lokal vorhanden → kopieren; sonst → vom Tile-Server laden + lokal cachen
- SD-Verzeichnisstruktur:
{Laufwerk}:\maps\OSM\{z}\{x}\{y}.png(T-Deck-kompatibel, Langklick auf Faltkartenicon schaltet zwischen Kartendiensten um) - ZIP-Export – lokale Tiles als ZIP exportieren (nach Kartentyp filterbar)
- Vollständig mehrsprachig (Deutsch/Englisch)
- Knoten-Übersicht – alle Nodes im Mesh mit SNR, Batterie, Entfernung, Hop-Anzahl
- Kachelansicht (Fancy View) – optional in Einstellungen → Darstellung aktivierbar: tauscht die Tabelle gegen eine responsive Kachel-Oberfläche (Spaltenanzahl wächst/schrumpft mit der Fensterbreite)
- Pro Kachel: ShortName-Badge in Node-Farbe, 🔑/🔓 PKI-Status, voller Name, „vor X min", ⭐-Favoritenstern, 📡 Infrastruktur- und ☁ MQTT-Symbol
- Strom (extern versorgt oder Batterie + Spannung), Entfernung + Höhe, Hops, RSSI/SNR mit Farbverlauf, Umwelt-Telemetrie (🌡/💧/🌬), Hardware-Modell · Geräterolle · Node-ID
- Eigener Node immer ganz oben, virtualisiertes Scrolling auch bei 1000+ Nodes
- SNR/RSSI nur bei direktem Empfang – Signalwerte werden nur angezeigt, wenn wir den Node direkt (0 Hops, kein MQTT) hören; bei Relay-Nodes zeigt die Spalte stattdessen die Hop-Anzahl
- Erweiterte Filter – nach „zuletzt gesehen" (5 Min bis 60 Tage), MQTT-Nodes ausblenden, nur Favoriten, SNR-Einfärbung an/aus; Sortier-Dropdown im Kachelmodus
- Kachelansicht (Fancy View) – optional in Einstellungen → Darstellung aktivierbar: tauscht die Tabelle gegen eine responsive Kachel-Oberfläche (Spaltenanzahl wächst/schrumpft mit der Fensterbreite)
- Informationen anfordern – Rechtsklick-Untermenü (Liste, Kachel, Karte) fordert wie die Android-App gezielt Daten von einem Node an: Benutzer-Info, Position, Geräte-/Umwelt-/Luftqualität-/Strom-/Host-Metriken, Signalqualität/Mesh-Statistik, PAX-Zähler
- Firmware-Version & Hardware-Modell – werden automatisch beim Verbinden abgefragt und im Node-Info-Fenster angezeigt
- PKI-Schlüssel-Indikator – 🔑-Spalte zeigt, ob der Public Key des Nodes bekannt ist
- Node-Farben – Nodes individuell einfärben (Karte + Listen)
- Node-Notizen – Freitext-Notizen pro Node
- Nodes anpinnen – Nodes in der Liste oben fixieren (unabhängig von Sortierung); der eigene Node ist ebenfalls anheftbar
- Per-Node-Stationsname – pro verbundenem Node ein eigener Stationsname; ✏-Button neben dem Verbinden-Button; Auflösung global → node-spezifisch → ShortName
- Favoriten – Nodes als Favoriten markieren (★-Symbol, Rechtsklick-Menü); wird mit dem Gerät synchronisiert (
set_favorite_node/remove_favorite_node); Favoriten erscheinen oben in der Liste - Fernverwaltung – vollständige Remote-Admin-Oberfläche für Favoriten-Nodes:
- Alle Konfigurations-Reiter: Besitzer, Gerät, Position, LoRa, Bluetooth, Netzwerk, Anzeige, Kanäle, Sicherheit, Steuerung
- Sicherheits-Reiter: Public Key (read-only, Base64), Admin-Schlüssel 1–3 (Base64), Flags (Admin Channel, Managed Mode, Serial, Debug Log)
- Favoriten remote verwalten: Knoten auf dem Remote-Gerät als Favorit setzen oder entfernen
- Session-Schlüssel-Handshake, konfigurierbarer Timeout, per-Channel Retry + Neu-laden
- Lazy Loading: Beim Öffnen wählen ob alles sofort oder seitenweise geladen wird; „↻ Tab neu laden"-Button für gezielten Reload einzelner Reiter
- Node-Konfiguration – vollständige Gerätekonfiguration direkt aus dem Client, alle Module auf einer Seite:
- Gerät & LoRa: Region, Modem-Preset, TX-Power, Hop-Limit, Geräterolle, Rebroadcast-Modus
- Position: GPS-Modus, Smart-Broadcast, feste Position mit Koordinaten-Eingabe; „Von Karte wählen" öffnet ein eigenes Kartenfenster (honoriert Offline-/Online-Einstellungen); „Eigener Kartenpin" übernimmt die per Rechtsklick gesetzte Position
- Netzwerk: WLAN SSID/PSK, DHCP/statische IP, Ethernet, NTP-Server, Syslog
- Display: Screen-Timeout, Carousel, Kompass, 12h-Uhr, metrisch/imperial, Display-Modus, OLED-Typ
- MQTT: Server, Credentials, TLS, JSON-Modus, Root-Topic, Proxy-Modus, Map-Reporting mit Genauigkeitsstufe (Bits 10–19), MQTT-Proxy-Client-Funktion
- Telemetrie: Geräte-, Umgebungs-, Luftqualitäts- und Energiemetrik-Intervalle
- Bluetooth: Aktivieren, Pairing-Modus, fixer PIN
- Security: Public/Private Key anzeigen & generieren, Admin-Schlüssel, Managed Mode
- Kanäle: Alle 8 Kanäle – Rolle, Name, Uplink, Downlink, Positions-Genauigkeit (Bits 10–19, ~23 km bis ~45 m)
- Weitere Module: Nachbar-Info, Store & Forward, Externe Benachrichtigung, Canned Messages, Range Test, Serial
- BT-PIN ändern – Bluetooth-PIN direkt aus dem Client setzen
- Multi-Verbindung – USB/Serial, TCP/WiFi und Bluetooth (BLE)
- Letzte Verbindung merken – Verbindungsart (Serial / BT / WiFi) und zuletzt genutztes BT-Gerät werden gespeichert und beim nächsten Start automatisch vorausgewählt
- Auto-Reconnect – nach Einstellungsänderungen die einen Neustart erfordern
- Update-Check – beim Start wird automatisch nach neuen Versionen gesucht; bei verfügbarem Update erscheint ein klickbarer Hinweis in der Statusleiste (offline-fähig: kein Fehler wenn kein Internet)
- Multi-Sprache – Deutsch und Englisch (umschaltbar in Einstellungen)
- Dark Mode & ModernWPF Fluent-Design
- Automatisches Logging aller Nachrichten (
logs/) - Debug-Tab mit Live-Log fürs Troubleshooting
- Meshhessen-Schnellkonfiguration – One-Click für Short Slow + EU868 + Meshhessen-Kanal
- Kiosk-/Trainingsmodus – für geteilte Stationen (Vereinslokal, Schulung, Veranstaltung):
- In den Einstellungen aktivieren, Passwort setzen und wählen, was im gesperrten Zustand ausgeblendet wird: Tabs (Nodes, Kanäle, Einstellungen, Info, Tools, Debug), Node-Konfiguration, Fernverwaltung, Telemetrie-Dashboard, SOS-Button, Meshhessen-Schnellkonfiguration
- 🔒-Schloss in der Fußleiste zum Sperren/Entsperren (erscheint nur, wenn ein Passwort gesetzt ist); Entsperren per Passwort, App startet im Kiosk-Modus immer gesperrt
- Bei aktiver Sperre werden zusätzlich Admin-Befehle von Virtual-Node-Clients blockiert (unabhängig von der VNode-Einstellung)
⚠️ Versehens-Schutz, kein Angriffs-Schutz – das Passwort wird als PBKDF2-Hash gespeichert, aber wer die INI-Datei bearbeiten kann, kann den Modus deaktivieren- Passwort vergessen? Client beenden und in
meshhessen-client.inidie ZeileKioskModeEnabled=TrueaufFalsesetzen (oder die ZeileKioskPasswordHash=…leeren und neu setzen)
Der Meshhessen Client ist ein Gemeinschaftsprojekt der Meshtastic-Community in Hessen. Unser regionales LoRa-Mesh wächst stetig – mach mit!
- 🌐 Website: www.meshhessen.de
- 📡 Netz: Wachsendes Mesh-Netzwerk in Hessen und Umgebung – Airtime ist kein All-you-can-eat → Short Slow! ;)
- 🤝 Mitmachen: Eigenen Node aufstellen, Reichweite erweitern, Community wachsen lassen
Die neue Vektorkarte (MapLibre GL) – gestochen scharf in jeder Zoomstufe, mit Node-Pins:

Vergleich: klassische Rasterkarte – ohne zuschaltbare Fach-Layer:

Derselbe Ausschnitt als Vektorkarte mit aktivem 🚒 Feuerwehr-/Rettungs-Layer (Hydranten, Wachen, Rettungspunkte – Klick zeigt Details):

Klick auf einen Hydranten zeigt die Details – hier ein Unterflurhydrant (Ring-Symbol) mit Wasserquelle:

Direkte HF-Nachbarn mit SNR-Farbverlauf auf der Vektorkarte:

Kiosk-/Trainingsmodus – sperrbare Oberfläche für geteilte Stationen (Einstellungen):

Offline-Karte mit Node-Positionen und Entfernungsanzeige:

Node-Übersicht als Tabelle – mit Avatar, Signal-LEDs, Filtern und Sortierung:

Node-Übersicht als Kachelansicht (Fancy View) – mit Telemetrie, Strom und Signalqualität pro Kachel:

Direkte HF-Nachbarn als Linien auf der Karte (Farbverlauf nach SNR oder Alter):

Nachrichtenansicht mit Kanal-Chat und Direktnachrichten:

Alert Bell / SOS-Notruf Anzeige:

Offline-Tile-Downloader für Deutschland und Umgebung:

Kanal-Liste mit allen Meshtastic-Kanälen:

Traceroute-Fenster mit Hop-Tabelle:

Traceroute-Pfad auf der Karte:

Node-Standort-Verlauf (GPS-Track) auf der Karte:

Telemetrie-LED-Ampel im Hauptfenster:

Telemetrie-Zeitreihen-Graph (SNR, RSSI, Batterie):

Node-Telemetrie-Statistik-Fenster:
Node-Telemetrie-Übersicht (Signal):
Airtime-Auswertung pro Node (TX/RX-Sendezeit, Kanalauslastung):
Nachbar-Analyse (direkte Mesh-Verbindungen und SNR-Trends):
Batterie & Spannungs-Analyse (Tag/Nacht-Profil, Nachtabfall):
Routing-Statistik (Hop-Anzahl, Pfad-Stabilität, Pfadwechsel-Rate):
Keine persistente Message-History→ jetzt optional via Nachrichten-Datenbank (aktivierbar in Einstellungen)- Getestet mit Firmware 2.x
- T-Deck: Channels werden nicht immer in der Config-Sequenz mitgesendet (Retry-Workaround aktiv) – Das T-Deck ist fast schon mit sich selbst überfordert, daher dauert dort alles etwas länger…
Heltec-Boards brechen lokale Konfiguration nach 4–5/17 Configs ab→ behoben durch sequentielles Laden (senden → warten → nächste)
Kartentypen: OSM Standard (hell), OSM Dark Mode, OpenTopoMap (topografisch) – wählbar in Einstellungen.
In den Einstellungen unter Karte / Tiles stehen drei Modi zur Verfügung:
| Modus | Beschreibung | Abdeckung |
|---|---|---|
| Offline (Standard) | Vorher heruntergeladene Tiles. Kein Internet erforderlich. | Nur Deutschland |
| Online – Meshhessen-Server | Tiles werden bei Bedarf geladen und dauerhaft lokal gespeichert. Alle drei Kartenstile. | Nur Deutschland |
| Online – OpenStreetMap | Weltweite Abdeckung. Nur Standardkarte. Tiles werden lokal gecacht (mind. 7 Tage). OSM-Policy-konform. | Weltweit |
Der OSM-Online-Modus ist für Gebiete außerhalb Deutschlands gedacht. Der OSM-Tile-Server ist spendenfinanziert – bitte sparsam nutzen.
⚠️ Wichtig: Tile-Download ist nur für den Meshhessen-Tile-Server (tile.meshhessenclient.de) vorgesehen – Bulk-Downloads verstoßen gegen die OSM-Tile-Policy.
- Einstellungen öffnen → Karten-Modus Offline wählen → Kartenstil wählen
- „Tiles herunterladen" klicken
- Bereich (Bounding Box) und Zoom-Level eingeben – z.B. Hessen:
49.3,7.7,51.7,10.2, Zoom1-14 - Download starten
- Tiles werden unter
maptiles/gespeichert und sind dauerhaft offline verfügbar - Tiles sind portabel – per USB übertragbar
Karte nutzen:
- Tab „🗺️ Karte" öffnen
- Rechtsklick auf Karte → eigenen Standort setzen
- Node-Pins erscheinen automatisch sobald GPS-Daten empfangen werden
- Rechtsklick auf Node → Farbe setzen, DM senden, Notiz bearbeiten, Traceroute starten, Telemetrie öffnen
Alle Nachrichten werden automatisch geloggt unter [EXE-Verzeichnis]/logs/:
Channel_0_Primary.log– KanalverläufeDM_DEADBEEF_Alice.log– Direktnachrichten
| Komponente | Technologie |
|---|---|
| UI | WPF .NET 8, ModernWPF (Fluent) |
| Protokoll | Meshtastic Protobuf über Serial/TCP/BLE |
| Karte | Mapsui 4.1 + lokale OSM-Tiles |
| Serialisierung | Google.Protobuf, System.Text.Json |
| Verbindung | Serial (0x94 0xC3 Framing), TCP/WiFi, Bluetooth Low Energy |
Verbindungstypen:
| Typ | Transport | Framing | Besonderheiten |
|---|---|---|---|
| USB/Serial | COM-Port, 115200 baud | 4-Byte Header (0x94 0xC3 + Länge) | Wakeup-Sequenz, Debug-Text interleaved |
| TCP/WiFi | TCP-Socket | 4-Byte Header (wie Serial) | Hostname/IP + Port konfigurierbar |
| Bluetooth | BLE GATT Characteristics | Raw Protobuf (kein Framing) | Direkte FromRadio/ToRadio Pakete |
Verbindungssequenz:
Windows Client → USB/Serial | TCP/WiFi | BLE → Meshtastic Node → LoRa → Mesh
- Verbindung öffnen → Wakeup-Sequenz senden (nur Serial/TCP) →
want_config_idsenden my_info,node_info(×N),channel(×8),config,config_complete_idempfangen- Falls Channels fehlen (z.B. T-Deck): Retry-Mechanismus mit bis zu 3 Runden per
GetChannelRequest - Bereit für MeshPackets
Serielles Protokoll (Robustheit):
- Max. Paketlänge 512 Bytes (per Meshtastic-Spezifikation), darüber = korrupt → false Start überspringen
- Schutz vor partiellem Header-Verlust (letztes Byte 0x94 wird bei Buffer-Clear bewahrt)
- Stale-Packet-Timeout: unvollständige Pakete werden nach 5s verworfen
- Device-Debug-Text (ANSI-Codes) wird erkannt, ANSI-Codes gestrippt, separat geloggt
- Auto-Recovery: sendet Wakeup +
want_config_idwenn >60s kein Protobuf-Paket empfangen wurde
Fehler-Erkennung (Geräte-Logs):
| Code | Beschreibung |
|---|---|
| TxWatchdog | Software-Bug beim LoRa-Senden |
| NoRadio | Kein LoRa-Radio gefunden |
| TransmitFailed | Radio-Sendehardware-Fehler |
| Brownout | CPU-Spannung unter Minimum |
| SX1262Failure | SX1262 Radio Selbsttest fehlgeschlagen |
| FlashCorruptionRecoverable | Flash-Korruption erkannt (repariert) |
| FlashCorruptionUnrecoverable | Flash-Korruption (nicht reparierbar) |
Voraussetzungen: .NET 8.0 SDK, Windows 10/11 x64
git clone https://github.com/SMLunchen/mh_windowsclient.git
cd mh_windowsclient
dotnet publish MeshhessenClient/MeshhessenClient.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=false -o publicEXE liegt danach unter public\MeshhessenClient.exe. Alternativ: build.bat ausführen.
- Meshtastic Project – Firmware & Protokoll-Spezifikation
- ModernWPF – Fluent UI für WPF
- Mapsui – Offline-Karte
- Meshhessen Community – Für das Netzwerk und die Inspiration
Made with ❤️ by the Meshhessen Community · www.meshhessen.de
Meshhessen Client · Windows-Client für Meshtastic-Geräte · Meshtastic Windows App · Meshtastic PC Software · Meshtastic Desktop App · Meshtastic USB Windows · Meshtastic Serial Windows · Meshtastic WPF · Meshtastic .NET · LoRa Mesh Windows · Meshtastic Offline Karte · Meshtastic Telemetrie · Meshtastic Traceroute · Meshtastic Hessen · Meshtastic Deutschland · Meshtastic Germany · LILYGO T-Beam Windows · T-Deck Windows · RAK4631 Windows · Heltec Windows · Meshtastic BLE Windows · Meshtastic Bluetooth Windows · Meshtastic PKI · Meshhessen Community · Meshhessen
Meshhessen Client is a free, native Windows client for Meshtastic devices (WPF/.NET 8) for Windows 10/11. Connect your Meshtastic device (LILYGO T-Beam, T-Deck, RAK4631, Heltec, etc.) via USB/Serial, TCP/WiFi, or Bluetooth to your Windows PC – fully offline-capable, no cloud, no installation required. Developed by and for the Meshhessen Community.
- Download and install the .NET 8 Desktop Runtime
- Download: Get the latest
MeshhessenClient.exefrom Releases - Connect device: Plug in your Meshtastic device via USB
- Launch: Double-click
MeshhessenClient.exe– no installation required - Connect: Select connection type (Serial, TCP, or Bluetooth) → click "Connect"
- Start: Wait 3–10 seconds for channels to load, then send messages
The app is fully offline-capable. No cloud, no registration, no telemetry to the developer.
- Send and receive messages (broadcast & direct messages)
- Multi-channel – all channels from your device loaded automatically
- Direct Messages (DMs) with a dedicated chat window in a tabbed layout
- PKI decryption – client-side decryption of PKI-encrypted DMs (X25519 + AES-256-CTR); private key is loaded automatically from the connected device
- Node public key database – local CSV file (
node_keys.csv) for managing public keys for PKI decryption - Tap-back reactions – react to messages with emoji (32 emojis, like the Android app)
- Right-click a message → emoji picker
- Reactions are sent to the sender/channel and displayed inline
- Works in channel chat and DMs
- Reply function – reply to individual messages (protocol-level)
- Quoted block with accent-colored highlight of the original message
- Works in channel chat and DMs
- Selectable & copyable messages – select text, copy to clipboard, click links
- Right-click any message → "Copy Message" in context menu
- Always copies the right-clicked message (not just the last selected row)
- Context menu available even for messages from unknown senders
- 🚨 Alert Bell support – send and receive emergency alerts
- 🚨 SOS button in chat and DMs
- Visual: red blinking border + notification bar with "Jump to map" button
- Persistent message database – store channel and DM messages in a local SQLite DB (optional, enable in settings)
- Last 24 hours loaded automatically on connect; older messages lazy-loaded when scrolling up
- DM history: all conversations from the last 24 h appear automatically when the DM window is opened
- Per-channel deletion directly in the Channels tab: "Clear Message DB" column with a time-range dialog (All / 30 / 90 / 365 days)
- Confirmation before clearing a DM conversation (no accidental wipe)
- Configurable retention period (30 / 90 / 365 days)
- Persistent telemetry database – received packet and device data is stored locally in a SQLite database
- Telemetry Dashboard – freely configurable widget dashboard with named dashboards:
- Four widget types: line chart (time series), bar chart (current comparison), gauge (single value), heatmap (hour × day)
- Multi-node support, all metrics: SNR, RSSI, battery, voltage, channel/TX utilization, temperature, humidity, pressure
- Persisted in
dashboards.json, dark OxyPlot theme
- Node statistics window – detailed analysis per node:
- Day/night breakdown of reception quality
- Time-series graphs for SNR, RSSI, packet rate and device data (battery, voltage)
- LED indicators in the main window show the connected node's status at a glance:
- 📶 Signal – reception quality (SNR/RSSI trend)
- 👥 Neighbors – number and stability of direct neighbor nodes
- 🛤️ Path stability – stability of the traceroute path
- 🌐 Mesh health – overall health of the visible mesh
- 🌤️ Weather – for nodes with environmental sensors
- Three map styles: OSM Standard, OSM Dark Mode, OpenTopoMap (topographic)
- Four map modes (switchable in settings):
- Offline (default) – pre-downloaded tiles from the Meshhessen server, no internet required, Germany only
- Online – Meshhessen Server – tiles fetched on demand from
tile.meshhessenclient.deand stored permanently; all three styles, Germany only - Online – custom tile server – same as above but using your own configured tile URLs from the settings; public OSM/OpenTopoMap servers are not allowed here (tile usage policy)
- Online – OpenStreetMap – worldwide coverage via
tile.openstreetmap.org; standard map only; OSM tile policy compliant (no bulk download, tiles cached locally)
- Node positions as colored pins on the map
- Node paths – record GPS position history and display tracks on the map
- Direct neighbor lines – toggle in the legend box: draws lines from your own position to every node we received directly over RF (0 hops, no MQTT)
- Color gradient by SNR (red → yellow → green) or by age of the last direct contact (cyan → purple)
- "Permanent" option shows every neighbor ever heard directly (instead of only the last 24 h); historical 0-hop contacts come from the telemetry DB
- Dark outline beneath each line for good visibility even on the topo map
- Waypoints – received waypoints are displayed on the map; create and send waypoints via right-click on the map
- Start traceroute – directly from the node context menu (node list, map, message list)
- Dedicated window per target node with:
- Hop table: node name, distance, SNR (in dB), MQTT indicator (⚡ lightning symbol)
- Live status (waiting / received)
- Map plotting – plot the route with lines
- Solid line where positions are known
- Dashed line where positions are missing
- Direction arrows on segments
- Click a segment → SNR popup for that hop
- Falls back to the configured map position if own GPS is unavailable
- Multiple traceroutes at once on the map – each gets a unique color
- Save & Load – traceroutes are automatically saved to
traceroutes/as JSON- Compare routes recorded at different times
- Load multiple files simultaneously
- Load historical traceroutes directly from the database
- Time range filter – filter traceroutes by period (3d / 7d / 14d / 30d / 90d / All)
- Deduplication – show only the latest traceroute per node pair (optional)
- Map legend – shows all active traces with color and individual ✕ remove button
- TCP proxy server – connect Meshtastic apps (Android/iOS) to the Meshhessen Client as if it were a real Meshtastic device
- Configurable in the Tools tab: port (default: 4404), enable/disable, optionally block admin commands
- Auto-start as soon as a connection to the physical node is established (when enabled)
- Config replay: connecting apps receive all channels, node list and device config immediately
- Bidirectional visibility: messages sent in the app appear in connected apps – and vice versa
- Multi-client: multiple apps can connect simultaneously; status and connected IPs are shown in the Tools tab
- Node overview – all nodes in the mesh with SNR, battery, distance, hop count
- Tile view (Fancy View) – optionally enabled in Settings → Appearance: replaces the table with a responsive tile surface (column count grows/shrinks with the window width)
- Per tile: ShortName badge in node color, 🔑/🔓 PKI status, full name, "X min ago", ⭐ favorite star, 📡 infrastructure and ☁ MQTT icons
- Power (externally powered or battery + voltage), distance + altitude, hops, RSSI/SNR with color gradient, environment telemetry (🌡/💧/🌬), hardware model · device role · node ID
- Own node always on top, virtualized scrolling even with 1000+ nodes
- SNR/RSSI only for direct reception – signal values are shown only when we hear the node directly (0 hops, no MQTT); for relayed nodes the column shows the hop count instead
- Advanced filters – by "last seen" (5 min to 60 days), hide MQTT nodes, favorites only, SNR coloring on/off; sort dropdown in tile mode
- Tile view (Fancy View) – optionally enabled in Settings → Appearance: replaces the table with a responsive tile surface (column count grows/shrinks with the window width)
- Request information – right-click submenu (list, tile, map) requests data from a node like the Android app: user info, position, device/environment/air-quality/power/host metrics, signal quality/mesh stats, PAX counter
- Firmware version & hardware model – queried automatically on connect and shown in the node info window
- PKI key indicator – 🔑 column shows whether a node's public key is known
- Node colors – color-code nodes individually (map + lists)
- Node notes – free-text annotations per node
- Pin nodes – pin nodes to the top of the list (independent of sorting); your own node can be pinned too
- Per-node station name – a dedicated station name per connected node; ✏ button next to the Connect button; resolution global → node-specific → ShortName
- Favorites – mark nodes as favorites (★ icon, right-click menu); synced with the device (
set_favorite_node/remove_favorite_node); favorites shown at the top of the list - Remote Administration – full remote admin UI for favorite nodes: all configuration tabs (Owner, Device, Position, LoRa, Bluetooth, Network, Display, Channels, Security, Control), session-key handshake, configurable timeout, lazy loading (load-on-demand per tab) and "↻ Reload Tab" button
- Node configuration – full device configuration directly from the client, all modules in one window:
- Device & LoRa: region, modem preset, TX power, hop limit, device role, rebroadcast mode
- Position: GPS mode, smart broadcast, fixed position with coordinate input; "Pick from Map" opens a dedicated map picker window (respects offline/online settings); "Own Map Pin" copies the position set via right-click
- Network: Wi-Fi SSID/PSK, DHCP/static IP, Ethernet, NTP server, syslog
- Display: screen timeout, carousel, compass, 12h clock, metric/imperial, display mode, OLED type
- MQTT: server, credentials, TLS, JSON mode, root topic, proxy mode, map reporting with precision level (bits 10–19), MQTT proxy client
- Telemetry: device, environment, air quality and power metric intervals
- Bluetooth: enable, pairing mode, fixed PIN
- Security: display & generate public/private key, admin keys, managed mode
- Channels: all 8 channels – role, name, uplink, downlink, position precision (bits 10–19, ~23 km to ~45 m)
- Additional modules: neighbor info, store & forward, external notification, canned messages, range test, serial
- Change BT PIN – set Bluetooth PIN directly from the client
- Multi-connection – USB/Serial, TCP/WiFi, and Bluetooth (BLE)
- Remember last connection – connection type (Serial / BT / WiFi) and last used BT device are saved and pre-selected on next launch
- Auto-reconnect – after settings changes that require a device reboot
- Update check – automatically checks for new versions on startup; a clickable hint appears in the status bar if an update is available (offline-safe: no error if no internet)
- Multi-language – German and English (switchable in settings)
- Dark mode & ModernWPF Fluent design
- Automatic logging of all messages (
logs/) - Debug tab with live log for troubleshooting
- Meshhessen quick-config – one-click Short Slow + EU868 + Meshhessen channel setup
- Kiosk / training mode – for shared stations (club room, training, events):
- Enable in settings, set a password and choose what gets hidden while locked: tabs (Nodes, Channels, Settings, Info, Tools, Debug), node configuration, remote admin, telemetry dashboard, SOS button, Meshhessen quick-config
- 🔒 lock in the footer bar to lock/unlock (only shown once a password is set); unlock via password, the app always starts locked in kiosk mode
- While locked, admin commands from Virtual Node clients are additionally blocked (regardless of the VNode setting)
⚠️ Protects against accidents, not attacks – the password is stored as a PBKDF2 hash, but anyone who can edit the INI file can disable the mode- Forgot the password? Close the client and set
KioskModeEnabled=TruetoFalseinmeshhessen-client.ini(or clear theKioskPasswordHash=…line and set a new one)
The Meshhessen Client is a community project of the Meshtastic community in Hesse, Germany. Our regional LoRa mesh network is growing – join us!
- 🌐 Website: www.meshhessen.de
- 📡 Network: Growing mesh network in Hesse and surrounding areas – airtime is not all-you-can-eat → Short Slow! ;)
- 🤝 Contribute: Set up your own node, extend coverage, grow the community
No persistent message history→ now available as optional message database (enable in settings)- Tested with firmware 2.x
- T-Deck: channels are not always included in the config sequence (retry workaround active) – The T-Deck is barely keeping up with itself, so everything takes a bit longer there…
Heltec boards abort local configuration after 4–5/17 configs→ fixed by sequential loading (send → wait for response → send next)
Map types: OSM Standard (light), OSM Dark Mode, OpenTopoMap (topographic) – selectable in settings.
⚠️ Important: Please do NOT switch to the official OSM tile server – offline downloads violate their policy. We use our own server that explicitly permits this. You can configure your own tile server in settings.
Downloading tiles:
- Open settings → select map source (OSM / OSM Dark / OpenTopo)
- Click "Download Tiles"
- Enter bounding box and zoom levels – e.g. Hesse:
49.3,7.7,51.7,10.2, Zoom1-14 - Start download
- Tiles are saved under
maptiles/and are permanently available offline - Tiles are portable – transferable via USB
Using the map:
- Open the "🗺️ Map" tab
- Right-click on map → set own location
- Node pins appear automatically once GPS data is received
- Right-click on a node → set color, send DM, edit note, start traceroute, open telemetry
| Component | Technology |
|---|---|
| UI | WPF .NET 8, ModernWPF (Fluent) |
| Protocol | Meshtastic Protobuf over Serial/TCP/BLE |
| Map | Mapsui 4.1 + local OSM tiles |
| Serialization | Google.Protobuf, System.Text.Json |
| Connection | Serial (0x94 0xC3 framing), TCP/WiFi, Bluetooth Low Energy |
Connection types:
| Type | Transport | Framing | Notes |
|---|---|---|---|
| USB/Serial | COM port, 115200 baud | 4-byte header (0x94 0xC3 + length) | Wake-up sequence, debug text interleaved |
| TCP/WiFi | TCP socket | 4-byte header (same as serial) | Configurable hostname/IP + port |
| Bluetooth | BLE GATT characteristics | Raw protobuf (no framing) | Direct FromRadio/ToRadio packets |
Connection sequence:
Windows Client → USB/Serial | TCP/WiFi | BLE → Meshtastic Node → LoRa → Mesh
- Open connection → send wake-up sequence (Serial/TCP only) → send
want_config_id - Receive
my_info,node_info(×N),channel(×8),config,config_complete_id - If channels are missing (e.g. T-Deck): retry mechanism up to 3 rounds via
GetChannelRequest - Ready for MeshPackets
Requirements: .NET 8.0 SDK, Windows 10/11 x64
git clone https://github.com/SMLunchen/mh_windowsclient.git
cd mh_windowsclient
dotnet publish MeshhessenClient/MeshhessenClient.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=false -o publicThe EXE will be at public\MeshhessenClient.exe. Alternatively, run build.bat.
- Meshtastic Project – Firmware & protocol specification
- ModernWPF – Fluent UI for WPF
- Mapsui – Offline map
- Meshhessen Community – For the network and the inspiration
Made with ❤️ by the Meshhessen Community · www.meshhessen.de
Meshhessen Client · Windows client for Meshtastic devices · Meshtastic Windows app · Meshtastic PC software · Meshtastic desktop app · Meshtastic USB Windows · Meshtastic serial Windows · Meshtastic WPF · Meshtastic .NET · LoRa mesh Windows · Meshtastic offline map · Meshtastic telemetry · Meshtastic traceroute · Meshtastic Germany · Meshtastic Hessen · LILYGO T-Beam Windows · T-Deck Windows · RAK4631 Windows · Heltec Windows · Meshtastic BLE Windows · Meshtastic Bluetooth Windows · Meshtastic PKI decryption · Meshhessen community · Meshhessen




