SvxLink + Raspberry PI = сервер голосовых услуг

НОЯБРЬ 2016

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

SvxLink представляет из себя голосовую платфору, для создания различных сервисов. К нему можно подключить несколько радиостанций, чтобы работать в симплексном и дуплексном режимах. Список стандартных сервисов:

Автономные сервисы:
Help — интерактивная голосовая помощь
Parrot — репитер с отложенной передачей (попугай)
SelCall — селективный вызов с помощью DTMF сигналов
DtmfRepeater — простой ретранслятор DTMF сигналов
TclVoiceMail — голосовая почта (для локальных пользователей)
anons — обьявления в эфире, анонсы собраний, hamfest, соревнований, DX и тд.

Cервисы требующие подключение к интернет:
EchoLink — линк/терминал в сети EchoLink
FRN — линк/терминал в сети Free Radio Network
PropagationMonitor — информация о прохождении из dxmaps.com
MetarInformation — метеосводки аэропортов
remotetrx — удалённый приёмник/передатчик
rtl_sdr — дополнительные usb-приёмники
aprs — aprs маяк (показывает кол-во соединений)

На сегодняшний день, оптимальным решением является установка SvxLink на микрокомпьютер Raspberry PI. Получается лицензионно чистый, стабильно работающий, компактный голосовой сервер с удалённым управлением и гибкой конфигурацией.

Для сборки простой конфигурации, нам понадобится следующее оборудование:
1. Микрокомпьютер Raspberry PI (2/3 версии) + блок питания на 5В + SD-карта 4-8Гб.
2. USB звуковая карта
3. Транзисторы КТ503, резисторы 4к7, конденсатор 100нф
4. Радиостанция MOTOROLA GM-340 + блок питания
5. Антенна, кабель, разьёмы

Raspberry PI существует в версиях:
ВерсияДатаПроцессорЧастотаЯдерОЗУGPIOUSBEthernetWiFiBluetoothЦена
A2013ARM1176JZ-F700 МГц1256 Мб26 пинов1 порт$20
 A+2014ARM1176JZ-F700 МГц1256 Мб40 пинов1 порт$25
B2012ARM1176JZ-F700 МГц1512 Мб26 пинов2 портаесть$35
 B+2014ARM1176JZ-F700 МГц1512 Мб40 пинов4 портаесть$30
2B2015ARM Cortex-A7900 МГц41 Гб40 пинов4 портаесть$35
Zero2015ARM1176JZ-F1 ГГц1512 Мб40 пинов1 порт$5
3B2016ARM Cortex-A53 x641,2 ГГц41 Гб40 пинов4 портаесть802.11n4.1$35

Если вы только собираетесь купить Raspberry PI, берите последнюю версию 3B. В остальных случаях, лучше использовать версии B, 2B они самые популярные и можно найти б/у, недорого. У меня версия В, звуковая карта имеет только выход, без входа. Поэтому я использую внешнюю USB карту на чипе CM108, она дешевая и хорошо работает.

Схему соединения вы видите на картинке. У меня используется Raspberry PI с 26 контактным разьёмом. Снимаем корпус со звуковой карты и припаиваем к контактам детали простого интерфейса, так будет надёжнее. Всё это оборудование нужно разместить в корпусе нужного размера. С 'железом' закончили, переходим к софту.

Установка операционной системы
Идём на страницу загрузки, скачиваем и устанавливаем Raspbian Lite (без графического интерфейса). Инструкция есть на сайте, суть в том что на SD-карту записываем образ системы, вставляем карту в Raspberry PI и подаём питание. Карта должна иметь 4Гб и более, а также x10 скорость.

Если голосовой сервер стоит за файрволом, нужно открыть следующие порты:
UDP 5198-5199 - Echolink звук
TCP 5200 - Echolink управление
TCP/UDP 10024 - FRN
TCP 14580 - APRS

Первоначальная настройка системы
Подключите к Raspberry PI монитор и клавиатуру. Заходим в систему с логином pi, паролем raspberry, меняем пароль и включаем SSH сервер скриптом sudo raspi-config, задаём постоянный IP через sudo nano /etc/dhcpcd.conf. Перезагружаемся (sudo reboot) и проверяем есть ли выход в интернет (ping...). Далее, обновляем систему и устанавливаем необходимый софт, командами:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get remove pulseaudio
sudo apt-get install subversion libsigc++-2.0-dev g++ make libsigc++-1.2-dev libgsm1-dev libpopt-dev tcl8.5-dev libgcrypt-dev libspeex-dev libasound2-dev alsa-utils mc cmake git libgcrypt11-dev tk-dev libgsm1-dev libspeex-dev libopus-dev pigpio groff screen libqt4-dev
sudo reboot

Установка Svxlink (стабильная версия)
Если вы не хотите экспериментировать, установите стабильную версию, по этой инструкции, однако в ней не работает модуль MetarInformation.

Установка Svxlink (разрабатываемая версия)
Просто копируйте команды в терминал, по очереди:
git clone https://github.com/sm0svx/svxlink.git
sudo useradd -c "Echolink user" -G gpio,audio -d /home/svxlink -m -s /sbin/nologin svxlink
cd svxlink/src
mkdir build
cd build
cmake -DUSE_QT=OFF -DCMAKE_INSTALL_PREFIX=/usr -DSYSCONF_INSTALL_DIR=/etc -DLOCAL_STATE_DIR=/var -DCMAKE_BUILD_TYPE=Release ..
make
sudo make install > log-install.txt

Обратите внимание, что графическая оболочка QTEL скомпилирована не будет, это мы задали в команде cmake. Если появились ошибки при компиляции (что маловероятно), внимательно читаем последние строки, там обычно есть причина неудачного завершения работы.

Добавляем русскую озвучку
В архиве обновлённые звуковые файлы с учётом FRN и анонсов. Использован синтезированный голос 'Татьяна', в некоторых старых файлах оставлен голос 'Алёна'.
cd ~/svxlink/
wget http://ua6hjq.qrz.ru/files/ru_16k.tgz
sudo tar -xzf ru_16k.tgz -C /usr/share/svxlink/sounds/

Настройка Svxlink
Подключаем в usb звуковую карту (если не сделали этого раньше). Вместо радиостанции, на выход звуковухи включите динамики, будем слушать звуки. Удостоверяемся что звуковая карта готова к работе командой aplay -l.

Редактируем файл конфигурации командой sudo mcedit /etc/svxlink/svxlink.conf

Полный пример оригинального файла /etc/svxlink/svxlink.conf с выделенными строками, которые нужно изменить, для первого запуска сервера. В дальнейшем (по мере настройки) нужно будет изменить и другие строки.

Запускаем сервер командой svxlink, он покажет свою версию, режим работы, загруженные модули. В этом же терминале набираем команду 0# и слушаем приятный женский голос, который скажет что делать дальше.

Теперь подключаем радиостанцию и регулируем входные/выходные уровни, командой alsamixer -V all. Осваиваем команды через эфир (DTMF тонами) или через терминал, с клавиатуры. Учимся включать/отключать модули, вызывать помощь, получать подсказки и тд.

Чтобы работал PTT и радиостанция управлялась, выполняем команды и добавляем их в /etc/rc.local :
echo "9" >/sys/class/gpio/export
echo "out" >/sys/class/gpio/gpio9/direction

Итак, мы получили работающий сервер, в котором активирована голосовая помощь и режим 'попугая'. Остальные модули подключаем по мере необходимости. Прервать работу сервера Ctrl+C.

Многие модули в svxlink не требуют конфигурации и их можно сразу запускать. Например, ничего не меняя, отредактируйте в файле svxlink.conf следующую строку:
[SimplexLogic]
MODULES=ModuleHelp,ModuleParrot,ModuleDtmfRepeater,ModuleSelCallEnc

и вы получите уже четыре работающих сервиса. Для конфигурации остальных модулей, зайдите в папку /etc/svxlink/svxlink.d и проверьте настройки нужного вам модуля.

Настройка FRN-модуля
Открываем файл с конфигурацией sudo mcedit /etc/svxlink/svxlink.d/ModuleFrn.conf и меняем несколько строчек:
SERVER=voip.qrz.ru
CALLSIGN_AND_USER="LPD0532, Vlad"   ← ваш позывной, имя
BAND_AND_CHANNEL="446.03125FM CTC88"   ← частота, подтон
COUNTRY=Russian Federation   ← страна
CITY_CITY_PART="STV - RUSSIA"   ← город - страна
NET=Russia   ← название конференции

Включаем модуль FRN, редактируя файл sudo mcedit /etc/svxlink/svxlink.conf. Название модуля добавляем в конец строки:
[SimplexLogic]
MODULES=ModuleHelp,ModuleParrot,ModuleDtmfRepeater,ModuleSelCallEnc,ModuleFrn

и запускаем сервер svxlink. Модуль сам подключиться к указанной конференции, вы услышите переговоры и сможете говорить.

DTMF-команды
Команды передаваемые через эфир имеют чёткую структуру. Для каждого модуля они однотипны. Например, команды модуля Parrot и логика его работы:
1# - активация первого модуля (попугай)
 # - деактивация модуля
0# - помощь
*# - информация о текущих настройках

У каждого модуля могут быть дополнительные команды, которые нужны для его работы. Администратор сам решает, какие модули будут доступны пользователям его сервера.

Сеть на основе SvxLink
Интересно то, что SvxLink может, как подключаться к другим сетям, так и создавать сам сеть для расширения своих возможностей. Всего один сервер, позволяет развернуть голосовую сеть состоящую из локальных и удалённых терминалов, приёмников, передатчиков, репитеров. В этом SvxLink принципиально отличается от других программ.

Радиолюбители могут подключаться к серверу SvxLink по сети и пользоваться теми голосовыми сервисами, которые разрешит администратор. С помощью дополнительных приёмников и передатчиков, расположенных в зонах плохого приёма, можно существенно расширить покрытие территории. Один SvxLink сервер может легко обслуживать несколько городов или целую область.

Один из вариантов использования удалённого передатчика и нескольких пользовательских терминалов, вы видите на блок-схеме:

Пользователи Echolink и FRN сетей, могут быть полностью изолированны друг от друга, в одном сервере. Разным группам пользователей, могут быть доступны разные сервисы.

Например (если посмотреть на схему), Радиолюбители на 145МГц могут работать только в сети Echolink, а пользователи на 438МГц могут работать только в FRN и пользоваться попугаем. Удаленный пользователь, подключающийся через компьютер работает только с голосовой почтой, а пользователь в локальной сети, может слушать все каналы и тд.

Сервер SvxLink имеет очень гибкую конфигурацию.

Статья не закончена!   Пишу когда есть время...

Ссылки:  
Raspberry Pi — первый запуск
ru_16k.tgz - свежая версия русской озвучки с модулем frn
oписание и настройка svxlink (устаревшая статья)
группа Echolink в мессенджере Telegram
Echolink сеть на Кавказе (СКФО)

UA6HJQ и R7HJ