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, jelikož u nás zatím není projekt tak rozšířen a nody dalších uživatelů najdete možná jen ve velkých městech.

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“.

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.

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“, 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á. Zatím jsem ale neměl štěstí a nikdo jiný neodpověděl, doufám že se díky tomuto článku zapojí do projektu více lidí a bude na kanále LongFast veseleji.

Můj dosavadní rekord je 1100 metrů mezi dvěma nody v městské zástavbě. Jeden byl za oknem přízemního domu a druhý byl na mém kole, se kterým jsem si udělal okružní jízdu po okolí. 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. To se v mém případě zatím nepovedlo, jelikož překážky (domy, stromy, kopce) jsou skoro všude. Čekám na lepší počasí a pak zkusím vyrazit na kopec.

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 LongFast :) a do té doby mě najdete na Twitteru a na Meshtastic Discordu. Na obou jsem jako @vascocz.