MeshCore Repeater-Timing für Weitverkehrsnetze

Bei Recherchen zur Frage: 'Wie baut man ein Mesh-Netz sinnvoll auf?` bin ich auf einen interessanten und weiterführenden Artikel von Eric Hendrickson (W6HS) gestossen.

Hier der vollständige Blogpost von W6HS, https://w6hs.net/meshcore-repeater-deployment-timing-considerations-for-wide-area-networks/ mit Hilfe von myAI übersetzt, zusammengefasst und mit Alltagsvergleichen versehen.

Überblick

Die Inbetriebnahme von MeshCore-Repeatern in Weitverkehrsnetzen erfordert eine sorgfältige Abstimmung der Timing-Einstellungen. Der Artikel beschreibt vier zentrale Parameter, die beeinflussen, wie Pakete im Netz weitergeleitet werden:

Parameter Funktion
txdelay Sendeverzögerung
rxdelay Empfangsverzögerung (SNR-basiert)
af Airtime-Faktor (internes Pacing)
flood.max Maximale Hop-Anzahl

  1. txdelay – Sendeverzögerung

Was es macht:

Der txdelay bestimmt, wie lange ein Repeater wartet, bevor er ein empfangenes Paket weitersendet. Die Wartezeit wird berechnet als: Time-on-Air × txdelay-Faktor. Innerhalb dieses Fensters wird ein zufälliger Sendezeitpunkt gewählt.

Zweck:

Verhindert, dass mehrere Knoten gleichzeitig senden und sich gegenseitig stören (Kollision).

:automobile: Analogie: Die Autobahnauffahrt

Stell dir eine Autobahnauffahrt vor. Wenn alle Autos gleichzeitig auf die Autobahn einbiegen, gibt’s einen Stau oder sogar Unfälle. Deshalb gibt es an manchen Auffahrten Ampeln, die die Autos zeitversetzt durchlassen.

  • txdelay 0.5 = Kurze Ampelphase → Autos kommen schnell rauf (enger, lokaler Verkehr)

  • txdelay 1.0 = Mittlere Ampelphase → mehr Abstand, weniger Risiko (regionale Strasse)

  • txdelay 2.0 = Lange Ampelphase → der grosse Verteiler lässt erstmal alle kleinen Zufahrten durch, bevor er selbst Verkehr einleitet (Autobahnkreuz)

Empfohlene Werte:

txdelay Einsatz
0.5 Persönlicher Repeater, Hausdach, Balkon, mobil
1.0 Regionaler Repeater auf Hochhaus, einige km Sichtlinie
2.0 Backbone-Repeater auf Berggipfel/Turm, verbindet entfernte Netze

2. rxdelay – SNR-basierte Empfangsstaffelung

Was es macht:

Fügt eine Verzögerung hinzu, die vom Signal-Rausch-Verhältnis (SNR) abhängt:

  • Starkes Signal → kurze Verzögerung → wird bevorzugt weitergeleitet

  • Schwaches Signal → lange Verzögerung → muss warten

:postbox: Analogie: Die Poststelle mit zwei Eingängen

Stell dir vor, du arbeitest an einem Postschalter. Du bekommst denselben Brief über zwei Wege:

  • Eingang A: Ein Expressbote bringt ihn – sauber, trocken, gut lesbar :envelope::sparkles:

  • Eingang B: Ein durchnässter Brief kommt über Umwege an – kaum leserlich :droplet:

Natürlich leitest du den sauberen Brief zuerst weiter! Den nassen hältst du zurück – vielleicht brauchst du ihn gar nicht, weil der gute schon angekommen ist.

Genau das macht rxdelay: Der beste Pfad gewinnt.

Einsatzbereiche:

  • Wenn ein Repeater Pakete über mehrere, unterschiedlich starke Wege empfängt

  • Bei überlappender Abdeckung mehrerer Repeater

3. af (Airtime Factor) – Taktungsfaktor

Was es macht:

Der af ist ein Multiplikator für die internen Timing-Fenster des Repeaters. Er ändert nicht die LoRa-Funkparameter (Spreading Factor, Bandbreite etc.), sondern nur, wie der Repeater sein eigenes Tempo reguliert.

:musical_note: Analogie: Das Metronom in einem Orchester

In einem Orchester gibt das Metronom (oder der Dirigent) den Takt vor. Wenn alle Musiker im selben Tempo spielen, klingt es harmonisch.

  • Standardmässig schlagen alle Repeater im gleichen “Takt” – das funktioniert gut.

  • Wenn ein Repeater als Flaschenhals viele Pakete verarbeiten muss, kann man sein Metronom etwas langsamer stellen (af erhöhen) – er arbeitet dann etwas gemächlicher, aber kontrollierter.

:warning: Wichtig: Alle Musiker müssen im selben Takt bleiben! Unterschiedliche af-Werte führen zu “Timing-Drift” – wie ein Musiker, der aus dem Takt kommt.

Empfehlung:

  • In der Schweiz Standardwert = af 9, Einhaltung der regulatorischen Vorgaben!

  1. flood.max – Hop-Limit

Was es macht:

Definiert die maximale Anzahl an Weiterleitungen (Hops), bevor ein Paket verworfen wird. Standard: 64 Hops / 32 Hops bei 2-Byte Path!

:tennis: Analogie: Stille Post mit Limit

Kennst du “Stille Post” oder “Chüschele”? Eine Nachricht wird von Person zu Person weitergegeben. Ohne Begrenzung würde die Nachricht endlos im Kreis wandern – und jede Runde wird sie unbrauchbarer.

flood.max = 64 sagt: Nach 64 Weitergaben ist Schluss – das Paket wird entsorgt. Das verhindert, dass “Geister-Pakete” das Netz verstopfen.

Empfehlung:

  • 64 Hops / 32 Hops bei 2 bytes Path Hash reicht für fast alle Netze

  • Nur bei sehr kleinen Netzen ggf. reduzieren

  • Nicht erhöhen! → Führt zu Netzüberlastung

Das Zusammenspiel aller Einstellungen

:snow_capped_mountain: Analogie: Eine Bergrettungskette

Stell dir eine Rettungskette in den Alpen vor:

  1. :house: Tal-Helfer (txdelay 0.5): Reagiert sofort, hat aber nur kurze Reichweite zum nächsten Dorf

  2. :office_building: Mittelstation (txdelay 1.0): Sitzt auf halber Höhe, wartet kurz ab, ob der Tal-Helfer die Nachricht schon weitergeben konnte

  3. :mount_fuji: Gipfelstation (txdelay 2.0): Hat Sicht ins ganze Tal, wartet aber bewusst am längsten – sie greift nur ein, wenn die unteren Stationen es nicht geschafft haben

So arbeiten alle kooperativ zusammen, ohne sich gegenseitig zu “überschreien”.

Praktische Tuning-Richtlinien

Situation Empfehlung
Kleine, dichte Abdeckung Kurze Timing-Werte → schnell & reaktiv
Repeater überbrückt entfernte Knoten txdelay leicht erhöhen
Überlappende/asymmetrische Pfade rxdelay nutzen, um starke Signale zu priorisieren
Alle Knoten af konsistent halten (CH regulatorische Vorgaben!)
Standardnetze flood.max auf 64 / 32 belassen

Häufige Probleme & Lösungen

Problem Ursache Lösung
Pakete verschwinden still Hop-Count überschreitet flood.max flood.max prüfen (bei 64 selten)
Hohe Latenz Absichtlich hoher txdelay Kompromiss: weniger Kollisionen = etwas mehr Wartezeit
Merkwürdige Reihenfolge bei Wiederholungen SNR-Staffelung durch rxdelay Erwartetes Verhalten! :white_check_mark:
Timing-Drift Unterschiedliche af-Werte im Netz af netzwerkweit angleichen
Repeater scheint “tot” Duplikat-Unterdrückung filtert Pakete Normal – Repeater arbeitet korrekt

Fazit

Ein gut konfigurierter MeshCore-Repeater arbeitet mit dem Netz, nicht über es.

Durch abgestimmte Timing-Einstellungen breiten sich Pakete gleichmässig und vorhersehbar aus – wie Wellen auf einem ruhigen See, nicht wie Chaos in einem Wellenbad.

Die Empfehlung des Autors: Experimentieren und iterieren! Jede Topografie ist anders, und Feldmessungen sind der Schlüssel zur optimalen Konfiguration.

5 Likes

Teile davon hat auch die Meshcore Community in Karlsruhe schon umgesetzt. Siehe deren empfohlene Einstellungen für Repeater (im Link gegen unten scrollen).

Allenfalls wäre es zu bedenken, die Repeater-Einstellungs-Empfehlung auf Meshcore.ch nochmals zu überprüfen, überdenken und gegebenenfalls anzupassen.

2 Likes

Hallo Paul

Im erweiterten Sinn, sind wir damit genau dort, was ich schon mehrmals vorgeschlagen habe. Das Netz muss sich selber kalibrieren. All diese Einstellungen könnte das Mesh selber vornehmen. Die Geräte können sich selber “ausmessen”.

Sobald User, selber eingaben machen können/müssen, besteht die Gefahr, dass mehr kaputt gemacht wird als es schlussendlich bringt. Siehe Meshtastic.

Mein Vorschlag wäre, dass diese “Kalibrierung” in Zeiten, wo nicht viel läuft, zB. zwischen Mitternacht und 6 Uhr Morgens passieren sollten.

Einstellungsmöglichkeiten für den User/Admin = null.

Hallo Felix

MeshCore ist in stetiger Entwicklung. Das Ende der Fahnenstange ist, jedenfalls für mich, noch nicht ersichtlich. Es wird noch munter weiter gehen…

Ob es dazu kommen wird, dass keine Einstellungen mehr durch die User gemacht werden müssen, kann ich nicht beurteilen. Ich weiss auch nicht, ob das überhaupt ein Ziel der Entwickler ist und es im Sinn der Community wäre.

Ich beobachte auf alle Fälle, dass sich die notwendigen Anpassungen/Einstellungen nach Updates der Firmware schlussendlich in Grenzen halten. Ein Besuch bei den Repeatern ist halt alle paar Monate nötig und vieles lässt sich ja auch über’s Netz via das CLI einstellen.

Die Parameter müssen schlussendlich den lokalen Gegebenheiten entsprechen. Ohne diese ‘lokalen Einstellungen’ wird ein LoRa - Netzwerk nie zufriedenstellend funktionieren.

Um diese Parameter zu finden, braucht es die Community. Und es braucht das Verständnis, dass das Netz nur funktioniert, wenn das Prinzip: ‘Gemeinnutz vor Eigennutz’ von allen Netzbenutzern gelebt wird.

Dazu gehört, dass jeder dafür sorgt, dass er mit seinen Tätigkeiten die Airtime nicht unnötig belastet. Z.B. indem er/sie die Flood-Adverts seiner/ihrer Repeater auf >25 Stunden einstellt; auf den Einsatz von PingBots verzichtet; Region-Scope beim Senden konsequent anwendet und die Übermittlung ohne Region (*) auf seinen/ihren Repeatern abschaltet.

5 Likes

@Paul_Simmen habe heute beim Repeater in der Alphütte den TX-Wert wie von Dir empfohlen auf 2.0 gesetzt. Jetzt kommt definitiv mehr rein! :blush::+1:

2 Likes

Ich fahre hier im Oberwalliser-Mesh schon lange angepasste TX/RX Delays. Wie in dem Dokument aus einem anderen Thread „empfohlen". Das sollen wohl solche Werte werden die dann eventuell automatisch die Repeater anwenden sollen.

Man sieht eine Veränderung. Gefühlt eine Gute. Aber es ist schwer dazu wirklich eine 100% Aussage machen zu können. Auffallend ist, dass die Repeater durch RX/TX Delay teilweise eine etwas langsamere Reaktionszeit aufweisen und somit länger auf ein „Heard Repeat" und auch auf ein ACK gewartet werden muss.

Aber auch ich würde lieber „fixe" Werte einstellen können als für jeden Repeater über Wochen/Monate die perfekten TX/RX Delays zu testen. Zumal die Auswertung schwierig wird was Verbesserung bringt und was nicht.

Was eine deutlich spürbare Verbesserung brachte war, bei Clustern wie z.B 3-4 Haus-Repeatern im Umkreis von 1km, die Sendeleistung mal auf z.B 15db zu reduzieren. Da fühlte sich dann alles deutlich schneller und zuverlässiger an.

3 Likes