Node-RED для радиолюбителей — автоматизация без кода

Node-RED для радиолюбителей — автоматизация без кода

Изначально я хотел написать про настройку моста между APRS и Telegram с помощью aprsd — это стало бы логичным продолжением темы интернет-шлюзов в APRS. Но, честно говоря, сам я не использую aprsd и вообще предпочитаю более универсальные инструменты.

Например, когда я только-только осваивал APRS, то пересылку сообщений в Telegam я сделал через систему умного дома Home Assistant. Просто потому что Home Assistant уже был под рукой и в принципе его можно использовать и для этой задачи тоже. Но я не буду вам рекомендовать ставить Home Assistant, ибо для радиолюбительской автоматизации это не самый подходящий инструмент.

Но есть похожая система, которая называется Node-RED. Изначально Node-RED тоже создавался для домашней автоматизации, но он получился более универсальным, поэтому многие радиолюбители взяли Node-RED себе на вооружение.

Если говорить просто, то Node-RED — это инструмент для визуального программирования, который позволяет создавать автоматизации и скрипты без написания кода. Можно просто «рисовать» логику работы, перетаскивая и соединяя блоки в интерфейсе.

Практические сценарии

В отличие от aprsd, Node-RED можно использовать не только для работы с APRS, но и для других задач. Например, с его помощью можно удалённо выключить радиоаппаратуру через умную розетку, если надвигается гроза.

Но в этой статье я сосредоточусь всего на нескольких практических сценариях:

  1. Пересылка текстовых сообщений из APRS в Telegram — полезно в качестве альтернативного способа связи с близкими в местах без сотового покрытия.
  2. Пересылка сообщений из чата Meshtastic в Telegram — если вам надоело постоянно подключаться к ноде, чтобы проверить новые сообщения.
  3. Обработка DTMF-кодов и отправка шаблонных сообщений в Telegram. Что-то похожее я уже делал некоторое время назад, но на этот раз вместо удаленного управления решил настроить отправку заготовленных сообщений в Telegram.

Готовые потоки для Node-RED

Если хотите сразу приступить к делу, то для всех описанных сценариев уже есть готовые, протестированные потоки, которые мы создавали в прямом эфире на YouTube. Все наработки, включая сами потоки и инструкции, вы найдёте в man yaml-haus — можете просто импортировать их и адаптировать под свои нужды.

Ниже я постараюсь обобщить всё то, чем мы занимались на стриме, а также схематично расскажу, как всё работает, что с чем связано и как настроить Node-RED для решения радиолюбительских задач.

Подготовка

Но прежде чем погрузиться в настройку потоков, нужно определиться с железом и подготовить окружение.

Какое железо понадобится

В качестве сервера подойдёт практически что угодно, куда можно установить Linux:

  • Старый ноутбук, пылящийся на полке;
  • Raspberry Pi или другой одноплатник (какой-нибудь такой);
  • ТВ-приставка;
  • VPS, если хочется сделать всё в «облаке».

Но у разных сценариев есть свои особенности. Подробнее про них я расскажу ниже, но в общих чертах:

  • Для сценария с DTMF нужно чтобы вы могли разместить сервер там же, где и сам радиоприёмник с антенной — приёмник должен быть подключён к серверу напрямую.
  • В случае с Meshtastic желательно, чтобы вы могли физически подключить сервер к ноде по USB. Но вообще вместо USB можно настроить подключение по локальной сети.
  • А для пересылки сообщений из APRS вообще не нужен физический доступ к приёмнику. Node-RED будет забирать данные с серверов APRS-IS, которые попадают туда благодаря интернет-шлюзам. Поэтому Node-RED можно установить даже на виртуальный сервер (в «облаке»).

Установка Node-RED

В статье я буду описывать установку Node-RED на примере DietPi. DietPi — это легкий дистрибутив Linux, идеально подходящий для одноплатников. Но если вы используете другой дистр, то загляните в официальную документацию Node-RED — там есть инструкции для всех популярных систем.

Предполагается, что DietPi у вас уже установлен и у вас есть к нему доступ по SSH (например, через PuTTY). Тогда, чтобы установить сам Node-RED, выполните следующую команду:

dietpi-software install 122

Чтобы запустить Node-RED и добавить его в автозагрузку выполните:

systemctl enable --now node-red

Готово 🙂. Веб-интерфейс Node-RED теперь доступен по адресу: http://<IP-адрес_одноплатника>:1880.

Интеграция с Telegram

Чтобы Node-RED мог отправлять сообщения в Telegram, понадобится плагин node-red-contrib-telegrambot. Для его установки:

  1. Откройте веб-интерфейс Node-RED (http://<IP-адрес>:1880);
  2. В правом верхнем углу нажмите на кнопку меню и выберите Управление палитрой;
  3. Перейдите на вкладку Установить;
  4. В поиске введите node-red-contrib-telegrambot и установите плагин.

Ещё понадобится создать бота, от имени которого будут отправляться сообщения:

  1. В Telegram найдите @BotFather;
  2. Отправьте ему команду /newbot;
  3. Дальше следуйте инструкциям: придумайте имя и уникальный username, заканчивающийся на «bot»;
  4. В конце BotFather пришлёт вам токен, который потом нужно будет подставить в настройки плагина для Node-RED. Пока достаточно его просто сохранить.

Чтобы новенький бот мог отправлять вам сообщения, начните с ним чат: просто отправьте ему команду /start. Это свяжет бота с вашим аккаунтом, и он сможет отправлять вам уведомления.

Так же понадобится узнать свой ID в Telegram: для этого отправьте команду /getid вот этому боту. Идентификатор пользователя потом понадобится указать в качестве адресата.

Если вдруг возникнут трудности с регистрацией бота, то вот тут я подготовил чуть более подробную инструкцию.

Установка MQTT-брокера

Помимо прочего, для сценария с APRS и Meshtastic ещё понадобится установить брокер сообщений Mosquitto. На DietPi это делается следующей командой:

dietpi-software install 123

Мост из APRS в Telegram

Для чего нужен такой мост? Например, чтобы оставаться на связи в местах без сотового покрытия.

Справедливости ради, если где-то нет сотовой связи, то там и APRS-шлюзов тоже не будет 🙂. Но если вы увлекаетесь яхтингом или любите ходить в походы, то по воде или с горы можно связаться даже с удаленными интернет-шлюзами. А если вы, например, собираетесь за грибами, то можно оставить в машине включённый диджипитер и тогда у вас будет связь даже глубоко в лесу.

⚠️
Если наличие стабильной связи жизненно важно, то лучше иметь при себе спутниковый телефон. Радиолюбительские технологии — это увлекательно, но не всегда надёжно.

Лично я задумался о настройке APRS-шлюза, когда мой смартфон внезапно сломался. Несколько дней без связи — не катастрофа, но всё равно как-то спокойнее, когда есть резервный канал.

Как настроить такой резервный канал? Сейчас расскажу.

Получение сообщений из APRS-IS

Чтобы ваше сообщение попало в Node-RED, оно сначала должно оказаться на серверах APRS-IS. А для этого нужно, чтобы рядом с вами был хотя бы один интернет-шлюз (IGate): можете поискать ближайший на карте или даже поднять свой.

Схема работы моста из APRS в Telegram

Node-RED умеет получать сообщения из APRS-IS через плагин node-red-contrib-aprs, но он нам не подойдет:

  • Этому плагину нужна поддержка веб-сокетов со стороны сервера, а таких серверов очень мало.
  • Также сервер должен поддерживать фильтр g/call1/call1/..., а таких серверов ещё меньше.
  • Плагин редко обновляется и не работает с последней версией Node-RED.

Поэтому для получения сообщений из сети APRS я предлагаю использовать mqtt-aprs — мост из APRS-IS в MQTT. Да, схема немного удлиняется и появляется промежуточное звено, но зато мы сможем нормально подключаться к любым APRS-серверам.

Схема работы моста из APRS-IS в MQTT

В этой обзорной статье я не буду детально разбирать установку mqtt-aprs, чтобы не уйти в дебри. Но все шаги подробно описаны в документации и вот в этой инструкции.

Собственный бот в сети APRS

После настройки mqtt-aprs у вас появится свой бот в сети APRS, готовый принимать сообщения. Любое сообщение адресованное N0CALL-1 будет декодировано mqtt-aprs и отправлено в нужный MQTT-топик.

ℹ️
В примерах я использую N0CALL-1 в качестве «имени» бота. Замените N0CALL на свой радиолюбительский позывной.

У меня, кстати, уже есть такой бот: он пересылает сообщения из APRS в Telegram-канал. Если захотите вживую «пощупать» как всё работает, то отправьте текстовое сообщение на UB0JBX-2 и оно появится в канале @mansmarthome_aprs.

Пересылка сообщений в Telegram

Теперь к главному — настройке потока в Node-RED. Я уже всё подготовил, вам остаётся только импортировать готовый поток:

  1. Откройте веб-интерфейс Node-RED (http://<IP-адрес>:1880);
  2. В правом верхнем углу нажмите на кнопку меню и выберите Импорт;
  3. Скопируйте JSON потока из man yaml-haus (кнопка копирования справа);
  4. Вставьте JSON в Node-RED, выберите импортировать в новый поток и нажмите Импорт;
  5. Откройте список потоков, нажав Ctrl+Shift+F, и выберите импортированный поток.

Должно получиться вот так:

Поток для Node-RED: мост из APRS в Telegram

После импорта подставьте свои данные:

  1. Нажмите кнопку меню и выберите Параметры;
  2. Откройте вкладку Environment и заполните переменные:
    1. APRS_BOT_CALLSIGN_AND_SSID — позывной вашего APRS-бота;
    2. TELEGRAM_ACCESS_TOKEN — токен, который вы получили от BotFather;
    3. TELEGRAM_ADRESSEE_ID — ваш ID в Telegram;
    4. MQTT_USERNAME и MQTT_PASSWORD — логин и пароль от MQTT сервера (по умолчанию mosquitto/dietpi);
  3. Нажмите Развернуть и проверьте, всё ли работает.

Считайте этот поток заготовкой — смело адаптируйте его под свои нужды. А если что-то будет непонятно, то на стриме я подробно показывал как собирать свои потоки шаг за шагом. Надеюсь будет полезно:

Node-RED для радиолюбителей: мост из APRS и Meshtastic в Telegram
Разбираемся с тем, как работает Node-RED и автоматизируем радиолюбительские задачи:- Настраиваем мост из APRS в Telegram;- Пересылаем сообщения из Meshtastic…

Мост из Meshtastic в Telegram

Я держу свою ноду включённой 24/7, но вот приложение на телефоне практически никогда не открываю. Из-за этого неясно, есть ли вообще хоть какая-то активность в чате: вдруг мне кто-то пишет? Бегать каждый раз к ноде и смотреть что там на экранчике тоже неудобно. В итоге именно так у меня родилась идея моста из Meshtastic в Telegram.

С этим мостом можно легко следить за чатом и, если нужно, быстро подключиться к ноде, чтобы ответить на сообщение. Вообще Node-RED позволяет даже создать полноценного бота с обратной связью — я, например, делал такого для управления своим умным домом. Но в этой статье я сфокусируюсь на простой пересылке сообщений из чата Meshtastic в Telegram.

А если ОБРУШЕНИЕ? Управление умным домом через радиочат #meshtastic #радио #lora #emcomm #shorts
Meshtastic для удаленного управления умным домом без доступа к Интернету и сотовой связи.

Meshtastic во многом похож на APRS, и даже поток для Node-RED выглядит почти так же. Отличие только в том, как мы будем забирать сообщения из радиоэфира.

Поток для Node-RED: мост из Meshtastic в Telegram

Meshtastic Bridge

В Meshtastic есть поддержка протокола MQTT — мы могли бы его использовать для интеграции с Node-RED. Но не будем 🙂. Потому что у встроенного MQTT есть пара проблем:

  • В JSON-режиме не поддерживается кириллица, поэтому сообщения на русском не прочитать.
  • В бинарном режиме нужно заморачиваться с декодированием protobuf.
  • Плюс дополнительно придётся вести таблицу соответствия ID нод и их имён — иначе неясно, от кого пришло сообщение.

Если эти проблемы вас не смущают, то можете сразу переходить к мануалу на сайте Meshtastic. Мне же было удобнее настроить Meshtastic Bridge — мост из Meshtastic в MQTT, APRS, Owntracks и не только.

В итоге получается примерно такая схема:

Схема работы моста из Meshtastic в Telegram

Ноду Meshtastic проще всего подключить к серверу по USB, но можно использовать и Wi-Fi. Установка и настройка Meshtastic Bridge описаны в README проекта и в моей подробной инструкции, так что здесь повторяться не буду.

Поток для Node-RED

Для пересылки сообщений из эфирного чата в Telegram просто импортируйте готовый поток:

  1. Откройте веб-интерфейс Node-RED (http://<IP-адрес>:1880).
  2. В меню выберите Импорт и вставьте JSON потока из man yaml-haus.
  3. Перейдите в ПараметрыEnvironment и укажите:
    1. TELEGRAM_ACCESS_TOKEN — токен от BotFather;
    2. TELEGRAM_ADRESSEE_ID — ваш ID в Telegram;
    3. MQTT_USERNAME и MQTT_PASSWORD — логин и пароль MQTT сервера (mosquitto/dietpi).
  4. Нажмите Развернуть и проверьте, всё ли работает.

Как и в случае с APRS, считайте этот поток просто черновиком — его можно бесконечно дополнять и улучшать. Что ещё можно было бы прикрутить?

  • Например, можно добавить отправку сообщений в эфирный чат. Для этого достаточно отправить в топик meshtastic/in сообщение вида {"to": "^all", "decoded": {"text": "привет"}}.
  • Ещё можно вывести карту нод через node-red-contrib-web-worldmap.
  • А ещё Node-RED поддерживает и другие мессенджеры помимо Telegram. То есть можно настроить мост в Matrix, IRC или даже Slack.

В общем, экспериментируйте 🙂

man smart-home
Telegram про умный дом: идеи, девайсы, Home Assistant.

Кстати про Telegram. Мой канал доступен по ссылке выше 😉

Приём и декодирование DTMF кодов

Для APRS или Meshtastic нужно специальное оборудование, а DTMF-коды умеют отправлять даже самые простые Баофенги. Так что DTMF — это неплохой способ отправить команду или сообщение, когда у вас под рукой только обычная рация.

0:00
/0:05

Я уже как-то рассказывал про DTMF и управление умным домом — тогда для декодирования тонов я использовал multimon-ng. Но в этот раз я решил попробовать Direwolf, который уже использую для APRS. Да, тот самый Direwolf отлично справляется и с DTMF тоже.

Как всё работает?

В Meshtastic есть фича, которая называется canned messages. Её суть в том, чтобы заранее заготовить шаблонные сообщения и потом отправлять их нажатием физической кнопки на ноде. И вот что-то похожее можно повторить, используя обычный Баофенг:

  1. Передаёте DTMF-код со своей радиостанции (например, 091#).
  2. Приёмник, подключённый к серверу, принимает сигнал.
  3. Direwolf декодирует DTMF-коды и записывает их в лог-файл.
  4. Node-RED следит за логом, парсит коды и отправляет в Telegram заранее заготовленные сообщения, которые соответствуют отправленному коду.

Настройка Direwolf и Node-RED

Чтобы мост заработал, нужно включить декодирование DTMF в Direwolf и настроить Node-RED для чтения логов. Я не буду углубляться в детали — всё пошагово описано вот этой инструкции. Но если коротко:

  • Настройте Direwolf, чтобы он декодировал DTMF и писал коды в лог.
  • Импортируйте в Node-RED поток, который читает лог, парсит коды и отправляет сообщения в Telegram.
Поток для Node-RED: декодирование DTMF и отправка шаблонных сообщений в Telegram

Где искать ответы на вопросы

Node-RED поначалу может озадачить, но если что-то не клеится, то вот где можно найти помощь:

  • Google или Яндекс: по Node-RED в интернете куча уроков, форумов, блогов и разных готовых потоков на любой вкус.
  • DeepSeek, Grok, ChatGPT, GigaChat или YandexGPT тоже часто выручают. Готовые потоки они генерируют так себе, но пошаговые инструкции получаются подробные и понятные.
  • Так же можете посмотреть запись стрима, где я в прямом эфире создавал потоки из этой статьи.

Главное не бояться экспериментировать. APRS — это не только про координаты, а Meshtastic — не просто радиочат. С Node-RED можно настроить что угодно, от простого моста и до управления умным домом.

Надеюсь, статья поможет. Удачи в экспериментах, 73!

Была ли статья полезна?

Хотите сказать спасибо? Кофе автору — ваша благодарность.

На кофе
Подписка на новые статьи

Уведомления, как только в блоге появится что-нибудь интересненькое.

Подписываясь, вы даете согласие на обработку персональных данных.