🇬🇧 English version: README.md
Een Flutter-console-app voor MeshCoreNG-repeaters en companion-radio's.
Verbind via USB-serieel, BLE of TCP en stuur CLI-commando's naar je mesh-knooppunt — op Android, Linux en Windows.
MeshCLI NG geeft je een terminalvenster voor MeshCoreNG-apparaten in drie modi:
| Modus | Verbinding met | Transport |
|---|---|---|
| Companion | Een companion-radio met MeshCore companion-firmware | BLE · USB · TCP |
| Remote | Een verre repeater bereikt via de companion over het mesh | (via companion) |
| -r Serieel | Een repeater direct via USB-serieel | USB-serieel |
De app heeft geen chat-interface en geen contactenlijst — het is een compacte CLI-console. In de directe serieel-modus zit ook een interactief configuratiepaneel waarmee je alle instellingen van je repeater kunt ophalen, aanpassen en terugsturen.
| Platform | USB-serieel | BLE | TCP |
|---|---|---|---|
| Android | ✅ | ✅ | ✅ |
| Linux | ✅ | — | ✅ |
| Windows | ✅ | — | ✅ |
BLE op desktop is niet opgenomen; gebruik serieel of TCP op Linux/Windows.
Voor USB-serieel op Android moet de telefoon USB OTG / USB-host ondersteunen. Dat is nodig omdat de MeshCore-node rechtstreeks aan de telefoon hangt: de telefoon moet dan de USB-host zijn en de app toestemming geven om de seriële poort te openen.
Gebruik:
- een USB-C OTG-adapter of USB-C datakabel
- een MeshCore-node/repeater die als USB-seriële poort verschijnt
- de Android USB-toestemming die verschijnt bij scannen of verbinden
Wanneer je een ondersteunde USB-seriële node aansluit, hoort Android MeshCLI NG aan te bieden als app voor dat USB-apparaat. Gebeurt dat niet, installeer dan de nieuwste APK, trek de node los en sluit hem opnieuw aan, en controleer of de kabel echt data/OTG ondersteunt.
Heeft je telefoon geen OTG of werkt de kabel alleen voor laden, gebruik dan BLE of TCP.
- Flutter SDK versie 3.24 of hoger
- Android: Android SDK + een aangesloten telefoon of emulator
- Linux:
libserialport(sudo apt install libserialport-dev) - Windows: Visual Studio met Desktop development with C++
# Afhankelijkheden installeren
flutter pub get
# Android
flutter run -d android
# Linux desktop
flutter run -d linux
# Windows desktop
flutter run -d windowsVerbindt met een companion-radio (het apparaat dat je bij je draagt) via BLE, USB of TCP.
Stappen:
- Kies het transporttabblad: USB, BLE of TCP
- Druk op Scan om beschikbare apparaten te zoeken
- Selecteer je apparaat uit de lijst → de app verbindt automatisch
- Typ een commando in het invoerveld en druk op Send of Enter
Bij het verbinden vraagt de app automatisch de apparaatinfo op en toont:
Connected! Device: MijnNode version 1.0.0-80abfbb freq: 869.6180 MHz
Beschikbare commando's (type help voor de volledige lijst):
| Commando | Omschrijving |
|---|---|
info |
Apparaatnaam, firmware-versie, radio-instellingen, batterij |
ver |
Alleen firmware-versie |
nodes |
Lijst van bekende contacten / buren |
clock |
Apparaattijd |
bat |
Batterijspanning en opslagruimte |
stats [core|radio|packets] |
Statistieken |
reboot |
Apparaat herstarten |
get <param> |
Instelling opvragen (zie tabel) |
set <param> <waarde> |
Instelling wijzigen (zie tabel) |
get / set parameters:
| Parameter | Omschrijving | Voorbeeld |
|---|---|---|
name |
Naam van het knooppunt | set name MijnRepeater |
freq |
Radiofrequentie (MHz) | set freq 869.5 |
bw |
Bandbreedte (kHz) | set bw 250 |
sf |
Spreading factor | set sf 10 |
cr |
Coderingsverhouding | set cr 5 |
tx |
Zendvermogen (dBm) | set tx 20 |
repeat |
Pakketdoorschakeling aan/uit | set repeat on |
public.key |
Publieke sleutel van het knooppunt | (alleen lezen) |
firmware |
Firmware-versie | (alleen lezen) |
battery |
Batterijspanning | (alleen lezen) |
time |
Apparaatklok | (via clock) |
Stuurt CLI-commando's naar een verre repeater via het mesh-netwerk, doorgegeven door je companion-radio.
Stappen:
- Klik op het tabblad Remote
- Verbind eerst je companion-radio (zie hierboven)
- Plak de publieke sleutel van de verre repeater in het sleutelveld (of de eerste paar hex-bytes als prefix)
- Typ een firmware-CLI-commando en druk op Send
Het commando wordt via het mesh afgeleverd en de reactie verschijnt in de console.
Type help voor de volledige lijst van ondersteunde remote-commando's.
Verbindt rechtstreeks met een repeater via USB-serieel, zonder tussenkomst van een companion-radio.
Dit is gelijkwaardig aan meshcore-cli -r -s /dev/ttyACM0.
Stappen:
- Klik op het tabblad -r Serial
- Druk op Scan om de beschikbare seriële poorten te zoeken
- Selecteer de poort van je repeater
- De app verbindt, vraagt de apparaatnaam en firmware-versie op, en toont:
INFO:meshcore:Connecting to repeater at /dev/ttyACM0 (115200 baud)...
Connected! Device: GWNL-Bridge-Bovenkarspel version 1.0.0-80abfbb (Build: 17-May-2026)
Type help for commands, quit to exit, Tab for completion
--------------------------------------------------
GWNL-Bridge-Bovenkarspel> get freq
-> > 869.6179809
GWNL-Bridge-Bovenkarspel> set repeat on
-> > OK
Elk commando dat je typt wordt weergegeven met de apparaatnaam als prompt.
Echo-regels en lege prompts van het apparaat worden automatisch weggefilterd.
Type help om alle beschikbare firmware-commando's te zien.
clock sync is een speciaal commando dat de huidige pc-tijd naar het apparaat stuurt.
Belangrijkste firmware-commando's (serieel):
| Categorie | Commando's |
|---|---|
| Info | ver · board · clock · clock sync |
| Radio | get radio → freq, bw, sf, cr · set freq <MHz> · set bw <kHz> · set sf <n> · set cr <n> · set tx <dBm> |
| Netwerk | advert · advert.zerohop · discover.neighbors · neighbors |
| Statistieken | stats-core · stats-radio · stats-packets · clear stats |
| Logging | log start · log stop · log · log erase |
| Sensoren | sensor get <sleutel> · sensor set <sleutel> <waarde> · sensor list |
| GPS | gps · gps on|off · gps sync · gps setloc · gps advert |
| Regio's | region · region list · region get/put/remove · … |
| Energie | powersaving on|off · reboot · poweroff · start ota |
| Toegang | get acl · setperm <pubkey> <rechten> · password <wachtwoord> |
| TCP-brug | get wifi.status → WiFi-status, IP-adres, RSSI, serververbinding |
Let op:
get radiogeeftfreq,bw,sf,crterug als één kommagescheiden waarde. De firmware heeft geen afzonderlijkeget sf,get bwofget crcommando's — gebruikset sf <n>e.d. om ze individueel aan te passen.
Zodra je verbonden bent verschijnt de knop Config in de werkbalk. Klik erop — of typ config in het invoerveld — om een interactief paneel te openen dat:
- Alle instelbare parameters ophaalt van het apparaat (gegroepeerd per categorie)
- De huidige waarden toont in bewerkbare tekstvelden en keuzelijsten
- Elk veld dat je wijzigt oranje markeert
- Bij Apply changes alleen de gewijzigde
set-commando's naar het apparaat stuurt en ✓ of ✗ per parameter laat zien - WiFi- en brug-instellingen herkent die een herstart vereisen: na het toepassen verschijnt een waarschuwingsbanner met een knop Reboot now
Parametergroepen in het configuratiepaneel:
| Sectie | Parameters |
|---|---|
| Identity | name · owner.info · lat · lon |
| Radio | freq · bw · sf · cr · tx · af · repeat · dutycycle · radio.rxgain |
| Advertising | advert.interval · flood.advert.interval |
| Flood / Routing | flood.max · flood.advert.base · flood.relay.prob · flood.dynamic.enable · path.hash.mode · loop.detect · multi.acks · int.thresh · rxdelay · txdelay · direct.txdelay · agc.reset.interval |
| Access | guest.password · allow.read.only |
| TCP Bridge | bridge.enabled · wifi.ssid · wifi.password · bridge.server · bridge.port · bridge.delay |
| ESPNow Bridge | bridge.source · bridge.baud · bridge.channel · bridge.secret |
Het wifi-wachtwoordveld is alleen schrijven (wordt nooit van het apparaat opgehaald). Laat het leeg om het huidige wachtwoord ongewijzigd te laten.
Alle TCP Bridge- en ESPNow Bridge-instellingen vereisen een herstart van het apparaat voordat ze actief worden.
| Kleur | Betekenis |
|---|---|
| Oranje | Commando dat jij hebt verstuurd (TX) |
| Groen | Reactie van het apparaat (RX) |
| Blauwgrijs | Info / statusberichten |
| Rood | Fout |
lib/
├── core/
│ ├── commands/ # Getypeerde command-builders (MeshCommands)
│ ├── models/ # Verbindingsstatus, MeshNode
│ ├── packets/ # Pakkettype-enums en event-modellen
│ ├── parser/ # Binaire frame-parsers
│ ├── protocol/ # Seriële framingconstanten
│ ├── session/ # Commandowachtrij, response-matching, toestandsstreams
│ └── transport/ # BLE, USB-serieel, desktop-serieel, TCP-transporten
├── features/
│ └── console/ # Hoofdconsolescherm + configuratiepaneel
├── shared/ # Riverpod-providers
└── widgets/ # App-schil, verbindingspil, sectiepaneel
Zie ARCHITECTURE.md voor een diepere technische uitleg.
Zie protocol_audit.md voor de seriële/BLE-framingdetails.
De app vindt mijn USB-apparaat niet (Android)
Android vraagt toestemming voor USB-host-toegang. Accepteer het dialoogvenster dat verschijnt. De telefoon en kabel moeten ook USB OTG / USB-host ondersteunen; een laadkabel werkt meestal niet. Als Android MeshCLI NG niet aanbiedt voor het USB-apparaat, installeer dan de nieuwste APK en sluit de node opnieuw aan. Verschijnt de node nog steeds niet, gebruik dan BLE/TCP.
De app vindt mijn seriële poort niet (Linux)
Voeg je gebruiker toe aan de groep dialout:
sudo usermod -a -G dialout $USERLog daarna opnieuw in.
clock sync stuurt de verkeerde tijd
De app gebruikt de systeemtijd van de pc/telefoon. Zorg dat die correct is ingesteld.
Hoe weet ik de publieke sleutel van een remote repeater?
Verbind eerst in Companion-modus en typ nodes — de lijst toont alle bekende knooppunten met hun publieke sleutel (of prefix).
De Config-knop is niet zichtbaar
De Config-knop verschijnt alleen in de -r Serial-modus nadat je verbonden bent met een repeater.
WiFi-instellingen werken niet direct na het opslaan
WiFi- en brugconfiguratie wordt pas actief na een herstart van het apparaat. Het configuratiepaneel laat dit weten en biedt de knop Reboot now aan.
- MeshCoreNG firmware: https://github.com/meshcore-dev/MeshCoreNG
- meshcore-cli (Python): https://github.com/meshcore-dev/meshcore-cli
- MeshCore protocol Python-pakket:
meshcore(PyPI)