Многофункциональный сервер для удаленки

Продолжаю эксперименты с удаленным управлением трансивером и другими устройствами. На этот раз получился своеобразный «комбайн» — устройство, которое не только умеет передавать звук от удаленного трансивера и управлять им, но еще имеет на борту встроенный дешифратор диапазонов на 16 выходов, видеотрансляцию и CAT CW PTT интерфейс, работающий по LAN.

Основные характеристики

  • Двусторонняя передача звука (встроенная звуковая карта)
  • Передача сигнала PTT к трансиверу от педали или по сигналу RTS на удаленном рабочем месте оператора
  • Видео-трансляция в браузере (необходима практически любая USB камера)
  • Управление 16-ю релейными выходами, разбитыми на две группы по 8. Можно коммутировать как положительное напряжение (12В, 24В) так и землю. Три режима работы — тумблер, галетный переключатель и автоматический режим совместно с дешифратором диапазонов
  • Настройка и доступ к устройству через web интерфейс (вход защищен паролем)
  • Трансляция CAT от трансивера к удаленному рабочему месту оператора по сети. Поддержка двух протоколов — Kenwood и Icom
  • Дешифратор диапазонов с возможностью настройки любых границ переключения по частоте. Можно настроить несколько поддиапазонов внутри одного диапазона
  • Формирование телеграфной манипуляции по протоколу Winkeyer (реализована программная эмуляция этого протокола).
  • Исходные коды, схема и описание установки — GitHub проекта

Физически рядом с трансивером устанавливается только сервер, который подключается к Интернету и трансиверу. На удаленной стороне у оператора запускается только программа управления (клиент), который формирует все необходимые сигналы для подключения к радиолюбительским программам. Управление и настройка осуществляется через web интерфейс, доступный из любого браузера по IP адресу сервера.

Схема

Со схемой можно ознакомиться по ссылке. Сердце устройства — одноплатный компьютер Nanopi neo (4х ядерный процессор, 512Мб RAM). На нем установлена ОС Armbian, то есть полноценный Linux, поэтому можно было реализовать практически все «хотелки».
Помимо этого на плате выведены дополнительные разъемы для подключения USB, звука, выход телеграфной манипуляции и PTT. Выходы релейного коммутатора подключены к винтовым зажимам на плате.

Выбор коммутируемого напряжения осуществляется перемычками на плате независимо для двух групп выходов (2 группы по 8).

Питание устройства — 12-14В, ток от 500мА. Дополнительно можно подключить 24В, но этот вход будет использоваться только для подачи напряжения на релейные выходы.

Размер печатной платы — 144*108мм. Плата спроектирована под корпус Gainta G313.

Помимо всего прочего на плате выведены контакты для подключения I2C, а также контакты аппаратных UART0 и UART1. Это может пригодится в будущем для различных экспериментов. Например, по I2C можно подключить датчик температуры.

Обзор web интерфейса

Web интерфейс доступен на порту 5050 по IP адресу сервера, либо по hostname сервера (по умолчанию — http://nano-server.local:5050). На главной странице отображается текущее состояние выходов, а также можно включить трансляцию видео. Если включен автоматический режим переключения выходов, то их состояние будет автоматически обновляться на главной странице.

На вкладке Settings настраиваются имена 16-ти выходов, их режим работы (тумблер или галетный переключатель), а также выбирается CAT порт, который подключен к трансверу. Видов протокола обмена только 2 — Kenwood и Icom. Если связь с трансивером установлена успешно, на вкладке TRX будет отображаться текущая частота трансивера.

Обновление данных происходит автоматически.

На вкладке Config настриваются сетевые параметры — IP адреса сервера и удаленного места оператора, а также несколько параметров передачи звука. Помимо этого, здесь можно перезапустить сервисы, отвечающие за передачу звука без перезагрузки всей системы. А также можно перезапустить сам web интерфейс (связь с ним будет прервана на пару секунд). Настройки аудио и IP адреса можно сохранить в виде профилей, которые потом можно загрузить. Это полезно, например, если у вас несколько вариантов подключения к серверу или несколько удаленных мест оператора.

На вкладке Audio настраиваются уровни входящего и исходящего звука. Думаю, здесь особых пояснений не требуется.

На вкладке Band Relay настраивается дешифратор диапазонов. Можно внести любые границы и указать, какие выходы должны при этом включаться. Нижняя граница включается в диапазон, верхняя — нет. Например, диапазон 1800 — 1840 будет автоматически срабатывать на частотах от 1800 кГц до 1839,9 кГц. На этой же вкладке можно выключить автоматическое переключение реле, сняв соответствующую галочку.

На вкладке Status отображается текущее значение задержки (ping) между удаленным местом оператора и сервером, а также локальный IP адрес сервера.

Подключение к трансиверу

Если в трансивере уже есть USB CAT то он подключается напрямую в USB порт сервера (у сервера два свободных USB порта). USB порт определится как /dev/ttyUSB0 или /dev/ttyACM0 — это значение нужно прописать на вкладке Settings и выбрать соответствующую скорость обмена. Если трансивер без USB — нужно подключить любой USB CAT интерфейс (например такой).
Также нужно соединить вход и выход звука трансивера со звуковой картой сервера. PTT сигнал от сервера нужно подключить к PTT входу трансивера. Если планируется работа телеграфом, то нужно соединить выход CW сервера со входом телеграфного манипулятора трансивера.
Во второй USB порт можно подключить USB камеру (можно и не подключать, тогда функция видеотрансляции просто не будет работать).

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

Программа клиент

Программа для подключения к серверу запускается на удаленном компьютере и в текущей версии обеспечивает передачу звука в две стороны, работу с CAT, PTT и CW. Работает пока только под Linux (распространяется в виде AppImage), первая версия программ, в которой реализована только передача звука и PTT работает также и под Windows.

Исходный код — GutHub проекта

Скачать можно здесь (Releases)

В настройках клиента указывается только IP адрес сервера (при этом надо не забыть указать IP адрес клиента на вкладке Config в web интерфейсе сервера) и звуковые устройства — те самые, которые будет использовать оператор для передачи на сервер. После подключения создается виртуальный последовательный порт, на котором будет доступен CAT удаленного трансивера. Этот последовательный порт нужно использовать для настройки CAT на стороне клиента. Например, в программе FLRig.

Отдельно стоит упоминуть формирование PTT сигнала со стороны клиента. Понятно, что постоянно нажимать кнопку PTT в окне клиента не очень удобно. Гораздо удобнее использовать педаль. Но как ее подключить к клиентскому ПК? На помощь приходит USB-TTL преобразователь.

Он определяется в системе как последовательный порт. Его и будем использовать для подключения педали. А конкретнее его вход CTS. Между CTS и землей подключаем педаль. Теперь при нажатии сигнал PTT будет восприниматься программой клиента и передаваться на сервер.

Работа в SSB выглядит максимально просто — включаем любую компьютерную гарнитуру в ПК, подключаем USB педаль, выбираем соостветсвующие устроства в программе клиента, нажимаем Connect. Теперь можно просто нажимать педаль и работать в эфире — звук идет в обе стороны. Управлять частотой можно из аппаратного журнала или прямо из FLRig.

Работа в цифровых видах

Теперь необходимо подключить звук к программе WSJT или JTDX. Если вы долгое время пользуетесь Windows, то наверняка знаете о существовании специальных программ, которые создают виртуальные аудиокабели между программами. В ОС Linux с этим все гораздо проще. Виртуальное аудиоустройство создается одной командой, причем никаких дополнительных программ не нужно.

pactl load-module module-null-sink sink_name=WSJT_SINK

Теперь у нас есть виртуальное звуковое устройство, которое передаст звук от программы клиента к WSJT. Для PTT мы будем использовать порт USB педали, предварительно соединив на нем вывод RTS с выводом CTS, который уже используется. Теперь в программе при переходе на передачу RTS будем автоматически замыкать вход CTS на землю, то есть делать то же самое, что и наша педаль.

Я записал небольшое видео, как это все выглядит вживую (https://youtu.be/fry7nzyHrEg?si=JX7llXz-2Nj7lCIs)

Работа CW

С цифровыми видами и SSB разобрались. Теперь на очереди телеграф. На самом деле в Linux не так много программ аппаратных журналов. Я уже писал о своем опыте работы здесь и здесь. С тех пор сильно поменялись и стали лучше еще пара программ, это Qlog и Not1mm. Как раз последнюю я и буду использовать для работы в CW. CAT в Not1mm подключается через FLRig, в этой части уже все настроено. Для формирования телеграфной манипуляции используется протокол Winkeyer и программа Pywinkeyer. Но в нашем случае ключ никуда не подключен — его будет эмуировать сам сервер. Он просто «притворяется», что он ключ, который работает по протоколу winkeyer, но только запущен он не локально на клиентском ПК, а на сервере. Поэтому в настройках Not1mm нужно указать IP адрес сервера и порт 6789:

Вообще, Not1mm довольно активно развивается и в ней уже полноценно можно работать в сорвенованиях. Записал небольшое видео удаленной работы в All Asian CW Contest (было немного непривычно, прошу строго не судить за ошибки):

Виртуальная частная сеть

Остается один насущный вопрос — что делать, если белых IP адресов нет ни у сервера, ни у клиента?

Очень удобно иметь собственную виртуальную сеть, в который все устройства будут находиться как будто в одной локальной сети. Есть роутеры, которые умеют это делать, но их настройка зачастую не очень проста.

На мой взгляд проще использовать один сервер с белым IP адресом (свой, либо арендованный VPS) и на нем организовать VPN туннель. В таком случае у вас не будет проблем с IP адресами для сервера и клиентского ПК — они будут в одной сети. Это решит также проблему с пробросом портов на роутерах, если вам повезло и у вас есть два белых IP.

Здесь небольшая инструкция, как организовать свою собственную частную сеть, имея всего один внешний белый IP адрес.

После этого удаленная работа в эфире станет немного проще.

Запись опубликована в рубрике Linux, Python, Радио, Удаленка с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *