LTE-enabled MeshCore Repeater

Ich arbeite an einem autarken, fernwartbaren MeshCore-Repeater für abgelegene Schweizer Berggipfel — solarbetrieben und vollständig über 4G wartbar ohne vor Ort zu sein.

Konzept: RAK19003 + RAK4631 als Repeater (läuft 24/7), ergänzt durch einen Raspberry Pi Zero 2 W mit 4G-Modem für Fernwartungsfenster. Firmware-Updates, Konfiguration und Diagnose laufen komplett remote .

Energiekonzept: Waveshare Solar Power Manager (D) mit 3× 18650 (10.500 mAh) und einem 8W/18V Epoxy-Solarpanel (200×130mm). Der Pi und das 4G-Modem werden nach dem Wartungsfenster physisch stromlos geschaltet — der Witty Pi 4 Mini übernimmt die Zeitsteuerung.

Status: Alle Komponenten bestellt, Aufbau folgt.

Weitere Details und Fortschritt werde ich in diesem Thread festhalten. Fragen und Feedback willkommen!

Projektseite: LTE-enabled MeshCore Repeater — MeshCore CH

6 Likes

Frage:
Für was brauchst du LTE wenn doch eigentlich alles über “remote cli” machbar ist?

Als SIM die DigitalRepublic flat zu sfr 4/monat oder gibts günstigeres?

BTW projektseite “WisBlock RAK19003 Base + RAK4631 Core” ist zusammen CHF 32, nicht CHF 12.

@HB9VQQ Sehr cooles Projekt und schöne Doku, ich wünsche dir viel Erfolg! :+1:t2:

1 Like

Bin auf die Erfahrungen gespannt. Wir verwenden noch eine 868MHz Kavität (BPF, z.B. RAK-BPF03) um gegen LTE-800/4G/5G, Radar und anderen Sendern auf und in der Nähe des UTO immun(er) zu sein.

2 Likes

Das Remote CLI von MeshCore läuft über das Mesh selbst — d.h. man muss in Reichweite eines anderen MeshCore-Knotens sein. Auf einem abgelegenen Berggipfel ist das oft nicht gegeben, oder die Mesh-Verbindung ist nicht zuverlässig genug.

LTE schafft eine unabhängige, direkte Verbindung zum Repeater — unabhängig vom Mesh-Netz. Das ist besonders wichtig für:

  • Firmware-Flash — geht nicht über das Mesh, nur direkt via USB-Seriell (der Pi ist per USB mit dem RAK verbunden)
  • Neukonfiguration — auch wenn der RAK nach einem misslungenen Update nicht mehr ins Mesh sendet
  • SSH-Diagnose — direkter Zugriff auf den Pi via ZeroTier, auch ohne funktionierendes Mesh

Guter Hinweis, den ich in Erwägung ziehe. Ist allerdings ziemlich teuer…

73

ich hab eine wifi alternative gebaut Discord

Update — Software & Energie stehen, wichtiger Solar-Befund

Guter Fortschritt heute. Der Raspberry-Pi-/4G-Teil ist komplett verifiziert:

  • 4G-Verbindung steht, kommt nach Reboot automatisch hoch (autoconnect)
  • ZeroTier über 4G + SSH — Remote-Zugriff läuft autonom, auch nach Reboot
  • Zeitsynchronisation durchanalysiert: Witty Pi hält die Zeit stromlos (DS3231), schreibt sie beim Boot ins System, nach 4G-Hochlauf wird per NTP nachgezogen und in die RTC zurückgeschrieben. Läuft autonom.
  • meshcore-cli installiert, Repeater-Konfig (CH-Settings: 869.618 MHz, Duty Cycle 10, TX Delay 2.0 für Backbone) liegt bereit fürs Flashen

Solar Power Manager — ein Befund, der andere interessieren dürfte:

Beim Testen ist mir aufgefallen: Type-C-Laden und 5V-Ausgang schliessen sich gegenseitig aus. Sobald man am Type-C-Eingang lädt (egal ob Fast-Charge-Powerbank oder simples 5V-Netzteil), bricht der 5V-Ausgang weg und der Verbraucher schaltet ab. Hartes Board-Verhalten, keine Einstellung.

Der Solar-Eingang (CN3791-Chip) verhält sich dagegen korrekt: Mit 12V ans SOLAR-IN simuliert (Panel noch unterwegs) läuft Laden + Versorgung stabil parallel — kein Unterbruch, Solar Charge-LED + Battery-LED aktiv.

Praktische Warnung: Wer auf die Idee kommt, eine Powerbank als Puffer anzuhängen — das killt den Ausgang, weil Powerbanks über USB/Type-C speisen. Jede Zusatzeinspeisung muss über den Solar-Eingang (6–24V) laufen, nie über Type-C.

Nächste Schritte: RAK anschliessen + flashen, echtes Solarpanel (Pfad ist aber schon verifiziert), Gehäusemontage.

Roland/HB9VQQ

1 Like

Der Pi Zero 2 W hat mehr als genügend Reserven. Alle Prozesse sind am Laufen, CPU im Idle und gut innerhalb der Temp Range. SSH-Zugriff über 4G (Digital Republic SIM, Interface wwan0).

1 Like

Update — Repeater läuft, komplett remote wartbar

Seit dem letzten Post ist der RAK dran, geflasht und konfiguriert — der Node ist funktional fertig. Das ganze System ist damit auf dem Tisch durchgetestet; einzig der finale Solar-Funktionstest mit dem echten Panel steht noch aus (Panel ist unterwegs).

Der Durchbruch: Firmware-Update läuft vollständig remote über USB (adafruit-nrfutil --touch 1200), ohne Knopfdruck, ohne BLE, ohne ans Gerät zu müssen. Zweifach durchgespielt, reproduzierbar (~40 s pro Flash). Damit ist das grösste offene Risiko des „am Berg autark"-Konzepts vom Tisch — der Repeater lässt sich aus der Ferne aktuell halten.

Weiter verifiziert:

  • HF-Pfad steht — Node im Mesh sichtbar, sauberes SNR, sieht die Nachbarn
  • GPS-Position via SIM7600 — der Pi liest die Position aus dem 4G-Modem und schreibt sie per meshcore-cli in den RAK. So landet der Node automatisch am richtigen Ort auf der Karte, ganz ohne eigenes GPS-Modul am RAK.

Nächste Schritte: Gehäusemontage, echtes Solarpanel für den finalen Funktionstest, dann erst mal ein längerer Testbetrieb bei mir zu Hause, bevor es auf den Berg geht.

Roland/HB9VQQ

1 Like

Monitoring für den Solar-Repeater — wöchentlicher Status-Push + Ausfall-Alarm

Der Node am Berg wacht nur einmal pro Woche für ein Wartungsfenster auf (Rest der Zeit schläft der Pi, der RAK repeatet 24/7). Die Frage war: Wie erfahre ich aus der Ferne, ob alles läuft? Meine Lösung, komplett mit Bordmitteln:

1. Wöchentlicher Status-Push (ntfy.sh). Beim Aufwachen schickt der Pi nach dem 4G-Hochlauf einen Push aufs Handy — ein kompletter Gesundheits-Report in einer Nachricht:

4G ok. RAK: bat 4.17V up 0d7h pkt 2248/514 NF -103 | RSRP -104 SNR 2.4 | ZT ... | CPU 53C | Pi up 1h

Also: RAK-Batteriespannung, RAK-Uptime, Paketzähler (recv/sent), Noise Floor, 4G-Signalqualität (RSRP/SNR), ZeroTier-IP, CPU-Temperatur. Die RAK-Werte kommen aus stats-core, stats-packets, stats-radio — inkl. der Batteriespannung, die der RAK am Solareingang misst.

2. Ausfall-Alarm (Dead-Man-Switch). Ein Status-Push nützt nichts, wenn der Node gar nicht erst hochkommt — dann kommt einfach kein Push. Deshalb pingt der Pi im Wartungsfenster zusätzlich einen externen Dienst (Healthchecks.io, kostenlos). Bleibt der wöchentliche Ping aus (Node tot, kein 4G, Akku leer), alarmiert der Dienst nach 8 Tagen von selbst — per ntfy auf denselben Kanal. Der Clou: Der Alarm kommt von einem fremden Server, also genau dann, wenn der Pi selbst nichts mehr senden kann.

Zusammen decken die beiden alle Fälle ab: Node meldet sich mit Status, und Node meldet sich NICHT. Alles über ntfy (öffentlicher Server) — keine App-Entwicklung, keine eigene Server-Infrastruktur nötig.

Nächste Schritte weiterhin: Gehäuse, Solarpanel, Testbetrieb zu Hause.

Roland/HB9VQQ

1 Like

Der CN3791 nutzt ein sogenanntes „Pseudo-MPPT“ (oft auch als Constant Voltage Tracking oder Feste MPP-Spannung bezeichnet), bei dem die gewünschte Panel-Spannung fest über einen Widerstandsteiler eingestellt werden muss.

Das ist kein MPPT, das ist ein MPP bei dem das Vmpp des panels von hand eingestellt werden muss.

Google AI über teperaturabhängikeit Vmpp:
Eine echte Temperaturkompensation für das Solarpanel hat der CN3791 nicht. Erfahrene Elektroniker stellen die MPP-Spannung am CN3791 deshalb oft ca. 0,5 V niedriger ein, als das Datenblatt des Panels (bei 25 °C) angibt. Damit läuft das Panel im Sommer effizienter.

Constant-Voltage-Tracking mit fest eingestelltem Vmpp trifft es (ich nutze den Waveshare Solar Power Manager (D) mit CN3791).

In dieser Leistungsklasse machen praktisch alle „MPPT"-Manager genau dieses Constant-Voltage-Pseudo-MPPT — echtes dynamisches Tracking gibt’s erst bei grösseren Panels, wo es sich lohnt. Für meine 8W ist der Waveshare-Ansatz Standard und völlig ausreichend: Bei ~8–11 mA Dauerlast (RAK + Witty Pi) habe ich selbst im Dezember rechnerisch ~11× Solarüberschuss (Planwert). Da fallen die paar Prozent durch den nicht kompensierten Arbeitspunkt nicht ins Gewicht.

Ich bezeichne das Constant-Voltage-Input (ohne Tracking).

Vielen DIY bauern (nicht dem VQQ) ist nicht klar dass man diesen reglern einmalig die Vinput (Vmpp) einstellen muss. Das gibt dann bei Vinput << Vmpp schlechten wirkungsgrad und bei Vinput > Vopen funktioniert es nicht.

Vmp = Vmpp, Voc = Vopen

Waveshare Solar Power Manager (D) am solaren MeshCore-Repeater — drei wichtige Erkenntnisse

Beim Testen der Stromversorgung bin ich auf drei Dinge gestossen, die für alle relevant sind, die einen Solar-Node mit einem dieser günstigen Solar-Manager bauen. Zwei gute Nachrichten, eine schlechte.

Vorab — Board-Revisionen und Doku-Lage: Den „(D)" gibt es in mindestens zwei Versionen: V1 (Boost SW6106, Schutz XB8886A) und V2, mein Board (Boost SW6201S, Schutz XB8089D0). Beide: Laderegler CN3791, MCU CH32V003. Kurios: Die offizielle Waveshare-Wiki zeigt noch die V1-Bestückung — und im dortigen Interface-Foto/Diagramm ist der Funktionstaster nicht vorhanden. Für V2 gibt es keine eigene Wiki, nur eine knappe Produktseite. Die Chip-Angaben in diversen Online-Quellen widersprechen sich, weil sie verschiedene Revisionen meinen .

:cross_mark: Der wichtigste Punkt: Nach echter Tiefentladung kommt der Node NICHT von selbst zurück.

Testaufbau: Akku unter Last bis zum Entlade-Cutoff (3,0 V beim V2) entladen, dann „Sonne zurück" simuliert (13.8V Labor Netzteil an SOLAR-IN). Ergebnis:

  • Die Charge-LED blinkt wie beim normalen Laden — aber real fliessen nur ~1,3 mA. Der Schutz-IC latcht den Akku ab, das Board täuscht Laden vor, lädt aber praktisch nicht. Wer nur auf die LED schaut, denkt „er erholt sich gerade", während in Wahrheit nichts passiert. Nur eine echte Strommessung deckt das auf.
  • Erneutes Anlegen der Ladespannung (Netzteil/Sonne zurück) löst den Latch nicht. Das Betätigen des Funktionstasters löst ihn ebenfalls nicht.
  • Nur physisches Ab- und Wiederanklemmen des Akkus (PH2.0-Stecker oder Klemme kurz ab und wieder an) setzt den Schutz-IC zurück → danach sofort echter Ladestrom (bei mir 670 mA).
  • Zweifach reproduziert, beide Male identisch.

Konsequenz für einen Node an einem unzugänglichen Standort: Nach einem Tiefentlade-Ereignis mit einem Solar-Manager wie der Waveshare, (z. B. wochenlang Schnee auf dem Panel) ist der Node tot und braucht jemanden vor Ort, der den Akku ab- und wieder ansteckt. Es betrifft die meisten günstigen Solar-Manager dieser Art (mit Li-Schutz-IC): DFRobot-Boards mit BOOT-Button-Reset haben dasselbe, ebenso diverse RAK-WisBlock-Berichte. Ein Wechsel auf ein anderes typähnliches Board löst es nicht. Fazit: Tiefentladung muss über die Dimensionierung (grosse Winterreserve) möglichst verhindert werden, weil es keine remote Hardware-Recovery gibt.

:white_check_mark: Light-Load-Standby lösen: Doppelklick auf die Funktionstaste (nur V2).

Der 5V-Ausgang wird per default bei geringer Last (Pi im Sleep / nur RTC-Board, wenige mA) nach ~30 s abgeschaltet — der Node stirbt, sobald der Verbraucher zu wenig Strom zieht. Waveshare erwähnt auf der Produktseite in einem Halbsatz einen „low-current mode" per Doppelklick. Getestet:

  • Nach Doppelklick auf die Funktionstaste bleibt der Ausgang auch bei wenigen mA Last dauerhaft an (verifiziert).
  • Der Modus übersteht einen kompletten Power-Cycle (Akku ganz ab und wieder an) — er ist im MCU gespeichert, muss also nicht nach jedem Ausfall neu gesetzt werden.

Wichtig: Dieser Fix braucht den Funktionstaster, den offenbar nur die V2 hat. Auf dem V1-Board (Wiki-PCB-Foto) ist an der Taster-Position kein Taster bestückt — V1-Besitzer können den Modus so nicht nutzen und müssen das Light-Load-Standby über eine ausreichende Dauerlast lösen (kontinuierlich genug Strom nötig; laut SW6106-Datenblatt dürfte die Schwelle bei ~60 mA liegen, selbst nicht verifiziert, im Zweifel experimentell ermitteln). Nebenbei: Die gepulste „Dummy Load" mancher RTC-Boards (Witty Pi) hilft NICHT — es braucht Dauerlast.

:white_check_mark: Auto-Boot nach Stromwiederkehr.

Falls ihr ein Power-Management-Board (z. B. Witty Pi) nutzt: die Einstellung „Default state = ON" sorgt dafür, dass der Rechner automatisch bootet, sobald wieder 5V am Ausgang des Sola-Managers anliegen — übersteht ebenfalls den Power-Cycle. Wichtig: Das hilft nur beim normalen Stromausfall, nicht beim Tiefentlade-Latch aus ①, weil dort gar keine 5V anliegen.

Zusammengefasst: Zwei der drei Autonomie-Hürden lassen sich sauber und persistent lösen (Doppelklick-Low-Current-Mode auf V2 + Auto-Boot). Die dritte — die fehlende Recovery nach Tiefentladung — bleibt und ist nur durch Vermeiden (Reserve, Monitoring) beherrschbar. Besonders tückisch, die „Fake-Charge"-LED: Verlasst euch nie auf die blinkende Lade-Anzeige, messt den echten Strom.

Korrektur/Nachtrag zu ②: Der Low-Current-Mode ist nicht power-cycle-persistent (mein erster Test war fehlinterpretiert). Bei komplettem Stromverlust — also Akku getrennt oder Tiefentladung bis zum Cutoff — geht die Einstellung verloren, der Ausgang schaltet danach wieder nach 30 s ab. In der Praxis aber unkritisch: Im Normalbetrieb behält das Board durchgehend Strom, der Mode bleibt aktiv. Und nach einer Tiefentladung muss der Akku ohnehin einmal ab- und wieder angeklemmt werden (gegen den Latch) — dabei einfach kurz den Funktionstaster doppelklicken, fertig. Also: einmal bei der Inbetriebnahme setzen und nach jedem Akku-Reset gleich mit.

Alles ausgiebig getestet, alles funktioniert. Jetzt noch die Box und das Solarpanel, beides unterwegs. Dann schön einbauen und zum Feldtest.

1 Like

Ein gut verlinkter Repeater stösst potenziell an die Duty Cycle Limite von 10%. Aus diesem Grund habe ich das Monitoring erweitert.

Einen direkten Drossel-Zähler gibt die Firmware (v1.16.0) nicht her, aber zwei Felder aus den CLI-Stats taugen als Indikator:

  • Kumulativer Duty Cycle = tx_air_secs / uptime_secs (aus stats-radio / stats-core).
  • queue_len (aus stats-core): staut sich die Sende-Queue dauerhaft, läuft der Node am Limit.

Im Screenshot die zwei neuen Felder: DC = kumulativer Duty Cycle (tx_air_secs / uptime_secs), Q = queue_len (Sende-Queue, Drossel-Indikator).

2 Likes

Aufbau abgeschlossen — geht in den Testbetrieb

Der LTE-MeshCore-Repeater ist fertig konfektioniert. Antennen: LoRa-Antenne (869 MHz) über N-Durchführung auf dem Deckel, LTE-Antenne (Teltonika PR1US450, SMA) direkt am SIM7600-Dongle im Gehäuse. Solarpanel (Polysilicon 200×130) auf der Front.

Innen wie geplant: RAK19003 + RAK4631 als Repeater (autark am Akku, überlebt Pi-Shutdown), Raspberry Pi Zero 2 W + SIM7600E-H fürs 4G-Remote-Management, Witty Pi 4 Mini für Schedule/RTC, Waveshare Solar Power Manager (D) V2 mit 3× NCR18650GA (1S3P).

Verifiziert und produktiv:

  • Wöchentlicher ntfy-Status-Push (Uptime, Paketzähler, Noise Floor, Duty-Cycle, RSRP/SNR, CPU-/Box-Temp, Fehler, SD-Belegung)
  • Healthchecks-Dead-Man-Switch
  • Schedule mit absoluten Weckzeiten

Nächster Schritt: Testbetrieb zu Hause.

2 Likes

Fragen. Ich will nicht stressen sondern designentscheidungen verstehen:

Du brauchst den separaten ladecontroller weil der vom RAK für dein monster panel zuwenig ma kann?

Du brauchst die 5V? Der raspi ist intern denk ich 3.3V, aber das sim dongle braucht die 5V?

Du hast mal standby current vom lader+buck gemessen? Ist der 5V boost dauernd aktiv oder nur nach timer?