Routage

MeshCore: routage et relais

Comment des messages MeshCore trouvent une route via des relais. Vue pratique: limites, deduplication, et sobriete radio (France: reseau en structuration).

Comment un message trouve son chemin ?

Dans un mesh, il n y a pas toujours un routeur central. Les noeuds cooperent pour relayer des messages. L objectif est d atteindre la destination sans saturer la radio.

MeshCore met l accent sur un routage plus cible (path discovery) et sur une utilisation sobre de l airtime. Les details evoluent selon versions et firmwares.

En France, le reseau est en structuration. Beaucoup de "problemes de routage" sont juste un manque de noeuds/relais. Commencez par valider en direct (2 noeuds) puis ajoutez un repeater si besoin.

Mecanismes de base

Quatre idees utiles a comprendre (selon implementation):

Relais controle

Un message peut etre relaye par des noeuds intermediaires. Le relai peut etre controle (pas une diffusion infinie).

Sender -> Neighbor -> (Relay) -> Target

Deduplication

Les noeuds gardent une memoire courte des messages vus (IDs) pour ne pas relayer en boucle.

Message ID: 0x4A3F2B -> deja vu -> ignore

Limite de hops

Une limite de relais (hop limit) evite que des messages traversent tout le reseau inutilement.

Qualite radio

Les decisions de relai peuvent tenir compte de la qualite (RSSI/SNR, pertes) pour privilegier des liens plus fiables.

Diffusion vs routage cible

Certains meshes utilisent une diffusion large (flooding). MeshCore cherche plutot a rester sobre avec des routes utiles. Dans la pratique, on observe souvent un mix selon modes et versions.

Etape 1: emission

Le noeud emet un message vers son voisinage (direct).

Etape 2: voisins

Des noeuds en portee directe recoivent. Ils decident si un relai est utile.

Etape 3: propagation limitee

Si relai, la propagation est limitee par des regles (hop limit, deduplication, delai random).

Etape 4: destination

La destination recoit. Un ack peut exister selon mode et client.

Optimisations typiques

Pour garder un reseau stable, on retrouve souvent:

  • Deduplication: ne pas relayer un message deja vu
  • ACKs: confirmer une reception (selon modes)
  • Delai aleatoire: eviter des collisions quand plusieurs relais agissent
  • Priorites: ne pas relayer des liens trop faibles ou trop bruyants

Limite de hops

64

Valeur par defaut

Une limite faible (ex: 2-4) est souvent suffisante pour un noyau local.

flood.max

Augmenter

Plus de hops = plus de portee potentielle, mais plus d airtime et de latence. A faire seulement si necessaire.

RF terrain

Portee par hop

La portee depend du terrain/antenne. Un hop en ville peut etre 300m a 2km; en degage, plus.

Principe

Un paquet embarque une limite. A chaque relai, le compteur augmente, puis le message n est plus relaye quand la limite est atteinte:

Emission: hop_count = 0
Relai 1:  hop_count = 1
Relai 2:  hop_count = 2
Relai 3:  hop_count = 3
-> stop

Cela protege l airtime et evite les boucles longues.

Pourquoi c est utile

🔄

Auto-organisation

Peu de config pour un noyau local: on teste, on observe, on ajuste.

Economie energie

Moins de relais inutiles = moins de conso, surtout sur batterie.

🛡️

Robuste

Si une route tombe, une autre peut emergir si la topologie le permet.

📡

Portee progressive

Ajouter un repeater bien place peut etendre beaucoup plus que "monter la puissance".

🔧

Debuggable

Avec des logs/telemetries, on peut comprendre ou ca coince (antenne, preset, manque de relais).

🌐

Pas de point unique

Pas besoin d une infrastructure centrale pour le local.

Exemples de configuration (indicatifs)

Selon version, certains parametres se reglent via CLI/API. Exemples indicatifs (a verifier dans la doc officielle):

CLI: regler hop limit

Augmenter hop limit pour une zone plus large (attention airtime):

meshcore --set router.hop_limit 5
meshcore --set router.rebroadcast_mode ALL_SKIP_DECODING

Python: regler des parametres

Automatiser une config via script (pseudo-exemple):

import meshcore

interface = meshcore.SerialInterface()
node = interface.getNode("^local")

node.router.hop_limit = 4
node.writeConfig()

Avance: seuil RSSI

Eviter de relayer sur des liens trop faibles (selon options):

meshcore --set router.rebroadcast_min_rssi -110
# -120 dBm = tres faible
# -100 dBm = moyen
# -80 dBm  = fort

FAQ routage

Pourquoi pas un routage "table" classique ?

Sur LoRa, on cherche la sobriete et la robustesse. Les tables complexes peuvent couter cher en messages et en energie. Les details dependent du protocole MeshCore.

Et si deux relais emettent en meme temps ?

Les collisions existent. Les delais aleatoires et les retries peuvent aider. Le mieux reste de reduire la charge et d avoir de bons liens.

Peut-on regler hop limit par type de message ?

Selon firmware, oui. C est utile: telemetrie et GPS peuvent rester plus locaux que du texte.

Comment eviter les boucles ?

Deduplication + hop limit evitent les boucles longues. Ensuite, la topologie et la sobriete font le reste.

Quelle latence attendre ?

Tres variable: SF, taille message, collisions, hops. Dans un noyau local bien regle, quelques secondes est courant.

Puis-je desactiver le relai sur une node ?

Souvent oui (selon modes). Sur mobile, ca peut economiser batterie. Gardez des relais fixes pour la couverture.

Tester localement, rester sobre

Le routage marche mieux quand le reseau est sobre et quand les relais sont bien places. En France, le reseau est en structuration: commencez avec 2-5 noeuds, mesurez, puis etendez.

Articles connexes