Meshtastic на общее благо

Перевод статьи Meshtastic For The Greater Good — Jonathan Bennett, Hackaday.
На прошлой неделе по моему городу ударил торнадо. Здесь, в Оклахоме, это не удивительно, и, к счастью, это событие было категории F0 или, возможно, даже EF0 — совсем слабый торнадо. Обрушилось лишь пара крыш, хотя примерно половине домов в городе, наверное, понадобится ремонт кровли из-за сочетания крупного града и сильного ветра. Хотя всё было не так плохо, кое-где по городу пропало электричество, и это привело к любопытной череде событий.
Сообщения в чате приходили примерно такие: «Да, это моргнуло [электричество]. Даже интернет мне вырубило». Затем: «Ура, [оптический интернет] отвалился, а теперь и у Starlink слишком много облаков на пути». А после десяти минут тишины мы слегка забеспокоились, увидев: «Пора прятаться под кровать. …Сотовая связь уже вернулась?» Немного жутко думать о том, чтобы помогать соседям и друзьям после катастрофы, посреди того сбоя связи, который часто за ней следует. Если бы ему понадобилась помощь, а рабочей связи не было бы, сколько времени ушло бы у нас, чтобы поехать его проверить?

Как оставаться на связи здесь? avivi, CC BY-SA 2.0
Я уже присматривался к открытому проекту, который мог бы с этим помочь. Одна из моих подписчиц описала проблему: связь могла быть отрезана посреди крупного протеста в её родной стране, и ей нужен был способ оставаться на связи в толпе.
Одним из возможных решений был Meshtastic — шифрованный беспроводной протокол, который использует меширование для распространения сообщений и данных о местоположении. Он работает на нескольких разных платах, и часть железа на удивление доступна по цене. Например, стартовый набор WisBlock Meshtastic стоит всего 24,99 доллара. Подключите его к телефону кабелем USB-C — и сможете подключаться к ближайшим каналам Meshtastic или создать собственный приватный канал.
Магия#
Радиомагия Meshtastic исходит из LoRa — беспроводного протокола, работающего в диапазонах ниже 1 ГГц. Одна из выигрышных особенностей этого диапазона в том, что до мощности передачи в 1 Вт не требуется любительская лицензия. Если у вас есть позывной радиолюбителя — можете смело поднимать мощность, но с оговоркой: любителям нельзя использовать шифрование. А ведь это одна из фишек Meshtastic: он применяет шифрование AES, чтобы разговоры оставались приватными. О настройке чуть позже.
Слышу, как вы, радиогики, ухмыляетесь: «Какой-то жалкий ватт?» Но люди умудрялись устанавливать связь по LoRa на 128 миль (206 км) при куда меньшей мощности, чем этот полный ватт. Да, в том тесте участвовал метеозонд, но занявший второе место результат — всё ещё солидные 103 мили (166 км), достигнутые с вершины на вершину над водой. Вы, наверное, заметили, что оба рекорда требовали высоты. Диапазон 915 МГц, на который нацелен Meshtastic, всё ещё сильно зависит от прямой видимости — никакого отражения от ионосферы здесь нет. А при выходной мощности всего в 1 ватт мы не пробьёмся сквозь много земли.
Так что, чтобы компенсировать не блестящее распространение сигнала в этом диапазоне, протокол Meshtastic делает каждый узел потенциальным ретранслятором. Если ваше радио может связаться с радио приятеля на холме, то это устройство работает ретранслятором и заново передаёт пакет, давая вашему сообщению куда больший охват. По умолчанию каждый пакет ограничен тремя «прыжками», и протокол старается быть умным, чтобы не заваливать эфир бесполезным эхом. Но если вам удастся разместить пару радио на возвышенностях по всей округе, можно добиться довольно хорошего покрытия.
Польза#
Ладно, и что же с этим можно делать? Учтите, что LoRa не выигрывает никаких состязаний по пропускной способности. Никакого стриминга видео или обмена файлами. Meshtastic лучше всего работает при отправке текстовых сообщений — либо напрямую другому радио, либо в общий канал. И если ваше радио знает, где оно находится, оно может каждые несколько минут отправлять данные о местоположении в основной общий канал. Есть и другие модули — например, передача телеметрии вроде температуры и влажности по сети или довольно впечатляющий экспериментальный модуль, который передаёт по эфиру звук с низким битрейтом. Система изначально проектировалась для друзей, вместе отправляющихся в поход, кемпинг или даже полёты на дельтаплане.

Радио на холме
У меня есть несколько сценариев, где Meshtastic вполне может стать killer app. Один из них — восстановление после катастроф. Если я смогу уговорить нескольких друзей припрятать по радио, то, если торнадо действительно придёт и испортит нам день, у нас будет резервная сеть связи, чтобы организовать доставку помощи туда, где она нужна. Но в повседневной жизни мне гораздо интереснее выдавать по одному радио на батарейках каждому из моих детей, прежде чем выпускать их за дверь. Вдруг не видите ребёнка там, где ожидали? Пингуйте радио, чтобы получить обновление местоположения.
У меня есть антенна на 6 dBi примерно в 20 футах (6 м) над землёй на заднем дворе — стараюсь выжать всю дальность, какую можно. Я стабильно получаю покрытие в три с половиной мили по городу, с несколькими мёртвыми зонами в низинах. Уговорить кого-нибудь в правильном месте на ретранслятор здорово изменит картину. А на дальнем конце я установил довольно надёжную связь на 10 миль с местной вершины горы. Прямая видимость — король.
С чего начать#
Когда я впервые открыл для себя Meshtastic, крючком, который меня по-настоящему зацепил, была та самая низкая цена. Пара наборов WisBlock или Lilygo T-Beam даст вам старт, но производительность маленькой антенны на плате не поражает. Приятно также иметь GPS-модуль и батарею для радио. И, конечно, вам захочется напечатать корпус на 3D-принтере, ведь кому хочется таскать голую плату с болтающейся антенной? На Etsy и Tindie есть корпуса и даже собранные наборы. А Rokland — один из любимых поставщиков разработчиков Meshtastic.
Для чуть большей мощности есть Station G1 от B&Q Consulting с усилителем, поднимающим выходную мощность аж до 3,5 Вт, если вы хотите отключить шифрование и слать свой радиолюбительский позывной с каждым пакетом. Чтобы оставить шифрование включённым, придётся ограничить выход одним ваттом. Хотя мои тесты явно показывают, что прямая видимость становится проблемой задолго до мощности передачи, и её повышение эту ситуацию радикально не улучшает.
Дальше вам просто нужны два или более радио с общим каналом. По умолчанию радио Meshtastic используют канал LongFast с общим пустым ключом шифрования — как своего рода публичный канал. Стоит учитывать: если вы передаёте информацию о местоположении, она уходит по основному каналу. Так что, возможно, вы захотите задать в качестве основного приватный канал с уникальным ключом шифрования, а канал LongFast определить как вторичный, чтобы участвовать в публичном канале. Для этого в настройках LoRa установите номер канала 20 и добавьте вторичный канал с именем «LongFast» и предустановленным ключом «AQ==».
И на этом всё готово. Можно отслеживать транспорт или человека, отправлять текстовые сообщения, не зависящие от интернета или сотовой сети, и даже проделывать пару дополнительных трюков. Один из более интересных трюков — поддержка в Meshtastic отправки пакетов на MQTT-сервер. Но это тема для другого раза.
Если ищете больше информации — было отличное интервью на FLOSS Weekly с парой разработчиков Meshtastic, которое я, признаюсь, не без предвзятости рекомендую. Официальный сайт Meshtastic и репозиторий на GitHub тоже хорошие отправные точки. Кроме того, я уже больше месяца засыпаю Discord Meshtastic вопросами, предложениями и багрепортами — и это очень дружелюбное сообщество. Если есть вопросы — ныряйте туда. И ждите ещё больше веселья от интеграции Meshtastic с другими проектами.