четвер, 28 листопада 2024 р.

WikiMesh. Коротко про Meshtastic

Meshtastic - бездротова децентралiзована мережа з MESH структурою на базi вiдкритого софту, що дозволяє обмiн між пристроями без використання Інтернету. Основний протокол фiзичного рiвня Meshtastic – Lora. Вузли Meshtastic (ноди) на Lora самосинхронізуються для обміну короткими текстовими повідомленнями між віддаленими кореспондентами, між котрими неможливий прямий радіозв'язок та можуть використовуваться для...

  • аварiйного чату на рiзнi теми
  • оповіщення населення
  • координування пошукових груп
  • туризму

Оскiльки Lora в сутностi є ЛЧМ, який дозволяє здійснювати когерентне накопичення, то такий вид модуляції дозволяє мати великий запас з енергетики і працювати навіть при негативних співвідношеннях SNR на дуже великі відстані. Практично підтвердженi Lora-зв'язки EME (Земля-Місяць-Земля) на 70 cm (Lora LR1110 + PA 350W + дзеркало 25m) та 1296 MHz. Також повсякденним є використання Lora на вiдстанях ~ 40+40 тис km при потужностях вiд 10 мВт та антенах ATA або Cross-YAGI, Helical.

Структура Meshtastic дозволяє поділ чатiв по частотним каналам* та може йти як вiдкритим текстом, так й з шифруванням алгоритмом AES256 з вiдкритим або приватним ключем. Основнi частоти работи на безліцензійних ділянках 70 cm (LPD) та 34 cm (868 MHz). 

Частоту роботи заданого каналу Meshtastic можна визначити як:

freq = freqStart + (bw / 2000) + (channel_num * (bw / 1000)) 

Де: freqStart - Meshtastic default chanel EU433, bw – bandwidth 125.0 kHz (Meshtastic default chanel).

Наприклад 1 канал при смузi 31.25 кHz:

freq = freqStart + (bw / 2000) + (channel_num * (bw / 1000)) = 433.125 + (31.25 / 2000) + (1 * ( 31.25 / 1000)) = 433.171875 MHz

Апаратна частина

У якостi пристроїв Meshtastic використовують як готовi борди TTGO - T-Beam, LORA32-OLED, TDECK, T-Echo, так й DIY гаджети на базi ESP32/STM32/RP2040 та Lora-трансиверiв виробникiв - Semtech, E-byte, NRF. Окремо треба вказати на суміщені МК+RF з Lora на борту, наприклад STM32WL5x з вбудованим ядром SX126x.

    

Також можливо використання будь-яких SDR трансиверiв HackRF, LimeSDR, Pluto, etc для декодування protobuf в GNU radio:

    

Iнтерактивна таблиця ТТХ готових борд з Lora:


Усі типи модулів (навiть саморобних) можна використати для передачі IoT телеметрії Lora-транспондерам низко-орбітальної групи супутникiв FOSSA (проект TinyGS). Конфігуратор firmware дозволяє визначити самому піни прямо з додатку на телефонi, чого не може Meshtastic.

Особливiсть роботи Meshtastic-мереж

Meshtastic та взагалi MESH-структури - це не системи реального часу. Одночасна передача в одному частотному каналi - колізії прийому та пошкодження преамбул Lora пакетiв плюс до всього є підтвердження прийому ACK, яке теж потрібно надіслати у відповідь у вільний час та треба розподiляти пакети даних (побудова графу найкоротшого шляху по рiвням SNR, як приклад алгоритму). 


Принцип роботи мережi наступний:

  • Кожна нода (в режмі ретранслятора) ретранслює прийнятий пакет до певної межі стрибків
  • Перед ретрансляцією НОДА якийсь час слухає Lora-етер, щоб дізнатися, чи не ретранслювала пакет інша НОДА. Якщо так, далі пакет не йде - не накопичується
  • Якщо якась НОДА бачить пакет з HopLimit більше 0, НОДА зменшить значення HopLimit та спробує виконати повторну трансляцію від імені вихідної НОДи. Пiсля декiлькох спроб пакет знищується
  • Для того, щоб більш далекі видимі НОДи теж ретранслювали повідомлення, вони вимірюють SNR прийнятих пакетів і ретранслюють від дальніх вузлів мережі, а не близьких
  • Вихідна НОДА орієнтується на сигнал підтвердження ACK. Робить кілька спроб надсилання і після вiдсутностi пiдтвердження повідомлення позначається як не надіслане

Чи може працювати Meshtastic через супутники?


Так, може. Вiдомi декiлька працюючих варiантiв:

  1. Легальний на базi закритого API структури месседжiв вiд Lacuna Space (звичайним користувачам недоступний й скорiш буде комерцiйним). API дуже сире, а затримка дуже велика
  2. Форк офiцiйного Meshtastic для роботи з змiщенням на саткоми (закритий та сирий проект, оскiльки трафiк Meshtastic дуже перевантажений службовими тегами та не годиться для обмiну по каналам з невеликими смугами)
  3. Meshtastic-Serial API, який дозволяє робити мости (шлюзи) over UART з iншими супутниковими модемами. Тобто, це чисто апаратний лайфхак зовнiшнiм девайсом, який парсить та формує protobuf (така можливiсть прокидувати саме Meshtastic-мережi є в LoraSAT).

Взагалi, щоби було розумiння - у випадку роботи через ретранслятор на орбiтi MESH не несе користi, оскільки всі слухають всіх відразу по ФАКТУ і всі отримають повідомлення, якщо антени налаштовані на один пресет та супутник, якщо однакові налаштування за синками, шириною каналу та ключами AES256. З космосом MESH навіть шкідливий, тому що перевантажує канал зв'язку. Там MESH даром не впав.

Антени кругового радіусу дії

Слiд зазначити, що дiаграма спрямованностi Omni-антен (колiнеарiв) має форму тороїду з провалом по центру. Який тим бiльше, чим бiльший КНД (або вiртуальний параметр “пiдсилення”) антени. 


Для саме наземних зв'язкiв - це перевага, яка збiльшує дальнiсть зв'язку. Але при подальшому збiльшеннi пiдсилення (бiльше 6 плечей) ДС стає бiльш вузькою (гольчастою) й на антену починають впливати зовнiшнi фактори, як то - вiбрацiї, вiтер, прогин щогли вiд маси антени та АФП. При недостатнiй жорсткостi конструктиву антени та щогли, будь-який нахил призведе до того, що основний пелюсток антени впреться або в землю, або в небо й зв'язок буде втрачено.

Приклади готових всеспрямованих вертикалiв:
  1. Колінеар UR8LV (обирати на 433 MHz)
  2. Колiнеар Storm UV-100 (145/433) пiсля доопрацювання
  3. Колiнеар вiд VITEX на UHF
  4. Колiнеар X510 (145/433) 
  5. Будь-який вертикальний диполь з плечами по 17 см (для 433 MHz)

Спрямованнi антени

При виборi спрямованних антени також треба розумiти взаємозв'язок мiж КНД, кутом розкриття ДС антени та дальності (без врахування ефектів рефракції та дифракції) в межах прямої видимостi:


Перевiренi MMANA-моделi спрямованих антен для самостiйного виготовлення:
  1. Double tie 5el 433
  2. Double tie 3el 433
  3. YAGI 4el 6mm_vib 8mm_435
  4. YAGI433_6EL_trubka6_kvadrat20
  5. YAGI70 3el trubka6_vib8
  6. YAGI70 3el ZR
  7. YAGI70 4el trubka6_vib8
Приклади готових спрямованих антен:

Про мобiльний сетап з розбiрною LPDA та як коректно експлуатувати:



Окрiм правильного розташування фiдеру зниження в точцi нульового потенцiалу, будь-яку електронiку потрiбно змiстити за межi початку КЗ перемички в LPDA. Звiсно руки теж не повиннi бути в ближньому полi антени.

Що з радiовидiмiстю для нод Meshtastic?

Та все це саме, що з покриттям будь-якого передавача з антеною на заданiй висотi та картою висот. Карта висот показує покриття антени з врахуванням 3D рельфу з точки спостереження із заданої висоти.


Звичайно є карта профілю висот і відстань за позивними (а не просто за QTH) http://ham.remote-area.net/linktool/index.php, навіть зону Френеля малює. Але останнє у 2D площині

Про що забувають Мешастiки

Судячи з того, що зараз бачу в мешастік-групах, у тому числі забугорних, як більшість експлуатують зі штатними "антенками" й купою перехідників та ще й в приміщенні, в кращому випадку біля вікна на резинку:

(не робiть так)

А коли є конект, то завдяки комусь, нода якого з антеною (колінеари чи направленою) з висотою та відкритим простіром. Це той випадок, коли qrp-істи пишаються трансатлантичними зв'язками на мобільні антени, забуваючи що з другої сторони прилічни сетапи та стеки. Звісно, що є тропо та атмосферні волноводи, це теж не рідкість.


А ось таке використання всерединi клiтки Фарадея (металевий корпус авто плюс дiаграма антени свiтить в дах та підлогу) допустиме, якщо поруч є ретранслятор:


Нода може бути автономна без використання смартфону з клієнтським додатком:


Пiдвищення потужностi

Характерно, що всi, хто опанував Platformio (доречi, український продукт) або Visual Studio, лiзуть чомусь в Firmware Мешастiка в модуль RadioInterface.cpp до строки:
#define RDEF(name, freq_start, freq_end, duty_cycle, spacing, power_limit, audio_permitted, frequency_switching, wide_lora)
яка узагальнює використання рiзних модулiв та давай змiнювати потужнiсть на +30 dBm, забуваючi зазирнути до DATA-SHEET Lora-чипу, який використовується саме в його моделi Meshtastic (1W SX1262 до +30, SX1268 до +22, SX1276-79 до +20) та те, що Firmware використовує пакет Radiolib, а в ньому приколи ініціалізації у кожному модулі свої. Наприклад для 1268 йде перевiрка дiапазону:
int16_t SX1268::setOutputPower(int8_t power) {
RADIOLIB_CHECK_RANGE(power, -9, 22, ERR_INVALID_OUTPUT_POWER);
Для 1278 взагалi таке:

if(power != 20) {
RADIOLIB_CHECK_RANGE(power, 2, 17, ERR_INVALID_OUTPUT_POWER);
}
А у 1262 встановлення +30 dBm призведе до непрацездатності. Ба, скажу бiльше, коли для того ж SX1262-F30 ставлять софтово +22 dBm, то реальна потужнiсть на виходi = +31 dBm. Це було вимiряне на Tektronix PSM4120. Пояснення просте, ви дивитеся в даташит, забуваючи, що модуль по суті - гібридна інтегральна схема, де на загальній платі зібрана вся обв'язка мікротрансівера - сам чіп, елементи комутації, смугові фільтри та вихідний силовий RF-транзистор.



Вимiрювання рiвнiв з етеру

Не всi методи читання регистрiв коректно реалiзованi, або взагалi реалiзованi в Radiolib. Наприклад, той же RSSI недоступний для SX1276 та SX1278 в пакетi, але прописаний ось тут. Тому, коли ви хотiли орієнтуватися на мешастики з їх використанням, майте це на увазi.

Стабiльнiсть живлення

Meshtastic плати T-Beam, LylyGo, PAX не мають продуманих рішень усунення зависань контролерів під час живлення від сонця або при сiвшому акумi. Виявляється в тому, що при настанні нічного часу доби або похмурих тижнів настає момент, коли джерело енергоживлення вичерпує свій ресурс і живлення знижується настільки, що його починає не вистачати для стабільної роботи, а при появі сонця напруга живлення починає повільно наростати (не стрибкоподібно), Проте контролер не виходить на робочий режим. В деяких спiльнотах пхають вотчдог на 555. Але ж рiшення простiше - це супервiзор живлення. Наприклад, NCP303LSN29T1G.

BLE + WiFi

Оскільки бiльшiсть Meshtastic-гаджетiв зібрані на SoC ESP32 вiд Esspresif, то їм властивий загальний недолік - неможливість одночасної роботи BLE + WiFi. Оскільки стека два, а антена одна, от і доводиться IDF комутувати їх. Мінімальний час такої комутації близько 100 мс. А це призводить до втрат даних. Тому ці режими використовуються завжди окремо. Повiрте, пробував їх поєднувати, це можливо софтово. Але нічого хорошого це не дає.

Голос через Lora

Голос через Lora - це факт, це можливо та працює. Але є нюанс... нюанс в тому, що у разі децентралізованого чату ми маємо так чи інакше один потік даних і з'єднання point-multipoint в радіусі покриття передавача Lora з урахуванням чутливості приймачів Lora, "пiдсилення" антен, втрат у фідері та завадової обстановці в ефірі. Але у випадку мереж MESH, особливо з примітивною структурою, як у Meshtastic, ми маємо необхідність зберігання всіх голосових повідомлень усіх нод у кожній ноді та постійними повторами. В результаті трафік мережі стає перевантаженим навіть при розширенні смуги (знижує таймінг), а ресурси кожної ноди витрачаються на зберігання всіх цих повідомлень. Враховуючи, що голосові дані чутливі до випадання пакетів даних після стиснення, мережа без гарантованої доставки стає просто непрацездатною. Адже федінг сигналу на VHF/UHF діапазоні поширюється на будь-які види модуляції і Lora тому не виняток. У разі прямого каналу в такій MESH мережі голосовий зв'язок можливий. Але це вже й не класичний MESH, де ноди можуть не бачити один одного та бачити через когось.

Варiанти вирішення проблем зависання

На жаль, колективна розробка і Open Source дають себе знати і проект Meshastic працює зі збоями, а від релізу до релізу обзаводиться новими багами. Іноді, у певному режимі, може працювати місяцями. Ні, імхо не проти опенсорса як такого, опенсорс та мозковий штурм як один з методів ТВВЗ дає великий поштовх прогресу і новим ідеям, у мене старі проекти лежать на стародавньому souceforge. Але вибачте, коли перелопативши з десяток релізів знаходиш стабільну версію для радіоінтерфейсу Lora, а потім активувавши WiFi отримуєш ребут або вильоти без причини? А чого варте так і невирішена проблема відсутності кнопки збереження налаштувань у WEB-інтерфейсі? Адже Meshtastic вже розродився на 19 версію. Однак, мабуть, найбільш кричущою проблемою є проблема зависань контролера. Раніше згадував про проблему повільного зростання живлення та варіант рішення через супервізор. Але це хардварна проблема, яка обумовлена непродуманою китайською схемотехнікою. А ось софт... а софт має властивості виснути з різних причин. І коли девайс фізично поряд, проблема невелика - жмякнув RESET або пересмикнув живлення та знову в етерi. А ось при віддаленому використанні, особливо у вуличних умовах, умовах неможливості повторного фізичного доступу, наприклад до даху – проблема виходить на перший план. Методи вирішення старі як світ та відомі з часів експлуатації зовнiшних точок доступу, метеостанцій та репітерів.
  1. Віддалений холодний RESET живлення через Інтернет, GSM/3G/4G мережу мобільного оператора або радіоканал з DTMF кодом через радіостанції КХ/УКХ або радіоканал на тих же FSK/Lora-модулях. Підійдуть, наприклад, усім відомі Sonoff та GSM-розетки. При цьому пристрій віддалено знеструмлюється і потім вмикається.
  2. Періодичний холодний RESET живлення через заданий проміжок часу. Тут рішень безліч від самопальних реле часу до китайських DIY-плат або покупних розеток з такими таймерами.
  3. Автономний вотчдог (сторожовий таймер) для горячого резету, що перевіряє працездатність пристрою за його активністю на мережевому або Serial-порту та здійснює RESET через підтяжку ENABLE контролера до землі.
  4. Віддалений горячий RESET через підтяжку ENABLE контролера до землі знову ж таки через Інтернет, мережі мобільного оператора або власний наземний радіоканал. Причому останній доцiльнiше при блекауті, але вимагає хороших антен і висот. А на УКХ ще й обмежений кривизною Землі (відстань у km можна ~ прикинути як 3.57*(sqrt(h1) + sqrt(h2)) від висот антен в метрах). Альтернативою стає супутниковий радіоканал (наприклад, віддалений контроль навантажень через супутник є лише одним із численних опцій LoraSAT).
  5. Автономний софт-вотчдог (але то треба тiкет мишастiкам, або форк проекта)

Розглянемо варіанти DIY-рішень з пунктів 3 та 4 для рукастих:

  1. Як вотчдог (див. схему нижче) рекомендую надійну ІМС від аналогових дівок ADM706SAR, що здійснює моніторинг активності порту WDI і формує скидання низького рівня на порту WDO за відсутності активності більше 1 секунди. Джерелом такої активності може бути як окремий порт GPIO, так і UART TX з Meshtastic при активному Debug в налаштуваннях. WDO підключаємо до порту Enable ESP32. Турбуватися про те, що при постійному ребуті на Serial і так сипляться дані не варто, цю проблему RESET-ом не вирішиш.
  2. Горячий RESET через Інтернет, знову ті самі Sonoff, його клони і GSM-реле. А ось через мережі мобільного оператора все можна спростити, якщо взяти телефон/смартфон, видалити з налаштувань номер SMS центру для блокування вхідних SMS і здійснювати RESET просто зателефонувавши на нього. Причому можна знімати сигнал керування як з вібромотора через амплітудний детектор за схемою подвоєння напруги з ключем на оптроні, так і не втручатися фізично в телефон/смартфон, а реалізувати VOX прямо на 3.5" стереоджеку. Схема класична - сигнал виклику надходить через ємнісний дільник на амплітудний детектор, де випрямляється і через RC ланцюжок, що виконує роль ФНЧ та відкриває ключ на транзисторі BC817 або оптроні TLP621. При використаннi VOX в телефоні/смартфоні потрібно заздалегідь активувати автопідняття трубки. Вихiд ключа підключаємо до порту Enable ESP32.
    


Iнтеграцiя Meshtastic з iншими системами

Так, вашi мишi можуть керувати та можуть керуватися, передавати данi датчикiв через мережу MESH over Lora, так й назовнi через IP мережi за допомогою:
  1. MQTT (при активному WiFi)
  2. Meshtastic-Serial API (по USB)
Наприклад, ось посібник з підключення вузлів Meshtastic до Home Assistant:


Частотнi безліцензійнплани в Україні

Для телеметрії та дистанційного радіокерування за умови робочого циклу до 10% згідно стандарту ДСТУ ETSI EN 300 220-1:2018 (ETSI ДСТУ ETSI EN 300 220-1:2017, ІDT) та мiжнародним нормам ERC/REC 70-03 діапазон 54 додатка до рішення Європейської Комісії (ЄС) 2017/1483, ECC/DEC/(04)02, ERC/REC 70-03 діапазони 44a, 44b, 45a, 45b, 45c додатка до рішення Європейської Комісії 2013/752/ЄС визначенi наступнi частотнi межi в роздiлi 2 додатку 1 до постанови "Про внесення змін до плану розподілу та користування радіочастотним спектром в Україні":
  1. 869.4 - 869.65 MHz за умови обмеження потужності до 500 mW
  2. 433.04 - 434.79 MHz за умови обмеження потужності до 10 mW
Альтернативнi MESH мережi

Зокрема проекту Meshtastic розвивається і безліч інших альтернативних цивільних та військових MESH-мереж, які використовують як транспортний рівень Lora, WiFi, ESPNOW, DSSS і навіть супутникові комунікації:


Постскриптум

Шановні читачі, якщо мої дописи вас зацікавили – пiдтримайте збiр або ставайте спонсорами Youtube-каналу LaboratoryW з ексклюзивними лайфхаками.

Корисні посилання

  1. MiniFAQ по Lora
  2. Зменьшення нестабільностi TCXO в LoRa-модулях
  3. Крос-бенд Lora мереж та ПАПУГА
  4. Простий мiжбендовий Lora-шлюз на UART модулях без окремого контролера
  5. LoraBOT та приймач на одну антену
  6. Як працювати Lora та аматорському трансиверу на одну антену
  7. Чи можна працювати в Lora із супутниками на низьких орбітах? Можна й ось чому...
  8. Вступна по захисту АФП та обладнання від блискавки та наведеної статики
  9. Як правильно тестувати антен
  10. Як скласти сигнали різних антен
  11. Лайфхаки. Симетруючi шлейфи з КЗ по DC
  12. Щогла для ваших антен. Чи все так просто?
  13. Готовий модуль TTGO LORA32-OLED з Ali без GPS за 16$ або з GPS та 18650 холдером
  14. Готовий модуль T-Beam
  15. Готовий модуль TDECK
  16. Готовий модуль T-Echo
  17. DIY Meshtastic за 10 хвилин
  18. Як прошити Meshtastic в польових умовах з смартфону
  19. Firmware на ESP32 та додаток на смартфон
  20. Дока по прошивці мешастіка з комп'ютера
  21. Конфiгурування Meshtastic з браузера по TCP/Serial
  22. BBS мережа через Meshtastic
  23. Парсер Protobuf Meshtastic в GNU radio
  24. DATA-SHEET на вотчдог ADM706
  25. DATA-SHEET на оптрон BC817
  26. DATA-SHEET на оптрон TLP621
  27. Увімкнення-перезавантаження PC мобілкою. Максимально простий спосіб інтерфейсу. - Радіоаматор, 2012, №6
  28. Українська версія MMANA для роботи з моделями антен