MeshCore Repeater konfigurieren: Checkliste für 1.16/1.17 und Fehlersuche
Ein Repeater mit Werksdefaults belastet das Netz mehr, als er nützt. Diese Checkliste führt durch alle Parameter, die in Norddeutschland Konsens sind — zum Abhaken vor dem ersten Advert.
Vorab
Diese Checkliste gilt für die Stock-Firmware ab 1.16. Ältere Versionen kennen flood.max.unscoped nicht, und alles unter 1.14 verwirft Multi-Byte-Pfade und floodet ungefiltert. Wer noch EVO fährt: EVO ist mit 1.15 eingestellt worden, 1.16 hat die EVO-Funktionen übernommen.
Alle Befehle klein schreiben (set, nicht Set). Änderungen an Funkparametern brauchen einen Reboot. Hardware und Aufbau stehen unter Repeater aufbauen und in der Geräteübersicht.
- Firmware ist 1.16 oder 1.17.1, geprüft mit
get version - Private Key per USB mit
get prv.keygesichert, bevor du irgendetwas flashst
Name und Identität
-
set name <Name>mit Standort und Kontaktmöglichkeit. Einen verbindlichen Namensstandard gibt es nicht, aber ein Kontakt im Namen erspart Rätselraten, wenn dein Repeater Ärger macht. - ID-Präfix prüfen: Die ersten zwei Hex-Zeichen dürfen in deiner Nachbarschaft nicht doppelt vorkommen, sonst werden Traces unlesbar. Wunschpräfix per gessaman.com/mc-keygen setzen.
- Nur stationär betreiben. Mobile Repeater zerstören gelernte Pfade.
Regionen und unscoped Traffic
Regionen entscheiden, welche Nachrichten dein Repeater weiterleitet. Details, Schema und Fallstricke stehen unter Regionen und Scopes, hier nur die Kurzfassung.
- Nur lokale Regionen eintragen, in Hamburg
de-hh,de-nordundhansemesh. Maximal etwa 10, technisch 32 à 29 Byte. Groß-/Kleinschreibung zählt. -
desperren. Die Region wird wie*missbraucht, Hamburg und Sachsen haben sie abgeschaltet. - Nach jeder Änderung
region save, sonst ist die Liste nach dem Reboot weg.
| Befehl | Wert | Warum |
|---|---|---|
set flood.max | 10 | Scoped Floods enden nach 10 Hops statt 64. Ab 7 bis 8 Hops liegt die Zuverlässigkeit ohnehin nur noch bei 70 bis 80 %. |
set flood.max.unscoped | 2 bis 5, je nach Lage | Unscoped Pakete laufen nur noch ein paar Hops. Neulinge ohne Scope kommen lokal noch an, das Netz wird nicht überschwemmt. Ländlich eher 5, in dichten Netzen 2 bis 3. Nur überlastete Kern-Repeater setzen 0. |
set flood.max.advert | 3 bis 5 | Flood-Adverts fremder Nodes werden nach wenigen Hops gestoppt. |
flood.max.unscoped 0 nur mit Bedacht: Auf Firmware bis 1.16 brach das die Fernadministration, weil Remote-Admin und Pfadsuche unscoped laufen; mit der aktuellen Firmware ist das behoben. Ein hartes denyf * auf Stock-Firmware unter 1.15 sperrt zusätzlich DMs, Traces und Adverts.
Duty Cycle
-
set dutycycle 10
In Deutschland gelten 10 % im rollierenden 60-Minuten-Fenster, also 360 Sekunden Sendezeit pro Stunde. Der Default liegt bei 50 % und ist damit nicht legal. Bis 1.15 hieß der Befehl set af 9, die Formel war 100 / (af + 1). Bei 0,5 bis 0,75 s pro Paket schafft ein Repeater so 600 bis 700 Pakete pro Stunde. Das ist die Kapazität des gesamten Kanals, nicht nur deine.
Advert-Intervalle
| Befehl | Wert | Warum |
|---|---|---|
set advert.interval.zero | 240 | Zero-Hop-Advert alle 4 Stunden, das ist der Maximalwert. Nachbarn lernen dich, ohne dass jemand außer ihnen etwas davon merkt. |
set advert.interval.flood | 0 oder 48 bis 150 | 0 heißt aus. Wer den Repeater in der Ferne sichtbar haben will, nimmt 48 bis 150 Stunden. Nicht 168, sonst filtern manche Karten den Repeater als offline. |
Die Rechnung dahinter: 70 Hamburger Repeater mit je 70 Wiederholungen bei 48 Stunden ergeben 4.900 Pakete, rund 100 Adverts pro Stunde reiner Overhead. Flood-Adverts machten zeitweise die Hälfte des gesamten Traffics aus.
- Zero-Hop auf 240 Minuten
- Flood-Advert auf 0 oder in Absprache mit der Region 48 bis 150 Stunden
Timing und Pfade
| Befehl | Wert | Warum |
|---|---|---|
set txdelay | 0.7 | Kern-Repeater mit vielen Nachbarn 2.0. Zu hohe Werte bremsen das ganze Netz, zu niedrige erzeugen Kollisionen. |
set direct.txdelay | 0.5 | Verzögerung für gerichtete Pakete. Kern-Repeater 0.9. |
set rxdelay | 0 | Kein echtes Delay, sondern ein Filter für schlecht gehörte Flood-Pakete. An Kern-Repeatern in dichten Netzen bis 6. |
set path.hash.mode | 2 | 3-Byte-Pfade. 1 Byte bedeutet nur 256 mögliche IDs und ständige Kollisionen. Companions nutzen Modus 1. |
set loop.detect | minimal | Reicht mit 3-Byte-Pfaden, spart Aussetzer. |
set cad off | Hardware-CAD blockiert den Kanal bis zu 4 Sekunden. Die Software-Lösung ist genauso gut, ohne Aussetzer. | |
set int.thresh | 0 | In EVO war 1 Listen-Before-Talk, in Stock 1.16/1.17 bringt es nichts. |
set agc.reset.interval | 60 | Setzt die Empfänger-Regelung regelmäßig zurück. Hilft, wenn der Repeater bei Störern taub wird. |
set multi.acks | 1 | Etwas mehr Traffic, spürbar zuverlässigere Zustellung. |
Die Delay-Werte sind die wichtigsten Zeilen dieser Tabelle. Ein normaler Repeater am Rand nimmt die Standardwerte, ein Kern-Repeater mit vielen Nachbarn die höheren Werte, sonst reden alle gleichzeitig.
- Alle Werte aus der Tabelle gesetzt, in der App zum Schluss oben den Haken zum Speichern drücken, dann Reboot
Empfänger: rxgain und Rauschen
-
set radio.rxgain onist der Standard. Ausnahme Heltec V4 und T096 auf 1.17.1: dortset radio.fem.rxgain offundset radio.rxgain off
1.17.1 schaltet den Vorverstärker per Default ein. Auf Heltec V4 und T096 hebt das den Noise Floor von etwa -115 auf -84 dBm, weil der Verstärker vor allem Rauschen verstärkt. Auf 1.16 ist der Verstärker per Default aus.
Gut ist ein Grundrauschen von -110 bis -117 dBm. Liegt es dauerhaft über -100 dBm, sitzt in der Nähe eine Störquelle wie ein Mobilfunkmast oder ein Balkonkraftwerk. Dann hilft ein SAW-Filter, an Mastenstandorten bis zu 14 dB.
Sendeleistung und ERP
Erlaubt sind 500 mW ERP, das sind 27 dBm. ERP ist nicht der Wert am Chip, sondern das, was die Antenne abstrahlt:
ERP [dBm] = tx [dBm] + Antennengewinn [dBd] - Kabel und Stecker [dB]
dBd = dBi - 2,15
Verluste: SMA-Übergang etwa 0,3 dB, N etwa 0,2 dB, RG58 etwa 1 dB pro Meter, H155 0,27 bis 0,55 dB pro Meter. Rechne mit dem realen Gewinn, nicht dem Aufdruck. Eine als 5 dBi verkaufte Antenne liefert oft 2 bis 3 dBi, siehe 868-MHz-Antenne.
| Board | tx-Wert | Leistung am Chip |
|---|---|---|
| SX1262 (RAK, Xiao, Heltec V3) | 22 | ca. 158 mW, 22 dBm |
| Heltec V4 | 16 | ca. 467 mW |
| Heltec V4 | 17 | ca. 520 mW |
| Heltec V4 | 22 | ca. 800 mW, über dem Limit |
| T096 | 12 | 250 mW |
| T096 | 13 | 380 mW |
| T096 | 16 | 560 mW |
Beispiel: SX1262 mit 22 dBm, Antenne 3 dBi (0,85 dBd), 1 m H155 und zwei SMA-Übergänge ergeben rund 22,5 dBm ERP, deutlich unter 27. Ein Heltec V4 mit tx 17 (27,2 dBm) und derselben Antenne liegt bei etwa 27,5 dBm ERP, also knapp drüber. Mit einer 6,5-dBi-Antenne (4,35 dBd) landet der V4 bei tx 16 schon bei rund 30 dBm, das ist 1 W.
-
set txso gewählt, dass die Rechnung unter 27 dBm bleibt - Zu hohe Werte auf dem V4 werden gekappt und können die Endstufe beschädigen
1.16 gegen 1.17: was sich ändert
| 1.16 | 1.17.x | |
|---|---|---|
| Neu | flood.max.unscoped, flood.max.advert, PowerSaving aus IoTThinks | Kollisions-Fixes, Login-Response nicht mehr als Flood |
| rxgain | Default aus | Default an, manuell ausschalten |
| Bekannte Bugs | region load friert die CLI ein, App-Menü nutzen. T096 auf 1.17.0 sendet nicht, 1.17.1 nehmen. Nach Login-Bug notfalls per Flood anmelden und Pfad neu setzen. |
Nach jedem Update prüfen
-
get versionzeigt die erwartete Version - Coding Rate steht auf 8. Nach Updates wurde schon CR 5 beobachtet, das Narrow-Preset braucht 869,618 MHz, BW 62,5 kHz, SF 8, CR 8
- Regionen noch vorhanden, Updates haben sie sporadisch gelöscht
-
dutycycle, Advert-Intervalle und Flood-Limits kontrollieren - rxgain und fem.rxgain aus
- Uhrzeit stimmt, sonst werden Adverts verworfen. Ohne RTC-Modul nach jedem Reboot
clock sync - Wenn Werte unerklärlich falsch sind: mit Erase flashen und alles neu setzen
Auslastung messen
- Airtime in der Status-Abfrage: RX 12 bis 17 % und TX unter 1 % sind in Ordnung. Ab 10 bis 14 % Kanalauslastung wird es kritisch, über 30 % fällt das Netz aus.
- Paketfehler: 20 bis 25 % sind in dichten Netzen normal, 11 % sehr gut, bis 50 % an exponierten Standorten. Duplikate 13 bis 15 % sind normal.
- Debug Flag 2 im Log bedeutet, der Kanal war 4 Sekunden belegt und TX blockiert. Dann
txdelayerhöhen oder den Standort hinterfragen. - Nachbarn: Links unter -6 dB sind nicht stabil. Über 20 Nachbarn mit 30 bis 70 % Fehlern: rxdelay hoch, TX runter, Filter einbauen.
- Langzeitsicht über analyzer.letsmesh.net, meshcore-analyzer.eu und map.kiekr.app. Observer erzeugen keinen Mesh-Traffic.
Fallstricke
- EVO-Migration. EVO hängt Parameter am Dateiende an, 1.16 liest sie an anderer Stelle. Nach dem Wechsel stehen falsche Werte im Speicher. Mit Erase flashen oder jeden Parameter einzeln neu setzen.
- ESP32-Bootloop nach EVO-Flash. Merged-Datei ohne Erase aufgespielt. Erst Standard mit Erase, dann neu.
- UF2 gegen merged. UF2 überschreibt nur die App, die Config bleibt. Merged löscht auch das Dateisystem.
- Regionen ohne
region save. In der App eingetragen, aber nicht gespeichert: nach dem Reboot weg. - Position nach Reboot deaktiviert. Bekannter Bug, nach jedem Neustart prüfen.
- Uhr springt zurück. Ohne RTC steht die Zeit nach Reboot auf 1970 oder 2024, nRF-Quarze driften zudem nach etwa 50 Tagen. Ein DS3231 an I2C wird automatisch erkannt.
- Automatische Abfragen. Home-Assistant-Skripte fragen per Flood ab und laufen durchs ganze Land. Pfad fest setzen oder abschalten.
- Alte Firmware in der Nachbarschaft. Repeater unter 1.14 verwerfen 2- und 3-Byte-Pfade. Betreiber ansprechen, Update oder Abbau.
Repeater-Hardware
Boards, die in der Checkliste vorkommen:
- Xiao nRF52840 + Wio-SX1262 Kit – Sparsam, erste Wahl für Solar. Bei Amazon ansehen *
- SenseCAP P1 Pro – Fertiger Repeater mit Akku. Bei Amazon ansehen *
- Heltec V4 – Stark, aber stromhungrig, nur mit Netzstrom. Bei Amazon ansehen *
- Heltec V3 – Budget-Board, für Repeater nur mit Dauerstrom. Bei Amazon ansehen *
- RAK WisBlock – Modular, nRF52-basiert. Bei Amazon ansehen *
- SAW-Filter – Pflicht an exponierten Standorten. SAW-Filter im Shop
Fehlersuche: Er läuft, aber etwas stimmt nicht
Die häufigsten Symptome aus der Support-Gruppe, jeweils mit Ursache und Lösung. Erst die Checkliste oben abarbeiten, dann hier weiterlesen.
Repeater wird nicht angezeigt
Symptom
Der Repeater läuft, aber er erscheint nicht auf der Karte, nicht in der App eines Companions oder nicht auf mapme.sh.
Ursachen
Ein Repeater wird nur sichtbar, wenn jemand einen Advert von ihm empfängt. Ohne Advert kein Eintrag, egal auf welcher Karte. Jede Karte bekommt ihre Daten anders:
| Karte | Woher die Daten kommen | Wann der Repeater erscheint |
|---|---|---|
| map.kiekr.app | [PRUEFEN: Datenquelle] | Gilt als beste Repeater-Übersicht |
| mapme.sh | Advert beim aktiven Mappen empfangen | Nur wenn zusätzlich mindestens ein Hex gemappt wurde; Live-Modus sofort, sonst 3 bis 5 Minuten |
| meshcore.co.uk / map.meshcore.io | Manueller Upload oder Auto-Uploader | Nach manuellem Eintrag |
| analyzer.meshcorenetz.de, analyzer.letsmesh.net | Observer per MQTT | Etwa 24 Stunden bis Daten auftauchen |
Weitere Ursachen: Observer hören keine EVO-Adverts. Zero-Hop-Adverts gehen nur alle 240 Minuten raus. Alte Firmware unter 1.14 verwirft Pakete mit Multi-Byte-Pfad.
Lösung
- Löse in der App über das Repeater-Menü einen Advert aus und warte. Beim Mappen kannst du den Repeater-Admin darum bitten, siehe Coverage Mapping.
- Prüfe die Advert-Intervalle:
set advert.interval.zero 240, Flood-Advert 0 oder 150 Stunden. Nicht 168, sonst filtern Tools zu früh. - Nutze im Companion in der Nähe „Discover Nearby Nodes" (ab Firmware 1.10). Das findet den Repeater ohne Advert.
- Für meshcore.co.uk trage den Repeater manuell ein. Für Observer-Karten warte einen Tag.
- Läuft der Repeater auf EVO, erscheint er bei Observern nicht. EVO ist seit 1.16 obsolet, wechsle auf Stock.
Keine Nachbarn (Neighbours leer)
Symptom
Die Nachbarliste im Repeater zeigt 0 Einträge, oft nach Reboot, Firmware-Update oder Standortwechsel.
Ursachen
Die Nachbarliste enthält nur direkte Nachbarn und wird aus empfangenen Adverts aufgebaut. Nach einem Neustart ist sie leer, das ist normal. Da Zero-Hop-Adverts nur alle 4 Stunden kommen, dauert das Füllen. Weitere Ursachen: int.thresh falsch gesetzt, der Repeater hört sich selbst und blockiert sich. Uhr steht falsch und Adverts werden verworfen (siehe unten). Standort im Tal oder unter Alu-Dämmung. Seit 1.9.0 ist die Liste auf 50 Nachbarn begrenzt.
Lösung
- Warten. Mit „discover neighbours" in der App füllt sich die Liste schneller.
set int.thresh 0und auf 1.17.1 zusätzlichset cad off. Die Hardware-CAD erzeugt 4-Sekunden-Aussetzer, die Software-Lösung ist genauso gut.- Bleibt der Repeater taub:
set agc.reset.interval 4. - Prüfe die Link-Qualität. Für stabile Repeater-Links brauchst du mindestens -6 dB SNR, -10 dB ist grenzwertig.
- Zeigt die Liste plötzlich 0 nach Tagen im Betrieb, prüfe die Uhr.
Unbekannter Repeater
Symptom
Im Trace, in der Nachbarliste oder auf mapme.sh taucht ein Repeater als „unknown" oder nur mit zwei Zeichen auf, etwa „ba".
Ursachen
Im Pfad steht standardmäßig nur ein Byte der Repeater-ID, also 256 mögliche Werte. Kollisionen sind häufig, zwei Repeater mit gleichem Präfix machen Traces unlesbar. Repeater ohne Namen, zum Beispiel ein Room Server mit Repeat an, erscheinen ebenfalls als „unknown". mapme.sh kann nur die zwei Zeichen aus dem Pfad zeigen und ordnet nach räumlicher Nähe bis 100 km zu, das kann falsch sein.
Lösung
set path.hash.mode 2auf Repeatern (3-Byte-Pfad),set path.hash.mode 1auf Companions. Das braucht Firmware 1.14 oder neuer im Umfeld.- Kollidiert dein Präfix mit einem Nachbarn, setze einen neuen Key mit Wunschpräfix über gessaman.com/mc-keygen und
set prv.key. Sichere vorher den alten mitget prv.keyper USB. - Room Server nicht mit Repeater-Funktion kombinieren.
- Schreib einen Kontakt in den Repeaternamen, damit Nachbarn dich bei Problemen erreichen.
Falsche Zeit
Symptom
Nach Reboot oder Stromausfall steht die Uhr auf 1970 oder 2024. Nach etwa 50 Tagen Laufzeit driftet sie weg. Nachbarn und Kontakte verschwinden, ein Room Server spielt alte Nachrichten aus.
Ursache
Die meisten Boards haben keine Echtzeituhr. Der Quarz des nRF52 driftet, und nach einem Neustart fängt die Uhr bei null an. Adverts, die älter sind als die Systemzeit des Repeaters, werden verworfen. Deshalb leert eine falsche Uhr die Nachbarliste.
Lösung
- Sofort:
clock syncaus der App odertime <epoch_sekunden>per CLI. Nach jedem Reset wiederholen. set timezone Europe/Berlin. Wird nach Reboot manchmal nicht gespeichert, nach dem Neustart prüfen.- Dauerhaft: DS3231-RTC (ca. 2 Euro) an I2C, Adresse 0x68. Die Firmware erkennt das Modul automatisch und liest es beim Boot. Beim Xiao liegt I2C seit 1.6.2 auf D6/D7. Alternativ RV-3028 auf 0x52 oder PCF8563 auf 0x51.
Passwort und Admin-Zugriff
Symptom
Login am Repeater schlägt fehl. Die App zeigt „please wait" und kommt nicht weiter, oder Abfragen enden mit NO_RESPONSE.
Ursachen
- Firmware 1.9.0 hat einen Login-Bug bei Passwörtern über 11 Zeichen.
flood.max.unscoped 0bricht den Remote-Admin, weil Admin-Anfragen ohne Scope laufen.- Über 3 und mehr Hops ist der Zugriff fehleranfällig. Bei hohem Traffic kann der Pfad nicht gelernt werden und die Anfrage fällt auf Flood zurück.
- Auf 1.17.x friert
region loadper CLI den Repeater ein. Auf 1.11.0 sind Konsolenbefehle unzuverlässig. - Room Server haben das Standardpasswort „hello".
Lösung
- Firmware aktualisieren. Auf alter Firmware Passwort mit höchstens 11 Zeichen nutzen.
set flood.max.unscoped 3bis5, nie 0.- Aus der Nähe per Zero-Hop verbinden oder in der App den Pfad manuell setzen. Mehrmals versuchen, notfalls App wechseln (MeshCore-App gegen KiekR).
- Regionen auf 1.17.x über das App-Menü setzen, nicht per
region loadin der CLI. - Geht nichts mehr: per USB an den Webflasher und die USB-CLI nutzen. Dort funktioniert auch
get prv.keyzum Sichern des Keys. - Gast-Zugang nicht offen lassen, sonst kommt Bot-Spam. Owner-Info ist nur mit Passwort lesbar.
- [PRUEFEN: CLI-Befehl zum Setzen des Admin-Passworts und Standardpasswort bei Repeatern]
Received packet errors zu hoch
Symptom
Der Repeater meldet 30 bis 70 % RX-Fehler, viele Duplikate, oder er wird nach kurzer Zeit taub.
Ursachen
Ein Teil der Fehler ist im dichten Netz normal. Hohe Werte entstehen an exponierten Standorten, die mehr hören als sie weitergeben können, durch Störquellen wie Mobilfunkmasten oder Balkonkraftwerk-Wechselrichter, oder durch die AGC, die bei viel Traffic zuläuft. Auf 1.17.1 ist rxgain standardmäßig an und hebt den Noise Floor auf -84 dBm.
| Wert | Bewertung |
|---|---|
| Unter 5 % RX-Fehler | Guter Link |
| 11 % | Sehr gut |
| 20 bis 25 % | Normal im dichten Netz |
| Bis 50 % | An exponierten Standorten üblich |
| Duplikate 13 bis 15 % | Normal |
| Noise Floor -110 bis -120 dBm | Gut |
| Noise Floor -95 dBm oder höher | Störquelle suchen |
Lösung
- Auf 1.17.1:
set radio.fem.rxgain offundset radio.rxgain off. set agc.reset.interval 4gegen Taubheit.set rxdelay 0.2bis3.0filtert schlecht gehörte Flood-Pakete, bei dichtem Netz testweise 3,0.set txdelay 0.5, an Kern-Repeatern mit vielen Nachbarn bis 1,5 bis 2,0.- Bei Störumfeld ein SAW-Filter. Er senkt den Noise Floor um 10 bis 15 dB, bei -110 dBm ist er nicht nötig. Für über 22 dBm die 28-dB-Variante.
- Hört der Repeater zu viel: Sendeleistung runter, kleinere Antenne. Mehr zur Antennenwahl unter 868-MHz-Antenne.
OTA-Update hängt
Symptom
Das Update bleibt bei „Loading" oder bei 100 % stehen, der DFU-Vorgang startet nicht, oder der Repeater bootet danach im Loop.
Ursachen
Auf nRF52-Boards fehlt oft der OTAFIX-Bootloader, oder die falsche Bootloader-Variante ist installiert. Bluetooth-Reichweite zu groß, parallele BT-Verbindung offen, oder die DFU-App hängt. Bei der Migration von EVO auf 1.16 stehen die Parameter in anderer Reihenfolge und werden falsch gelesen.
Lösung
- nRF52: Bootloader OTAFIX 2.2 oder neuer installieren, die uf2-Datei im DFU-Modus auf das Laufwerk kopieren. Richtige Variante wählen, nicht „Sense", wenn das Board keins ist.
- In der DFU-App „Request high MTU" aus, Paketgröße 8, Abstand unter 10 Meter, MeshCore-App vorher schließen.
- Hängt es bei 100 %: Reset, dann per USB flashen. Hängt es bei „Loading": Erase-Image laden und neu flashen. Vorher
get prv.keysichern. - Nach EVO-Wechsel: mit Erase flashen oder alle Parameter einzeln per
setnachtragen. - ESP32-Boards:
start otaper CLI startet den OTA-Modus über WLAN. [PRUEFEN: genauer Ablauf und Firmware-Voraussetzung] - Per USB nur mit Chrome und einem USB-A-auf-C-Kabel. Unter Linux den Nutzer zur Gruppe dialout hinzufügen.
Wer den Repeater neu aufbaut, findet den kompletten Ablauf unter Repeater aufbauen und passende Hardware unter Geräte.
Fragen?
Bei Unklarheiten zu einzelnen Werten oder zur Absprache in deiner Region hilft die Telegram-Gruppe: t.me/meshcorede.
* Affiliate-Links: Kaufst du über einen mit * markierten Link bei Amazon, bekommt HanseMesh eine kleine Provision. Für dich ändert sich der Preis nicht. Wir verlinken nur Hardware, die in der Community im Einsatz ist.