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 shrnout 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 vytváří 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.
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 tolik 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-RP, 100 mm (TME.eu nebo Aliexpress),
- posuvný přepínač SPDT (TME.eu),
- anténa pro frekvenci 868 MHz (měl jsem v šuplíku, ale vy můžete objednat Gizont 868 SMA-RP z Aliexpress) 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 výř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
- RAK19007-5005_v15_back_12mm-battery-hexagons.stl
- 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 doplňoval jsem ho až později.
Nahrání firmware bylo snadné a stačí k tomu:
- Stáhnout si ZIP s posledním Meshtastic FW.
- Zapojit RAK19007 přes USB-C k PC.
- Dvakrát krátce po sobě zmáčknout RESET tlačítko (vedle USB-C konektoru).
- Zařízení se k PC připojí jako mass-storage.
- Na tento disk zkopírovat soubor
firmware-rak4631-X.X.XX.XXXXXXX.uf2
ze ZIP souboru. - 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í:
- Android aplikace (dostupná v Google Play)
- iOS aplikace (dostupná v Apple Store)
- MacOS aplikace (dostupná v App Store)
- Web klient
- 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é přidat další kanál (v konfiguraci „Channels“) a dát 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 přes 15 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“. Pojďme se podívat na detaily:
- 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)!
- Meshtastic není odolný proti replay útoku.
- Zprávy nemají žádnou formu elektronického podpisu. Původ zprávy nejde zaručit.
- Tzv. „direct messages“, kdy se posílá zpráva konkrétnímu uživateli používají klíč společného primárního kanálu, takže 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 nejde považovat za privátní.
Výše uvedené platí pro FW do verze 2.5.0. Od verze 2.5.0 (včetně) se situace výrazně zlepšila zavedením asymetrické šifry (eliptické křivky) a Diffie-Hellman výměny klíčů, které se budou používat pro „direct messages“. Pro skupinový chat se i nadále používá symetrické AES.
Každý node s FW 2.5.0+ si jednou, po prvním spuštění, vygeneruje tajný klíč a veřejný klíč bude pravidelně posílat do svého okolí broadcast zprávou. Kdokoliv může vzít veřejný klíč vašeho node a spolu se svým tajným klíčem zašifrovat zprávu určenou jen pro vás.
Každá zpráva je navíc opatřena elektronickým podpisem (MAC), takže je zaručena nejenom její důvěrnost (nikdo cizí ji nerozšifruje), ale i její autenticita (nikdo cizí ji nezmění).
Tento nový šifrovací algoritmus se používá i pro vzdálenou administraci, kdy je možné měnit konfigurační parametry vzdáleného node přes Meshtastic síť. Každá administrační zpráva také nově obsahuje 8 bajtový „session“ klíč, který je platný 300 sekund, což by mělo zvýšit bezpečnost hlavně proti replay útokům.
Závěr
Pokud vás téma zajímá více, můžete se podívat na moje další články o Meshtasticu:
Dále je možné se přidat do (českých) skupin na sociálních sítích, které jsou zaměřeny na Meshtastic:
- Meshtastic CZ/SK users group na Facebook (vhodná pro začínající)
- Skupina
meshtastic_cz
na Telegramu - Oficiální Meshtastic Discord server (anglicky)
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.
- Řijen 2024: doplnění o nový šifrovací algoritmus ve FW 2.5.0.