Was wurde geaendert
1. Store-and-Forward (S&F) fuer Direktnachrichten
Dateien: src/msgstore.cpp, src/msgstore_api.h, src/msgstore_glue.cpp, src/msgstore_settings.{h,cpp},
src/sto_notice.{h,cpp}, src/dm_dedup.{h,cpp}, src/reack_limiter.{h,cpp}, src/dm_stats.{h,cpp}, Haken in
src/lora_functions.cpp und src/loop_functions.cpp, Web-Seite /?page=mailbox.
- Problem: Eine Direktnachricht (DM) an eine gerade nicht erreichbare Station geht verloren.
- Absenderseite unveraendert gegenueber upstream:
MAX_RETRANSMIT3 im Abstand von 40 s, also 4 Sendungen in ca.
2 Minuten, neuemsg_idje Kopie (pnRetryId) bei stabiler{NNN. Neu sind nur eine Rueckmeldung 0x03
„fehlgeschlagen“ an die App beim Aufgeben und zusaetzliche Zaehler (ack=,rtt=,att=). - Empfaenger: doppelte DMs werden verworfen (Dedup ueber Quelle und NNN), aber erneut quittiert (Re-ACK, begrenzt durch
reack_limiter), damit ein verlorener ACK keine Dauerschleife ausloest. - Mailbox-Knoten (Store-Node): speichert eine DM, deren Ziel er nicht erreicht (keine Hop-Pruefung beim Speichern).
Sobald er das Ziel wieder direkt hoert (Pfad ohne Komma), liefert er mit einer 9-stufigen Leiter bei
max_hop 0aus: Sendungen bei 0/40/80/180/220/260/360/400/440 s (insgesamt 7 min 20 s), danach 1 h Pause je
Eintrag. Jede Sendung hat eine neuemsg_id(millis()),{NNNbleibt. Zufallsverzoegerung 5-60 s; hoert er eine
Auslieferung eines anderen Knotens fuer dieselbe (Quelle, NNN), bricht er ab; ein ACK beendet die Leiter. Die
Mailbox liegt nur im RAM, ein Neustart verwirft sie. - Grenzen: Aktion hoechstens alle 30 s, hoechstens 20 Aktionen pro Stunde und Knoten, keine Auslieferung bei QRS/QRT
oder mehr als 25 % Kanalauslastung (5 min). Nutzlast bis 160 Byte. - Rueckmeldung an den Absender: Status 0x04 (gehalten, Halter angehaengt) und optional der Text
:stoNNN <Ziel>
(ratenbegrenzt,--storenotice, Standard an). - Modi (
--store):off(Standard) |own(Ziele mit demselben Basis-Rufzeichen wie der Knoten) |list
(Rufzeichen aus--storecall, max. 16) |heard(Ziel in den letzten 12 h gehoert). - Hardware: Boards mit
ENABLE_MSGSTORE(alle ESP32-S3-Envs, RAK4631, T114, T-Echo). Sonst nicht eingebunden. - Persistenz: eigener Satz (NVS auf ESP32,
/msgstore.cfgim LittleFS auf nRF52), nicht ins_meshcom_settings.
2. Nachbarschaftsmatrix (NBR)
Dateien: src/nbr_matrix.{h,cpp}, src/nbr_mask.h, src/nbr_views.{h,cpp}, src/topo_ui.{h,cpp}, Anbindung in
src/lora_functions.cpp und src/txring_functions.cpp, Anzeige /?page=neighbours, Kommando --neighbours.
- Berechnet eine lokale Zwei-Hop-Matrix „Station Y hoert Station X“ aus den Pfadfeldern empfangener Frames (12-h-Fenster)
und HEY-Signalberichten. Die Matrix selbst wird nicht gesendet. - Pro weiterzuleitendem Frame (Quelle, NNN): Bedarf(F) = direkte Nachbarn, die das Frame noch nicht haben; Allein(F) =
Nachbarn, die nur ich erreiche. Fall A (Allein nicht leer): ich relaye mit Prioritaet, nie abbrechen. Fall B:
andere decken ab, ich relaye mit Backoff und breche ab, sobald die Abdeckung gehoert wird (abdeckungs-, nicht
zaehlerbasiert). Die Abbruch-Pruefung liest den TX-Ring jetzt unter dem Ring-Lock erneut, bevor sie einen Slot
freigibt. - Textframes (
:) und damit auch vom Server eingespeiste Frames fuettern nur den eigenen Schritt (ME), keine
Pfadkanten; so entstehen keine Phantom-Nachbarn. - Kein neues Luftformat fuer die Entscheidung: aeltere Firmware flutet weiter wie bisher. Optionaler HN-Bericht
(--nbrreport, Standardauto): ein HEY-Frame an „HN“ je 15 min beimax_hop 0; Stock-Firmware verwirft ihn, weil
„HN“ die Rufzeichen-Pruefung nicht besteht. - Speicher: ESP32-S3 und nRF52840 128 Zeilen / 512 Kanten,
NbrMatrix13.992 B, TX-Ring-Masken 660 B; klassischer
ESP32 64 Zeilen / 256 Kanten, 5.592 B, 340 B. - Schalter liegen in
node_sset40x0100-0x2000 und damit ausserhalb der KISS/TCP-Bits 0x0010-0x0080.
3. MHeard und Pfadtabelle durch die NBR ersetzt (sichtbare Verhaltensaenderung)
src/mheard_functions.{cpp,h} und src/mheard_throttle.h entfallen, src/mh_phone.{h,cpp} ist die Nachfolge.
--mheard(seriell): statt der ASCII-Tabelle Zeilen[MH] key=value, neueste zuerst; Spalten pl/mesh und numerische
HW-ID entfallen.--path, Web-Pfadseite, T-Deck-Pfad-Tab: zeigen Hop-Zahl und Nachbarn aus der Matrix statt der vollstaendigen
Relay-Pfadzeichenkette.- Web-MHeard-Seite: SNR als 8-Frame-Mittel, andere Beschriftung, zusaetzliche Felder.
- BLE-MHeard-Rahmen zur App: neueste zuerst, hoechstens ein Live-Rahmen je Station und Minute, sieben neue Schluessel
(AGE HM ROLE EX NB GW VIA) am Ende angehaengt, alte 13 Schluessel und deren Reihenfolge unveraendert. Fuer direkte
Stationen ohne Detail-Platz (mehr als 64 / 48 direkte Nachbarn auf S3, RAK / klassischem ESP32) fehlen RSSI, SNR,
PLT, MOD, PL und MESH im Rahmen statt Platzhalterwerten; DIST bleibt immer numerisch. Die Stock-App toleriert
unbekannte Schluessel und fehlende Werte (geprueft gegen den App-Quelltext). - Auf der Luft aendert sich der Wert, nicht das Format, der Nachbarzahl in HEY
R<n>, Position/Nund HEY-Signalbericht:
vorhergetMheardCount()(alle in 60 min gehoerten Stationen), jetztNCNT(zweiseitige Nachbarn, hoechstens 99,
kleiner oder gleich dem alten Wert). Server und Karte zeigen daher fuer neue Knoten systematisch kleinere Zahlen. - Persistenz:
/mheard.datund/mhpath.datwerden beim ersten Start geloescht (Historie geht einmalig verloren),
Speicherintervall 30 s -> 10 min, T-Deck Pro schreibt neu/topo.datauf die SD. - Kapazitaet mit voller Detailzeile: S3/RAK 80 -> 64, klassischer ESP32 30 -> 48.
4. Neue serielle/USB-Kommandos (19)
Standardwerte in der Spalte „Std.“. Nur --nbrdebug, --nbrrelay, --nbrsym, --nbrreport sind Zeilen der Tabelle
COMMAND_TOGGLES (src/command_functions.cpp, 80 Zeilen insgesamt, Typen in src/command_toggles.h); alle anderen
sind handgeschriebene Stufen der Kommandokette.
| Kommando | Argumente | Std. | Wirkung | Speichern | Einschraenkung |
|---|---|---|---|---|---|
--neighbours |
– | – | Nachbarmatrix anzeigen (Kurzform --nbr) |
nein | |
--nbrreset |
– | – | Matrix leeren | nein | |
--nbrcheck |
– | – | Konsistenzpruefung der Matrix | nein | |
--nbrdebug |
on/off | off | Debugausgabe aller NBR-Entscheidungen | ja | |
--nbrrelay |
off/count/on | off | Relay-Entscheidung: aus / nur protokollieren / aktiv abbrechen | ja | |
--nbrsym |
on/off | on | Symmetrie-Annahme (SNR >= -16 dB), wenn keine direkte Beobachtung vorliegt | ja | |
--nbrreport |
off/auto/on | auto | HN-Nachbarbericht (auto: nur wenn Mesh und Gateway aus) |
ja | |
--store |
off/own/list/heard | off | Mailbox-Modus; ohne Wert: Status | ja | ENABLE_MSGSTORE |
--storecall |
Liste/none | leer | Rufzeichen fuer Modus list (max. 16) |
ja | ENABLE_MSGSTORE |
--storeslots |
1-50 | 50 | Mailbox-Plaetze | ja | ENABLE_MSGSTORE |
--storetime |
1-168 | 24 | Haltezeit in Stunden | ja | ENABLE_MSGSTORE |
--storenotice |
on/off | on | :sto-Hinweis an den Absender |
ja | ENABLE_MSGSTORE |
--mbox |
– | – | Mailbox-Inhalt anzeigen | nein | ENABLE_MSGSTORE |
--msgid |
– | – | Nachrichtenzaehler anzeigen | nein | |
--airgap |
on/off/show | off | Pruefstand: Empfang verwerfen, Senden verweigern | nein | |
--battprobe |
[n] 1-10 | 1 | Batterie-ADC-Messung (ca. 7,5 s je Zyklus) | nein | INSTRUMENT_ENABLED, Heltec mit geschaltetem Teiler |
--dumpsettings |
– | – | Rohdump der Einstellungen | nein | nur nRF52 |
--keylock |
on/off | off | Tastensperre (SYM+K) | ja | T-Deck, T-Deck Plus |
--ethmtu |
1280-1500 | 1500 | Ethernet-MTU (kleiner als 1500 begrenzt die TCP-MSS des Webservers) | ja | RAK4631 |
Weitere Aenderungen: --help ist nach Gruppen gegliedert und hinter den Guards der jeweiligen Handler; ein Teil der
Kommandos hat weiterhin keinen Hilfetext. Exakte Token statt Praefix-Treffer in der Toggle-Tabelle. Entfernt wurde
auskommentierter Code der Testkommandos --compress und --softser test|test0|xml.
5. Strukturelle Aenderungen
s_meshcom_settingshat eine einzige Definition insrc/meshcom_settings.h; Schema und Flash-Pfade in
src/settings_schema.*,src/settings_store.*(ESP32: NVS mit unveraenderten Schluesselnamen, nRF52: Datei).
Die Wertebereiche des Schemas sind die Obergrenzen der Setter (u. a.node_postimebis 86400 s,node_altbis
40000,node_gpsdebugbis 3,--postimebegrenzt jetzt auf einen Tag).- Zaehler (
node_msgidu. a.) getrennt insrc/counters_store.h;finalizeAndSendAPRS()ersetzt die Einzelkopien
des Sende-Abschlusses;save_msgid()entfaellt. - BLE: Phone-Frame-Zerlegung und Drain in
src/ble_phone_*.h; UDP/Gateway insrc/udp_frame*,src/gateway_service*. - Datenbank-/Hilfsmodule:
src/country_profile.*,src/radio_units.*,src/loop_scheduler.*,src/uptime_min.h,
src/batt_pipeline.h,src/ui_common/*.
6. Build-Aenderungen (fuer den Reviewer sichtbar)
- RAK4631 baut mit
-Osstatt-Ofast(variants/wiscore_rak4631/platformio.ini,build_unflags = -Ofast,-Os):
Flash 96,1 % -> ca. 70 %, RAM unveraendert; beendet dort-ffast-math, damit funktionierenisnan()-Pruefungen in
upstream-Code (z. B.bmx280.cpp,onewire_functions.cpp) wieder. T114 und T-Echo bleiben auf-Ofast. - Klassische T-Beam-Envs: PSRAM-Build-Flags entfernt. E22_XML: KISS/TCP wieder einkompiliert,
MC_CAPTURE=0->
MC_DIAG=0,tinyxml2als eingebettete Kopie unterlib/tinyxml2. t5_epaperbaut jetzt (neueconfiguration.h, bq27220-Quellen,lib_deps); T-Deck-Pro-LVGL-Speicher im PSRAM.- Neue Basis-Sektionen
[esp32_s3]/[esp32_classic]mit gemeinsamemupload_commandueber$BUILD_DIR
(Adressen, Dateien und--portunveraendert). - Neue Batterie-Pipeline fuer alle Boards (
src/batt_pipeline.h, andere Abtastung).OneWire_GPIO99 -> -1 bei 8 Boards. settings_schema.cppist in den Safeboot-Envs im Quellfilter (die Flash-Pfade benutzen das Schema).default_envs, Partitionstabellen und-Werrorsind unveraendert; die Workflow-Dateimeshcom-ci.ymlbraucht keine
Aenderung (gleiche Envs, gleiche Artefaktpfade).safeboot.binundsafeboot-s3.binsind aus diesem Stand neu gebaut (Eingabenesp32_flash.*und
settings_schema.cpphaben sich geaendert).
7. Entfernt
- 43 ungenutzte Adafruit-GFX-Fonts unter
src/Fonts/, 11 AVR-/SAMD-/ESP8266-Dateien untersrc/Platforms/,
src/nrf52/glcdfont.c(Duplikat),src/t-deck-pro/ui_scr_mrg.c(ersetzt durchsrc/ui_common/scr_mgr.c),
src/idf_component.yml.orig.
Behobene Fehler
Nur Fehler, die in upstream/dev 1d4f525 noch vorhanden sind.
- BLE-N1/N2/N3 (nRF52): ein abgelehntes Notify verlor das Frame (upstream verwirft das Frame unabhaengig vom
Sendeergebnis); jetzt RueckgabeBLE_SEND_*und Wiederholung. - BLE-N4: Telefon mit falscher PIN-Pruefsumme wird sofort getrennt (upstream prueft nur im Rx-Callback).
- nRF52: Schreiben der Einstellungen ueber BLE kopierte das ganze Telefon-Abbild inklusive veraltetem
node_msgid
ueber die laufenden Einstellungen; der Zaehler lief zurueck. - P13: Pong an das eigene Rufzeichen erreicht den BLE-Client.
- P14:
{ping}wurde aussendMessage()wiederholt gesendet, jetzt einmal. - P15: eigene Nachrichten ohne Wiederholung behalten ihre TX-Ring-Prioritaet (upstream behandelt sie als Relay).
- Feature Request / Bug Heltec Wireless Tracker – Screen backlight does not turn off via Android App „Display OFF“ command (TFT\_BL GPIO 21) #1182: T-Tracker: TFT-Hintergrundlicht folgt „Display aus“.
- Webserver funktioniert nicht aus anderem Subnetz – RAK mit LAN #1183 (opt-in): W5100S (RAK4631) begrenzt die TCP-MSS nicht;
--ethmtuunter 1500 setzt sie fuer den Webserver.
Standard 1500 laesst das Verhalten unveraendert. - Corrupted special/diacritic characters when sending messages via WEBService #1173 (Rest): der Nachrichtenzaehler der Weboberflaeche zaehlt UTF-8-Bytes.
- Web: tote Schalter der Info-Seite entfernt (die Schalter sind jetzt gegen nicht gebaute Funktionen abgesichert).