Ein Single-Hop-BLE Tag erreicht 10-30 Meter Reichweite in Innenraeumen. In einem 20.000 m2 grossen Lager bedeutet das dutzende Gateways fuer volle Abdeckung. Mesh-Netzwerke drehen das Modell um: Tags leiten Pakete gegenseitig weiter und erweitern die Reichweite Hop fuer Hop, bis die Daten ein Gateway erreichen. BLE Mesh 1.0 (2017) fuehrte Managed-Flood-Relay ein; Mesh 1.1 (2023) ergaenzte Directed Forwarding. Fuer Asset-Tracking loest Mesh drei Probleme: Reichweitenerweiterung ohne proportionale Gateway-Kosten, Fehlertoleranz durch redundante Pfade und schrittweise Verschlechterung bei Ausfall einzelner Tags.
Dieser Artikel zerlegt Mesh-Netzwerke aus der Perspektive batteriebetriebener Asset-Tags. Wir behandeln Protokoll-Internals, Relay-Knotenauswahl, Energiebudget-Berechnungen, Latenz und Durchsatz, Skalierbarkeitsgrenzen bei 100 bis 5000+ Knoten, Provisionierung im grossen Stil, Sicherheitsarchitektur und Vendor-Stack-Vergleich.
1. BLE Mesh-Protokollstack
BLE Mesh arbeitet ausschliesslich auf Advertising-Kanaelen (37/38/39 bei 2402/2426/2480 MHz) mit verbindungslosen PDUs. Der Stack hat fuenf Schichten:
| Schicht | Funktion | Schluesselparameter |
|---|---|---|
| Bearer | Transport ueber ADV oder GATT | ADV: 31-Byte PDU, 3 Kanaele; GATT: Proxy, 20-Byte MTU |
| Netzwerk | Adressierung, Relay, TTL | 29-Byte PDU, 7-Bit TTL, 24-Bit SEQ, 15-Bit Unicast |
| Unterer Transport | Segmentierung, Reassemblierung | 12-Byte Segment, 20s ACK |
| Oberer Transport | App-Key-Verschluesselung | Access-Payload-Verschluesselung, 4-Byte transMIC |
| Access | Modellnachrichten, Opcodes | Vendor 3 Byte, SIG 2 Byte |
Die Netzwerk-PDU ist kompakt: 1 Byte TTL, 3 Bytes SEQ (24-Bit-Sequenz fuer Replay-Schutz), 2 Bytes SRC, 2 Bytes DST und bis zu 12 Bytes Transport-Payload. Die gesamte PDU wird mit dem 128-Bit Network Key verschluesselt. Relay-Knoten leiten Pakete weiter, ohne den Anwendungs-Payload zu entschluesseln.
Fuer Asset-Tags ist der ADV-Bearer die einzige praktikable Option. GATT-Verbindungen verbrauchen 3-5 mA waehrend Verbindungsereignissen, was fuer Knopfzellen-Tags untragbar ist. Der Relay-Mechanismus arbeitet ausschliesslich auf dem ADV-Bearer.
2. Managed Flood: Wie Relay funktioniert
BLE Mesh verwendet Managed-Flood-Relay, keine Routing-Tabellen. Jeder Knoten mit aktivierter Relay-Funktion sendet empfangene Nachrichten erneut, gesteuert durch drei Mechanismen:
- TTL (Time To Live): 7-Bit-Zaehler, wird an jedem Hop dekrementiert. Bei 0 stoppt die Nachricht. Standard-TTL: 5-7 fuer Lager, 10+ fuer Campus.
- Message Cache: Jeder Knoten speichert kuerzlich gesehene Nachrichten, identifiziert durch (SRC, SEQ). Minimum 2 Eintraege; praktische Implementierungen verwenden 32-256. Duplikate werden verworfen, was Schleifen verhindert.
- Network-Key-Match: Nur Nachrichten mit bekanntem Network Key werden weitergeleitet.
Relay-Retransmission-Timing: Nach Empfang einer Nachricht wartet der Relay 3,5 ms (fester Backoff) plus 0-10 ms zufaellige Verzoegerung, dann sendet er auf allen drei Advertising-Kanaelen erneut. Latenz pro Hop: ca. 4-15 ms.
Warum Managed Flood statt Routing? Traditionelle Mesh-Protokolle (Zigbee, Thread) verwenden Routing-Tabellen, die Speicher (8-16 Byte pro Eintrag), periodische Routenaktualisierungen (Stromverbrauch) und Konvergenzzeit bei Topologieaenderungen (Sekunden bis Minuten) erfordern. Fuer mobile Asset-Tags ist Routing-Tabellen-Konvergenz unpraktikabel. Managed Flood vermeidet alle drei: kein Routing-Zustand, keine Routenaktualisierungen, instantane Pfadanpassung. Der Preis ist hoehere Nachrichtenduplikation und Kanalauslastung.
3. Relay-Knotenauswahl fuer Asset-Tags
Nicht jeder Tag sollte Relay sein. Die Relay-Funktion fuegt 200-500 uA zum durchschnittlichen Stromverbrauch hinzu, katastrophal fuer Knopfzellen-Tags. Die Strategie: Infrastrukturknoten als Relays festlegen, waehrend Asset-Tags als Non-Relay-Publisher arbeiten.
| Kriterium | Relay-geeignet | Non-Relay |
|---|---|---|
| Stromquelle | Netzbetrieb oder grosse Batterie | CR2032, CR2477 |
| Mobilitaet | Feste Infrastruktur | Mobile Asset-Tags |
| Position | Decken, Gaenge, Eingaenge | Zufaellig auf Assets |
| Funkumgebung | Stabiler RSSI (> -70 dBm) | Variabel durch Bewegung |
Produktionsdeployments verwenden 20-30 netzbetriebene Relay-Knoten fuer Mesh-Backbone-Abdeckung, waehrend 500-2000 Asset-Tags als Non-Relay-Knoten Daten publizieren. Das Relay-zu-Tag-Verhaeltnis haengt von der Skala ab:
| Skala | Relays | Tags | Verhaeltnis |
|---|---|---|---|
| Klein (2.000 m2) | 5-8 | 50-100 | ~10% |
| Mittel (10.000 m2) | 15-25 | 300-500 | ~5% |
| Gross (30.000 m2) | 40-60 | 1000-2000 | ~3% |
| Campus | 80-150 | 3000-5000 | ~2-3% |
4. Energiebudget: Relay vs Non-Relay
Non-Relay-Tag (nRF52840)
| Zustand | Strom | Intervall | Durchschnitt |
|---|---|---|---|
| Sleep (RAM-Retention) | 1,5 uA | – | 1,5 uA |
| RC32K + RTC | 0,2 uA | – | 0,2 uA |
| Advertiser TX (+4 dBm) | 4,6 mA | 100 ms | 24,3 uA |
| Advertiser RX | 5,2 mA | 100 ms | 23,4 uA |
| Sensor-Lesung (SHT40) | 0,9 mA | 10 s | 0,18 uA |
| Gesamt | – | – | ~49,6 uA |
CR2032 (175 mAh nutzbar), 100 ms Intervall:
Lebensdauer = 175.000 uAh / 49,6 uA = 3.528 h = 147 Tage
1-Sekunden-Intervall (Stromsparmodus):
Gesamtdurchschnitt = 6,5 uA
Lebensdauer = 175.000 / 6,5 = 26.923 h = 3,1 Jahre
Relay-Tag (nRF52840, kontinuierliches Scannen)
| Zustand | Strom | Duty | Durchschnitt |
|---|---|---|---|
| Sleep | 1,5 uA | – | 1,5 uA |
| Scanner RX (3 Kanaele) | 5,2 mA | 30% | 1.560 uA |
| Relay TX | 4,6 mA | 0,5% | 23 uA |
| Eigenes Advertising | 4,6 mA | 0,05% | 2,3 uA |
| Gesamt | – | – | ~1.592 uA = 1,59 mA |
CR2032: 175.000 / 1.592 = 110 Stunden = 4,6 Tage (unpraktikabel)
4x AA (2.500 mAh): 2.500.000 / 1.592 = 1.571 h = 65 Tage
Netzbetrieb: unbegrenzt
Fazit: Relay-Knoten benoetigen externe Stromversorgung. Knopfzellen-Tags duerfen Relay niemals aktivieren. Produktionsdeployments verwenden dedizierte netzbetriebene Relay-Infrastruktur.
5. Nachrichtenlatenz und Durchsatz
Latenz pro Hop
Jeder Relay-Hop fuegt hinzu: Empfaengerverarbeitung (1-3 ms) + Relay-Backoff (3,5 + 0-10 ms) + Advertising-Ereignis (1,1 ms) = 5-16 ms typisch, 20 ms Worst Case.
5 Hops: 25-80 ms typisch, 100-150 ms Worst Case
10 Hops: 50-160 ms typisch, 200-300 ms Worst Case
Kanalueberlastung
| Last (msgs/s) | Auslastung | Verlustrate | Hinweise |
|---|---|---|---|
| 50 | ~1% | <0,1% | Sauber |
| 200 | ~4% | 0,5-1% | Normal fuer 500 Knoten |
| 500 | ~10% | 2-5% | Grenze naehert sich |
| 1000 | ~21% | 8-15% | Ueberlastung |
| 2000 | ~42% | 25-40% | Unzuverlaessig |
Fuer 500-Knoten-Mesh, 5% Relays, TTL=7, 1 msg/10s:
Original: 500 x 0,1 = 50 msgs/s
Relay-Verstaerkung: x3,3
Gesamt: 165 msgs/s, Auslastung 3,4%, Verlust <0,5%
Bei 1 msg/s (Echtzeit-Tracking):
Gesamt: 1.650 msgs/s, Auslastung 34%, Verlust 15-25% (Subnetting erforderlich)
6. Skalierbarkeitsanalyse
| Knoten | Relays | TTL | Last | Verlust | P95 | Urteil |
|---|---|---|---|---|---|---|
| 100 | 5 | 5 | 33/s | <0,1% | 40 ms | Exzellent |
| 500 | 25 | 7 | 165/s | 0,5% | 80 ms | Gut |
| 1000 | 50 | 7 | 330/s | 2-3% | 120 ms | Akzeptabel |
| 2000 | 100 | 10 | 660/s | 5-8% | 200 ms | Grenzfall |
| 5000 | 250 | 10 | 1650/s | 15-25% | 500 ms | Subnet erforderlich |
| 5000 (5 Subnets) | 250 | 7 | 330/Sub | 2-3% | 120 ms | Gut |
Subnetting-Strategie
- Geografisch: Ein Subnet pro Etage/Gebaeude. Bridge-Knoten an Eingaengen.
- Funktional: Ein Subnet pro Anwendung. Reduziert Crosstraffic.
- Hierarchisch: Backbone-Subnet (nur Relay, Netzstrom) verbindet Tag-Subnets. Am skalierbarsten.
Jedes Subnet unterstuetzt 32.767 Unicast-Adressen. Die eigentliche Begrenzung ist Kanalauslastung, nicht Adressraum.
7. Directed Forwarding (Mesh 1.1)
Mesh 1.1 (2023) fuehrte Directed Forwarding ein: vorberechnete Pfade fuer Unicast-Nachrichten statt Managed Flood. Nur Knoten auf dem Pfad leiten die Nachricht weiter.
Vorteile: 60-80% weniger Kanalauslastung fuer Unicast-Traffic, 5000+ Knoten pro Subnet ohne Subnetting, 20-30% geringere Latenz.
Nachteile: Routing-Tabellen-Speicher (0,4-3,2 KB RAM), Pfadkonvergenz (2-10s bei Topologieaenderung), erfordert Mesh-1.1-Stack.
Empfehlung: Directed Forwarding auf festen Infrastruktur-Relay-Knoten aktivieren, Managed Flood fuer mobile Tags beibehalten.
8. Provisionierung im grossen Stil
Provisionierung weist Unicast-Adresse, Network Key, App Key und IV-Index zu. Verwendet PB-ADV (3-8s pro Geraet) oder PB-GATT (10-20s).
Batch-Provisionierung mit parallelen Sitzungen:
Sequenziell: 1000 x 5s = 83 Minuten
Batch (10): 8,3 Minuten
Batch (20): 4,2 Minuten
Praktische Grenze: 20 parallele Sitzungen bevor Kanalueberlastung zu Fehlern fuehrt.
Adresszuweisung
| Bereich | Zweck | Anzahl |
|---|---|---|
| 0x0001-0x00FF | Provisionierer | 255 |
| 0x0100-0x0FFF | Relay/Infrastruktur | 3.840 |
| 0x1000-0x7EFF | Asset-Tags | 28.160 |
| 0x7F00-0x7FFF | Reserviert | 256 |
9. Sicherheitsarchitektur
| Schluessel | Geltungsbereich | Zweck |
|---|---|---|
| Device Key (128-Bit) | Pro Geraet, nur Provisionierer | Konfiguration, Node-Reset |
| Network Key (128-Bit) | Pro Subnet, alle Knoten | Netzwerkschicht-Verschluesselung |
| App Key (128-Bit) | Pro Anwendung | Access-Schicht, Sensordaten |
Relay-Knoten leiten Nachrichten mit dem Network Key weiter, koennen aber den Anwendungs-Payload nicht entschluesseln. Ein kompromittierter Relay erhaelt Netzwerkzugang, aber keinen Zugriff auf Sensordaten.
IV-Update
Die 24-Bit-SEQ bietet Replay-Schutz. Der IV-Index (32-Bit) inkrementiert, um den SEQ-Raum zurueckzusetzen. Mindestintervall: 96 Stunden. Bei 1 msg/10s pro Tag dauert SEQ-Ueberlauf 1.942 Tage (5,3 Jahre). IV-Updates sind fuer Asset-Tags selten.
Multi-Tenant-Isolation
Mehrere App Keys bieten logische Isolation. Jeder Tenant erhaelt einen eindeutigen App Key; Tags koennennicht gegenseitig lesen, selbst wenn sie denselben Network Key und Relay-Infrastruktur teilen.
10. BLE Mesh vs Thread vs Zigbee
| Parameter | BLE Mesh | Thread | Zigbee 3.0 |
|---|---|---|---|
| PHY-Rate | 1-2 Mbps | 250 kbps | 250 kbps |
| Relay | Managed Flood/Directed | RPL-Routing | Baum + Mesh |
| Routing-Zustand | 0 KB | 1-4 KB | 2-8 KB |
| Max. Knoten | 1000-5000/Subnet | 250-500 | 250-500 |
| Sleep-Strom | 1,5-5 uA | 3-10 uA | 2-5 uA |
| TX (+4 dBm) | 4,6 mA | 8,0 mA | 8,0 mA |
| Mobiler Knoten | Exzellent | Schlecht | Schlecht |
BLE Mesh gewinnt fuer Asset-Tags in drei Dimensionen: niedrigster TX-Strom (1-Mbps-PHY vs 250 kbps), instantane mobile Knotenanpassung (Flood vs Routing-Konvergenz) und native BLE-Radio-Kompatibilitaet.
11. Gateway-Integration
Ein Mesh-Gateway nimmt am Mesh teil (haelt Network Key) und hat IP-Konnektivitaet (Ethernet, Wi-Fi, Cellular). Es empfaengt Mesh-Nachrichten und leitet sie an die Cloud via MQTT oder HTTPS weiter.
Zwei Designs: (1) Proxy-Gateway ueber GATT-Proxy-Service fuer ad-hoc-Zugriff; (2) Embedded-Gateway (nRF52840 + Wi-Fi) fuer 24/7-Betrieb mit MQTT-Bridge.
Gateway-Dichte: 1 pro 200-500 Mesh-Knoten. Mehrere Gateways bieten Redundanz; die Cloud dedupliziert nach (SRC, SEQ).
Tag --> Relay --> Relay --> Gateway --> MQTT --> Dashboard
End-to-End: 200-800 ms
12. Vendor-Mesh-Stack-Vergleich
| Vendor | SDK | SoC | Mesh 1.1 | RX | Hinweise |
|---|---|---|---|---|---|
| Nordic | NCS 2.5+ | nRF52840/nRF5340 | Ja | 5,2 mA | Beste Doku, Zephyr |
| Silicon Labs | GSDK 4.3+ | EFR32BG22/BG24 | Ja | 4,8 mA | Niedrigerer RX, BG24 96KB |
| TI | BLE-STACK 5.x | CC2642R/CC2652R | Teilweise | 5,9 mA | SimpleLink |
| Espressif | ESP-IDF | ESP32-C3/C6 | Nein (1.0) | 8-12 mA | Wi-Fi+BLE-Gateway |
Fuer Asset-Tags ist Nordic nRF52840 der Standard: ausgereifter Stack, beste Dokumentation, niedrigster kombinierter Sleep+Scan-Strom. SiLabs EFR32BG24 ist stark fuer Directed Forwarding (mehr RAM). ESP32-C3/C6 ueberzeugt bei Gateways mit Wi-Fi-Bedarf.
13. Codebeispiele
Relay-Konfiguration (nRF Connect SDK / Zephyr)
#include
static void configure_relay_node(uint16_t addr)
{
int err;
uint8_t count, intvl;
err = bt_mesh_cfg_relay_set(net_key_idx, addr,
BT_MESH_RELAY_ENABLED,
BT_MESH_TRANSMIT(1, 10),
&count, &intvl);
if (err) {
printk("Relay set failed: %d", err);
return;
}
err = bt_mesh_cfg_ttl_set(net_key_idx, addr, 7);
}
Sensordaten-Publikation
#define SENSOR_DATA_OP BT_MESH_MODEL_OP_2(0x12, 0x00)
struct __attribute__((packed)) sensor_payload {
int16_t temperature;
uint16_t humidity;
uint16_t battery_mv;
};
static int publish_sensor(int16_t temp, uint16_t hum, uint16_t batt)
{
struct sensor_payload p = { temp, hum, batt };
struct bt_mesh_msg_ctx ctx = {
.addr = 0xC001,
.send_ttl = 7,
.app_idx = app_key_idx,
};
BT_MESH_MODEL_BUF_DEFINE(buf, SENSOR_DATA_OP, sizeof(p));
bt_mesh_model_msg_init(&buf, SENSOR_DATA_OP);
net_buf_simple_add_mem(&buf, &p, sizeof(p));
return bt_mesh_model_publish(&sensor_model);
}
Python: Skalierbarkeitssaetzer
class MeshScalability:
def __init__(self, n_nodes, relay_ratio, ttl, msg_interval_s, subnets=1):
self.n = n_nodes
self.relays = int(n_nodes * relay_ratio)
self.ttl = ttl
self.interval = msg_interval_s
self.subnets = subnets
self.capacity = 4800
def relay_amp(self):
return 1 + self.relays * 0.3 * min(self.ttl / 7.0, 1.0)
def total_load(self):
per_subnet = self.n / self.subnets
return (per_subnet / self.interval) * self.relay_amp()
def utilization(self):
return self.total_load() / self.capacity
def loss(self):
u = self.utilization()
if u < 0.04: return u * 0.1
elif u < 0.10: return 0.004 + (u - 0.04) * 0.3
elif u < 0.21: return 0.022 + (u - 0.10) * 0.5
else: return 0.077 + (u - 0.21) * 1.2
m = MeshScalability(500, 0.05, 7, 10)
print(f"Load: {m.total_load():.0f} msgs/s, Loss: {m.loss()*100:.1f}%")
14. Debugging und Diagnose
- Mesh-Sniffer: nRF Sniffer fuer Bluetooth LE in Wireshark. Nach Mesh-Advertising-Typ (0x2B) filtern. TTL-Dekrement, Relay-Retransmissions und Cache-Hits inspizieren.
- Heartbeat-Monitoring: Heartbeat-Publikation von Relay-Knoten konfigurieren. Das Ziel erhaelt periodische Nachrichten mit TTL und RSSI fuer Netzwerkgesundheits-Sichtbarkeit.
- Relay-Statistiken: Relay-Count pro Knoten, Cache-Hit-Rate und Retransmissionsfehler verfolgen. Hohe Cache-Hit-Rate zeigt gute Abdeckung; niedrige deutet auf Abdeckungsluecken.
- Haeufige Probleme: TTL-Erschoepfung (TTL erhoehen oder Relays hinzufuegen), Cache-Ueberlauf (Groesse erhoehen), Kanalueberlastung (Publikationsrate reduzieren oder Subnet), Provisioning-Timeout (Batch-Groesse reduzieren).
15. Produktionsdesign-Checkliste
- [ ] Relay-vs-Non-Relay-Verhaeltnis bestimmen (Ziel 3-10%)
- [ ] Energiebudget berechnen: Relay-Knoten benoetigen externe Stromversorgung
- [ ] TTL setzen: 5-7 einzelnes Gebaeude, 10+ Campus
- [ ] Message-Cache konfigurieren: minimum 32 Eintraege (192 Bytes RAM)
- [ ] Subnet-Architektur fuer Deployments >1.000 Knoten planen
- [ ] Batch-Provisioning-Workflow entwerfen (max 20 parallel)
- [ ] Network/App-Key-Hierarchie fuer Multi-Tenant-Isolation konfigurieren
- [ ] Publikationsintervall setzen: 10s Monitoring, 1s Echtzeit (erfordert Subnetting)
- [ ] Stresstest unter Uberlastung: 2x erwarteten Traffic injizieren und Verlust messen
- [ ] Gateway-Dichte planen: 1 pro 200-500 Knoten, mit Redundanz
- [ ] Heartbeat-Monitoring aktivieren
- [ ] Mesh-1.1-Directed-Forwarding-Kompatibilitaet bei >2.000 Knoten pruefen
- [ ] Mobile-Tag-Verhalten testen: Pfadanpassung bei Zonenwechsel verifizieren
- [ ] IV-Update-Verfahren und Key-Refresh-Zeitplan dokumentieren
- [ ] Firmware-OTA planen: Mesh-Modell-Verteilung fuer Massenupdates verwenden
Fazit
BLE-Mesh-Netzwerke transformieren Asset-Tracking von einem Single-Hop-, Gateway-gesaettigten Modell zu einem skalierbaren, selbstheilenden Netzwerk. Die wichtigsten Engineering-Entscheidungen sind: (1) netzbetriebene Infrastruktur fuer Relay-Knoten verwenden, niemals Knopfzellen-Tags; (2) Relay-zu-Tag-Verhaeltnis auf 3-10% je nach physischer Verteilung dimensionieren; (3) Kanalauslastung ueberwachen und vor Ueberschreitung von 1.000 aktiven Knoten subnetzen; (4) Directed Forwarding von Mesh 1.1 fuer Backbone-Skalierbarkeit nutzen; (5) Batch-Provisioning und Gateway-Redundanz fuer Produktionsdeployment planen.
Die Energiebudgetanalyse ist unerbittlich: ein Relay-aktivierter CR2032-Tag haelt 4,6 Tage, waehrend ein Non-Relay-Tag bei 1-Sekunden-Advertising 3,1 Jahre haelt. Dieser 2.400x-Unterschied bestimmt die Architektur: Infrastruktur-Relays mit Netzstrom, Batterie-Tags als Non-Relay-Publisher. Treffen Sie diese Trennung richtig, und das Mesh erledigt den Rest. Ob 50 Tags in einem Lager oder 5.000 in einem Industriecampus - diese Prinzipien helfen Ihnen, ein BLE Tag Mesh-Netzwerk zu architieren, das in der Produktion funktioniert.