Le-Space

in Evaluierung

LoRa Mesh

Angetreten sind wir mit einer Idee: local-first Peer-to-Peer-PWAs, die über ein LoRa®-Mesh weiterlaufen, wenn Internet oder Stromnetz ausfallen — und an Orten, die beides nicht haben. Die Messungen haben diese Idee nicht begraben, sondern zugeschnitten: Der Funkkanal trägt keine Alltagsdatenmengen, aber er trägt Handshakes, Buchungen und signierte Ereignisse zuverlässig über Kilometer — ohne Infrastruktur, die jemand betreiben muss. Aus der Evaluierung ist eine Anwendungsklasse geworden: mesh-calendar, ein vollständiges Terminbuch, läuft bereits in diesen Bytes.

funkpost auf GitHub →

Ergebnisse

  • Durchsatz: Schon eine Todo-Liste mit drei kurzen Einträgen repliziert spürbar zäh — und der Funk ist nur die halbe Erklärung. Der Testaufbau nutzte OrbitDB mit abgeschaltetem Netzwerk-Sync: Der Kurier trägt die content-adressierten Blöcke selbst und schleust sie am IPFS-Netzwerk vorbei direkt in den lokalen Blockstore ein. Der Erstkontakt ist das Schwergewicht — Manifest, Access-Controller, Identität und Einträge reisen als Block-Bootstrap von einigen Kilobyte, gzip halbiert sie etwa —, und auch danach halten Signaturen und Identitätsverweise jeden Eintrag bei hunderten Bytes. Darüber liegt die Duty-Cycle-Grenze (EU 868: ~6 Minuten Sendezeit pro Stunde). Der Kurier selbst funktioniert — gebaut und getestet in funkpost, am 4. September 2026 erstmals über ein echtes LoRa-Mesh zwischen zwei unabhängigen Knoten gelaufen, je ein Desktop-Browser auf beiden Seiten — aber Standard-Büroanwendungen scheiden aus. Der Aufbau lässt sich live ausprobieren: Die Demo repliziert eine Todo-Liste über das Mesh — oder mit ?mesh=bc über zwei Browser-Tabs, ganz ohne Funkgerät.
  • Als Fallback bei Internet- oder Stromausfall ist die aktuelle Anpassung ungeeignet: Sie schiebt ganze OrbitDB-Blöcke, und die trägt die Datenrate nicht. Ein Folge-Release ist bereits in Überlegung, das arbeitet wie mesh-calendar — wenige Bytes Text pro Ereignis statt Blocktransfers. Was kein Release beseitigt: Funk-Hardware bräuchte weiterhin jeder Teilnehmer.
  • Plattform: Web Bluetooth läuft nur in Chromium auf Android und Desktop — kein iOS-Browser. Ausgesperrt ist iOS deshalb nicht: Über WLAN — ein mobiler Hotspot genügt — erreicht es einen Knoten über Meshtastics HTTP/TCP-API; eine native App ginge ebenfalls und ist nicht Teil dieser Evaluierung. Gerätestreuung ist real: Ein GrapheneOS-Telefon spricht spürbar stabiler mit dem Knoten als Android-Chrome.
  • Verbreitung: Kaum jemand trägt heute einen Funkknoten. Das ist weniger ein Urteil als die eigentliche Entwurfsaufgabe: Kommerzielle Anwendungen brauchen Ideen, die beides zugleich leisten — die Knoten verbreiten und einen Nutzen bieten, der das Mittragen rechtfertigt. Ein Anwendungsfall mit klarem Alleinstellungsmerkmal verteilt seine Hardware selbst.

Was bleibt

Drei Ebenen teilen sich das eine Funkgerät und sonst nichts. Die erste — OrbitDB-Replikation — ist gelaufen, und was sie gekostet hat, steht oben in den Ergebnissen. Diese beiden bleiben:

Ein Kurier für kleine, seltene, wertvolle Nutzlasten. Der Signalisierungs-Handshake aus Design-Issue #161 passt in zwei Frames, ein einzelnes signiertes Ereignis — eine Buchung, eine Übergabebestätigung — in wenige. Wo Minuten Latenz tragbar sind und Infrastruktur fehlt, bleibt das Modell stimmig — und Metadaten, die nie entstehen, können nicht abfließen.

Sequenzdiagramm: Bobs Handy signiert ein WebRTC-Offer, schickt es per Bluetooth an seinen Knoten, das LoRa-Mesh reicht es zum Knoten am Tresen weiter, das unbesetzte Tablet prüft die Signatur und antwortet über denselben Weg; WebRTC verbindet sich danach nur, wo ein IP-Weg existiert. Sequenzdiagramm: Bobs Handy signiert ein WebRTC-Offer, schickt es per Bluetooth an seinen Knoten, das LoRa-Mesh reicht es zum Knoten am Tresen weiter, das unbesetzte Tablet prüft die Signatur und antwortet über denselben Weg; WebRTC verbindet sich danach nur, wo ein IP-Weg existiert.

Technische Grundlagen

  • funkpost — der Byte-Kurier selbst: Framing, ARQ und Duty-Cycle-Pacing über Meshtastic®-Funkgeräte — zwei Datenebenen gebaut (OrbitDB und Yjs), Signalisierungsebene entworfen; Live-Demos.
  • webrtc-qr — die Bibliothek: Zwei Geräte verbinden sich über einen gescannten Code — ohne Signalisierungsserver.
  • qr01 — das Tutorial-Kapitel dazu: Eine Todo-Liste wandert per gescanntem Code von Handy zu Handy — über einen WLAN-Hotspot, ganz ohne Internet.
  • die Demonstratoren — beide laufen im Browser: eine Todo-Liste, die über das Mesh repliziert (OrbitDB), und ein Terminbuch für den Laden um die Ecke (Yjs). Mit ?mesh=bc vertreten zwei Browser-Tabs die Funkgeräte; ein Meshtastic®-Knoten über Web Bluetooth macht es real.

Testkanal

Zwei Funkgeräte hören sich nur, wenn sie denselben Schlüssel tragen — und wenn nicht, kommt nichts an und nichts sagt es, was genau wie ein leerer Raum aussieht. Das hier ist unserer, bewusst veröffentlicht: ein Treffpunkt für alle, die die Demonstratoren zu zweit ausprobieren wollen. Ein Geheimnis ist er nicht, und geschützt hat der Kanalschlüssel darin ohnehin nichts.

QR-Code, der den Testkanal le-space.de in ein Meshtastic-Gerät importiert

le-space.de · EU_868 · LONG_FAST · ⌗3dd3

Beide Demonstratoren zeigen diesen Fingerabdruck neben der Kanalauswahl. Ein Vergleich über die Geräte hinweg lohnt sich: Ein Kanal kann einen vertrauten Namen und einen völlig anderen Schlüssel tragen, und der Name verrät es nicht.

Der Import ersetzt den gesamten Kanalsatz — jeder andere Kanal auf dem Gerät wird gelöscht, auch Schlüssel, die es sonst nirgends gibt. Vorher sichern, was darauf liegt.

  • Rolle CLIENT_MUTE — ein Standardknoten sendet alles weiter, was er hört, und in einem vollen Mesh geht dafür der Großteil seiner Sendezeit drauf: für fremde Pakete. Stummgeschaltet trägt er nur den eigenen Verkehr.
  • Preset SHORT_TURBO für intensives Testen — 21.880 bit/s statt 1.070 bei LONG_FAST, dasselbe Frame kostet also ein Zwanzigstel der Luftzeit, und Reichweite spielt über den Tisch keine Rolle. Im Kanal oben steckt es bewusst nicht: Das Preset gehört zur Funkkonfiguration, alle Beteiligten müssen also gleichzeitig umschalten, sonst hören sie sich nicht mehr.

Das Band ist geteilt und gesetzlich rationiert — EU 868 gibt jedem Sender rund sechs Minuten Sendezeit pro Stunde, und in einem Community-Mesh sitzen womöglich hundert Nachbarn in Hörweite. Bench-Etikette hat den Rest, und Kanäle erklärt, wie ein eigener entsteht.

Verwandte Arbeiten

  • btcmesh — schickt signierte Bitcoin-Transaktionen über ein Meshtastic-Mesh an ein Relay, das sie ins Netz gibt — dasselbe Kurier-Muster, angewandt auf Geld.
  • darkwire — ein Projekt vom Bitcoin-2025-Hackathon: eine Ende-zu-Ende-Bitcoin-Transaktion über LoRa, ohne Internet auf der Senderseite.

Austausch

Wir teilen Messwerte und den Testaufbau. Wer in derselben Nische arbeitet — Meshtastic-Praktiker, Forschende, Local-First-Entwickler — ist willkommen.

Kontakt aufnehmen — kontakt@le-space.de Telegram · @lfp2p X · @nicokrausex

Im Mesh sind wir erreichbar unter le-space.de e45c, YSGs0MrcH9QOcAlIxvYkJWaV64AvKgx/tXS27SiCzXM=

Identifizierend ist der öffentliche Schlüssel; Knotennamen vergibt der jeweilige Betreiber. Der Knoten funkt in der EU-868-Region und ist mobil — erreichbar dort, wo aktuell ein Mesh in Reichweite ist.

Meshtastic Powered

LoRa® is a trademark of Semtech Corporation. Meshtastic® is a registered trademark of Meshtastic LLC. Meshtastic software components are released under various licenses, see GitHub for details. No warranty is provided - use at your own risk. This site is not affiliated with or endorsed by Semtech or the Meshtastic project.