
Un Bluetooth Beacon standard se contente d’émettre. Il se réveille sur une minuterie, diffuse un paquet publicitaire et se rendort. Ce modèle suppose qu’une passerelle (gateway) ou un smartphone est à portée radio pour l’entendre. Ce postulat s’effondre dès qu’on a un entrepôt de 40 000 m², un hôpital multi-étages, une cour de fret ou un tunnel : partout où une seule passerelle ne voit pas chaque coin. La solution peu coûteuse est un beacon relais : un nœud qui écoute les paquets des autres beacons et les retransmet, faisant sauter le signal vers une passerelle réellement accessible.
Cet article explique ce qu’est vraiment un beacon relais, pourquoi le design naïf « chacun répète tout » explose, et les règles d’ingénierie qui gardent un réseau de relais stable.
Ce qu’un beacon relais fait réellement
Un beacon relais est un appareil à double rôle. Contrairement à un émetteur pur, il tourne en mode observateur (scanner) pour recevoir les paquets publicitaires, puis bascule en mode diffuseur pour les renvoyer. Trois tâches distinctes :
1. Scanner les trois canaux publicitaires (37/38/39) à la recherche de paquets de beacons cibles ou de relais amont.
2. Décider si un paquet doit être retransmis (dédoublonnage, limite de sauts, règles de force de signal).
3. Réémettre un paquet (généralement identique, parfois enrichi) sur les canaux publicitaires.
Le relais ne décode pas la charge applicative comme une passerelle. Il retransmet normalement la PDU publicitaire brute — MAC, charge et le RSSI qu’il a mesuré — inchangée. C’est tout l’enjeu : c’est un prolongateur idiot et rapide, pas un puits.
Relais face aux alternatives
| Rôle | RX requis ? | TX requis ? | Dort ? | Dans le chemin ? | Conso typique |
|---|---|---|---|---|---|
| Beacon standard | Non | Oui | Oui (99%+) | Non | 5–50 µA moy |
| Beacon relais | Oui | Oui | Rarement | Oui | 1–10 mA moy |
| Nœud BLE Mesh | Oui | Oui | Non (relais) | Oui | 2–15 mA moy |
| Passerelle | Oui | Parfois | Non | Terminus | Secteur / PoE |
La ligne brutale de ce tableau, c’est la consommation. Un beacon émetteur seul passe ~0,5–2 ms sur 100 ms d’intervalle sur la radio et dort le reste, en moyenne quelques µA. Un relais doit garder la radio en RX quasiment en continu pour ne rien manquer, et le RX d’un SoC BLE Cortex-M4 consomme ~4–6 mA. À 5 mA continu, ça fait 120 mAh par jour — une CR2032 (220 mAh) meurt en moins de deux jours. Les vrais nœuds relais sont sur secteur, PoE, USB, ou au minimum une pile D / Li-SOCl₂ visant plusieurs années.
Le piège de la tempête de diffusion
La panne de relais la plus fréquente, c’est l’inondation. Si chaque relais retransmet tout ce qu’il entend, et que chaque autre relais retransmet ça, le réseau entre en amplification exponentielle :
- Le beacon A envoie 1 paquet.
- Les relais B et C l’entendent et envoient chacun 1 → 2 paquets dans l’air.
- B et C entendent les répétitions l’un de l’autre, et D/E entendent celles-ci → 4, puis 8, et le canal sature.
Avec N relais retransmettant à 10 Hz, le débit de paquets dans l’air n’est pas 10 Hz, c’est 10 × N × (N−1) / quelque chose de laid. Les canaux publicitaires font 1 Mbit/s mais un paquet BLE dure ~50–350 µs plus 150 µs inter-trame ; en pratique un canal ne tient que quelques centaines de paquets/s avant que les collisions dominent. Une tempête coule tout le segment.
Règles de contrôle qui évitent la tempête
Tout firmware de relais en production implémente quatre mécanismes :
1. Cache de dédoublonnage. Garde un tampon circulaire des paires (MAC TxAdd, SeqNum) vues récemment — disons 64–256 entrées. Si la clé du paquette est dans le cache, rejette-le. Cela seul arrête 90 % des boucles.
2. Compteur de sauts / TTL. Estampe un champ de saut dans la charge (ou réutilise un octet inutilisé). Incrémente à chaque relais. Rejette si saut ≥ H (généralement 4–8). Cela borne le diamètre du réseau et évite les boucles infinies entre A↔B.
3. Hold-off / jitter. Après avoir décidé de retransmettre, attend une valeur aléatoire de 20–100 ms avant d’émettre. Cela désynchronise les relais pour qu’ils ne tirent pas tous au même créneau, et laisse le cache de dédoublonnage se remplir entre voisins.
4. Porte RSSI (relais sélectif). Ne retransmet que les paquets dont le RSSI mesuré est sous un seuil (ex. < −75 dBm). Les paquets forts sont déjà près d’une passerelle et n’ont pas besoin de relais ; les faibles si. Cela coupe les répétitions redondantes de 50–80 %.
Pseudocode minimal de décision :
on_packet(pkt):
if pkt.hop >= MAX_HOP: drop
if (pkt.mac, pkt.seq) in dedup_cache: drop
dedup_cache.add((pkt.mac, pkt.seq))
if pkt.rssi > RSSI_GATE: drop # déjà assez fort
pkt.hop += 1
schedule_tx(pkt, random_delay(20,100))
Latence et perte entre sauts
Le relais store-and-forward ajoute de la latence par saut. Avec une fenêtre de hold-off de 100 ms et ~5 ms de traitement, un saut coûte environ 25–105 ms (moyenne ~60 ms). Trois sauts ajoutent donc 150–300 ms de latence à une mise à jour de position. Acceptable pour le suivi d’actifs, fatal pour un contrôle temps réel.
La perte s’accumule aussi. Si un saut simple livre avec probabilité p, un chemin de N sauts livre avec p^N. À p = 0,9 (déjà optimiste dans un entrepôt bruyant), 4 sauts → 0,66. Il faut soit sur-déployer les relais (plus dense que la couverture ne l’exige), soit accepter des trous. C’est pourquoi en pratique la profondeur de relais est limitée à 3–5 sauts.
Mathématique de portée réelle
Un relais étend la portée linéairement avec le nombre de sauts, mais chaque saut est limité par le plus faible de ses deux liens. En intérieur, un saut BLE simple fait souvent 15–40 m à travers les murs ; en extérieur en visibilité 80–150 m. Donc :
- 1 relais : atteint ~2× le saut simple ≈ 30–80 m en intérieur autour d’une zone morte
- 3 relais : ~4× le saut simple, mais attention à la latence et perte ci-dessus
- Plafond pratique : ~5 sauts avant que perte/latence le rendent inutile
La portée dépend aussi de l’antenne, la puissance TX et le canal. Les relais aux carrefours de couloirs et escaliers surpassent ceux jetés dans des salles ouvertes.
Notes matériel et firmware
- SoC : Il faut une pièce à double rôle. nRF52840 / nRF5340 et ESP32 (mode HCI) scannent et diffusent. Un nRF52810 émetteur seul ne peut pas relayer.
- Fenêtre vs intervalle de scan : Pour capter un beacon qui annonce toutes les 100 ms, la fenêtre de scan du relais doit totaliser sur les trois canaux au moins le temps air du beacon. Un scan à 100 % de duty (fenêtre = intervalle) ne rate rien mais brûle le max de puissance ; 30–50 % de duty troque perte contre batterie.
- Rotation de canaux : BLE annonce sur ch 37/38/39. Le relais doit scanner les trois ; en sauter un perd un tiers des paquets.
- Dérive d’horloge : Si les relais utilisent des oscillateurs RC basse conso, le timing de scan dérive et les fenêtres glissent. TCXO ou une horloge de sommeil calibrée réduit les paquets manqués.
Sécurité
Un relais est une frontière de confiance. Comme il retransmet des PDU brutes, un attaquant peut :
- Injecter de faux beacons relayés directement vers la passerelle (positions d’actifs fausses).
- Rejouer un paquet capturé répétitif pour créer une tempête ou un faux mouvement.
- Supprimer en inondant le canal pour que les vrais paquets collisionnent.
Atténuations : signer ou chiffrer la charge du beacon (et que la passerelle, pas le relais, vérifie), limiter le débit par MAC au relais, et liste blanche des préfixes MAC de beacons de confiance. Les nœuds relais doivent être physiquement sécurisés et, si possible, authentifiés au réseau.
Quand ne pas utiliser un relais
Si tu peux placer une passerelle tous les ~30 m, fais-le — les passerelles sont plus simples et terminent la chaîne. Le relais ne gagne que quand tirer Ethernet/PoE dans chaque coin est impossible (bâtiments historiques, cours, tunnels) et que tu as besoin de couverture, pas de haute fidélité. Pour du RTLS haute précision, les relais ajoutent multi-trajets et ambiguïté ; préfère plus de passerelles ou AoA.
En résumé
Un Bluetooth Beacon relais est le moyen le moins cher de pousser la couverture au-delà de l’horizon radio de la passerelle, mais c’est un problème de puissance et d’inondation déguisé en problème de portée. Fais correctement le cache de dédoublonnage, la limite de sauts, le jitter de hold-off et la porte RSSI, borne la profondeur à 3–5 sauts, et alimente le nœud sur secteur ou grosse pile. Mal fait, il coule le segment qu’il était censé sauver.
