MeshCom App
Bedienungsanleitung
für iOS und Android · Stand: App 4.30, Firmware 4.40 a · Oktober 2026
Die MeshCom-App bedient MeshCom-Nodes per Bluetooth: Nachrichten, Konfiguration, Messwerte und Karte. Autor der App: OE1KFR, Rainer.
1. Überblick
Die MeshCom-App für iOS und Android ist die Fernbedienung für einen MeshCom-Node. Sie verbindet sich per Bluetooth Low Energy (BLE) mit dem Node und dient zum Senden und Empfangen von Nachrichten, zum Konfigurieren des Nodes, zum Anzeigen von Messwerten und zum Darstellen der gehörten Stationen auf einer Karte. Das Telefon braucht für den Betrieb mit dem Node kein Internet; nur die Kartenkacheln im Map-Tab werden online geladen.
Dieses Handbuch beschreibt den Stand App 4.30 zusammen mit der Firmware 4.40 a. Mit älterer Firmware läuft die App weiter, einzelne Einstellungen fehlen dann (siehe Kapitel 11).
1.1 Die sechs Tabs
Am unteren Rand der App liegt die Tab-Leiste mit sechs Symbolen, von links nach rechts:
| Symbol | Tab (Seitentitel) | Wofür |
|---|---|---|
| Bluetooth | Devices | Nodes in Reichweite suchen, verbinden, trennen. Auto Reconnect, BLE-PIN je Node (Kapitel 3). |
| Zahnrad | Node Settings | Den verbundenen Node konfigurieren (Kapitel 4). |
| Kreis mit i | Info | Akku, GPS, Sensorwerte, Firmware-Version, App-Log (Kapitel 5). |
| Sprechblase | Chat | Nachrichten lesen und schreiben (Kapitel 6). Ein grüner Punkt am Symbol zeigt ungelesene Nachrichten. |
| Globus | Node Map | Karte mit den empfangenen Nodes (Kapitel 7). |
| Pfeilsymbol | Heard Nodes | Liste der direkt per Funk gehörten Stationen mit Empfangswerten (Kapitel 8). |
1.2 Bedienkonventionen
- Grüner Haken-Button (Kreis mit Haken): Der eingegebene Wert wird an den Node gesendet und dort gespeichert.
- RST: Setzt die Einstellung am Node auf den Standardwert zurück (z. B. Passwort oder Kommentar löschen).
- Ausklappbare Bereiche: In den Settings sind die meisten Einstellungen in Bereiche gefaltet. Ein Tipp auf die Überschrift klappt den Bereich auf oder zu (Pfeil rechts).
- Gefüllte und umrandete Buttons: Ein gefüllter Button bedeutet „aktiv/an“, ein umrandeter „inaktiv/aus“ (Ausnahme DISPLAY, siehe 4.10).
- Rückmeldung vom Node: Ein Tipp auf einen Schalter sendet nur den Befehl. Der Zustand des Buttons ändert sich erst, wenn der Node den Befehl verarbeitet und bestätigt hat. Das kann einige Sekunden dauern.
- Design: Die App folgt dem System-Design des Telefons (hell oder dunkel).
2. Installation und Berechtigungen
Die App gibt es im Apple App Store und im Google Play Store. Die aktuelle Anleitung zum Download steht auf der Projektseite unter https://icssw.org/meshcom-app/ . Firmware, Flashen und OTA-Update sind auf den Projektseiten beschrieben (https://icssw.org/meshcom-ota-update/).
2.1 Berechtigungen
Beim ersten Start fragt die App folgende Berechtigungen ab. Ohne die ersten beiden ist kein Verbinden möglich.
| Berechtigung | Wozu | Plattform |
|---|---|---|
| Bluetooth | Nodes suchen und verbinden. | iOS: „Bluetooth“. Android 12 und neuer: „Geräte in der Nähe“ (Scan und Verbinden). |
| Standort | Position des Telefons als Position des Nodes setzen („Set Location - Phone GPS“). Auf Android vor Version 12 braucht außerdem der Bluetooth-Scan die Standortfreigabe. | iOS und Android |
| Benachrichtigungen | Meldung und Ton bei einer neuen Nachricht, auch wenn die App im Hintergrund läuft. | iOS und Android |
3. Devices-Tab: Verbinden
Der Devices-Tab ist der Startbildschirm. Die App scannt dauernd nach Nodes in Reichweite und zeigt jeden gefundenen Node als Karte an.
3.1 Die Kopfkarte
Die Kopfkarte „Nearby Nodes“ zeigt in der zweiten Zeile den Zustand an und trägt zwei Schalter:
| Anzeige | Bedeutung |
|---|---|
| Scanning, tap to connect | Der Scan läuft. Ein Tipp auf eine Karte verbindet. |
| Connecting... | Die Verbindung wird aufgebaut. |
| Tap the node to disconnect | Verbunden. Ein Tipp auf die Karte trennt wieder. |
| Searching for the lost node... / Signal too weak, move closer to the node | Auto Reconnect arbeitet (siehe 3.5). |
| Scan paused | Der Scan ist angehalten (zum Beispiel, wenn Bluetooth am Telefon ausgeschaltet ist). |
| Schalter | Wirkung |
|---|---|
| MeshCom only | An: Es werden nur Geräte angezeigt, deren Bluetooth-Name mit „MC-“ beginnt. Aus: Alle BLE-Geräte in der Nähe erscheinen. |
| Auto reconnect | An: Bei verlorener Verbindung sucht die App den Node selbständig und verbindet neu (siehe 3.5). Die Einstellung bleibt gespeichert. |
3.2 Die Node-Karten
Jede Karte zeigt:
- links ein Zustandssymbol: rotes Kreuz = nicht verbunden, Drehsymbol = Verbindung wird aufgebaut, grüner Haken = verbunden;
- den Namen des Nodes: klein die Kennung vor dem Rufzeichen (zum Beispiel „MC-1c24“), groß und fett das Rufzeichen. Der Name wird direkt aus der Bluetooth-Aussendung und den MeshCom-Herstellerdaten gelesen;
- rechts die Empfangsstärke (RSSI in dBm) mit vier Signalbalken. Während der Verbindung steht dort „Connecting“ beziehungsweise „Connected“;
- das Schlüsselsymbol für die BLE-PIN dieses Nodes (siehe 3.4).
| Balken | RSSI | Bewertung |
|---|---|---|
| 4 | -70 dBm oder besser | sehr gut |
| 3 | -71 bis -80 dBm | gut |
| 2 | -81 bis -90 dBm | ok |
| 1 (orange) | -91 bis -110 dBm | schwach |
| 1 (rot) | schlechter als -110 dBm | sehr schwach, Verbinden wird unsicher |
3.3 Verbinden und Trennen
Tipp auf die Karte des gewünschten Nodes. Während des Verbindens und solange die Verbindung steht, zeigt die Liste nur diese eine Karte. Ein weiterer Tipp auf die Karte trennt die Verbindung wieder; erst dann erscheinen die anderen Nodes wieder.
Nach dem Verbinden passiert Folgendes:
- Die App sendet dem Node ein „Hello“ (mit der BLE-PIN, falls hinterlegt).
- Der Node schickt seine Konfiguration. Ein Fenster „Loading Config from node. Please wait...“ zeigt den Fortschritt.
- Danach wechselt die App automatisch in den Chat-Tab. Gespeicherte Nachrichten und die Liste der gehörten Stationen kommen vom Node.
- Alle 20 Sekunden schickt die App die Uhrzeit des Telefons an den Node (Zeitsynchronisation).
3.4 BLE-PIN je Node
Jeder Node kann mit einer sechsstelligen PIN gegen unbefugtes Verbinden geschützt werden. Standard ist 000000 (kein Schutz). Die App merkt sich die PIN je Node auf dem Telefon.
Das Schlüsselsymbol auf der Node-Karte öffnet das PIN-Fenster:
- Current PIN: die auf dem Telefon für diesen Node gespeicherte PIN, oder „No PIN set — open connection.“
- New PIN (6 digits) und Save PIN: speichert die PIN auf dem Telefon.
- Clear PIN: löscht die gespeicherte PIN auf dem Telefon.
Sammelfunktion: Settings → Advanced Settings → Clear All BLE PINs löscht die gespeicherten PINs aller Nodes auf dem Telefon.
3.5 Auto Reconnect
Reißt die Bluetooth-Verbindung ab (Telefon außer Reichweite, Node neu gestartet, Funkstörung), zeigt die App nicht nur eine Meldung, sondern sucht den Node selbständig und verbindet sich neu. Voraussetzung ist der Schalter Auto reconnect im Devices-Tab.
Ablauf
- Bei einem unerwarteten Verbindungsverlust startet ein Zyklus. Oben in der App erscheint das Banner „Auto reconnect“ mit dem Fortschritt und dem Button Cancel. Es erscheint in jedem Tab.
- Der Zyklus sucht zuerst. Verbunden wird nur, wenn der Node vor kurzem (innerhalb von 10 Sekunden) gehört wurde, der geglättete Empfang mindestens -90 dBm erreicht, in 8 Sekunden mindestens 2 Aussendungen des Nodes ankamen, er mindestens 3 Sekunden lang gehört wurde und zwei Messungen hintereinander gut waren. Damit verhindert die App Verbindungen, die gleich wieder abreißen würden.
- Sind die Bedingungen erfüllt, verbindet die App still im Hintergrund (bis zu 3 Versuche mit wachsender Wartezeit). Nach dem Verbinden lädt sie die Konfiguration wie bei einer normalen Verbindung.
- Der Zyklus sucht insgesamt höchstens 60 Sekunden. Ist der Node dann nicht gefunden oder nicht zu verbinden, endet er mit einer Meldung.
Meldungen im Banner
| Text | Bedeutung |
|---|---|
| Searching for the node... It is not in range yet. | Der Node ist noch nicht zu hören. |
| Node found (-xx dBm). Checking that the signal is stable... | Node gehört, die App prüft kurz die Stabilität. |
| Link quality too low (-xx dBm). The node was heard only n times in 8 s, 2 needed. Move closer to the node. | Die Signalstärke reicht, aber der Node wird nur selten gehört. Näher heran gehen. Bis dahin wird nicht verbunden. |
| Signal too weak (-xx dBm, -90 dBm or better needed). Move closer to the node. | Empfang zu schwach. Näher heran gehen. |
| Reconnecting... (attempt n/3) | Verbindung wird aufgebaut. |
Wenn der Zyklus ohne Verbindung endet
Die App zeigt dann den Hinweis „BLE Disconnect“ mit dem Grund:
| Meldung | Grund / was tun |
|---|---|
| Node not in range. Move closer and reconnect manually. | Der Node wurde in 60 Sekunden nicht gehört. |
| Signal too weak ... The reconnect was not tried | Empfang unter -90 dBm. |
| Link quality too low ...: the node was heard only rarely. | Node wird nur selten gehört. |
| The connection keeps dropping. Check the signal strength of the node. | Die Verbindung riss dreimal innerhalb von zwei Minuten kurz nach dem Wiederverbinden ab. Die App gibt auf, um nicht endlos zu springen. |
| Reconnect failed: the connection could not be established ... | Alle Verbindungsversuche schlugen fehl, meist wegen schlechter Verbindungsqualität. |
Wann es keinen Auto Reconnect gibt
- Die Verbindung wurde von Hand getrennt (Tipp auf die verbundene Karte).
- Der Node wurde über die App in den Deep Sleep geschickt oder in den OTA-Update-Modus (die OTA-Firmware hat kein Bluetooth). Das Trennen ist dann erwartet, die App zeigt nur die normale Trennmeldung.
- Der Schalter Auto reconnect ist aus.
- Ein Tipp auf eine Karte oder ein Tipp auf Cancel beendet einen laufenden Zyklus sofort.
App im Hintergrund und Neustart der App
- Verlust im Hintergrund: Scan und App-Logik sind im Hintergrund nicht zuverlässig. Der Zyklus startet, sobald die App wieder im Vordergrund ist.
- Kaltstart: Beendet das Betriebssystem die App im Hintergrund (iOS nach Stunden, Android je nach Gerät nach etwa einer Stunde bei gesperrtem Telefon) und bestand die Verbindung, ohne dass sie von Hand getrennt wurde, dann verbindet die App beim nächsten Start den zuletzt verbundenen Node wieder. Dazu wechselt sie in den Devices-Tab.
3.6 Laden der Konfiguration überwachen
Nach dem Verbinden überwacht die App, ob alle Konfigurationsdaten ankommen. Kommen 10 Sekunden lang keine Daten mehr, fordert sie die fehlenden Teile automatisch erneut an. Dabei zeigt ein Fenster „Loading Config“ den Fortschritt (zum Beispiel „7 / 14 received“) und den Versuch („attempt n/m“). Kommt gar nichts an, sendet die App das Hello noch einmal. Mit Cancel bricht man das Nachladen ab. Am Ende steht „Config loaded completely.“
3.7 Verbindung verloren, Fehlermeldungen
| Meldung | Ursache / Abhilfe |
|---|---|
| BLE Disconnect – Node disconnected! Check the BLE Pin and reconnect to Node! | Verbindung abgerissen oder falsche PIN. PIN prüfen (3.4), neu verbinden. |
| Error Pairing! Remove Node from BLE Devices after Erase/Flash | Das Telefon hat noch einen alten Kopplungseintrag, zum Beispiel nach neuem Flashen. In den Bluetooth-Einstellungen des Telefons den Node entfernen („Vergessen“) und neu verbinden. |
| Error Connection! Remove Node from BLE Devices after Erase/Flash | Zeitüberschreitung bei einem Node mit Werkseinstellung. Gleiche Abhilfe. |
| Error on Setting up connection! Remove node from BLE Devices and pair newly! | Das Hello konnte nicht gesendet werden. Node am Telefon entfernen und neu koppeln. |
| Error on Connecting to Node! Please reconnect to Node! | Verbindung kam zustande, aber die Benachrichtigungen ließen sich nicht starten. Neu verbinden. |
4. Settings-Tab: Den Node konfigurieren
Der Tab „Node Settings“ zeigt die Einstellungen des verbundenen Nodes und erlaubt, sie zu ändern. Er ist nur sinnvoll, wenn ein Node verbunden ist. Dieses Kapitel folgt der Reihenfolge, in der die Einstellungen in der App stehen. Zu jeder Einstellung steht auch der zugehörige Firmware-Befehl, damit man sie in der Firmware-Dokumentation oder per Manual Command (4.18) wiederfindet.
4.1 Kopf und Anzeigekarten
Ganz oben stehen das Rufzeichen des Nodes sowie die Sendefrequenz (QRG, in MHz) und die Sendeleistung (TX Pwr, in dBm). Darunter folgen reine Anzeigekarten:
- APRS: Symbol ID, Symbol, Comment und Name (Comment und Name nur, wenn gesetzt).
- Call Groups: die abonnierten Gruppen (nur belegte Plätze).
- WiFi (beziehungsweise Ethernet beim RAK4631): SSID, IP, Gateway, Subnetzmaske, DNS und gegebenenfalls NTP des Nodes.
4.2 Callsign
Eingabefeld „Set Node Callsign“, zum Beispiel OE1KFR-1. Die App wandelt in Großbuchstaben um, entfernt eine führende Null der SSID (OE1KFR-02 wird OE1KFR-2) und prüft das Format (Rufzeichen, Bindestrich, SSID 0–99, höchstens 11 Zeichen). Mit dem Haken wird es gesendet.
Firmware-Befehl: --setcall.
4.3 WiFi Settings
SSID (höchstens 33 Zeichen) und Passwort (höchstens 64 Zeichen) des WLANs, mit dem sich der Node verbinden soll. Das Auge-Symbol blendet das Passwort ein oder aus. Haken: speichern, der Node bootet nach etwa 15 Sekunden neu. RST löscht SSID und Passwort („Wifi Settings reset to none“).
Firmware-Befehle: --setssid, --setpwd.
4.4 APRS Settings
Aufklappbarer Bereich mit drei Karten, die bestimmen, wie der Node in der Map, im Dashboard und auf aprs.fi erscheint.
| Karte | Funktion | Befehl |
|---|---|---|
| APRS Symbol | Kartensymbol. Entweder ein Preset aus der Liste „APRS Map Symbol Preset“ oder von Hand: „Group Character“ (Symboltabelle) und „Character“ (Symbolzeichen), je ein Zeichen. | --symid, --symcd |
| APRS Comment | Kurzbeschreibung des Nodes, höchstens 15 Zeichen. RST löscht den Kommentar. | --aprscomment (--atxt) |
| APRS Name | Vorname des Betreibers, höchstens 15 Zeichen. RST löscht den Namen. | --setname |
4.5 Custom BLE PIN 6 Digits
Setzt die sechsstellige Bluetooth-PIN des Nodes (nur Ziffern, 100000 bis 999999). Haken: PIN im Node setzen und auf dem Telefon speichern. RST setzt die PIN im Node zurück auf 000000 und löscht den Eintrag auf dem Telefon. Zur Funktionsweise siehe 3.4.
Firmware-Befehl: --btcode.
4.6 Set Location - Phone GPS und Manual Location
- Set Location - Phone GPS (Button): Die App liest die GPS-Position des Telefons und setzt sie als feste Position des Nodes. Gedacht für Nodes ohne eigenes GPS.
- Manual Location (ausklappbar): Breite (Latitude), Länge (Longitude) und Höhe (Altitude, in Metern) von Hand eintippen. Haken: senden.
Firmware-Befehle: --setlat, --setlon, --setalt. Hat der Node ein eingeschaltetes GPS-Modul, liefert dieses die Position.
4.7 Node Time Zone
Hier stellt man ein, wie der Node von UTC auf Ortszeit umrechnet. Diese Zeit zeigt der Node auf seinem Display.
| Feld | Bedeutung |
|---|---|
| Time Zone Preset | Auswahlliste mit Zeitzonen, zum Beispiel „Europe - Vienna“ (gilt auch für Berlin, Zürich, Rom), London, Athen, Moskau, New York, Tokio, Sydney (vollständige Liste in Anhang C). Wählt man ein Preset, füllt die App die Regel ein. |
| Set Time Zone | Eigene POSIX-Regel, zum Beispiel CET-1CEST,M3.5.0,M10.5.0/3. Die Sommer-/Winterzeit schaltet der Node damit automatisch um. Keine Leerzeichen, höchstens 39 Zeichen, nur M-Regeln. |
| Set UTC Offset | Fester Versatz zu UTC in Stunden, zum Beispiel 1 oder -5.5. Das schaltet die automatische Umstellung ab; im Sommer muss man den Wert dann selbst ändern. |
Unter den Feldern zeigt die App „Automatic time change active ...“ (Regel aktiv) oder „Fixed offset, no automatic time change.“ RST setzt den Versatz auf 0 und entfernt die Regel.
Firmware-Befehle: --settz, --utcoff. Ein fester Versatz löscht die Regel. Mit älterer Firmware gibt es nur den festen Versatz.
4.8 Country Setting
Die Länderauswahl legt die Funkparameter des LoRa-Moduls fest (Frequenz, Bandbreite, Spreizfaktor ...) passend zu den örtlichen Regeln. Die Frequenz steht in der Liste neben dem Kürzel. Auswahl treffen und Haken tippen; der Node setzt die Parameter. Alle Nodes, die miteinander funken sollen, müssen dieselbe Einstellung haben.
| Kürzel | Frequenz |
|---|---|
| EU8 | 433,175 MHz |
| EA | 433,175 MHz |
| UK / UK8 | 439,9125 MHz |
| LA | 433,925 MHz |
| PL | 434,855 MHz |
| US | 433,175 MHz |
| VR2 | 435,775 MHz |
| 868 | 869,525 MHz |
| 915 | 906,875 MHz |
Firmware-Befehl: --setctry.
4.9 Group Subscription
Bis zu 6 Gruppennummern (je 1 bis 5 Stellen), die der Node abonniert. Die Information geht an das nächste Gateway, und Nachrichten an diese Gruppen werden zugestellt. Haken: speichern. RST (Reset Groups) setzt alle Gruppen auf 0 (keine Gruppe). Jede belegte Gruppe erhält im Chat-Tab einen eigenen Chat (Kapitel 6). Siehe auch https://icssw.org/grc-gruppen-call/.
Firmware-Befehl: --setgrc.
4.10 User Buttons
Über die Buttons schickt man Schaltbefehle an den Node. Gefüllt = aktiv. Der Zustand wird nach der Rückmeldung des Nodes aktualisiert.
Allgemein
| Button | Funktion | Befehl |
|---|---|---|
| GATEWAY | Node arbeitet als Gateway zwischen Funknetz und MeshCom-Server (Internet oder HAMNET). Nachrichten werden zum Server weitergeleitet und umgekehrt. Server siehe 4.12. | --gateway on/off |
| DISPLAY | Display des Nodes ein/aus. Ausnahme: hier bedeutet „gefüllt“, dass das Display an ist. | --display |
| RX Gain Boost | Verstärkter Empfang. Nur ESP32-Nodes mit SX1262-LoRa-Chip. | --setboostedgain |
| Webserver | Web-Oberfläche des Nodes ein/aus. Braucht eine gültige WLAN-SSID mit Passwort (Meldung „Wifi Settings not set!“ sonst). Beim RAK4631 ohne diese Prüfung. | --webserver on/off |
| MESH | An: Der Node leitet empfangene fremde Nachrichten per Funk weiter (Relais). Aus: Er hört nur und sendet eigene Nachrichten. | --mesh on/off |
| No ALL Msgs | Blendet Nachrichten an „*“ beziehungsweise „ALL“ aus (auf dem Node und im Telefon). | --nomsgall on/off |
| BUTTON | Schaltet die Auswertung einer angeschlossenen Benutzertaste ein/aus (Pin siehe 4.14). Mit ihr blättert man am Display durch die empfangenen Nachrichten. | --button on/off |
| Wifi AP | Der Node spannt ein eigenes WLAN (Access Point) auf, wenn kein Router verfügbar ist. Nicht möglich, solange der Node Gateway ist („Gateway Mode active!“). | --wifiap on/off |
GPS - Position
| Button | Funktion | Befehl |
|---|---|---|
| GPS | Optionales GPS-Modul ein/aus. Bei GPS „OFF“ zeigt der Info-Tab keine Satelliten und kein HDOP. | --gps on/off |
| TRACK | Track-Funktion (SmartBeaconing): Der Node sendet seine Position nach Bewegung als LoRa-APRS-Meldung auf 433,775 MHz. | --track on/off |
| Send POS | Sendet die Position einmal. Verhalten siehe unten. Zwischen zwei Aufrufen müssen mindestens 10 Sekunden liegen. | --sendpos, --sendtrack |
| POS-Info | Fordert die aktuellen Positionsdaten vom Node an. Sie erscheinen im Info-Tab. | --pos |
Send POS richtet sich nach dem TRACK-Zustand:
- TRACK aus: Der Node sendet eine MeshCom-Position.
- TRACK an, GPS-Fix vorhanden: Der Node sendet die Position per LoRa-APRS (und zusätzlich per MeshCom, wenn eine Weile kein MeshCom-Paket empfangen wurde). Die App meldet „LoRa-APRS Position TX triggered!“.
- TRACK an, aber kein GPS-Fix: Die Frage „No GPS fix – Which position should be sent?“ erscheint. Es gibt „Manual LoRa-APRS POS“ (gespeicherte Position per LoRa-APRS) oder „Manual MeshCom POS“.
Utilities
| Button | Funktion | Befehl |
|---|---|---|
| Scan I2C | Der Node sucht am I2C-Bus nach angeschlossenen Geräten (Sensoren, Display). Das Ergebnis zeigt die App nicht an, es erscheint auf der Konsole des Nodes. Der Button steht auch bei den Sensor Settings. | --showi2c |
| OTA Update | Der Node startet im Update-Modus neu (Rückfrage „Boot into OTA Mode now?“). Nur ESP32-basierte Nodes; auf RAK4631, T-Echo und Heltec T114 erscheint „Wifi OTA Update not supported!“. Siehe unten. | --ota-update |
| REBOOT | Startet den Node neu (mit Rückfrage). | --reboot now |
| Deep Sleep | Schickt den Node in den Tiefschlaf (mit Rückfrage). Die Verbindung wird getrennt; die App verbindet nicht automatisch neu. Aufwecken am Node (Taste oder Reset). | --deepsleep |
RUFZEICHEN.local oder die IP-Adresse des Nodes (steht im Settings-Kopf). Ohne WLAN-Zugang spannt er einen eigenen Access Point auf: Adresse 192.168.4.1 oder Meshcom-OTA.local. Dort lädt man die neue Firmware (.bin) hoch. Die OTA-Firmware hat kein Bluetooth. Ausführliche Anleitung: https://icssw.org/meshcom-ota-update/KISS Interface (nur mit neuer Firmware)
Vier Buttons steuern die KISS/TCP-Schnittstelle des Nodes (Port 8001), mit der sich externe Programme anbinden lassen:
| Button | Funktion | Befehl |
|---|---|---|
| KISS | KISS/TCP-Port ein/aus. | --kiss on/off |
| TX | Über KISS darf gesendet werden. | --kiss tx on/off |
| RxMeta | KISS liefert zusätzlich Metadaten-Frames (RSSI, SNR ...). | --kiss meta on/off |
| Auth | KISS verlangt eine Anmeldung. Verwendet das Passwort der Remote Netconsole (4.17). Die App weist darauf hin. | --kiss auth on/off |
4.11 TX-Power
Schieberegler für die Sendeleistung in dBm. Darunter steht die Leistung in mW und in Prozent des Maximums. Das Maximum hängt von der Hardware ab (meist 17 bis 22 dBm). Bei E22-Nodes zeigt die App nur die Leistung des SX1262; die tatsächliche Leistung hängt vom nachgeschalteten Verstärker im E22 ab (bis 30 beziehungsweise 33 dBm).
Firmware-Befehl: --txpower.
4.12 Gateway Server
Wählt den MeshCom-Server, mit dem ein Node im Gateway-Betrieb verbunden ist. Auswahl treffen und Haken tippen; der Node startet neu.
| Auswahl | Server für |
|---|---|
| Austria-OE | Österreich |
| Germany-DL | Deutschland (Internet) |
| Germany Hamnet-HC | Deutschland (HAMNET) |
| Italy-IT | Italien |
| Switzerland-HB | Schweiz |
| Poland-SP | Polen |
Firmware-Befehl: --gateway srv.
4.13 Max Hop (nur mit neuer Firmware)
Begrenzt, über wie viele Stationen (Hops) eine Textnachricht vom eigenen Node aus weitergereicht wird. Auswahl 2, 3 oder 4; Haken tippt zum Speichern. Ein kleinerer Wert entlastet das Netz.
Firmware-Befehl: --maxhop.
4.14 Hardware Pins
- Userbutton Pin: GPIO-Nummer für den Anschluss einer Taste (siehe BUTTON in 4.10).
- OneWire Pin: GPIO-Nummer für den optionalen OneWire-Temperatursensor. Der Wert erscheint im Info-Tab als „TOUT“.
Firmware-Befehle: --button gpio, --onewire gpio.
4.15 Sensor Settings
Sensoren am I2C-Bus oder OneWire ein- und ausschalten. Gefüllt = aktiv. Ist ein Sensor eingeschaltet, aber am Bus nicht gefunden worden, färbt sich sein Button rot.
| Button | Sensor | Befehl |
|---|---|---|
| BME280 / BMP280 / BMP390 | Temperatur, Luftdruck (BME280 auch Feuchte) | --bme, --bmp, --390 |
| BME680 | Temperatur, Feuchte, Druck, Gaswiderstand | --680 |
| AHT-20 / SHT21 | Temperatur und Feuchte | --aht20, --sht21 |
| MCU-811 | Gassensor (eCO2) | --811 |
| One Wire | OneWire-Temperatursensor (Pin siehe 4.14) | --onewire |
| LPS33 | Wetterdaten-Board am RAK4631 | --lps33 |
| Sensor Info | Fordert die Sensorwerte an, sie erscheinen im Info-Tab | --wx |
| Scan I2C | Siehe 4.10 (Utilities) | --showi2c |
Temperature Offset
Korrekturwert in Grad für die Temperatur der I2C-Sensoren (BME/BMP Offset) und des OneWire-Sensors (Onewire Offset), zum Beispiel -1.5, wenn der Node durch Abwärme zu warm misst. Befehl: --tempoff.
INA226 (nur wenn der Node die Funktion meldet)
Der INA226 misst Spannung und Strom, zum Beispiel an der Solaranlage eines Standorts. Der Bereich zeigt, ob der Baustein am I2C-Bus gefunden wurde („INA226 found ... it is active“) – der Node erkennt ihn beim Start. Einstellbar:
| Feld | Bedeutung | Bereich |
|---|---|---|
| Shunt | Widerstand des Messwiderstands in Ohm | größer als 0,001 und kleiner als 0,5 |
| Max. current | Höchster zu messender Strom in Ampere | 0 bis 20 |
| Averaged samples | Mittelung. Die Auswahl 0 bis 7 entspricht 1, 4, 16, 64, 128, 256, 512 oder 1024 Messungen | 0–7 |
Befehle: --shunt, --imax, --isamp. Die Werte erscheinen im Info-Tab (VBUS, VSHUNT, VAMP, VPOW) und in der Map im Detailfenster („Current“).
4.16 Max. Battery Voltage (nur mit neuer Firmware)
Spannung, bei der der Akku als zu 100 % geladen gilt (3,7 bis 4,5 V). Der Bereich erscheint nur bei Nodes mit einzelliger Batterie (LiIon). Mit dem Wert berechnet der Node die Prozentanzeige. Die App akzeptiert auch ein Dezimalkomma. Befehl: --maxv.
4.17 Netzwerk: Fixed IP, IP MTU, Ext. UDP, Remote Netconsole, Manual Routing, Web-Passwort
Fixed IP Settings
Feste IP-Adresse statt DHCP: IP Address, Subnet Mask, Gateway, DNS und optional NTP (leer lassen, wenn nicht benötigt). Haken: speichern, Neustart nach etwa 15 Sekunden. RST stellt wieder DHCP ein. Befehle: --setownip, --setowngw, --setownms, --setowndns, --setownntp.
IP MTU (nur mit neuer Firmware)
Größe der IP-Pakete des Nodes. Auswahl: 1280 (HAMNET/VPN, Standard), 1400, 1500 (reines LAN). Bei Problemen über HAMNET oder VPN beim Standard bleiben. Befehl: --mtu.
Ext. UDP Interface
Der Node reicht die MeshCom-Daten per UDP an ein Gerät im Netzwerk weiter. Eintrag UDP Dest. Addr. (IP-Adresse des Ziels), Haken zum Speichern, und der Schalter Enable schaltet die Funktion ein oder aus. Befehle: --extudpip, --extudp on/off.
Remote Netconsole (nur mit neuer Firmware)
Die Konsole des Nodes ist über das Netzwerk auf Port 2323 erreichbar (zum Beispiel mit einem Terminalprogramm). Schalter Enable und ein Password (höchstens 14 Zeichen). Die App zeigt das Passwort nicht an, man kann es nur setzen oder mit RST löschen. Ohne Passwort ist die Konsole für jeden im Netz offen. Dasselbe Passwort verwendet die KISS-Anmeldung (siehe 4.10). Befehle: --netconsole, --passwd.
Manual Routing (VIA)
Lässt Nachrichten über einen bestimmten Node (Via-Rufzeichen) laufen. Destination Call eintragen (zum Beispiel OE1KFR-12), Haken tippen und den Schalter Enable setzen. RST löscht das Ziel. Mit älterer Firmware erscheint „Manual Route Settings not provided by node. Check FW Update or Re-Connect“. Befehl: --via.
Web UI Password
Passwort für die Web-Oberfläche des Nodes (höchstens 19 Zeichen). Das aktuelle Passwort zeigt die App im Klartext an. RST entfernt es. Befehl: --webpwd.
4.18 Manual Command
Ein beliebiger Node-Befehl von Hand, zum Beispiel --info. Er muss mit zwei Bindestrichen beginnen. Ersetzt die iOS-Tastatur die zwei Striche durch einen langen Strich, meldet die App das: „It starts with a long dash instead of two hyphens“. Länge höchstens 250 Byte. Haken: senden. Die Befehlsliste liefert der Befehl --help und die Firmware-Dokumentation.
--cleanflash löscht die Einstellungen des Nodes).4.19 Battery Display (nur mit neuer Firmware)
Legt fest, ob das Display des Nodes den Akku als Voltage (Spannung) oder Percent (Prozent) anzeigt. Befehle: --volt on, --proz on.
4.20 Advanced Settings
Vier rote Buttons löschen Daten auf dem Telefon. Es gibt keine Rückfrage.
| Button | Löscht |
|---|---|
| Clear received nodes | Alle empfangenen Node-Positionen in der Map. |
| Clear Text Msgs | Alle Nachrichten im Chat-Tab. |
| Clear Mheards | Alle Einträge im Heard-Nodes-Tab. |
| Clear All BLE PINs | Die gespeicherten BLE-PINs aller Nodes (siehe 3.4). |
5. Info-Tab
Der Info-Tab zeigt den Zustand des verbundenen Nodes. Solange der Tab sichtbar ist, fragt die App den Node reihum nach neuen Werten (alle 4 Sekunden eine Abfrage). Die Abfrage pausiert, wenn die App im Hintergrund ist, kein Node verbunden ist oder das Log-Fenster offen ist.
| Karte | Inhalt |
|---|---|
| Battery | Ladezustand in Prozent mit Balken (orange unter 30 %, rot unter 15 %), Spannung in Volt und die Hardware des Nodes (zum Beispiel „HELTEC V3“, „RAK4631“). |
| GPS | Rechts oben der Zustand: Fix, No Fix oder OFF (GPS ausgeschaltet; Satelliten und HDOP werden dann ausgeblendet). Dazu Latitude, Longitude, Altitude, Satellites, HDOP, Next POS (Zeit bis zur nächsten gesendeten Position, zum Beispiel „5m 20s“), UTC Offset sowie Date und Time in zwei Zeilen. |
| Sensors | Messwerte der eingeschalteten Sensoren: Temp, TOUT (OneWire), Humidity, Press, QNH, GasRes, eCO2, Alt Press und beim INA226 VBUS, VSHUNT, VAMP, VPOW. Werte, die der Node nicht liefert, werden ausgeblendet. Darunter zeigen Chips, welche Sensoren aktiv sind (BME280, BMP280, BMP390, BME680, MCU811, LPS, OneWire, AHT-20, INA226), und der OneWire Pin. |
| Firmware | Version (Firmware des Nodes), Build (Datum des Firmware-Builds) und die App Version. |
5.1 Das Log
Der Button Log am Ende der Seite öffnet das interne Protokoll der App. Es hilft bei der Fehlersuche (Verbindungsaufbau, Auto Reconnect, Scan-Diagnose). Im Fenster:
- Clear (links oben) löscht das Protokoll.
- Copy kopiert das ganze Protokoll in die Zwischenablage, ältester Eintrag zuerst, mit einer Kopfzeile aus App-Version, Plattform und Zeit. So lässt es sich in eine E-Mail einfügen.
- Close schließt das Fenster.
6. Chat-Tab
6.1 Die Chat-Liste
Der Chat-Tab beginnt mit einer Liste der Chats:
- To All Channel: Nachrichten an alle (Rundspruch, „*“ oder „ALL“).
- Direct Messages: persönliche Nachrichten an ein Rufzeichen.
- Group n: je ein Chat für jede im Node abonnierte Gruppe (siehe 4.9). Er erscheint nur, wenn die Gruppe belegt ist.
Jeder Eintrag zeigt die letzte Nachricht als Vorschau („RUFZEICHEN: Text“), bei ungelesenen Nachrichten einen grünen Umschlag und eine Zähler-Marke. Rechts stehen zwei Symbole:
- Trichter: öffnet die Filter dieses Chats (6.5). Ist ein Filter aktiv, ist der Trichter orange.
- Lautsprecher: schaltet Ton und Benachrichtigungston für diesen Chat an oder aus (durchgestrichen = still). Eine Benachrichtigung ohne Ton kommt trotzdem.
Ein Tipp auf den Eintrag öffnet den Chat. Oben links führt der Pfeil zurück zur Liste. Das geht auch mit der Zurück-Geste: unter iOS vom linken Rand wischen, unter Android die Zurück-Taste.
6.2 Nachrichten lesen
Eine Nachricht zeigt Uhrzeit und, wenn sie über andere Stationen lief, „· via RUFZEICHEN“, darunter den Absender und den Text. Links im Text erkennt die App und macht sie antippbar. Wechselt das Datum, erscheint eine Datumsleiste. Beim Öffnen eines Chats mit ungelesenen Nachrichten steht die Marke „New Messages“ an der ersten ungelesenen Nachricht. Ein Pfeil unten rechts springt ans Ende des Chats.
Neue Nachrichten meldet die App per Benachrichtigung („New Message from RUFZEICHEN“), auch im Hintergrund. Eigene Nachrichten, Befehle, die mit „--“ beginnen, und gefilterte Nachrichten (6.5) lösen keine Benachrichtigung aus.
6.3 Nachrichten senden
- Chat öffnen. Im To All Channel und in einem Group-Chat genügt es, den Text einzutippen.
- Im Chat Direct Messages erscheint über dem Textfeld zusätzlich das Feld To Callsign. Das Rufzeichen mit SSID eingeben (zum Beispiel
OE1KFR-1). Der Stern daneben öffnet die Favoriten (6.6). - Text im Feld Type Message eintippen (höchstens 150 Zeichen). Das Feld wächst bis zu sechs Zeilen mit.
- Auf den Pfeil rechts unten tippen. Das Textfeld ist leer und die Tastatur verschwindet, die Nachricht steht am Ende des Chats.
Statussymbole bei eigenen Nachrichten
| Symbol | Bedeutung |
|---|---|
| Haken | Sent: Die Nachricht ist beim eigenen Node angekommen. |
| Wolke | Heard: Die Nachricht wurde von einem anderen Node gehört und weitergesendet. Daneben steht das Rufzeichen dieser Station. |
| Wolke mit Haken | Acked: Bei einer Direktnachricht hat der Empfänger die Nachricht erhalten (Bestätigung kam zurück). Bei Rundsprüchen und Gruppen bestätigt der Empfang durch ein Gateway die Weiterleitung an den MeshCom-Server. |
| Wolke durchgestrichen (orange) | Unconfirmed: Eine Direktnachricht blieb nach 6 Minuten ohne Bestätigung. Der Node hat nach vier Aussendungen aufgegeben. Kommt die Bestätigung doch noch, wird das Symbol zu „Acked“. |
Direktnachrichten werden vom Node bis zu viermal gesendet, falls sie unterwegs verloren gehen. Die App zeigt trotzdem nur eine Nachricht; doppelt empfangene Kopien erkennt sie und blendet sie aus.
6.4 Nachrichtenmenü (langer Druck)
Ein langer Druck auf eine Nachricht öffnet ein Menü:
| Eintrag | Wirkung |
|---|---|
| Copy Text | Kopiert den Nachrichtentext. |
| Resend Message | Sendet eine eigene Nachricht noch einmal (nur bei eigenen Nachrichten). |
| Direct Message | Wechselt in den DM-Chat mit dem Absender als Empfänger (nicht im DM-Chat selbst). |
| Reply To | Setzt den Absender als Empfänger und trägt „@RUFZEICHEN “ im Textfeld vor. |
| Filter Text | Legt einen Textfilter mit diesem Nachrichtentext an (6.5). |
| Add Favourite | Nimmt das Rufzeichen in die Favoriten auf (nur im DM-Chat, nur wenn noch nicht vorhanden). |
| Block Callsign | Blendet alle Nachrichten dieses Rufzeichens aus (6.5). Nur bei fremden Nachrichten. |
6.5 Filter: Rufzeichen sperren und Texte ausblenden
Der Trichter in der Chat-Liste öffnet das Fenster Filters. Es hat zwei Teile: Filter Global (gilt in allen Chats) und Filter des gewählten Chats (gilt nur dort). In beiden gibt es:
- Blocked Callsigns: gesperrte Rufzeichen. Mit dem Plus-Symbol trägt man eines ein (Apply), mit dem roten Kreuz hebt man die Sperre auf. Delete All Callsign Blocks löscht die ganze Liste.
- Text Filters: Nachrichten, deren Text zum Filter passt, werden ausgeblendet. Pro Filter wählt man den Geltungsbereich („Globally“ oder dieser Chat) und die Art: Exact Match (der ganze Text stimmt überein) oder Consists Of (der Text kommt in der Nachricht vor). Filter lassen sich bearbeiten (Stift) und löschen. Delete All Textfilters löscht alle.
Beim Sperren über das Nachrichtenmenü fragt die App, ob Globally oder nur This Chat Only. Gefilterte Nachrichten bleiben gespeichert, sie werden nur nicht angezeigt.
6.6 Favoriten für Direktnachrichten
Der Stern neben „To Callsign“ öffnet das Fenster Favourites. Mit Add trägt man ein Rufzeichen ein, ein Tipp auf einen Eintrag übernimmt ihn als Empfänger, das rote Kreuz löscht ihn. Rufzeichen kann man auch aus dem Nachrichtenmenü (Add Favourite) übernehmen. Die Liste bleibt gespeichert.
6.7 Hinweis auf Firmware-Update
Läuft der Node mit einer Firmware älter als 4.40 a, zeigt der Chat-Tab nach dem Verbinden einmal den Hinweis „Firmware update recommended“. Mit älterer Firmware können einzelne Funktionen eingeschränkt sein (Kapitel 11).
7. Map-Tab
Die Karte (OpenStreetMap) zeigt alle Nodes, deren Position die App empfangen hat. Die Kartenkacheln werden aus dem Internet geladen; ohne Internet bleibt der Hintergrund leer, die Markierungen sind aber da. Ältere Positionen werden nach drei Tagen gelöscht.
7.1 Markierungen
| Farbe | Bedeutung |
|---|---|
| Violett | Der eigene (verbundene) Node. |
| Grün | Nodes, die der eigene Node direkt per Funk gehört hat (siehe Heard Nodes). |
| Hellblau | Österreichische Vereinsstationen und Relaisstandorte (Rufzeichen der Form OE1XAB-1), die nicht direkt gehört wurden. |
| Blau | Alle übrigen Nodes, die nur über andere Nodes (Mesh) oder Gateways gehört wurden. |
Ein Tipp auf eine Markierung öffnet eine Karte mit den Einzelheiten: Rufzeichen und APRS-Symbol, Koordinaten, Höhe, Akku, Hardware, Anzahl Nachbarn, abonnierte Gruppen, Kommentar und Name. Mit More erscheinen die Sensorwerte, soweit der Node sie sendet (Druck, Temperatur, Feuchte, QNH, eCO2, Gaswiderstand, VBus und Strom des INA226, die Eingänge eines MCP23017). DM wechselt in den Chat und trägt das Rufzeichen als Empfänger ein, Close schließt die Karte.
7.2 Die Schaltflächen
Mit dem Button rechts unten klappt ein Menü mit vier Funktionen auf:
| Menü öffnen/schließen (Pfeil nach oben). | |
| Linien: zeigt rote Linien vom eigenen Node zu den direkt gehörten Nodes. | |
| Suchen: Suchleiste und Liste aller bekannten Nodes. Beim Tippen filtert die Liste nach dem Anfang des Rufzeichens. Ein Tipp auf einen Eintrag zentriert die Karte auf diesen Node und öffnet seine Karte. | |
| Zentrieren: verschiebt die Karte auf den eigenen Node. | |
| Map Tracking ein/aus. Die Karte folgt dann der Position des Nodes. Dazu muss der Node ein eingeschaltetes GPS haben. Die App fragt die Position alle 10 Sekunden ab. |
Oben rechts steht der Zustand:
Mit + und - zoomt man, mit zwei Fingern ebenfalls. Map Tracking schaltet sich beim Öffnen der Karte selbst ein, wenn der Node ein GPS hat, TRACK ausgeschaltet ist und eine Verbindung besteht.
8. Heard-Nodes-Tab
Der Tab zeigt alle Stationen, die der verbundene Node direkt per Funk gehört hat. Pro Station gibt es eine Karte mit dem Rufzeichen, Datum und Uhrzeit des Empfangs und folgenden Werten. Werte, die der Node nicht sendet, werden ausgeblendet.
| Wert | Bedeutung |
|---|---|
| RSSI (dBm) | Empfangsstärke. Gut bis -90, ok bis -100, schwach bis -115, darunter schlecht. |
| SNR (dB) | Signal-Rausch-Abstand. Sehr gut ab -5, gut ab -10, ok ab -15, darunter schlecht. |
| Dist (km) | Entfernung zur Station, wenn deren Position bekannt ist. |
| Hardware | Hardware der gehörten Station. |
| Neighbours | Anzahl der Nachbarn, die diese Station meldet. |
| Hears me (dB) | Wie die Station den eigenen Node hört (nur mit neuer Firmware). So erkennt man, ob die Funkverbindung in beide Richtungen trägt. |
| Gateway | Erscheint mit „Yes“, wenn die Station ein Gateway ist. |
Die Werte sind eingefärbt: grün gut, gelb/orange mittel, rot schlecht. Die Schwellen sind die für LoRa üblichen. Die Signalbalken im Devices-Tab messen dagegen das Bluetooth-Signal zum Telefon und haben eigene Schwellen (3.2). Die Liste wird beim Verbinden vom Node geladen und im Betrieb fortgeschrieben. Löschen: Settings → Advanced Settings → Clear Mheards.
9. Praxis: Typische Abläufe
9.1 Neuen Node in Betrieb nehmen
- Node einschalten, in der App den Devices-Tab öffnen und auf die Karte des Nodes tippen.
- Meldung „Unconfigured Node!“ bestätigen. Die App wechselt in die Settings.
- Callsign eingeben und mit dem Haken speichern. Der Node bootet neu, danach neu verbinden.
- Country Setting wählen, speichern.
- Node Time Zone (Preset) wählen, speichern.
- Position setzen: Set Location - Phone GPS oder Manual Location; bei Nodes mit GPS das GPS (User Buttons) einschalten.
- Optional: APRS-Symbol und Kommentar, Gruppen, BLE-PIN. Beim ersten Mal TX-Power auf einen sinnvollen Wert stellen.
- Im Devices-Tab Auto reconnect einschalten.
9.2 Node als Gateway betreiben
- WLAN eintragen (WiFi Settings) beziehungsweise bei RAK4631 Ethernet anschließen; bei Bedarf feste IP.
- Gateway Server passend zum Land wählen (bei HAMNET „Germany Hamnet-HC“).
- Button GATEWAY einschalten. Der Node verbindet sich mit dem Server und leitet Nachrichten weiter.
9.3 Firmware-Update per OTA
- Settings → User Buttons → OTA Update → „YES“. Der Node startet neu im Update-Modus, die Bluetooth-Verbindung endet (kein Auto Reconnect).
- Mit dem Browser die Adresse aufrufen, die die App einblendet (
RUFZEICHEN.local, die IP-Adresse oder im AP-Modus192.168.4.1). - Firmware-Datei (.bin) hochladen. Nach dem Update startet der Node neu; in der App im Devices-Tab neu verbinden.
9.4 Verbindung zu einem Node abgesichert nutzen
- In Settings → Custom BLE PIN 6 Digits eine PIN setzen und den Haken tippen (die PIN wird zugleich auf dem Telefon gespeichert).
- Auf einem weiteren Telefon: Devices → Schlüsselsymbol der Node-Karte → PIN eingeben → Save PIN, danach verbinden.
- PIN vergessen: Mit der seriellen Konsole oder dem Web-Interface des Nodes zurücksetzen; die App kann das erst nach dem Verbinden.
10. Fehlersuche
| Problem | Mögliche Ursache und Abhilfe |
|---|---|
| Node erscheint nicht im Devices-Tab | Node an? Bluetooth und Bluetooth-/Standort-Berechtigung der App erteilt? Näher heran. Schalter „MeshCom only“ aus und wieder an. Der Node sendet nichts, solange ein anderes Gerät verbunden ist. |
| Verbinden bricht sofort ab | PIN falsch (3.4). Alten Kopplungseintrag in den Bluetooth-Einstellungen des Telefons entfernen. Unter Android Bluetooth aus und an. |
| Unter Android ist der Node schwer zu finden oder zu verbinden | Das hängt vom Telefon ab. Näher am Node scannen (RSSI -80 dBm oder besser), App neu starten. Unter iOS tritt das selten auf. Das Log (Kapitel 5.1) zeigt die Scan-Zählung des Nodes. |
| „Loading Config“ bleibt lange stehen | Das ist bei vielen gehörten Stationen normal (bis zu einer Minute). Die App fordert fehlende Daten selbst nach (3.6). Hilft das nicht, Cancel, trennen, neu verbinden. |
| Nach dem Speichern der Einstellungen ist die Verbindung weg | Der Node bootet neu (Callsign, WiFi, feste IP, Gateway Server). Neu verbinden. |
| Button ändert den Zustand nicht | Die App wartet auf die Rückmeldung des Nodes (einige Sekunden). Kommt sie nicht, Verbindung prüfen. Mit älterer Firmware gibt es Befehle nicht. |
| Sensor-Button ist rot | Der Sensor ist eingeschaltet, wurde aber am I2C-Bus nicht gefunden. Verdrahtung prüfen, danach Scan I2C am Node. |
| Nachrichten fehlen im Chat | Filter aktiv (Trichter orange)? Rufzeichen gesperrt? Schalter „No ALL Msgs“ aktiv? Die Nachrichten älter als drei Tage sind gelöscht. |
| Direktnachricht zeigt „Unconfirmed“ | Keine Bestätigung des Empfängers innerhalb von 6 Minuten. Empfänger nicht erreichbar oder Strecke zu schlecht. Mit Resend erneut senden. Das Rufzeichen immer mit SSID eingeben. |
| Karte bleibt leer | Kein Internet für die Kartenkacheln. Markierungen werden trotzdem angezeigt. |
| Keine Benachrichtigung bei neuen Nachrichten | Berechtigung für Benachrichtigungen im Telefon erteilt? Lautsprecher-Symbol des Chats auf „an“? Auf Android die Akkuoptimierung für die App prüfen. |
11. Firmware-Versionen
Die App erwartet Firmware 4.40 a oder neuer. Bei älterer Firmware gilt:
- Nach dem Verbinden erscheint im Chat-Tab der Hinweis „Firmware update recommended“.
- Mit Firmware älter als 4.35 v fehlt die vollständige Behandlung der Wiederholung von Direktnachrichten (ein Node sendet jede Kopie getrennt, die App filtert das dann nur teilweise).
- Folgende Einstellungen erscheinen nur, wenn der Node sie meldet: Max Hop, IP MTU, Battery Display, Max. Battery Voltage (nur bei einzelliger Batterie), Remote Netconsole, KISS Interface, INA226, die Zeitzonenregel (Node Time Zone: Preset und Regel), Manual Routing (VIA) und die Anzeige des Web-Passworts.
- Das Build-Datum der Firmware im Info-Tab („Build“) fehlt bei älteren Nodes.
Anhang A: Alle Settings und ihre Funktion auf einen Blick
| Abschnitt in den Settings | Funktion | Firmware-Befehl |
|---|---|---|
| Callsign | Rufzeichen des Nodes (Neustart) | --setcall |
| WiFi Settings | WLAN-SSID und -Passwort (Neustart) | --setssid, --setpwd |
| APRS Settings | Symbol, Kommentar, Name | --symid, --symcd, --aprscomment, --setname |
| Custom BLE PIN | Bluetooth-PIN des Nodes | --btcode |
| Set Location - Phone GPS / Manual Location | Feste Position | --setlat, --setlon, --setalt |
| Node Time Zone | Zeitzone, automatische Sommerzeit | --settz, --utcoff |
| Country Setting | LoRa-Frequenz und Parameter | --setctry |
| Group Subscription | Bis zu 6 Gruppen abonnieren | --setgrc |
| User Buttons: GATEWAY | Gateway-Betrieb | --gateway |
| User Buttons: DISPLAY | Display ein/aus | --display |
| User Buttons: RX Gain Boost | Verstärkter Empfang (ESP32 mit SX1262) | --setboostedgain |
| User Buttons: Webserver | Web-Oberfläche | --webserver |
| User Buttons: MESH | Weiterleiten fremder Nachrichten | --mesh |
| User Buttons: No ALL Msgs | Rundsprüche „*“ ausblenden | --nomsgall |
| User Buttons: BUTTON | Benutzertaste auswerten | --button |
| User Buttons: Wifi AP | Eigener Access Point | --wifiap |
| User Buttons: GPS | GPS-Modul ein/aus | --gps |
| User Buttons: TRACK | SmartBeaconing LoRa-APRS | --track |
| User Buttons: Send POS | Position einmal senden | --sendpos, --sendtrack |
| User Buttons: POS-Info | Positionsdaten abfragen | --pos |
| User Buttons: Scan I2C | I2C-Geräte suchen | --showi2c |
| User Buttons: OTA Update | Update-Modus (nur ESP32) | --ota-update |
| User Buttons: REBOOT / Deep Sleep | Neustart / Tiefschlaf | --reboot now, --deepsleep |
| KISS Interface | KISS/TCP-Port, TX, Metadaten, Anmeldung | --kiss ... |
| TX-Power | Sendeleistung | --txpower |
| Gateway Server | Server des Gateways (Neustart) | --gateway srv |
| Max Hop | Hop-Limit für Textnachrichten | --maxhop |
| Hardware Pins | Pin der Benutzertaste und von OneWire | --button gpio, --onewire gpio |
| Sensor Settings | Sensoren ein/aus, Sensor Info, Scan I2C | --bme, --bmp, --390, --680, --811, --aht20, --sht21, --lps33, --onewire, --wx |
| Temperature Offset | Temperaturkorrektur | --tempoff |
| INA226 | Shunt, Maximalstrom, Mittelung | --shunt, --imax, --isamp |
| Max. Battery Voltage | Spannung für 100 % Akku | --maxv |
| Fixed IP Settings | Feste IP, Gateway, DNS, NTP (Neustart) | --setownip, --setowngw, --setownms, --setowndns, --setownntp |
| IP MTU | Paketgröße der IP-Schnittstelle | --mtu |
| Ext. UDP Interface | MeshCom-Daten per UDP weiterreichen | --extudp, --extudpip |
| Remote Netconsole | Konsole im Netzwerk (Port 2323), Passwort | --netconsole, --passwd |
| Manual Routing (VIA) | Nachrichten über einen bestimmten Node | --via |
| Web UI Password | Passwort der Web-Oberfläche | --webpwd |
| Manual Command | Beliebiger Befehl (beginnt mit „--“) | beliebig |
| Battery Display | Display zeigt Spannung oder Prozent | --volt, --proz |
| Advanced Settings | Daten auf dem Telefon löschen | (nur App) |
Anhang B: Wichtige Grenzwerte
| Wert | Grenze |
|---|---|
| Nachrichtentext im Chat | höchstens 150 Zeichen |
| Rufzeichen des Empfängers (To Callsign) | höchstens 11 Zeichen, mit SSID |
| Node-Callsign | höchstens 11 Zeichen, Form OE1KFR-1 |
| WLAN-SSID / WLAN-Passwort | 33 / 64 Zeichen |
| APRS Comment / APRS Name | 15 / 15 Zeichen |
| Web-Passwort / Netconsole-Passwort | 19 / 14 Zeichen |
| BLE-PIN | 6 Ziffern, 100000–999999 |
| Zeitzonenregel | höchstens 39 Zeichen, ohne Leerzeichen |
| Gruppen | 6 Plätze, je 1 bis 5 Ziffern |
| Max. Battery Voltage | 3,7 bis 4,5 V |
| INA226 Shunt / Maximalstrom | 0,001–0,5 Ω / 0–20 A |
| Manual Command | höchstens 250 Byte |
| Aufbewahrung von Nachrichten und Positionen | 3 Tage |
| Send POS: Mindestabstand | 10 Sekunden |
Anhang C: Zeitzonen-Presets
| Preset | POSIX-Regel |
|---|---|
| Europe - Vienna (CET; auch Berlin, Zürich, Rom ...) | CET-1CEST,M3.5.0,M10.5.0/3 |
| Europe - London | GMT0BST,M3.5.0/1,M10.5.0 |
| Europe - Dublin | GMT0IST,M3.5.0/1,M10.5.0 |
| Europe - Lisbon | WET0WEST,M3.5.0/1,M10.5.0 |
| Europe - Athens (EET; auch Helsinki, Kyiv ...) | EET-2EEST,M3.5.0/3,M10.5.0/4 |
| Europe - Moscow | MSK-3 |
| Europe - Istanbul | <+03>-3 |
| Europe - Reykjavik | GMT0 |
| America - New York / Chicago / Denver / Los Angeles | EST5EDT,... / CST6CDT,... / MST7MDT,... / PST8PDT,M3.2.0,M11.1.0 |
| America - Phoenix (keine Sommerzeit) | MST7 |
| America - Sao Paulo | <-03>3 |
| Africa - Johannesburg | SAST-2 |
| Asia - Dubai / Kolkata / Shanghai / Tokyo | <+04>-4 / <+0530>-5:30 / CST-8 / JST-9 |
| Australia - Sydney (auch Melbourne) / Perth | AEST-10AEDT,M10.1.0,M4.1.0/3 / AWST-8 |
| New Zealand - Auckland | NZST-12NZDT,M9.5.0,M4.1.0/3 |
| UTC | UTC0 |
In einer POSIX-Regel steht das Vorzeichen umgekehrt wie gewohnt: CET-1 bedeutet UTC+1.
Weiterführende Informationen: https://icssw.org/meshcom-4-0-faq/ und https://icssw.org/meshcom-app/ .
MeshCom App
User Manual
for iOS and Android · Version: App 4.30, firmware 4.40 a · October 2026
The MeshCom app controls MeshCom nodes over Bluetooth: messages, configuration, sensor values and map. App author: OE1KFR, Rainer.
1. Overview
The MeshCom app for iOS and Android is the remote control for a MeshCom node. It connects to the node over Bluetooth Low Energy (BLE) and is used to send and receive messages, configure the node, show measured values and show the heard stations on a map. The phone needs no internet connection to work with the node; only the map tiles in the Map tab are loaded online.
This manual describes app version 4.30 together with firmware 4.40 a. With older firmware the app keeps working, but some settings are missing (see chapter 11).
1.1 The six tabs
The tab bar at the bottom of the app has six icons, from left to right:
| Icon | Tab (page title) | Purpose |
|---|---|---|
| Bluetooth | Devices | Find nodes in range, connect, disconnect. Auto reconnect, BLE PIN per node (chapter 3). |
| Gear | Node Settings | Configure the connected node (chapter 4). |
| Circle with i | Info | Battery, GPS, sensor values, firmware version, app log (chapter 5). |
| Speech bubble | Chat | Read and write messages (chapter 6). A green dot on the icon shows unread messages. |
| Globe | Node Map | Map with the received nodes (chapter 7). |
| Arrow symbol | Heard Nodes | List of the stations heard directly over radio, with reception values (chapter 8). |
1.2 Conventions
- Green check button (circle with a check mark): the entered value is sent to the node and saved there.
- RST: resets the setting on the node to its default (for example to delete a password or comment).
- Collapsible sections: most settings are folded into sections. Tap the heading to open or close a section (arrow on the right).
- Filled and outlined buttons: a filled button means "active/on", an outlined one "inactive/off" (exception DISPLAY, see 4.10).
- Feedback from the node: tapping a switch only sends the command. The button changes its state when the node has processed the command and confirmed it. This can take a few seconds.
- Design: the app follows the system design of the phone (light or dark).
2. Installation and permissions
The app is available in the Apple App Store and in the Google Play Store. The current download instructions are on the project page at https://icssw.org/meshcom-app/ . Firmware, flashing and OTA update are described on the project pages (https://icssw.org/meshcom-ota-update/).
2.1 Permissions
On first start the app asks for the following permissions. Without the first one, connecting is not possible.
| Permission | Purpose | Platform |
|---|---|---|
| Bluetooth | Find and connect to nodes. | iOS: "Bluetooth". Android 12 and newer: "Nearby devices" (scan and connect). |
| Location | Use the position of the phone as the position of the node ("Set Location - Phone GPS"). On Android before version 12 the Bluetooth scan also needs the location permission. | iOS and Android |
| Notifications | Alert and sound for a new message, also when the app runs in the background. | iOS and Android |
3. Devices tab: connecting
The Devices tab is the start screen. The app scans continuously for nodes in range and shows each node found as a card.
3.1 The header card
The "Nearby Nodes" header card shows the state in its second line and carries two switches:
| Display | Meaning |
|---|---|
| Scanning, tap to connect | The scan is running. Tap a card to connect. |
| Connecting... | The connection is being set up. |
| Tap the node to disconnect | Connected. Tap the card to disconnect again. |
| Searching for the lost node... / Signal too weak, move closer to the node | Auto reconnect is working (see 3.5). |
| Scan paused | The scan is stopped (for example when Bluetooth is switched off on the phone). |
| Switch | Effect |
|---|---|
| MeshCom only | On: only devices whose Bluetooth name starts with "MC-" are shown. Off: all BLE devices nearby appear. |
| Auto reconnect | On: when the connection is lost, the app searches for the node on its own and reconnects (see 3.5). The setting is saved. |
3.2 The node cards
Each card shows:
- a state icon on the left: red cross = not connected, spinner = connecting, green check = connected;
- the name of the node: small, the identifier in front of the callsign (for example "MC-1c24"); large and bold, the callsign. The name is read directly from the Bluetooth advertisement and the MeshCom manufacturer data;
- the signal strength (RSSI in dBm) with four signal bars on the right. While connecting, "Connecting" or "Connected" is shown there;
- the key icon for the BLE PIN of this node (see 3.4).
| Bars | RSSI | Rating |
|---|---|---|
| 4 | -70 dBm or better | very good |
| 3 | -71 to -80 dBm | good |
| 2 | -81 to -90 dBm | ok |
| 1 (orange) | -91 to -110 dBm | weak |
| 1 (red) | worse than -110 dBm | very weak, connecting becomes unreliable |
3.3 Connecting and disconnecting
Tap the card of the node you want. While connecting and as long as the connection is up, the list shows only this one card. Another tap on the card disconnects; only then do the other nodes appear again.
After connecting, the following happens:
- The app sends a "Hello" to the node (with the BLE PIN, if stored).
- The node sends its configuration. A window "Loading Config from node. Please wait..." shows the progress.
- The app then switches to the Chat tab automatically. Stored messages and the list of heard stations come from the node.
- Every 20 seconds the app sends the time of the phone to the node (time synchronisation).
3.4 BLE PIN per node
Each node can be protected against unauthorised connections with a six-digit PIN. The default is 000000 (no protection). The app remembers the PIN per node on the phone.
The key icon on the node card opens the PIN window:
- Current PIN: the PIN stored on the phone for this node, or "No PIN set — open connection."
- New PIN (6 digits) and Save PIN: saves the PIN on the phone.
- Clear PIN: deletes the stored PIN on the phone.
Bulk function: Settings → Advanced Settings → Clear All BLE PINs deletes the stored PINs of all nodes on the phone.
3.5 Auto reconnect
If the Bluetooth connection is lost (phone out of range, node restarted, radio interference), the app does not just show a message, it searches for the node on its own and reconnects. The prerequisite is the Auto reconnect switch in the Devices tab.
Sequence
- An unexpected loss of the connection starts a cycle. At the top of the app the banner "Auto reconnect" appears with the progress and a Cancel button. It appears in every tab.
- The cycle scans first. It connects only if the node was heard recently (within 10 seconds), the smoothed reception reaches at least -90 dBm, at least 2 advertisements of the node arrived in 8 seconds, it has been heard for at least 3 seconds and two measurements in a row were good. This prevents connections that would drop again immediately.
- When the conditions are met, the app connects silently in the background (up to 3 attempts with growing waiting time). After connecting it loads the configuration as for a normal connection.
- The cycle searches for 60 seconds at most. If the node is not found or cannot be connected by then, it ends with a message.
Messages in the banner
| Text | Meaning |
|---|---|
| Searching for the node... It is not in range yet. | The node cannot be heard yet. |
| Node found (-xx dBm). Checking that the signal is stable... | Node heard, the app briefly checks that the signal is stable. |
| Link quality too low (-xx dBm). The node was heard only n times in 8 s, 2 needed. Move closer to the node. | The signal strength is fine, but the node is heard only rarely. Move closer. No connection is tried until then. |
| Signal too weak (-xx dBm, -90 dBm or better needed). Move closer to the node. | Reception too weak. Move closer. |
| Reconnecting... (attempt n/3) | The connection is being set up. |
When the cycle ends without a connection
The app then shows the "BLE Disconnect" notice with the reason:
| Message | Reason / what to do |
|---|---|
| Node not in range. Move closer and reconnect manually. | The node was not heard within 60 seconds. |
| Signal too weak ... The reconnect was not tried | Reception below -90 dBm. |
| Link quality too low ...: the node was heard only rarely. | The node is heard only rarely. |
| The connection keeps dropping. Check the signal strength of the node. | The connection dropped three times within two minutes shortly after reconnecting. The app gives up so as not to keep bouncing. |
| Reconnect failed: the connection could not be established ... | All connection attempts failed, usually because of poor link quality. |
When there is no auto reconnect
- The connection was disconnected by hand (tap on the connected card).
- The node was sent to Deep Sleep or into OTA update mode through the app (the OTA firmware has no Bluetooth). The disconnect is then expected and the app shows only the normal disconnect message.
- The Auto reconnect switch is off.
- A tap on a card or a tap on Cancel ends a running cycle at once.
App in the background and app restart
- Loss in the background: scan and app logic are not reliable in the background. The cycle starts as soon as the app is in the foreground again.
- Cold start: if the operating system ends the app in the background (iOS after hours, Android depending on the device after about one hour with a locked phone) and the connection was up without having been disconnected by hand, the app reconnects the last connected node at the next start. For this it switches to the Devices tab.
3.6 Monitoring the loading of the configuration
After connecting, the app monitors whether all configuration data arrives. If no data arrives for 10 seconds, it requests the missing parts again automatically. A "Loading Config" window shows the progress (for example "7 / 14 received") and the attempt ("attempt n/m"). If nothing arrives at all, the app sends the Hello once more. Cancel stops the reloading. At the end it says "Config loaded completely."
3.7 Connection lost, error messages
| Message | Cause / remedy |
|---|---|
| BLE Disconnect – Node disconnected! Check the BLE Pin and reconnect to Node! | Connection dropped or wrong PIN. Check the PIN (3.4), reconnect. |
| Error Pairing! Remove Node from BLE Devices after Erase/Flash | The phone still has an old pairing entry, for example after flashing again. In the Bluetooth settings of the phone remove ("forget") the node and connect again. |
| Error Connection! Remove Node from BLE Devices after Erase/Flash | Timeout with a node in factory state. Same remedy. |
| Error on Setting up connection! Remove node from BLE Devices and pair newly! | The Hello could not be sent. Remove the node on the phone and pair again. |
| Error on Connecting to Node! Please reconnect to Node! | The connection was made, but the notifications could not be started. Connect again. |
4. Settings tab: configuring the node
The "Node Settings" tab shows the settings of the connected node and lets you change them. It only makes sense when a node is connected. This chapter follows the order in which the settings appear in the app. For each setting the matching firmware command is given, so you can find it in the firmware documentation or send it with Manual Command (4.18).
4.1 Header and display cards
At the very top are the callsign of the node, the transmit frequency (QRG, in MHz) and the transmit power (TX Pwr, in dBm). Below follow read-only cards:
- APRS: Symbol ID, Symbol, Comment and Name (Comment and Name only if set).
- Call Groups: the subscribed groups (occupied slots only).
- WiFi (or Ethernet on the RAK4631): SSID, IP, Gateway, Subnet Mask, DNS and, if set, NTP of the node.
4.2 Callsign
Input field "Set Node Callsign", for example OE1KFR-1. The app converts to upper case, removes a leading zero of the SSID (OE1KFR-02 becomes OE1KFR-2) and checks the format (callsign, hyphen, SSID 0–99, at most 11 characters). The check mark sends it.
Firmware command: --setcall.
4.3 WiFi Settings
SSID (at most 33 characters) and password (at most 64 characters) of the WLAN the node should join. The eye icon shows or hides the password. Check mark: save; the node reboots after about 15 seconds. RST deletes SSID and password ("Wifi Settings reset to none").
Firmware commands: --setssid, --setpwd.
4.4 APRS Settings
Collapsible section with three cards that determine how the node appears in the map, in the dashboard and on aprs.fi.
| Card | Function | Command |
|---|---|---|
| APRS Symbol | Map symbol. Either a preset from the "APRS Map Symbol Preset" list or by hand: "Group Character" (symbol table) and "Character" (symbol code), one character each. | --symid, --symcd |
| APRS Comment | Short description of the node, at most 15 characters. RST deletes the comment. | --aprscomment (--atxt) |
| APRS Name | First name of the operator, at most 15 characters. RST deletes the name. | --setname |
4.5 Custom BLE PIN 6 Digits
Sets the six-digit Bluetooth PIN of the node (digits only, 100000 to 999999). Check mark: set the PIN in the node and store it on the phone. RST resets the PIN in the node to 000000 and deletes the entry on the phone. How it works: see 3.4.
Firmware command: --btcode.
4.6 Set Location - Phone GPS and Manual Location
- Set Location - Phone GPS (button): the app reads the GPS position of the phone and sets it as the fixed position of the node. Meant for nodes without their own GPS.
- Manual Location (collapsible): type latitude, longitude and altitude (in metres) by hand. Check mark: send.
Firmware commands: --setlat, --setlon, --setalt. If the node has an enabled GPS module, it provides the position.
4.7 Node Time Zone
Here you set how the node converts from UTC to local time. The node shows this time on its display.
| Field | Meaning |
|---|---|
| Time Zone Preset | Selection list of time zones, for example "Europe - Vienna" (also valid for Berlin, Zurich, Rome), London, Athens, Moscow, New York, Tokyo, Sydney (complete list in appendix C). If you pick a preset, the app fills in the rule. |
| Set Time Zone | Own POSIX rule, for example CET-1CEST,M3.5.0,M10.5.0/3. With it the node switches between summer and winter time automatically. No spaces, at most 39 characters, M rules only. |
| Set UTC Offset | Fixed offset to UTC in hours, for example 1 or -5.5. This switches the automatic change off; in summer you have to change the value yourself. |
Below the fields the app shows "Automatic time change active ..." (rule active) or "Fixed offset, no automatic time change." RST sets the offset to 0 and removes the rule.
Firmware commands: --settz, --utcoff. A fixed offset deletes the rule. With older firmware there is only the fixed offset.
4.8 Country Setting
The country selection determines the radio parameters of the LoRa module (frequency, bandwidth, spreading factor ...) according to local rules. The frequency is shown in the list next to the code. Make the selection and tap the check mark; the node applies the parameters. All nodes that should talk to each other must have the same setting.
| Code | Frequency |
|---|---|
| EU8 | 433.175 MHz |
| EA | 433.175 MHz |
| UK / UK8 | 439.9125 MHz |
| LA | 433.925 MHz |
| PL | 434.855 MHz |
| US | 433.175 MHz |
| VR2 | 435.775 MHz |
| 868 | 869.525 MHz |
| 915 | 906.875 MHz |
Firmware command: --setctry.
4.9 Group Subscription
Up to 6 group numbers (1 to 5 digits each) that the node subscribes to. The information goes to the nearest gateway, and messages to these groups are delivered. Check mark: save. RST (Reset Groups) sets all groups to 0 (no group). Each occupied group gets its own chat in the Chat tab (chapter 6). See also https://icssw.org/grc-gruppen-call/.
Firmware command: --setgrc.
4.10 User Buttons
The buttons send switching commands to the node. Filled = active. The state is updated after the node has answered.
General
| Button | Function | Command |
|---|---|---|
| GATEWAY | The node works as a gateway between the radio network and the MeshCom server (internet or HAMNET). Messages are forwarded to the server and back. Servers: see 4.12. | --gateway on/off |
| DISPLAY | Display of the node on/off. Exception: here "filled" means the display is on. | --display |
| RX Gain Boost | Boosted reception. ESP32 nodes with an SX1262 LoRa chip only. | --setboostedgain |
| Webserver | Web interface of the node on/off. Needs a valid WLAN SSID with password ("Wifi Settings not set!" otherwise). On the RAK4631 without this check. | --webserver on/off |
| MESH | On: the node forwards received foreign messages over radio (relay). Off: it only listens and sends its own messages. | --mesh on/off |
| No ALL Msgs | Hides messages to "*" or "ALL" (on the node and in the phone). | --nomsgall on/off |
| BUTTON | Switches the evaluation of a connected user button on/off (pin: see 4.14). With it you scroll through the received messages on the display. | --button on/off |
| Wifi AP | The node opens its own WLAN (access point) when no router is available. Not possible while the node is a gateway ("Gateway Mode active!"). | --wifiap on/off |
GPS - Position
| Button | Function | Command |
|---|---|---|
| GPS | Optional GPS module on/off. With GPS "OFF" the Info tab shows no satellites and no HDOP. | --gps on/off |
| TRACK | Track function (SmartBeaconing): after movement the node sends its position as a LoRa-APRS message on 433.775 MHz. | --track on/off |
| Send POS | Sends the position once. Behaviour see below. At least 10 seconds must pass between two calls. | --sendpos, --sendtrack |
| POS-Info | Requests the current position data from the node. It appears in the Info tab. | --pos |
Send POS depends on the TRACK state:
- TRACK off: the node sends a MeshCom position.
- TRACK on, GPS fix available: the node sends the position by LoRa-APRS (and additionally by MeshCom if no MeshCom packet was received for a while). The app says "LoRa-APRS Position TX triggered!".
- TRACK on, but no GPS fix: the question "No GPS fix – Which position should be sent?" appears. Choices are "Manual LoRa-APRS POS" (stored position by LoRa-APRS) or "Manual MeshCom POS".
Utilities
| Button | Function | Command |
|---|---|---|
| Scan I2C | The node searches the I2C bus for connected devices (sensors, display). The app does not show the result, it appears on the console of the node. The button is also in the Sensor Settings. | --showi2c |
| OTA Update | The node restarts in update mode (confirmation "Boot into OTA Mode now?"). ESP32-based nodes only; on RAK4631, T-Echo and Heltec T114 "Wifi OTA Update not supported!" appears. See below. | --ota-update |
| REBOOT | Restarts the node (with confirmation). | --reboot now |
| Deep Sleep | Sends the node into deep sleep (with confirmation). The connection is dropped; the app does not reconnect automatically. Wake up at the node (button or reset). | --deepsleep |
CALLSIGN.local or the IP address of the node (shown in the Settings header). Without WLAN access it opens its own access point: address 192.168.4.1 or Meshcom-OTA.local. There you upload the new firmware (.bin). The OTA firmware has no Bluetooth. Detailed instructions: https://icssw.org/meshcom-ota-update/KISS Interface (only with new firmware)
Four buttons control the KISS/TCP interface of the node (port 8001) that external programs can connect to:
| Button | Function | Command |
|---|---|---|
| KISS | KISS/TCP port on/off. | --kiss on/off |
| TX | Transmitting over KISS is allowed. | --kiss tx on/off |
| RxMeta | KISS also delivers metadata frames (RSSI, SNR ...). | --kiss meta on/off |
| Auth | KISS requires a login. Uses the password of the Remote Netconsole (4.17). The app points this out. | --kiss auth on/off |
4.11 TX-Power
Slider for the transmit power in dBm. Below it the power is shown in mW and as a percentage of the maximum. The maximum depends on the hardware (usually 17 to 22 dBm). For E22 nodes the app shows only the power of the SX1262; the actual power depends on the amplifier behind it in the E22 (up to 30 or 33 dBm).
Firmware command: --txpower.
4.12 Gateway Server
Selects the MeshCom server that a node in gateway mode connects to. Make the selection and tap the check mark; the node restarts.
| Selection | Server for |
|---|---|
| Austria-OE | Austria |
| Germany-DL | Germany (internet) |
| Germany Hamnet-HC | Germany (HAMNET) |
| Italy-IT | Italy |
| Switzerland-HB | Switzerland |
| Poland-SP | Poland |
Firmware command: --gateway srv.
4.13 Max Hop (only with new firmware)
Limits over how many stations (hops) a text message from your own node is passed on. Selection 2, 3 or 4; tap the check mark to save. A smaller value relieves the network.
Firmware command: --maxhop.
4.14 Hardware Pins
- Userbutton Pin: GPIO number for connecting a button (see BUTTON in 4.10).
- OneWire Pin: GPIO number for the optional OneWire temperature sensor. The value appears in the Info tab as "TOUT".
Firmware commands: --button gpio, --onewire gpio.
4.15 Sensor Settings
Switch sensors on the I2C bus or OneWire on and off. Filled = active. If a sensor is switched on but was not found on the bus, its button turns red.
| Button | Sensor | Command |
|---|---|---|
| BME280 / BMP280 / BMP390 | Temperature, air pressure (BME280 also humidity) | --bme, --bmp, --390 |
| BME680 | Temperature, humidity, pressure, gas resistance | --680 |
| AHT-20 / SHT21 | Temperature and humidity | --aht20, --sht21 |
| MCU-811 | Gas sensor (eCO2) | --811 |
| One Wire | OneWire temperature sensor (pin: see 4.14) | --onewire |
| LPS33 | Weather data board on the RAK4631 | --lps33 |
| Sensor Info | Requests the sensor values, they appear in the Info tab | --wx |
| Scan I2C | See 4.10 (Utilities) | --showi2c |
Temperature Offset
Correction value in degrees for the temperature of the I2C sensors (BME/BMP Offset) and of the OneWire sensor (Onewire Offset), for example -1.5 if the node reads too warm because of its own waste heat. Command: --tempoff.
INA226 (only if the node reports the function)
The INA226 measures voltage and current, for example at the solar installation of a site. The section shows whether the chip was found on the I2C bus ("INA226 found ... it is active") – the node detects it at start-up. You can set:
| Field | Meaning | Range |
|---|---|---|
| Shunt | Resistance of the measuring resistor in ohm | more than 0.001 and less than 0.5 |
| Max. current | Highest current to be measured in ampere | 0 to 20 |
| Averaged samples | Averaging. The selection 0 to 7 corresponds to 1, 4, 16, 64, 128, 256, 512 or 1024 measurements | 0–7 |
Commands: --shunt, --imax, --isamp. The values appear in the Info tab (VBUS, VSHUNT, VAMP, VPOW) and in the map in the detail window ("Current").
4.16 Max. Battery Voltage (only with new firmware)
Voltage at which the battery counts as 100 % charged (3.7 to 4.5 V). The section appears only for nodes with a single-cell battery (LiIon). The node uses the value to calculate the percentage display. The app also accepts a decimal comma. Command: --maxv.
4.17 Network: Fixed IP, IP MTU, Ext. UDP, Remote Netconsole, Manual Routing, Web password
Fixed IP Settings
Fixed IP address instead of DHCP: IP Address, Subnet Mask, Gateway, DNS and optionally NTP (leave empty if not needed). Check mark: save, reboot after about 15 seconds. RST switches back to DHCP. Commands: --setownip, --setowngw, --setownms, --setowndns, --setownntp.
IP MTU (only with new firmware)
Size of the IP packets of the node. Selection: 1280 (HAMNET/VPN, default), 1400, 1500 (plain LAN). With problems over HAMNET or VPN stay with the default. Command: --mtu.
Ext. UDP Interface
The node passes the MeshCom data on by UDP to a device in the network. Entry UDP Dest. Addr. (IP address of the target), check mark to save, and the Enable switch turns the function on or off. Commands: --extudpip, --extudp on/off.
Remote Netconsole (only with new firmware)
The console of the node can be reached over the network on port 2323 (for example with a terminal program). Enable switch and a Password (at most 14 characters). The app does not show the password; you can only set it or delete it with RST. Without a password the console is open to everyone in the network. The KISS login uses the same password (see 4.10). Commands: --netconsole, --passwd.
Manual Routing (VIA)
Lets messages travel through a specific node (via callsign). Enter the Destination Call (for example OE1KFR-12), tap the check mark and set the Enable switch. RST deletes the target. With older firmware "Manual Route Settings not provided by node. Check FW Update or Re-Connect" appears. Command: --via.
Web UI Password
Password for the web interface of the node (at most 19 characters). The app shows the current password in plain text. RST removes it. Command: --webpwd.
4.18 Manual Command
Any node command by hand, for example --info. It must start with two hyphens. If the iOS keyboard replaces the two hyphens with a long dash, the app reports it: "It starts with a long dash instead of two hyphens". Length at most 250 bytes. Check mark: send. The list of commands is given by the command --help and the firmware documentation.
--cleanflash deletes the settings of the node).4.19 Battery Display (only with new firmware)
Determines whether the display of the node shows the battery as Voltage or Percent. Commands: --volt on, --proz on.
4.20 Advanced Settings
Four red buttons delete data on the phone. There is no confirmation.
| Button | Deletes |
|---|---|
| Clear received nodes | All received node positions in the map. |
| Clear Text Msgs | All messages in the Chat tab. |
| Clear Mheards | All entries in the Heard Nodes tab. |
| Clear All BLE PINs | The stored BLE PINs of all nodes (see 3.4). |
5. Info tab
The Info tab shows the state of the connected node. As long as the tab is visible, the app polls the node in turn for new values (one request every 4 seconds). Polling pauses when the app is in the background, no node is connected or the log window is open.
| Card | Content |
|---|---|
| Battery | State of charge in percent with a bar (orange below 30 %, red below 15 %), voltage in volts and the hardware of the node (for example "HELTEC V3", "RAK4631"). |
| GPS | Top right the state: Fix, No Fix or OFF (GPS switched off; satellites and HDOP are hidden then). Also Latitude, Longitude, Altitude, Satellites, HDOP, Next POS (time until the next position is sent, for example "5m 20s"), UTC Offset, and Date and Time in two rows. |
| Sensors | Measured values of the enabled sensors: Temp, TOUT (OneWire), Humidity, Press, QNH, GasRes, eCO2, Alt Press and, with the INA226, VBUS, VSHUNT, VAMP, VPOW. Values the node does not deliver are hidden. Below, chips show which sensors are active (BME280, BMP280, BMP390, BME680, MCU811, LPS, OneWire, AHT-20, INA226), and the OneWire Pin. |
| Firmware | Version (firmware of the node), Build (date of the firmware build) and the App Version. |
5.1 The log
The Log button at the end of the page opens the internal log of the app. It helps with troubleshooting (connection set-up, auto reconnect, scan diagnostics). In the window:
- Clear (top left) deletes the log.
- Copy copies the whole log to the clipboard, oldest entry first, with a header line of app version, platform and time. This way it can be pasted into an e-mail.
- Close closes the window.
6. Chat tab
6.1 The chat list
The Chat tab starts with a list of chats:
- To All Channel: messages to everyone (broadcast, "*" or "ALL").
- Direct Messages: personal messages to a callsign.
- Group n: one chat for each group the node subscribes to (see 4.9). It appears only if the group is occupied.
Each entry shows the last message as a preview ("CALLSIGN: text"), and for unread messages a green envelope and a counter badge. Two icons are on the right:
- Funnel: opens the filters of this chat (6.5). If a filter is active, the funnel is orange.
- Speaker: switches sound and notification sound for this chat on or off (crossed out = silent). A notification without sound still arrives.
Tapping the entry opens the chat. At the top left the arrow back leads to the list. The back gesture works too: on iOS swipe from the left edge, on Android use the back button.
6.2 Reading messages
A message shows the time and, if it was relayed by other stations, "· via CALLSIGN", below it the sender and the text. The app recognises links in the text and makes them tappable. When the date changes, a date bar appears. When you open a chat with unread messages, the marker "New Messages" stands at the first unread message. An arrow at the bottom right jumps to the end of the chat.
The app announces new messages by notification ("New Message from CALLSIGN"), also in the background. Own messages, commands that begin with "--" and filtered messages (6.5) do not trigger a notification.
6.3 Sending messages
- Open the chat. In the To All Channel and in a Group chat it is enough to type the text.
- In the Direct Messages chat the To Callsign field appears above the text field. Enter the callsign with SSID (for example
OE1KFR-1). The star next to it opens the favourites (6.6). - Type the text in the Type Message field (at most 150 characters). The field grows up to six lines.
- Tap the arrow at the bottom right. The text field is emptied and the keyboard disappears; the message is at the end of the chat.
Status icons of your own messages
| Icon | Meaning |
|---|---|
| Check mark | Sent: the message has arrived at your own node. |
| Cloud | Heard: the message was heard by another node and relayed. The callsign of that station is shown next to it. |
| Cloud with check mark | Acked: for a direct message the recipient has received the message (the confirmation came back). For broadcasts and groups, reception by a gateway confirms the forwarding to the MeshCom server. |
| Crossed-out cloud (orange) | Unconfirmed: a direct message stayed without confirmation for 6 minutes. The node gave up after four transmissions. If the confirmation still arrives, the icon becomes "Acked". |
Direct messages are sent up to four times by the node in case they get lost on the way. The app still shows only one message; it recognises copies received twice and hides them.
6.4 Message menu (long press)
A long press on a message opens a menu:
| Entry | Effect |
|---|---|
| Copy Text | Copies the message text. |
| Resend Message | Sends one of your own messages again (own messages only). |
| Direct Message | Switches to the DM chat with the sender as recipient (not in the DM chat itself). |
| Reply To | Sets the sender as recipient and puts "@CALLSIGN " in front in the text field. |
| Filter Text | Creates a text filter with this message text (6.5). |
| Add Favourite | Adds the callsign to the favourites (DM chat only, only if not yet present). |
| Block Callsign | Hides all messages of this callsign (6.5). Foreign messages only. |
6.5 Filters: blocking callsigns and hiding texts
The funnel in the chat list opens the Filters window. It has two parts: Filter Global (applies in all chats) and Filter of the selected chat (applies only there). Both have:
- Blocked Callsigns: blocked callsigns. With the plus icon you add one (Apply), with the red cross you lift the block. Delete All Callsign Blocks deletes the whole list.
- Text Filters: messages whose text matches the filter are hidden. For each filter you choose the scope ("Globally" or this chat) and the type: Exact Match (the whole text is identical) or Consists Of (the text occurs in the message). Filters can be edited (pencil) and deleted. Delete All Textfilters deletes all.
When blocking through the message menu, the app asks whether Globally or This Chat Only. Filtered messages stay stored, they are just not shown.
6.6 Favourites for direct messages
The star next to "To Callsign" opens the Favourites window. With Add you enter a callsign, a tap on an entry takes it over as recipient, the red cross deletes it. You can also take over callsigns from the message menu (Add Favourite). The list stays saved.
6.7 Firmware update notice
If the node runs a firmware older than 4.40 a, the Chat tab shows the notice "Firmware update recommended" once after connecting. With older firmware some functions can be limited (chapter 11).
7. Map tab
The map (OpenStreetMap) shows all nodes whose position the app has received. The map tiles are loaded from the internet; without internet the background stays empty, but the markers are there. Older positions are deleted after three days.
7.1 Markers
| Colour | Meaning |
|---|---|
| Purple | Your own (connected) node. |
| Green | Nodes your own node has heard directly over radio (see Heard Nodes). |
| Light blue | Austrian club stations and relay sites (callsigns of the form OE1XAB-1) that were not heard directly. |
| Blue | All other nodes, heard only through other nodes (mesh) or gateways. |
Tapping a marker opens a card with the details: callsign and APRS symbol, coordinates, altitude, battery, hardware, number of neighbours, subscribed groups, comment and name. More shows the sensor values, as far as the node sends them (pressure, temperature, humidity, QNH, eCO2, gas resistance, VBus and current of the INA226, the inputs of an MCP23017). DM switches to the chat and enters the callsign as recipient, Close closes the card.
7.2 The buttons
The button at the bottom right opens a menu with four functions:
| Open/close the menu (arrow up). | |
| Lines: shows red lines from your own node to the directly heard nodes. | |
| Search: search bar and list of all known nodes. While you type, the list filters by the beginning of the callsign. Tapping an entry centres the map on this node and opens its card. | |
| Centre: moves the map to your own node. | |
| Map Tracking on/off. The map then follows the position of the node. The node needs an enabled GPS for this. The app requests the position every 10 seconds. |
At the top right the state is shown:
Zoom with + and -, or with two fingers. Map Tracking switches on by itself when the map is opened if the node has a GPS, TRACK is switched off and a connection exists.
8. Heard Nodes tab
The tab shows all stations that the connected node has heard directly over radio. Each station has a card with the callsign, date and time of reception and the following values. Values the node does not send are hidden.
| Value | Meaning |
|---|---|
| RSSI (dBm) | Reception strength. Good up to -90, ok up to -100, weak up to -115, below that bad. |
| SNR (dB) | Signal-to-noise ratio. Very good from -5, good from -10, ok from -15, below that bad. |
| Dist (km) | Distance to the station, if its position is known. |
| Hardware | Hardware of the heard station. |
| Neighbours | Number of neighbours this station reports. |
| Hears me (dB) | How the station hears your own node (only with new firmware). This shows whether the radio link works in both directions. |
| Gateway | Appears with "Yes" if the station is a gateway. |
The values are coloured: green good, yellow/orange medium, red bad. The thresholds are the ones usual for LoRa. The signal bars in the Devices tab, in contrast, measure the Bluetooth signal to the phone and have their own thresholds (3.2). The list is loaded from the node when connecting and updated during operation. To delete: Settings → Advanced Settings → Clear Mheards.
9. In practice: typical procedures
9.1 Putting a new node into operation
- Switch the node on, open the Devices tab in the app and tap the card of the node.
- Confirm the message "Unconfigured Node!". The app switches to the Settings.
- Enter the Callsign and save it with the check mark. The node reboots, then connect again.
- Choose the Country Setting, save.
- Choose the Node Time Zone (preset), save.
- Set the position: Set Location - Phone GPS or Manual Location; for nodes with GPS switch the GPS on (User Buttons).
- Optional: APRS symbol and comment, groups, BLE PIN. At the first time set TX-Power to a sensible value.
- In the Devices tab switch Auto reconnect on.
9.2 Running a node as a gateway
- Enter the WLAN (WiFi Settings), or connect Ethernet on the RAK4631; set a fixed IP if needed.
- Choose the Gateway Server that fits your country (for HAMNET "Germany Hamnet-HC").
- Switch the GATEWAY button on. The node connects to the server and forwards messages.
9.3 Firmware update by OTA
- Settings → User Buttons → OTA Update → "YES". The node restarts in update mode, the Bluetooth connection ends (no auto reconnect).
- Open in the browser the address the app shows (
CALLSIGN.local, the IP address or, in AP mode,192.168.4.1). - Upload the firmware file (.bin). After the update the node restarts; connect again in the Devices tab.
9.4 Using a protected connection to a node
- In Settings → Custom BLE PIN 6 Digits set a PIN and tap the check mark (the PIN is stored on the phone at the same time).
- On another phone: Devices → key icon of the node card → enter the PIN → Save PIN, then connect.
- PIN forgotten: reset it with the serial console or the web interface of the node; the app can do this only after connecting.
10. Troubleshooting
| Problem | Possible cause and remedy |
|---|---|
| Node does not appear in the Devices tab | Node on? Bluetooth and Bluetooth/location permission granted to the app? Move closer. Switch "MeshCom only" off and on. The node sends nothing while another device is connected. |
| Connecting aborts at once | Wrong PIN (3.4). Remove the old pairing entry in the Bluetooth settings of the phone. On Android switch Bluetooth off and on. |
| On Android the node is hard to find or to connect to | It depends on the phone. Scan closer to the node (RSSI -80 dBm or better), restart the app. On iOS this rarely happens. The log (chapter 5.1) shows the scan count of the node. |
| "Loading Config" stays for a long time | This is normal with many heard stations (up to a minute). The app requests missing data itself (3.6). If that does not help, Cancel, disconnect, connect again. |
| After saving settings the connection is gone | The node reboots (Callsign, WiFi, fixed IP, Gateway Server). Connect again. |
| Button does not change its state | The app waits for the answer of the node (a few seconds). If it does not come, check the connection. With older firmware some commands do not exist. |
| Sensor button is red | The sensor is switched on but was not found on the I2C bus. Check the wiring, then Scan I2C at the node. |
| Messages are missing in the chat | Filter active (funnel orange)? Callsign blocked? "No ALL Msgs" switch active? Messages older than three days are deleted. |
| Direct message shows "Unconfirmed" | No confirmation from the recipient within 6 minutes. Recipient not reachable or the path is too poor. Send again with Resend. Always enter the callsign with SSID. |
| Map stays empty | No internet for the map tiles. Markers are still shown. |
| No notification for new messages | Notification permission granted on the phone? Speaker icon of the chat on "on"? On Android check the battery optimisation for the app. |
11. Firmware versions
The app expects firmware 4.40 a or newer. With older firmware:
- After connecting, the notice "Firmware update recommended" appears in the Chat tab.
- With firmware older than 4.35 v the complete handling of the repetition of direct messages is missing (a node sends each copy separately, and the app then filters it only partly).
- The following settings appear only if the node reports them: Max Hop, IP MTU, Battery Display, Max. Battery Voltage (single-cell battery only), Remote Netconsole, KISS Interface, INA226, the time zone rule (Node Time Zone: preset and rule), Manual Routing (VIA) and the display of the web password.
- The build date of the firmware in the Info tab ("Build") is missing on older nodes.
Appendix A: All settings and their function at a glance
| Section in the Settings | Function | Firmware command |
|---|---|---|
| Callsign | Callsign of the node (reboot) | --setcall |
| WiFi Settings | WLAN SSID and password (reboot) | --setssid, --setpwd |
| APRS Settings | Symbol, comment, name | --symid, --symcd, --aprscomment, --setname |
| Custom BLE PIN | Bluetooth PIN of the node | --btcode |
| Set Location - Phone GPS / Manual Location | Fixed position | --setlat, --setlon, --setalt |
| Node Time Zone | Time zone, automatic daylight saving | --settz, --utcoff |
| Country Setting | LoRa frequency and parameters | --setctry |
| Group Subscription | Subscribe to up to 6 groups | --setgrc |
| User Buttons: GATEWAY | Gateway operation | --gateway |
| User Buttons: DISPLAY | Display on/off | --display |
| User Buttons: RX Gain Boost | Boosted reception (ESP32 with SX1262) | --setboostedgain |
| User Buttons: Webserver | Web interface | --webserver |
| User Buttons: MESH | Forwarding foreign messages | --mesh |
| User Buttons: No ALL Msgs | Hide broadcasts to "*" | --nomsgall |
| User Buttons: BUTTON | Evaluate user button | --button |
| User Buttons: Wifi AP | Own access point | --wifiap |
| User Buttons: GPS | GPS module on/off | --gps |
| User Buttons: TRACK | SmartBeaconing LoRa-APRS | --track |
| User Buttons: Send POS | Send position once | --sendpos, --sendtrack |
| User Buttons: POS-Info | Request position data | --pos |
| User Buttons: Scan I2C | Search I2C devices | --showi2c |
| User Buttons: OTA Update | Update mode (ESP32 only) | --ota-update |
| User Buttons: REBOOT / Deep Sleep | Restart / deep sleep | --reboot now, --deepsleep |
| KISS Interface | KISS/TCP port, TX, metadata, login | --kiss ... |
| TX-Power | Transmit power | --txpower |
| Gateway Server | Server of the gateway (reboot) | --gateway srv |
| Max Hop | Hop limit for text messages | --maxhop |
| Hardware Pins | Pin of the user button and of OneWire | --button gpio, --onewire gpio |
| Sensor Settings | Sensors on/off, Sensor Info, Scan I2C | --bme, --bmp, --390, --680, --811, --aht20, --sht21, --lps33, --onewire, --wx |
| Temperature Offset | Temperature correction | --tempoff |
| INA226 | Shunt, maximum current, averaging | --shunt, --imax, --isamp |
| Max. Battery Voltage | Voltage for 100 % battery | --maxv |
| Fixed IP Settings | Fixed IP, gateway, DNS, NTP (reboot) | --setownip, --setowngw, --setownms, --setowndns, --setownntp |
| IP MTU | Packet size of the IP interface | --mtu |
| Ext. UDP Interface | Pass MeshCom data on by UDP | --extudp, --extudpip |
| Remote Netconsole | Console in the network (port 2323), password | --netconsole, --passwd |
| Manual Routing (VIA) | Messages through a specific node | --via |
| Web UI Password | Password of the web interface | --webpwd |
| Manual Command | Any command (starts with "--") | any |
| Battery Display | Display shows voltage or percent | --volt, --proz |
| Advanced Settings | Delete data on the phone | (app only) |
Appendix B: Important limits
| Value | Limit |
|---|---|
| Message text in the chat | at most 150 characters |
| Callsign of the recipient (To Callsign) | at most 11 characters, with SSID |
| Node callsign | at most 11 characters, form OE1KFR-1 |
| WLAN SSID / WLAN password | 33 / 64 characters |
| APRS Comment / APRS Name | 15 / 15 characters |
| Web password / Netconsole password | 19 / 14 characters |
| BLE PIN | 6 digits, 100000–999999 |
| Time zone rule | at most 39 characters, no spaces |
| Groups | 6 slots, 1 to 5 digits each |
| Max. Battery Voltage | 3.7 to 4.5 V |
| INA226 shunt / maximum current | 0.001–0.5 Ω / 0–20 A |
| Manual Command | at most 250 bytes |
| Retention of messages and positions | 3 days |
| Send POS: minimum interval | 10 seconds |
Appendix C: Time zone presets
| Preset | POSIX rule |
|---|---|
| Europe - Vienna (CET; also Berlin, Zurich, Rome ...) | CET-1CEST,M3.5.0,M10.5.0/3 |
| Europe - London | GMT0BST,M3.5.0/1,M10.5.0 |
| Europe - Dublin | GMT0IST,M3.5.0/1,M10.5.0 |
| Europe - Lisbon | WET0WEST,M3.5.0/1,M10.5.0 |
| Europe - Athens (EET; also Helsinki, Kyiv ...) | EET-2EEST,M3.5.0/3,M10.5.0/4 |
| Europe - Moscow | MSK-3 |
| Europe - Istanbul | <+03>-3 |
| Europe - Reykjavik | GMT0 |
| America - New York / Chicago / Denver / Los Angeles | EST5EDT,... / CST6CDT,... / MST7MDT,... / PST8PDT,M3.2.0,M11.1.0 |
| America - Phoenix (no daylight saving) | MST7 |
| America - Sao Paulo | <-03>3 |
| Africa - Johannesburg | SAST-2 |
| Asia - Dubai / Kolkata / Shanghai / Tokyo | <+04>-4 / <+0530>-5:30 / CST-8 / JST-9 |
| Australia - Sydney (also Melbourne) / Perth | AEST-10AEDT,M10.1.0,M4.1.0/3 / AWST-8 |
| New Zealand - Auckland | NZST-12NZDT,M9.5.0,M4.1.0/3 |
| UTC | UTC0 |
In a POSIX rule the sign is reversed compared with the usual notation: CET-1 means UTC+1.
Further information: https://icssw.org/meshcom-4-0-faq/ and https://icssw.org/meshcom-app/ .