Skip to content

Die unsichtbare, node-lokale Mesh-Optimierungs-Schicht (Architektur)

Vision: MHR als eine für Nutzer und Anwendung transparente Zwischenschicht zwischen Funk-Empfang und dem bestehenden MeshCore-Routing. Niemand stellt etwas um, kein Paket sieht anders aus, die Chat-/Messaging-Funktion bleibt bit-identisch — das Netz arbeitet einfach leiser, kürzer, zuverlässiger. Vollständig dezentral: jeder Knoten entscheidet allein aus dem, was er ohnehin hört. Kein Server, keine Koordination, keine neue Infrastruktur.

Grundlage: validiert auf echten CoreScope-Daten (../sim/, MeshCore_Simulation_v3/v4, Studie).


1. Zwei Ebenen, beide node-lokal

            ┌──────────────────────────────────────────────┐
   Funk-RX ─┤  (P) PASSIVE WAHRNEHMUNG  — 0 Airtime          │  hört nur mit, was eh fliegt
            │   • Nachbar-Tabelle (EWMA-SNR)                  │
            │   • 2-Hop-Adjazenz (frische-gegatet)           │
            │   • Redundanz/Cover-Histogramm                 │
            │   • lokaler Pfadlängen-Hist (= lok. Durchmesser)│
            │   • Duty-Cycle-Auslastung, Churn               │
            └───────────────┬──────────────────────────────┘
                            │ speist
            ┌───────────────▼──────────────────────────────┐
   Routing ─┤  (D) LOKALE ENTSCHEIDUNGEN  — kein neues Paket │  ändert nur Timing/ob/welcher Pfad
            │   1 Hop-gewichtetes Flood-Timing  (Stufe A ✅) │
            │   2 Guarded Suppression G1–G5     (Stufe B ✅) │
            │   3 Pfad-Erfolgs-Reinforcement    (neu)        │
            │   4 flood.max = lok. Durchmesser  (Stufe A ✅) │
            │   5 Duty-Cycle-Selbstschutz       (defensiv)   │
            └────────────────────────────────────────────────┘

(P) kostet null Airtime (reine Beobachtung). (D) erzeugt kein neues Paket und ändert kein Format — es beeinflusst nur, wann / ob / über welchen gecachten Pfad der Knoten ohnehin sendet.


2. Was die Schicht „unsichtbar" macht (Transparenz-Garantien)

  • Kein Paketformat-Eingriff, keine neuen Pflichtfelder, keine neuen Paket-Typen → Alt-Knoten und die App sehen exakt das heutige Protokoll.
  • Keine app-/nutzersichtbare Verhaltensänderung — Messaging/Discovery funktionieren identisch; der einzige beobachtbare Effekt ist weniger Airtime / kürzere Pfade / höhere Zuverlässigkeit.
  • Jede Komponente „nie schlechter als Upstream" und einzeln abschaltbar (CLI). Default-sicher.
  • Mixed-Firmware: koexistiert mit Stock-Knoten; bei Unsicherheit immer die sichere Aktion (senden).

3. Was sie „node-only" macht (Dezentralitäts-Garantien)

  • Jede Entscheidung aus lokal beobachtbaren Daten (eigene RX, eigene Nachbarschaft) — kein zentraler Dienst, keine Inter-Node-Aushandlung über das hinaus, was ohnehin fliegt.
  • Kein Backbone, kein Control-Plane-Overlay (das wäre Phase 2 — bewusst NICHT Teil dieser Schicht, weil es Kontroll-Traffic = Airtime kostet und nicht mehr „unsichtbar/gratis" ist).
  • Konvergiert allein durch Mithören; ein frisch gebooteter Knoten fällt sauber auf konservativ zurück, bis er genug gelernt hat (Frische-Gating).

4. Die Bausteine (Status)

# Baustein Status Wirkung (auf Realdaten)
P Passives Sensing (Nachbarn, 2-Hop, Redundanz, Durchmesser, Duty-Cycle) Fundament (Teile in Stufe A/B) ermöglicht alles Übrige, 0 Airtime
1 Hop-gewichtetes Flood-Timing ✅ im Code (Stufe A) kürzere Pfade führen den Flood
2 Redundanz-guarded Suppression (G1–G5) ✅ im Code, default-AUS (Stufe B) −12…15 % Airtime bei hoher Adoption, Delivery ≥ Baseline
3 Pfad-Erfolgs-Reinforcement (EWMA-Erfolg je Pfad, bewährte verstärken, wackelnde demoten vor Ausfall) neu — hier zu simulieren weniger Re-Discovery-Airtime, stabilere Routen
4 flood.max = realer Durchmesser (15) ✅ im Code (Stufe A) kappt Fern-Umwege
5 Duty-Cycle-Selbstschutz (defensiver Backoff nahe Limit) Konzept schützt vor eigener Sättigung

Verworfen (ehrlich, datenbelegt): schneller adaptiver Regler, langsame per-Node-Kalibrierung, TPC — sie bringen über die Guards hinaus nichts (siehe Adaptive_Controller_Design.md, Local_Calibration_Study.md). Die Schicht bleibt darum bewusst schlank.


5. Node-Realisierbarkeit (die Kernfrage)

Ressource Bedarf der Schicht Heltec V4 (ESP32-S3) nRF52840
RAM (fixe Tabellen) ~1–2 KB (Nachbarn + 2-Hop + Pending + Pfad-Memory) 512 KB ✅ reichlich 256 KB ✅
CPU pro Paket wenige Integer-Vergleiche (Guards) trivial trivial
CPU „alle paar Stunden" (entfällt — kein Regler nötig)
Flash wenige KB Code reichlich reichlich
Airtime (der eigentliche Engpass) 0 zusätzlich (rein passiv + nur weniger senden)

Erste Einschätzung: realistisch node-only implementierbar. Keine dyn. Allokation, fixe Tabellen, kein Server. Der Engpass (Airtime) wird gesenkt, nicht belastet. Offene Validierung: der Komposit-Effekt (interagieren die Bausteine sauber?), das Pfad-Reinforcement (neu), und die Hardware-Bench-Punkte der Suppression (Cover-Timing, 2-Hop-Frische).


6. Abgrenzung

Diese Schicht ist die gratis, unsichtbare, sichere Optimierung. Der proaktive Backbone (Phase 2) ist explizit NICHT enthalten — er ist mächtiger, aber er kostet Kontroll-Airtime und ist sichtbar im Sinne neuer Paket-Typen; er bleibt die separate, ambitionierte Kür.


🇬🇧 English Translation

The Invisible, Node-Local Mesh Optimization Layer (Architecture)

Vision: MHR as a transparent intermediate layer — invisible to users and applications — between radio reception and the existing MeshCore routing. Nobody reconfigures anything, no packet looks different, the chat/messaging function stays bit-identical — the network simply works quieter, shorter, more reliably. Fully decentralized: every node decides on its own from what it hears anyway. No server, no coordination, no new infrastructure.

Basis: validated on real CoreScope data (../sim/, MeshCore_Simulation_v3/v4, study).


1. Two Layers, Both Node-Local

            ┌──────────────────────────────────────────────┐
   Radio-RX ─┤  (P) PASSIVE SENSING  — 0 Airtime             │  only listens to what flies anyway
            │   • Neighbor table (EWMA-SNR)                   │
            │   • 2-hop adjacency (freshness-gated)          │
            │   • Redundancy/cover histogram                 │
            │   • Local path-length hist (= local diameter)  │
            │   • Duty-cycle utilization, churn              │
            └───────────────┬──────────────────────────────┘
                            │ feeds
            ┌───────────────▼──────────────────────────────┐
   Routing ─┤  (D) LOCAL DECISIONS  — no new packet          │  only changes timing/whether/which path
            │   1 Hop-weighted flood timing   (Stage A ✅)   │
            │   2 Guarded Suppression G1–G5   (Stage B ✅)   │
            │   3 Path-success reinforcement  (new)          │
            │   4 flood.max = local diameter  (Stage A ✅)   │
            │   5 Duty-cycle self-protection  (defensive)    │
            └────────────────────────────────────────────────┘

(P) costs zero airtime (pure observation). (D) generates no new packet and changes no format — it only influences when / whether / via which cached path the node transmits anyway.


2. What Makes the Layer "Invisible" (Transparency Guarantees)

  • No packet-format intrusion, no new mandatory fields, no new packet types → legacy nodes and the app see exactly today's protocol.
  • No app-/user-visible behavioral change — messaging/discovery work identically; the only observable effect is less airtime / shorter paths / higher reliability.
  • Every component "never worse than upstream" and individually disableable (CLI). Default-safe.
  • Mixed firmware: coexists with stock nodes; when in doubt, always the safe action (transmit).

3. What Makes it "Node-Only" (Decentralization Guarantees)

  • Every decision from locally observable data (own RX, own neighborhood) — no central service, no inter-node negotiation beyond what is already in flight.
  • No backbone, no control-plane overlay (that would be Phase 2 — deliberately NOT part of this layer, because it costs control traffic = airtime and is no longer "invisible/free").
  • Converges purely by overhearing; a freshly booted node falls back cleanly to conservative behavior until it has learned enough (freshness gating).

4. The Building Blocks (Status)

# Building Block Status Effect (on real data)
P Passive sensing (neighbors, 2-hop, redundancy, diameter, duty-cycle) Foundation (parts in Stage A/B) enables everything else, 0 airtime
1 Hop-weighted flood timing ✅ in code (Stage A) shorter paths lead the flood
2 Redundancy-guarded suppression (G1–G5) ✅ in code, default-OFF (Stage B) −12…15 % airtime at high adoption, delivery ≥ baseline
3 Path-success reinforcement (EWMA success per path, strengthen proven paths, demote shaky ones before failure) new — to be simulated here less re-discovery airtime, more stable routes
4 flood.max = real diameter (15) ✅ in code (Stage A) cuts off long-range detours
5 Duty-cycle self-protection (defensive backoff near limit) Concept protects against own saturation

Discarded (honestly, data-backed): fast adaptive controller, slow per-node calibration, TPC — they add nothing beyond the guards (see Adaptive_Controller_Design.md, Local_Calibration_Study.md). The layer therefore remains deliberately lean.


5. Node Feasibility (the Core Question)

Resource Layer's requirement Heltec V4 (ESP32-S3) nRF52840
RAM (fixed tables) ~1–2 KB (neighbors + 2-hop + pending + path memory) 512 KB ✅ ample 256 KB ✅
CPU per packet few integer comparisons (guards) trivial trivial
CPU "every few hours" (not needed — no controller required)
Flash few KB of code ample ample
Airtime (the actual bottleneck) 0 additional (purely passive + only transmit less)

Initial assessment: realistically implementable node-only. No dynamic allocation, fixed tables, no server. The bottleneck (airtime) is reduced, not added to. Open validation: the composite effect (do the building blocks interact cleanly?), path reinforcement (new), and the hardware bench points of suppression (cover timing, 2-hop freshness).


6. Delimitation

This layer is the free, invisible, safe optimization. The proactive backbone (Phase 2) is explicitly NOT included — it is more powerful, but it costs control airtime and is visible in the sense of new packet types; it remains the separate, ambitious stretch goal.