Le-Space

in Evaluierung

LoRa Mesh

Angetreten sind wir mit einer Idee: Web-Apps, die ihre Daten auf den Geräten selbst halten (local-first) und über ein LoRa®-Funknetz weiterlaufen, wenn Internet oder Stromnetz ausfallen, und an Orten, die beides nicht haben. Die Messungen haben diese Idee nicht begraben, sondern zugeschnitten. Der Funk trägt keine Datenmengen, wie man sie täglich bewegt. Er trägt aber Handshakes, Buchungen und signierte Ereignisse zuverlässig über Kilometer, ohne Infrastruktur, die jemand betreiben muss. Aus der Evaluierung ist eine Anwendungsklasse geworden: mesh-calendar, eine experimentelle Terminverwaltung für Friseure, läuft bereits in diesem Byte-Budget.

funkpost auf GitHub →

Ergebnisse

  • 29. September 2026 es reist die Änderung, nicht der Eintrag. Für ein abgehaktes Kästchen geht jetzt die Änderung selbst über den Funk, nicht mehr der ganze Datenbankeintrag, der sie trug.

    • 86 Bytestatt 1774
    • 10 Sekundenstatt dreieinhalb Minuten
  • 21. September 2026 eine Liste, die das Telefon überlebt. Ein zurückgesetztes Telefon bekam seine Liste zurück, allein mit dem Sicherheitsschlüssel in der Hand.

  • 19. September 2026 eine Identität, die das Telefon überlebt. Zwei Telefone, die nie etwas ausgetauscht haben, tragen dieselbe Identität, abgeleitet aus einem Sicherheitsschlüssel statt irgendwo gespeichert.

  • 18.–19. September 2026 Internet zuerst, das Mesh, wenn es wegfällt. Wenn das Internet ausfällt, muss nur noch über den Funk, was sich seither geändert hat.

    • 145 Byteein Frame für den Zeiger
    • 7 Framesdie der Erstkontakt sonst kostet
  • 6. September 2026 eine Terminbuchung ist über das Mesh gelaufen. Die Buchung einer Kundin stand im Tagesplan des Ladens, ohne dass irgendwo ein IP-Pfad war.

    • 31 Sekundenbis die Buchung stand
    • 9,3 SekundenSendezeit, 2,5 % der Stunde
  • 6. September 2026 das Mesh trägt die Daten, nicht das Programm. Die App selbst über den Funk auszuliefern würde Stunden dauern, also kommt sie einmal anders an und ist von da an installiert.

    • 150 KBdie App, komprimiert
    • 780 Framesdas über LoRa
  • 4. September 2026 erster Lauf über ein echtes Mesh. Eine Todo-Liste repliziert zwischen zwei Browsern über ein echtes Mesh, und schon drei Einträge sind spürbar zäh.

    • ~6 MinutenSendezeit pro Stunde, EU 868
  • Plattform. Web Bluetooth läuft nur in Chromium auf Android und Desktop, in keinem iOS-Browser.

  • Verbreitung. Kaum jemand trägt heute einen Funkknoten, und das ist weniger ein Urteil als die eigentliche Entwurfsaufgabe.

Die drei Ebenen

Drei Ebenen teilen sich das eine Funkgerät und sonst nichts, und jede ist danach benannt, was sie überquert: ein Handshake, mit dem zwei Geräte eine Verbindung aushandeln, eine Datenbank, ein Ereignis. Zwei sind über echte Hardware gelaufen und tragen, was das gekostet hat; die dritte ist gezeichnet und nicht gebaut:

Das Terminplanungs-Beispiel existiert inzwischen: mesh-calendar, ein Friseur-Terminbuch im Browser, in dem zwei Tabs das Funkgerät vertreten, wenn keines verbunden ist. Positioniert nicht als Fallback für Internetausfälle, sondern als alternativer Pfad: Termine, die sich in bestehende Planungstools synchronisieren und Metadaten gar nicht erst erzeugen.

Der Zuschnitt der Daten entscheidet, was überhaupt funkt. Der Salon sendet keinen Terminplan, sondern Regeln plus eine Belegt-Maske: ein Bit pro Slot, drei Wochen in rund 112 Bytes, ein Frame, egal wie voll der Kalender ist. Freie Slots berechnet jedes Gerät lokal, das Stöbern kostet keine Funkzeit.

Yjs trägt die Regeln, der Log die Buchungen. Die Regeln schreiben eine Handvoll fester Geräte, wo Zusammenführen wirklich hilft. Die Buchungen liegen daneben in einem Log signierter, unveränderlicher Einträge. Denn ein Yjs-Dokument grüßt seine Gegenstellen mit einer Zusammenfassung, die mit jedem je schreibenden Autor wächst: nach tausend Kundinnen rund sechs Kilobyte, dreißig Frames, und sie schrumpft nie wieder. Der Gruß des Logs ist ein kleiner Fingerabdruck pro Tag, in jeder Größenordnung gleich groß, und er vergisst den letzten Monat, statt ihn für immer zu behalten.

Was gar nicht auf den Funk gehört, ist genauso bewusst gewählt. Der Storno-Token (er lebt im .ics-Link, ins Dokument geht nur der abgeleitete Public Key), die .ics-Datei selbst, und das Urteil über einen umkämpften Slot, das jedes Gerät beim Lesen identisch berechnet. Konvergenz ist noch keine Einigung, also wird Einigung gerechnet, nicht gefunkt.

Autorität ist eine Signatur, keine Konvention. Eine Entscheidung ohne Signatur des Salons wird beim Lesen verworfen, ein Storno braucht die Capability-Signatur der Buchung selbst. Und der Abgleich verstummt bei Einigkeit: Peers, deren Tage übereinstimmen, tauschen einen Frame und schweigen.

Sequenzdiagramm zweier Strukturen auf einem Kurier. Die Salonregeln liegen in Yjs: ein State-Vektor wird getauscht, zurück kommen Regeln und Belegt-Maske als Bitmap in einem Frame. Die Buchungen liegen daneben in einem Log signierter Einträge, mit eigenem Gruß: ein Fingerabdruck je Tag, 111 Bytes für drei Wochen, bei zwei wie bei zweitausend Buchenden. Stimmen alle Tage überein, endet der Austausch nach einem Frame. Nur ein abweichender Tag kostet überhaupt etwas — seine Schlüssel und die fehlenden Einträge. Freie Slots werden lokal berechnet. Eine Buchung reist als signierter Log-Eintrag, eine Entscheidung als Eintrag mit dem Salon-Schlüssel signiert und nur im Rückfrage-Modus — Autobestätigung funkt nichts zurück, weil niemand entscheidet und jedes Gerät beim Lesen dasselbe Urteil rechnet. Token, .ics-Datei und Namen kreuzen das Mesh nie. Sequenzdiagramm zweier Strukturen auf einem Kurier. Die Salonregeln liegen in Yjs: ein State-Vektor wird getauscht, zurück kommen Regeln und Belegt-Maske als Bitmap in einem Frame. Die Buchungen liegen daneben in einem Log signierter Einträge, mit eigenem Gruß: ein Fingerabdruck je Tag, 111 Bytes für drei Wochen, bei zwei wie bei zweitausend Buchenden. Stimmen alle Tage überein, endet der Austausch nach einem Frame. Nur ein abweichender Tag kostet überhaupt etwas — seine Schlüssel und die fehlenden Einträge. Freie Slots werden lokal berechnet. Eine Buchung reist als signierter Log-Eintrag, eine Entscheidung als Eintrag mit dem Salon-Schlüssel signiert und nur im Rückfrage-Modus — Autobestätigung funkt nichts zurück, weil niemand entscheidet und jedes Gerät beim Lesen dasselbe Urteil rechnet. Token, .ics-Datei und Namen kreuzen das Mesh nie.

Eine Ebene ausprobieren

Beide laufen im Browser. Mit ?mesh=bc vertreten zwei Tabs die beiden Funkgeräte, keines von beiden braucht also Hardware zum Ausprobieren. Ein Meshtastic®-Knoten über Web Bluetooth macht es real. Was eine Sitzung mit echten Funkgeräten noch zeigen muss, steht auf dem Laufzettel. Es sind Demonstratoren, keine Produkte; was das heißt, steht auf der Übersichtsseite.

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.

Testkanal

Zwei Funkgeräte hören sich nur, wenn sie denselben Schlüssel tragen. 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_FAST für intensives Testen: 10.940 bit/s statt 1.070 bei LONG_FAST. Dasselbe Frame kostet also ein Zehntel der Sendezeit, und Reichweite spielt über den Tisch keine Rolle. Nicht SHORT_TURBO: das braucht 500 kHz Bandbreite, EU 868 ist 250 kHz breit, und es hat dort keinen einzigen nutzbaren Kanal. Im Kanal oben steckt das Preset bewusst nicht: Es 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. Etikette am Testtisch 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.
  • Reticulum — der Mesh-Stack der Szene, der von der Kryptographie her gedacht ist — läuft über LoRa, Paketfunk, WLAN und alles dazwischen; international die bekannteste Arbeit dieser Art.
  • MeshCore — eine schlankere LoRa-Mesh-Firmware, die neben Meshtastic gerade ihre eigene Community in Deutschland aufbaut.
  • qaul — ein Messenger für Internet-Abschaltungen — Geräte verbinden sich direkt über Bluetooth und WLAN; in der Netzfreiheits-Szene bekannt.

Communities in Reichweite

  • Munich Mesh — die Münchner Meshtastic-Community.
  • Berlin Chaos Mesh — Berlins Mesh-Community rund um die c-base — Meshtastic, MeshCore und Reticulum.
  • MeshHessen — ein regionales Mesh über ganz Hessen.
  • Meshtastic-Ortsgruppen — das Verzeichnis aller Ortsgruppen, vom D-A-CH-Telegram bis lora.ms.

Austausch

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

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, also 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. Die Meshtastic-Softwarebestandteile stehen unter verschiedenen Lizenzen, Einzelheiten auf GitHub. Es wird keine Gewähr übernommen — Nutzung auf eigenes Risiko. Diese Seite steht in keiner Verbindung zu Semtech oder zum Meshtastic-Projekt und wird von ihnen nicht unterstützt.