Некоторые нюансы Spyserver.

Автор: Administrator вкл. . Опубликовано в RTL-SDR

Настройки spyserver для режима Direct Sampling.

Для работы spyserver с rtl-sdr.com v3 в режиме Direct Sampling нужно внести некоторые изменения в конфигурационный файл, о котором шла речь ранее тут.

Максимальная частота для перестройки. В принципе, можно оставить 30МГц, но конкретно для rtl-sdr.com v3 более логично изменить этот параметр на 14,4 МГц. Почему так, можно почитать тут.

# Maximum Tunable Frequency

# Comment if using the device default

#

maximum_frequency = 14400000

 

 

Главный параметр – режим семплирования. Для rtl-sdr.com v3 нужно выбрать «Direct Sampling Q Branch», т.е. цифру «2».

# RTL-SDR Sampling mode

# Quadrature = 0,

# Direct Sampling I Branch = 1

# Direct Sampling Q Branch = 2

rtl_sampling_mode = 2

 

 

И еще нужно отключить режим конвертера, убрать сдвиг частоты. Это делается путем добавления символа «#» перед строчкой с параметром. Данное действие закомментирует строчку в файле конфигурации, тогда она не будет считана программой и ее параметр применен не будет.

# Converter Offset

# Set to -120000000 to enable the SpyVerter offset

#converter_offset = -125000000

 

 

После сохранения файла конфигурации и перезапуска сервера можно подключиться SDRSharp и наблюдать rtl-sdr.com v3 в режиме Direct Sampling, о котором говорит отсутствие ползунка «Gain».

 

 

 

 

 

 

 

 

Электропитание RTL-SDR и spyserver.

Замеры энергопотребления делал ранее тут, а про поведение RTL-SDR под управлением rtl_tcp было написано вот тут.

Под управлением spyserver поведение RTL-SDR несколько иное и более продуманное.

После старта серверной части ток почти равен нулю.

 

 

После подключения клиентом, RTL-SDR выводится из некоего спящего режима и ток, потребляемый им, становится равным примерно 240мА (это в режиме УКВ, для конвертера, а в Direct Sampling ток еще меньше, писал про это тут.).

 

 

 

После отключения клиента RTL-SDR переводится в спящий режим и снова не потребляет почти ничего.

Иными словами – если к приемнику никто не подключен, не использует его, то он впустую не греется.

 

 

 

 

 

 

 

 

Настройка двух приемников и двух разных spyserver на одной аппаратной платформе.

Ранее рассматривался случай, когда на одном устройстве (OrangePi One) настроен один сервер и подключен один приемник RTL-SDR. А можно подключить два приемника и настроить две серверных части, работающих независимо друг от друга. Зачем это надо и какие плюсы у такой реализации?

Как описано ранее, при подключении двумя и более клиентами к одному приемнику возможность перестройки частоты остается лишь в пределах ширины полосы обзора равной 2МГц и полностью утрачивается возможность регулировать параметр «Gain».

Предположим, что жаждущих эфира пользователей у нас два и они хотят слушать разные диапазоны эфира в один момент времени (160м и вещалку на 60м, например). Первым к приемнику подключился любитель АМ-вещалок и второму уже стал недоступен диапазон 160м, он вынужден тоже слушать вещалки. Конечно, второй пользователь может связаться с первым и как-то договориться и смене частоты или составить некое расписание в использовании, но все это не очень удобно.

Тут-то и приходит на помощь вариант, когда у каждого пользователя «свой» отдельный независимый приемник. Конечно, такая реализация подходит всего лишь для двух человек (по крайне мере на базе одноплатного компьютера из-за его мощности), но решает полностью потенциальные пересечения разницы интересов одновременного прослушивания различных участков эфира.

Или же, как пример применения – я ранее одновременно делал тесты с двумя приемниками и писал обзор на приемник RTL-SDR RU MOD.

 

 

 

 

Итак, что для этого нужно? Как минимум второй RTL-SDR и, если он тоже на КВ будет настраиваться, то разветвитель после конвертера. Если RTL-SDR в режиме Direct sampling будут использоваться, то конвертер не нужен, а разветвитель (пример применения разветвителя) сразу после антенного кабеля ставится. А можно вообще сделать так, что один буден на КВ, а второй на УКВ работать, или оба на УКВ. В общем, все зависит от фантазии и потребностей «слушателей».

Предположим, что уже есть настроенный spyserver с одним RTL-SDR, как описано ранее. В случае с OrangePi One нужен активный USB-HUB для добавления второго RTL-SDR (вообще, рекомендую OrangePi Zero, поскольку у него аж 3 USB-порта в сумме прикрутить можно без всяких USB-HUB).

Что ж, воткнули второй RTL-SDR и по команде lsusb видим, что в системе их действительно теперь два:

 

 

Но как в конфигурационном файле spyserver-а указать, какой именно из двух свистков должен использовать каждый сервер? Да, там есть некий параметр, значащийся как «device_serial», и при значении «0» будет выбираться автоматически первое доступное устройство. Если такое устройство одно, то да, проблем нет. А когда два?

 

 

Нужно указать конкретно серийный номер желаемого для использования свистка, но проблема в том, что у всех RTL-SDR этот самый серийный номер одинаков и вовсе не похож на тот, который приведен в качестве примера в файле конфигурации (0xDD52D95C904534AD), т.е. не имеет шестнадцатеричный вид.

Вот, например, при запуске rtl_test с двумя подключенными RTL-SDR можно видеть одинаковые серийные номера (00000001), но также можно увидеть и простые порядковые номера этих устройств (0 и 1).

 

 

Тут в пору обраться к разъяснениям на форуме, точнее к одному сообщению, и еще вот к этой теме, точнее к вот к этому сообщению, из которых можно предположить, что указание серийного номера применимо к продукции Airspy, а для RTL-SDR имеет значение порядковый номер (Index), который задается значениями 00000001 для 1 и 00000000 для 0.

 

В уже настроенной серверной части открываем конфигурационный файл и указываем серийный номер «00000001» в поле «device_serial».

cd ~

cd spyserver

sudo nano spyserver.config

 

 

# Device Serial Number as 64bit Hex

# For example: 0xDD52D95C904534AD

# A value of 0 will acquire the first available device.

#

device_serial = 00000001

 

 

CTRL+O и нажать Enter

CTRL+X

 

 

Теперь нужно «установить» вторую серверную часть для второго RTL-SDR. Для этого нужно в домашней директории создать папку с именем «spyserver2».

cd ~

mkdir spyserver2

 

 

 

Перейдя в папку «spyserver2» выполнить действия по скачиванию и распаковке архива с необходимыми файлами (как это делалось для первого сервера ранее):

 

cd spyserver2

wget https://airspy.com/downloads/spyserver-arm32.tgz

tar xzf spyserver-arm32.tgz

rm spyserver-arm32.tgz

 

Теперь нужно отредактировать файл конфигурации.

 

sudo nano spyserver.config

 

В него нужно внести изменения номера порта для прослушивания (у первого сервера был 5555, значит здесь напишем 5556), серийный номер RTL-SDR (там был 00000001, значит здесь будет 00000000). Остальные параметры по ситуации – начальная частота, конечная, центральная. Конвертерный сдвиг. Режим УКВ или Direct Sampling и прочие параметры, описанные во время настройки первого сервера.

# TCP Listener

#

bind_host = 0.0.0.0

bind_port = 5556

 

# Device Serial Number as 64bit Hex

# For example: 0xDD52D95C904534AD

# A value of 0 will acquire the first available device.

#

device_serial = 00000000

 

CTRL+O и нажать Enter

CTRL+X

 

Далее надо создать стартовый скрипт для второго сервера. Напомню, что для первого сервера подобный скрипт находится в домашней директории, называется «start_srv.sh» и выглядит так:

 

 

 

Создаем в домашней директории новый скрипт и открываем его на редактирование:

cd ~

touch start_srv_2.sh

sudo nano start_srv_2.sh

 

 

 

В тело скрипта пишем следующие строки. Со значением «sleep 70» можно поэкспериментировать, но суть в том, чтобы второй сервер стартовал чуть позже первого (хотя, это может быть вовсе не критично).

--------------------------

#! /bin/bash

sleep 70

cd /home/orangepi/spyserver2

./spyserver spyserver.config &

-----------------------

 

 

CTRL+O и нажать Enter

CTRL+X

Даем файлу «start_srv_2.sh» права на исполнение:

sudo chmod +x start_srv_2.sh

 

 

 

Теперь настало время понять, какой свисток в каком USB-порту и к какому порту (5555 или 5556) привязан. Для этого надо запустить сперва один стартовый скрипт,

sudo ./start_srv.sh

подключиться SDRSharp (в терминале на сервере будет видно, на каком порту запустился сервер),

 

 

посмотреть, что все как надо, отключиться SDRSharp, остановить выполнение программы «spyserver» по CTRL+C, запустить другой стартовый скрипт и также проверить через SDRSharp.

sudo ./start_srv_2.sh

При несоответствии желаемого с действительным (настроили вы Direct Sampling для свистка 00000000, а к нему, например, УКВ-антенна прицеплена) можно, либо переткнуть свистки в разные USB-порты (что с USB-HUB-ом проблематично сделать, а вот на OrangePi Zero делалось легко), либо в конфигурационных файлах двух серверов поменять местами «серийные номера» для свистков – 00000000 и 00000001.

После этого осталось отредактировать скрипт для автозапуска:

sudo nano /etc/rc.local  

В него нужно вписать следующие строки без пунктиров до слов «exit 0»:

-------------------------------

cd /home/orangepi/

./start_srv.sh

cd /home/orangepi/

./start_srv_2.sh

-------------------------------

 

CTRL+O и нажать Enter

CTRL+X

 

 

После перезапуска сервера «sudo reboot 0» нужно подождать 70 секунд, запустить «htop» и убедится, что spyserver запущен несколько раз.

 

 

 

А также подключиться в режиме сжатия трафика двумя копиями программы SDRSharp к IP-адресу сервера, но к портам 5555 и 5556.

На скриншоте ниже видно, что один сервер настроен на УКВ, а второй на КВ в режиме Direct Sampling. Также виден один и тот же IP сервера, но разные порты, видны различные «SN:» для RTL-SDR. Нагрузка на процессор сервера в таком случае составляет примерно 83%.

 

 

 

Исходя из такой нагрузки на процессор, использование подобной «схемы» возможно в варианте подключения только одного клиента к одному серверу. Либо, как и ранее, к одному серверу до 5 клиентов (а к другому – ноль клиентов). Но когда сразу к двум серверам подключаются клиенты, то их может быть только два – по одному на сервер.

 

 

 

 

Еще вариант стартового скрипта (пусть его имя «start_srv.sh»), в котором стартуют сразу два сервера одновременно:

-----------------------

#! /bin/bash

sleep 60

cd /home/orangepi/spyserver

./spyserver spyserver.config &

cd /home/orangepi/spyserver2

./spyserver spyserver.config &

--------------------------------

А тогда в sudo nano /etc/rc.local будет так:

---------------------

cd /home/orangepi/

./start_srv.sh

---------------------------------------------

 

 

 

 

Нагрузка на процессор микрокомпьютера OrangePi Zero со spyserver на борту.

 

На этом сервере у меня не самый новый Armbian (5.60), но сервер на удаленной точке и в использовании по назначению (прослушивание эфира). Собственно говоря – «Не пытайся чинить то, что работает!». Поэтому ОС не обновлял давно.

 

Итак, один сервер и разное число клиентов. Один дает нагрузку на процессор около 39%, два – 46%, три – 52%, пять – 80%.

 

 

 

 

 

 

А при запущенных двух серверных ПО, двух свистках и по одному клиенту к каждому серверу нагрузка на процессор составила около 85%.

 

 

 

 

 

 

 

Итого:

1 - Spyserver гораздо лучше rtl_tcp в плане генерируемого трафика (300 кбит/сек на каждого клиента).

 

2 – Есть возможности перевода RTL-SDR в спящий режим в моменты ожидания подключений (впустую не греется).

 

3 - Настройка для режима Direct Sampling сводится к изменению всего одного значения в конфигурационном файле. В rtl_tcp пришлось для этого постараться.

 

4 – Можно к одному серверу подключаться несколькими клиентами (правда совместно слушать придется участок эфира, шириной в 2МГц). К rtl_tcp тоже можно несколькими клиентами подключаться, но несколько извращенным способом (rtlmuxer). В первую очередь из-за огромного трафика rtl_tcp я такой вариант многопользовательского использования не рассматривал в принципе. Кстати говоря, spyserver с галочкой, поставленной на «Use Full IQ», позволяет подключаться несколькими клиентами, равно как и без этой галочки. Т.е. тот же «режим rtl_tcp» («Use Full IQ») в spyserver-е является многопользовательским без всяких плясок с бубном.

 

5 – На одном микрокомпьютере можно настроить две разных копии серверного ПО для двух разных приемников RTL-SDR, что для двух человек (клиентов) дает возможность перестройки от 0 до 30МГц (в случае с КВ) на каждом приемнике не мешая друг другу.

 

6 – Одноплатные компьютеры с процессорами H3 Quad-core Cortex-A7 (OrangePi One) и H2 Quad-core Cortex-A7 (OrangePi Zero) «тянут» 5 клиентов для одного сервера или два сервера с одним клиентом на каждом. OrangePi One покупал просто пробы ради, но он оказался очень схож по мощности с OrangePi Zero, а из-за одного USB -даже хуже. Так что однозначно рекомендую OrangePi Zero, если целью стоит собрать сервер на плате, дешевле, чем Raspberry Pi 3.

 

7 – Файлы ПО spyserver 32-разрядные и есть сложности с запуском в 64-битных ОС Linux для архитектуры ARM (по крайней мере на OrangePi PC2 не удалось никак). Хотя, Raspberry Pi 3 B (B+) имеет тоже 64-битный процессор и на этой плате spyserver якобы работает (в инструкции от Airspy фигурирует именно Raspberry Pi), но испытать эту железку не довелось, так что про Raspberry однозначного ничего сказать не могу. Rtl_tcp, кстати говоря, удалось запустить на OrangePi PC2. И да, spyserver и rtl_tcp можно запускать из-под Windows x32 и x64, и из-под Linux на «полноразмерных» компьютерах с x86-процессорами, но моей основной целью были микрокомпьютеры на ARM-процессорах.

 

 

 

 

Про настройку Spyserver можо почитать тут.

Про трафик от Spyserver можо почитать тут.

Про настройку rtl_tcp можно почитать тут.

Про трафик от rtl_tcp можо почитать тут.

Про Direct Sampling в rtl-sdr.com v3 можно почитать тут.

 SPY Server на Linux ARM и Airspy HF+.

 

 

 

 

Прочие статьи про RTL-SDR.