Meshtastic Portugal · corredor norte–sul
Backbone da malha: regras e limitações
Um mapa das ligações rádio da malha, tirado do MQTT da comunidade, para descobrir que favoritos levam uma mensagem do Minho ao Algarve sem internet, com os zero-cost hops do firmware 2.7.11+.
Os valores com que este mapa está configurado. A Meshtastic PT recomenda hop limit 4.
Recolha
- Só leitura no
mqtt.meshtastic.pt, tópicomsh/#: nunca publica nada. - Uma ligação só, QoS 0, sessão limpa. No máximo 3 pacotes de controlo por minuto e 4 ligações por hora, e um PING a cada 5 minutos. Se o broker mandar mais de 50 msg/s, desliga e espera.
- De cada cópia de cada pacote guarda o gateway que a ouviu, os hops gastos, o
relay_nodee o SNR. - Nos canais com a chave predefinida lê também o papel do nó, a posição, o firmware, os traceroutes e os vizinhos. Nos canais privados só vê o cabeçalho.
Como se desenha uma ligação
Uma ligação A → B quer dizer que B ouviu A diretamente, por rádio. Há quatro fontes, da mais certa para a menos certa:
| Fonte | Como se obtém |
|---|---|
| Traceroute | Cada salto da ida e da volta, com o SNR desse salto. Saltos com SNR 0 vieram pela internet e não contam. O mesmo salto repetido em menos de 5 minutos conta uma vez. |
| Direto | Um gateway ouviu o pacote com 0 hops gastos. |
| Vizinhos | O NeighborInfo que o próprio nó publica. |
| Relay | O relay_node é só o último byte de quem retransmitiu. Conta apenas quando há um único candidato: um nó com esse byte que o gateway já ouviu diretamente, a menos de 250 km. Na dúvida, descarta-se. |
Nunca contam os pacotes que vieram pela internet (via_mqtt). Para entrar nos caminhos, uma ligação precisa de 2 ou mais pacotes e SNR mediano de −18 dB ou melhor.
O mapa
Um nó sem GPS é posto no centro dos vizinhos que têm GPS, com 1 a 2 km de desvio para não ficar por cima de outro. Serve para o desenhar; não é a posição real.
Caminhos e zero-cost hops
Um salto é grátis quando se cumprem as três condições:
- Quem retransmite é ROUTER, ROUTER_LATE ou CLIENT_BASE, com firmware 2.7.11 ou mais recente.
- Não é o primeiro salto.
- Quem lhe passou o pacote é um ROUTER ou ROUTER_LATE que ele tem nos favoritos. Com firmware 2.7.18 ou mais recente em quem retransmite, também um CLIENT_BASE.
A partir do firmware 2.8.0 há mais uma condição: o relay byte de quem passou o pacote (o último byte do ID) só pode corresponder a esse nó na lista de nós de quem retransmite. Se outro router, CLIENT_BASE, favorito ou vizinho direto tiver o mesmo byte, o salto gasta hop. O mapa não vê a lista de nós de cada rádio, por isso marca estes casos como aviso.
Um CLIENT_MUTE nunca retransmite, por isso nunca é quem passa o pacote: favoritá-lo não poupa hops. Um CLIENT retransmite, mas gasta sempre.
- Hoje: usa só os favoritos que conhecemos, porque o MQTT não diz quem tem quem nos favoritos.
- Com favoritos: supõe que cada router favorita os routers e CLIENT_BASE que ouve.
- Corredores: Minho ↔ Algarve, Porto ↔ Lisboa, Lisboa ↔ Algarve, Coimbra ↔ Lisboa e Trás-os-Montes ↔ Alentejo, cada sentido à parte.
- Resultado: para cada router, que nós adicionar aos favoritos. E as quebras: os rádios que gastam hop mesmo com favoritos, como um CLIENT a meio da cadeia ou um firmware antigo.
Limitações
- Só se vê o que um gateway MQTT ouviu. Uma zona sem gateway parece vazia: não haver linha não quer dizer que não haja ligação.
- As ligações têm sentido. A ouvir B não garante que B ouve A.
- O SNR é dos pacotes que chegaram. Os que se perderam não entram na mediana, e uma ligação perto de −18 dB já perde muitos.
- O relay byte tem 1 byte. Muitos nós partilham o mesmo; quando há dúvida, a ligação é descartada. No firmware 2.8+ o próprio rádio também desiste do salto grátis quando o byte é ambíguo.
- Papel e firmware vêm do NodeInfo e do MAP_REPORT. Quem não os manda fica com papel desconhecido, e firmware desconhecido conta como novo, a confirmar com o dono.
- Os favoritos não se veem. O cenário Hoje não sabe os favoritos que já existem.
- Canais privados não dão traceroutes, posições nem vizinhos.
- As posições estimadas são aproximadas. Servem para desenhar, não para medir distâncias.
- Precisa de tempo. Com poucas horas de captura a malha aparece em ilhas; são precisos dias.
- Um backbone que leva mensagens de norte a sul também leva cada broadcast ao país inteiro. Poucos routers, bem colocados.
Como ajudar
- Traceroutes entre zonas, sobretudo onde o mapa tem buracos: Lisboa ↔ Leiria/Coimbra, Coimbra ↔ Aveiro, Aveiro ↔ Porto. Com moderação, porque cada traceroute ocupa a malha.
- Gateways MQTT nas zonas que aparecem vazias.
- NodeInfo e MAP_REPORT ligados, para se saber o papel e o firmware de cada rádio.