Logo Meshtastic

Meshtastic prakticky

Projekt Meshtastic je open-source software a hardware projekt, který se snaží vytvořit platformu pro off-grid komunikaci s dlouhým dosahem, šifrováním a snadno dostupným hardware, postavenou na technologii LoRa (Long Range).

Autorem Meshtasticu je Kevin Hester, který zveřejnil kód na začátku roku 2020 pro platformu ESP32. Projekt se od té doby rozrostl a nyní na něm pracují desítky dobrovolníků, podporuje několik různých hardware desek, běží na Linux/MacOS/Android/iOS a poslední dobou nabírá na popularitě mezi makery.

V následujícím textu se pokusím shrnou moje zkušenosti s Meshtasticem, ukážu HW na kterém síť provozuji a vysvětlím k čemu se to dá využít.

Co je Meshtastic?

Základem Meshtastic je technologie LoRa, což je známý a rozšířený rádiový protokol na volně přístupných frekvencích (frekvence, které nevyžadují speciální licenci nebo registraci). LoRa má nízké vysílací výkony (méně jak 1 W) a tedy i nízkou spotřebu, ale díky chytře navržené modulaci má velký dosah (snadno dosáhnete na jednotky km, s trochou snahy desítky km a pokud víte co děláte, tak i stovky km) i s obyčejnou všesměrovou anténou. Je tedy ideální na IoT (Internet věcí).

LoRa ovšem definuje pouze fyzickou (rádiovou) vrstvu a už se nijak nezabývá tím, co se vzduchem fakticky přenáší. Proto vzniklo několik různých protokolů, které se dají využít jako síťová vrstva nad technologií LoRa. Asi nejznámější je LoRaWAN protokol, který umožňuje přenos dat mezi koncovým zařízením a gateway.

Meshtastic nad technologií LoRa definuje síť typu mesh, ve které (na rozdíl od LoRaWAN) neexistuje žádný centrální uzel a kde jednotlivá koncová zařízení komunikují mezi sebou a zároveň přeposílají přijaté zprávy dál, aby se zvýšil jejich dosah.

Ukázková topologie sítě postavené na Meshtastic.
Ukázková topologie sítě postavené na Meshtastic. Zdroj: meshtastic.org.

Po takovéto mesh síti se pak dají posílat šifrované zprávy buď mezi dvěma uživateli nebo mezi skupinou uživatelů. Je důležité zmínit, že Meshtastic síť neobsahuje žádný koordinační prvek, síť se neustále mění a zprávy se šíří různými směry tak, jak je zrovna možné.

Meshtastic lze provozovat na všech frekvencích, na kterých lze provozovat samotné LoRa. V Evropě nás zajímají pouze frekvence 433 MHz a 868 MHz, obě jsou pro bezlicenční užití a tedy vhodné pro makery a kutily, kteří nejsou zároveň radioamatéry.

Nejzajímavější vlastnost Meshtasticu je fakt, že všechna zařízení mají na začátku stejné nastavení rádia a jeden otevřený kanál pro komunikaci se všemi ostatními uživateli. Tím vzniká síť pro komunikaci s lidmi ve vašem okolí, což je asi nejčastěji zmiňovaná vlastnost projektu, která přitahuje nejvíce nadšenců, kutilů a radioamatérů. Kromě toho lze přes síť také posílat svá vlastní data, která budou zašifrovaná a tím pádem nečitelná pro třetí stranu.

Pro další a podrobnější informace o Meshtastic odkážu na oficiální dokumentaci, článek na Hackaday a na video od Andrease Spiesse s praktickou ukázkou.

Podporovaný hardware

Seznam podporovaných desek je dostupný v dokumentaci. Aktuálně jsou podporovány platformy ESP32, nRF52840 a RP2040 a dva různé typy LoRa rádia – SX1276 a SX1262.

Desky založené na ESP32 většinou poskytují WiFi 2.4 GHz a Bluetooth 4.2 a hodí se pro statické (nepohyblivé) Meshtastic nody napájené ze zdroje. Ty s čipem nRF52840 mají pouze Bluetooth 5.0 a díky minimální spotřebě se hodí na přenosné nody napájené z baterie. Varianty s RP2040 často nemají Bluetooth ani WiFi a nejsou zatím tak rozšířené.

Obě rádia, SX1276 a SX1262, jsou určené pro LoRa a mají nízkou spotřebu. SX1262 má nižší spotřebu energie, maximální přenosovou rychlost 300 kbps, citlivost až -148 dBm, pracuje na frekvencích 150-960 MHz a má maximální vysílací výkon 22 dBm. Naproti tomu SX1276 má maximální přenosovou rychlost 100 kbps, trochu vyšší spotřebu, citlivost -142 dBm, maximální vysílací výkon 20 dBm a pracuje na frekvencích 868 MHz nebo 915 MHz.

Asi nejoblíbenější HW je momentálně (leden 2024) LILYGO T-Echo. Meshtastic komunikátor s MCU nRF52840 a rádiem SX1262, GPS přijímačem, e-ink displejem pro zobrazení přijatých zpráv, akumulátorem a externí anténou.

Další oblíbenou variantou je vývojová deska od Rakwireless WisBlock Base Board RAK19007 s MCU deskou RAK4631. Také obsahuje MCU nRF52840 a rádio SX1262, celý systém pak lze ještě rozšířit o GPS, baterii, solární panel, displej a tlačítka.

Můj hardware

Po přečtení Meshtastic dokumentace, shlédnutí několika videí a prozkoumání všemožných datasheetů jsem nakonec zvolil RAK19007 s RAK4631 pro frekvenci 868 MHz. Jednak v tu dobu měli v oficiálním eshopu 5 USD slevu a jednak byl skladem Meshtastic started kit. Například T-Echo bylo, v době kdy jsem objednával, vyprodané úplně všude a ESP32 desky jsem nechtěl kvůli vyšší spotřebě na baterii.

Pokud budete objednávat HW, doporučuji podívat se na seznam podporovaného HW, jelikož vývoj projektu je velmi rychlý a nové desky přibývají jako houby po dešti. Zároveň si kupte alespoň dvě Meshtastic zařízení, abyste mohli posílat zprávy sami sobě. Je to tak větší zábava hlavně pro ty z nás, kteří bydlí na vesnicích, jelikož v ČR je projekt rozšířen hlavně ve větších městech (viz mapa).

Můj cíl byl vytvořit přenosný komunikátor s Bluetooth, externí anténou a akumulátorem pro celodenní provoz. Proto bylo nutné k RAK starter kitu objednat ještě následující komponenty:

  • LiPol akumulátor 2500 mAh, 3,7 V s konektorem JST-PH 2.0 mm (laskakit.cz),
  • OLED displej 0,96“ 128×64 I2C (laskakit.cz) (pozor, tento displej nepasuje do krabičky úplně přesně),
  • kabel IPEX na SMA, 100 mm (TME.eu),
  • posuvný přepínač SPDT (TME.eu),
  • anténa pro frekvenci 868 MHz (měl jsem v šuplíku) a
  • 4× šroub M3x20 DIN912 a matici.

A pak vytisknout z PLA krabičku pro RAK19007. Design krabičky obsahuje velké množství variant, já zvolil „hexagons“, 12 mm hluboké záda pro akumulátor, rám s vyřezem pro posuvný spínač a čelo s výřezem pro OLED displej (výběr správných souborů mi dal zabrat a stejně jsem nakonec tisknul rám a záda podruhé, protože jsem zvolil špatně):

  • RAK19007-5005_v15_front-powerswitch-hexagons.stl (podpory jsou nutné)
  • RAK19007-5005_v15_back_12mm-battery-hexagons.stl (podpory jsou nutné)
  • RAK19007_v15_button-reset-short.stl
  • RAK19007_v15_frame-no-user-button.stl

Samotné poskládání krabičky je snadné, deska RAK19007 dorazila i se šroubkama, které se dají použít pro upevnění PCB k rámu krabičky. Vybraný displej nepasoval přesně do výřezu v čelu krabičky, tak přišlo na slovo tavné lepidlo. Na obrázcích zatím chybí posuvný spínač pro zapnutí akumulátoru, já na něj při objednávání zapomněl a zatím mi chybí.

Nahrání firmware bylo snadné a stačí k tomu:

  1. Stáhnout si ZIP s posledním Meshtastic FW.
  2. Zapojit RAK19007 přes USB-C k PC.
  3. Dvakrát krátce po sobě zmáčknout RESET tlačítko (vedle USB-C konektoru).
  4. Zařízení se k PC připojí jako mass-storage.
  5. Na tento disk zkopírovat soubor firmware-rak4631-2.2.17.dbac2b1.uf2 ze ZIP souboru.
  6. Po úspěšném zkopírování se zařízení samo resetuje a po chvíli se na displeji zobrazí logo Meshtastic.

Konfigurace

Pro základní nastavení a následně i používání Meshtastic node je několik možností:

  1. Android aplikace (dostupná v Google Play)
  2. iOS aplikace (dostupná v Apple Store)
  3. MacOS aplikace (dostupná v App Store)
  4. Web klient
  5. CLI Python klient

Ve všech případech je možné připojit zařízení přes Bluetooth nebo sériovou linku (USB). Poté je nutné nastavit region a frekvenci (EU868), jméno vašeho node (jakékoliv lidsky čitelné jméno) a modem preset (určuje rychlost přenosu, spread factor, coding rate a další).

Asi nejdůležitější parametr je modem preset, který určuje základní parametry LoRa přenosu. Meshtastic firmware má několik předpřipravených nastavení, které je možné zvolit. Výběr toho správného je velmi důležitý, protože vaše zařízení se pak dokáže spojit pouze s nody, které mají stejný preset. Výchozí a zároveň nejpoužívanější preset je „Long/Fast“, který je ale dost pomalý a v kombinaci s EU omezením na 10% duty cycle pro frekvenci 868 MHz způsobuje problémy ve větších sítích. Meshtastic nadšenci v ČR se tak domluvili a používáme Medium/Fast.

Další důležitý parametr je jméno vašeho node. Jedná se o dva parametry „Long name“ (dlouhé popisné jméno vašeho zařízení, které se zobrazuje ostatním uživatelům v seznamu okolních node) a „short name“ (zkratka pro vaše zařízení, která se ostatním uživatelům zobrazí v chatu a na mapě). Jména mohou obsahovat cokoliv, ale v czmesh jsou domluveny tyto základní pravidla:

  • Emoji 📟 na konci jména značí koncový node, který máte u sebe a je spárovaný s telefonem. Přes tento node budete komunikovat.
  • Emoji 🗼 na konci jména značí router/repeater, který má dobré umístění a slouží primárně pro rozšíření mesh sítě. Na tomto node si pravděpodobně nikdo zprávy nepřečte.
  • Emoji 🌐 na konci jména značí, že je node připojen do MQTT sítě. Tento node bude pravděpodobně přeposílat zprávy do a z MQTT serveru, čímž se mohou snadno propojit dvě izolované Meshtastic sítě. V takovém případě bude jméno node ještě obsahovat řetězec „.czmesh“.

Následující screenshoty jsou z Android aplikace a mého node, který je připojen přes Bluetooth. Zařízení se jmenuje „VascoCZ Red“ (podle barvy krabičky), krátké jméno „vsrd“ (zobrazuje se například na displeji) a má nastaven region EU_868. Screenshoty jsou už starší, takže jméno ještě nemá výše popsané emoji pro czmesh.

Po úspěšném nastavení se vám pak v záložce zpráv (obrázek chatu uplně vlevo v záložkách) objeví výchozí kanál „LongFast“ (pokud jste se rozhodli zachovat defaulní nastavení) nebo „MediumFast“ (pokud jste přepnuli na preset používaný v czmesh), na kterém komunikují všechny ostatní nody. Zprávy, které odešlete v tomto kanálu se odešlou všem ve vašem okolí.

Pokud budete chtít komunikovat šifrovaně jen s vybranými nody (například jen s vlastními nody nebo nody vašich kamarádů), pak je nutné nakonfigurovat další kanál (v konfiguraci „Channels“) a přidat mu náhodně zvolený šifrovací klíč, který uchováte v tajnosti a uložíte do všech node, se kterými chcete bezpečně komunikovat.

Pak už je vše připraveno k experimentům. Já si komunikátor beru pokaždé, když jdu ven a zkouším vysílat kde se dá. Od ledna se Meshtastic síť hodně rozšířila a aktuálně (červen 2024) mám víc jak 150 nodů v Brně, Praze a Vídni.

Můj dosavadní rekord je necelých 9 km mezi dvěma nody. Jeden byl na střeše dvoupatrového rodiného domu a s druhým jsem vyjel na kole na blízký kopec (Bílé Karpaty). Asi bych vzládnul i větší vzdálenost, ale už se mi nechtělo šlapat :)

LoRa signál se nejlépe šíří na viditelnou vzdálenost, tedy když mezi vysílačem a přijímačem nejsou žádné překážky.

Bezpečnostní odbočka

Jednou z prezentovaných vlastností Meshtastic projektu je „encrypted communication“. Trochu jsem pátral po tom, co to přesně znamená a zde jsou moje poznámky:

  • Odesílaná zpráva (paket) obsahuje hlavičku (komu, od koho, …), která se nešifruje. ID vašeho node je tedy vždy veřejně známá informace.
  • Šifruje se pouze payload, tedy samotný obsah zprávy.
  • K šifrování se používá symetrická šifra AES128 nebo AES256, konkrétní varianta se zvolí podle dodaného klíče.
  • Každý kanál (představte si to jako skupinový chat) má svůj vlastní tajný klíč. Aby dva nebo více nodů mohli komunikovat, musí mít stejnou konfiguraci kanálu (jméno a tajný klíč).
  • Klíče se do nodů nahrávají ručně, například přes QR kód, který umí aplikace v Android vygenerovat. Tento kód je pak nutné držet v tajnosti, jelikož obsahuje vaše tajné klíče.
  • AES je symetrická šifra. To znamená, že kdokoliv má tajný klíč, může zprávy šifrovat i dešifrovat. A to i zpětně (AES nemá forward secrecy)!
  • Myslím si, že Meshtastic není odolný proti replay útoku. Zatím to ale nemám ověřeno.
  • Meshtastic zprávy nemají žádnou formu elektronického podpisu. Původ zprávy tak nelze zaručit a stejně tak nelze zaručit, že zpráva nebyla „po cestě“ změněna.
  • Zatím jsem nezjistil jak fungují „direct messages“, kdy se posílá zpráva konkrétnímu uživateli. Myslím si, že se k zašifrování používá klíč společného primárního kanálu a tedy každý kdo má stejný kanál (a tedy i stejný tajný klíč) může zprávu rozšifrovat a přečíst. Direct messages tedy nejde považovat za privátní.

Výše uvedené platí pro aktuální FW 2.2.17. Informace mám z vlastního experimentování, čtení zdrojového kódu a dokumentace. Pokud mám v některé úvaze chybu, tak budu rád za zprávu.

Závěr

To je zatím vše. Text budu postupně rozšiřovat, jak získám víc informací a zkušeností s provozem.

Doufám, že se brzy uvidíme na kanálu MediumFast :) a do té doby mě najdete na Twitteru a na Meshtastic Discordu. Na obou jsem jako @vascocz.

Changelog

  • Leden 2024: první verze článku.
  • Červen 2024: informace o czmesh a nastavení na Medium/Fast.