пятница, 25 декабря 2020 г.

Echolink на Малині. Встановлення та налашування.


 По мірі відладки та додавання сервісів, інструкція може змінюватися та розширюватися !

Ні для кого вже з моїх читачів не секрет, що Малина - це міні супер комп'ютер.  Саме для мене. І настав час викинути Windows з нетбуком, на якому крутиться Ехолінк вузол, замінивши його на більш гнучку та менш споживану (споживання електрики - 36 Ват проти 5 Ват) систему. 

Використовувати я буду пакет SvxLink.  Це дуже гарна система голосових сервісів для радіоаматорів. 

Висловлюю щиру подяку Тобіасу Бломбергу SM0SVX (автору пакету) та Володимиру UR3QJW (адміністратору конференції UKRAINE) за допомогу.

Сервіси будуть підняті в наступній послідовності: Голосова допомога, Ехо-репітер (папуга), Ехолінк вузол, Метеоінформер, Голосова пошта.

Окрім самої Малини порібна буде ще зовнішня USB звукова карта, сумісна з Linux та схема керування РТТ.

Виглядять звукові карти подібним чином.

В середині має бути плата приблизно такого вигляду.

В мене є інтерфейс для цифрових видів зв'язку. Там присутні USB-COM перехідник на мікросхемі від FTDI, до якої під'єднано ключовий транзистор, що комутує РТТ радіостанції та  вхід/вихід звуку з гальванічною розв'язкою на трансформаторах.

Ну що ж. З апаратною частиною все готово. Тепер програмна частина. 

З офіційного сайту потрібно скачати Raspberry Pi OS Lite. Образ невеликого розміру. Приблизно 500 МБайт. Інші версії будуть зайвими. В них багато програмного забезпечення, яке не буде використовуватися на вузлі, а дискового простору, як грошей, скільки би не було - завжди мало.  Єдина незручність це відсутність графічного відображення робочого столу. А нам його і не потрібно.

Записуєте цей образ на флешку з допомогою Etcher, Win32DiskImager, або Raspberry Pi Imager. Кому що більше підійде. Підключаємо Малину до комп'ютерної мережі з допомогою патч-корду, якщо немає можливості під'єднатися по дроту, після першого завантаження необхідно буде прописати назву WiFi точки та пароль до неї. 

Вставляємо флешку і запускаємо Малину. Починаю я завжди з безпосереднього підключення клавіатури, миші та монітора до Малини. Мені так зручніше і  можна на перших порах поглядіти процес завантаження системи. Далі, коли бачу що Малина веде себе адекватно я активую ssh і решта налашувань проводжу з іншого комп'ютера через мережу. 

Гаразд. Система запустилася і чекає на вхід. Введіть стандартний логін pi та пароль raspberry

Якщо підключилися до мережі по дротовому з'єднанню, то переходимо до безпосереднього оновлення операційної системи. Якщо відсутня можливість під'єднання дротом, то потрібно запустити утиліту конфігурування.

sudo raspi-config

Вибираємо пункт Network Options -> Wireless LAN 

На запит Please enter SSID введіть назву WiFi точки. На запит Please enter passphrase введіть пароль до точки доступа. Далі вийдіть з утиліти конфігурування системи. 

Дізнайтеся чи Малина отримала ІР адресу. Для цього введіть команду

sudo ifconfig

і в залежності від типу підключення адреса буде відтворена або біля  інтерфейсу eth0 (у випадку дротового з'єднання) або біля wlan0 (при підключенні по WiFi ).  До інтернету під'єднано. 

Оновимо систему до останніх версій файлів.

sudo apt update

sudo apt upgrade

Наберіться терпіння, доки система оновиться.

Ні в якому разі не можна змінювати мову по замовчуванню та створювати каталоги на кирилиці. 

Для полегшення майбутніх страждань з системою, встановимо Midnight Commander. Надалі він нам згодиться.

sudo apt install mc

Щоб не забути, прокиньте одразу порти 5198 (udp), 5199 (udp), 5200 (tcp) на своєму маршрутизаторі і подбайте про можливіть їх проходження через вашого провайдера, інакше все буде на смарку. Вони необхідні для роботи сервера.

В процесі налаштування системи виявилося, що обов'язково Малина має мати статичну ІР адресу. Робиться це просто. Для цього спершу визначимося з трьома параметрами:  яка ІР адреса має бути в Малини, маска мережі, ІР адреса шлюзу. Наприклад, в мене Малина живе на адресі 192.168.1.103, шлюз 192.168.1.1, маска мережі 255.255.255.0  Відредагуємо файл dhcpcd.conf

sudo nano /etc/dhcpcd.conf

Шукаємо коментар

# Example static IP configuration

за ним буде

#interface eth0 

Розкоментуємо її і у випадку дротового з'єднання залишемо так як вона є.

interface eth0

Якщо буде з'єднання по WiFi , то ця строчка перетвориться на 

interface wlan0

Решта строк будуть такі

static ip_address=192.168.1.103/24

static routers=192.168.1.1

static domain_name_servers=192.168.1.1 8.8.8.8

Зробимо так, щоб можна до сервера було достукатися через SSH. Запустимо

sudo raspi-config

Вибираємо пункт Interface options -> SSH і активуємо ssh.

З цього місця за бажанням можна відключити від Малини клавіатуру, мишу та монітор і решта всього робити через ssh. 

Якщо будете під'єднуватися до Малини по ssh у Windows то використовуйте Putty. Якщо з Маку чи любого дистрибутиву Linux, введіть у терміналі

ssh -l pi ip_адреса_вашої_Малини

Тепер сервер будемо збирати вручну з вихідних файлів. Так краще на даний момент. В минулих версіях готових пакетів були проблеми з відтворенням звуку. Окрім того сервер буде оптимізований під залізо, яке в даний момент використовується. Тим більше особо нічого складного там немає. Головне, вірно набрати команди та у вірній послідовності. Встановимо необхідні для цього пакети.

sudo apt install g++ cmake make libsigc++-2.0-dev libgsm1-dev libpopt-dev libgcrypt20-dev 
sudo apt install libspeex-dev libasound2-dev libopus-dev librtlsdr-dev doxygen 
sudo apt install tcl-dev groff alsa-utils rtl-sdr git rtl-sdr curl libjsoncpp-dev 
sudo apt install vorbis-tools libcurl4-openssl-dev libcurl4-openssl-dev

Далі створюємо користувача svxlink та додаємо його в необхідні групи.

sudo useradd -rG audio,plugdev,gpio,dialout svxlink

Тепер  настав час скачати з Github вихідні файли сервера.

git clone http://github.com/sm0svx/svxlink.git 
mkdir svxlink/src/build 
cd svxlink/src/build

Скомпілюємо їх.

cmake -DUSE_QT=OFF -DCMAKE_INSTALL_PREFIX=/usr -DSYSCONF_INSTALL_DIR=/etc -DLOCAL_STATE_DIR=/var -DWITH_SYSTEMD=ON ..
make -j4 
make doc 
sudo make install 
sudo ldconfig

Скачуємо звукові файли на англійській мові та розпакуємо в потрібні каталоги.

cd /usr/share/svxlink/sounds/ 
sudo curl -LO https://github.com/sm0svx/svxlink-sounds-en_US-heather/releases/download/18.03.1/svxlink-sounds-en_US-heather-16k-18.03.1.tar.bz2 
sudo tar xvjf svxlink-sounds-en_US-heather-16k-18.03.1.tar.bz2 
sudo ln -s en_US-heather-16k en_US 

Перевантажуємо комп.

sudo reboot 

Підключіть зовнішню звукову карту в та цифровий інтерфейс в USB порти. 

Настав час налаштовувати конфігураційні файли. Перед налашуванням потрібно дізнатися про CОМ-порт, який буде використано. Введіть команду

ls /dev/tty*

Скорш за все це буде ttyUSB0 як в мене. Тепер потрібно відкрити доступ серверу до цього порту, щоб він міг ним керувати.

sudo chmod a+rw /dev/ttyUSB0

Чудово. 

Дуже прошу вносити мінімальну кількісь змін за раз і робити це дуже уважно та вдумливо. Вас ніхто і нікуди не жене в спину. Інакше можете отримати непрацюючий сервер.

Налашування почнемо з самих простих модулів, щоб одразу відчути що ця шкарабайка запрацювала. Основний конфігураційний файл - це svxlink.conf

Ось повний шлях разом з іменем файлу /etc/svxlink/svxlink.conf

В режимі адміністратора частково його відредагуємо командою

sudo nano /etc/svxlink/svxlink.conf

Файл уявляє собою назви параметрів та їх значення, об'єднані з допомогою знака рівності. Коментарі, або закоментовані параметри мають перед собою знак решітки #. Назви розділів позначаються квадратовими дужками [ ], наприклад [SimplexLogic]

Деякі параметри неодноразово повторюються у файлі.  Якщо назви параметрів будуть повторюватися, то змініть значення в усіх них згідно нижченаведених. Буду вказувати в яких розділах які мають бути активні параметри. При їх відсутності - додайте їх в конфіг.

 [SimplexLogic]

#Встановимо дискретизацію звукової картки

CARD_SAMPLE_RATE=16000

#Вкажемо які модулі запускати на даний момент та свій кличний. Показую на своєму прикладі

MODULES=ModuleHelp

CALLSIGN=UT2YR-L

....................................................

[RX1]

#Вкажемо послідовний порт, керування через DTMF та який порт буде комутувати прийом/передачу

SERIAL_PORT=/dev/ttyUSB0

DTMF_SERIAL=/dev/ttyUSB0

PTT_PORT=/dev/ttyUSB0

#З'єднаємо в єдине ціле комп'ютер з радіостанцією

SQL_DET=VOX

SQL_START_DELAY=0

SQL_DELAY=50

SQL_HANGTIME=2000

SQL_TIMEOUT=600

VOX FILTER DEPTH=20

VOX_TRESH=1000

.......................................................

[TX1]

PTT_TYPE=SerialPin

PTT_PORT=/dev/ttyUSB0

PTT_PIN=RTS

Ще один момент. В цьому файлі необхідно вказати номер звукової карти, яку будете використовувати. Враховуючи, що до Малини під'єднана зовнішня USB звукова карта та присутня вбудована в комп'ютер, на даний момент ми маємо їх дві. Визначимо, який номер наданий зовнішній карті системою, адже внутрішню ми використати не можемо через відсутність в ній аудіовходу. Наберемо

aplay -l

В мене зовнішня відображається під номером 1.

тоді параметр буде виглядати так.

#Вкажіть номер звукової карти, присутній в системі.

AUDIO_DEV=alsa:plughw:1

Щоб зберегти зміни, тиснемо Ctrl + X потім Y Файл конфігурації змінено. 

Запустимо svxlink від імені користувача svxlink.

sudo -u svxlink svxlink

Нарешті настав час для першого запуску модуля голосової допомоги. Наберіть на вашій радіостанції DTMF код 0#  Система жіночим голосом на чистій англійській мові розповість про те як нею користуватися. Мої вітання ! Перший крок до мрії подолано !

Зупинимо svxlink з допомогою Ctrl+C

А тепер зробимо так, щоб система розмовляла українською. Для цього потрібно скачати ось цей архів. Перезапишемо звукові файли поверху українськими аналогами. 

Розпакуйте та перезапишіть поверх старих файлів ці файли. Перевантажте Малину.

sudo reboot

Знову запустіть svxlink. 

Тепер час випробувати Ехо-репітер, або папугу. Тиснемо на радіостанції 1# і чуємо у відповідь: "Активація папуги".  Натисніть PTT у своєї болтушки і щось скажіть. Відпустіть PTT. Система відтворить все, що ви сказали. Папугу налаштовано.

Тепер час налаштувати Ехолінк.

Його налаштування зводиться до налаштування конфігураційного файлу ModuleEchoLink.conf  Знаходиться він /etc/svxlink/svxlink.d/  разом з іменем файлу це буде /etc/svxlink/svxlink.d/ModuleEchoLink.conf

Увага !  Перед його редагуванням, відправте сканкопію свого дозволу на валідацію .  Не забудьте в запиті вказати кличний у вигляді потрібний_кличний-L наприклад UT2YR-L. -L тому що лінк (безпосередньо приєднаний до симплексної радіостанції), якби він під'єднувався до ретранслятора, потрібно було б вказати -R, при особистому використанні  вкажіть свій кличний.

Вважаємо, що у вас вже кличний валідовано і його можна внести у файл. Редагуємо конфіг

sudo nano /etc/svxlink/svxlink.d/ModuleEchoLink.conf

#Вписуємо свій кличний

CALLSIGN=UT2YR-L

#Вписуємо свій пароль

PASSWORD=********

#Вписуємо свої дані, що будуть відображатися

SYSOPNAME=Sokyriany, 145450

#Вписуємо місце розташування вузлу та його робочу частоту

LOCATION=[Svx] 1451450, Sokyriany

Щоб лінк у нас не відвалювався при неактивності протягом 5 хвилин, закоментовуємо

LINK_IDLE_TIMEOUT=300

Рядок прийме такий вигляд

#LINK_IDLE_TIMEOUT=300

Налаштуємо так, щоб вузол автоматично під'єднувався до всеукраїнської конференції UKRAINE (її ідентифікатор 370296).

AUTOCON_ECHOLINK=370296

AUTOCON_TIME=1200

При таких налаштуваннях лінк буде постійно підключеним до цієї конференції, але ви в любий момент зможете її відключити, приєднавши ту, в якій захочете попрацювати, лише після того, як попрацюєте там, перепідключіть її назад.

Невеликий відступ. Більшість вузлів мають шестизначний ідентифікатор. Якщо хочете підключитися до іншого вузла, ви повинні знати його ідентифікатор. Скажімо, у вузла UT2YR-L ідентифікатор 232979, а всесвітня конференція WORLD має ідентифікатор 479886. 

Наведу приклад роботи. Захотілося вам попрацювати у конференції WORLD. Для цього потрібно від'єднати приєднану до вузла конференцію, нажавши # Вузол відповість що конференцію від'єднано. Далі потрібно набрати ідентифікатор 479886 а за ним # Система сповість, що вузол приєднано до конференції WORLD. Якщо ви вже перестали там працювати, нажміть для від'єднання # і приєднайтеся до української конференції, набравши 370296#

Самі розумієте, що багато цифр важко запам'ятати, тому придумали таку річ як макроси. Макросу призначається значення ідентифікатора вузла або конференції. Вам достатньо лише набрати номер макросу і ви вже підключені до вибраного вузла або конференції. 

Ці макроси описуються в головному конфігураційному файлі svxlink.conf у розділі [Macros].  Приклад розділу.

[Macros]

номер_макросу=Назва_модуля:числовий_ідентифікатор#

#Підключення до конференції UKRAINE

1=EchoLink:370296#

#Підключення до вузла UT2YR-L

2=EchoLink:232979# 

#Підключення до ретранслятора R1 у Полтаві

3=EchoLink:293702#

# Підключення до конференції WORLD

4=EchoLink:479886#

і так далі. Макроси формуєте на свій смак та розсуд.

Тепер як цим користуватися. Підключимося до WORLD. Це макрос позначений цифрою 4. Натискаємо на клавіатурі радіостанції D4#  і, о диво, вузол автоматично підключиться до конференції WORLD.  

Тепер додамо шарму та гламуру всій конструкції. В принципі це необов'язково, але може комусь буде потрібно. Метеоінформер, або дівка, буде розповідати про погоду в населенному пункті, де встановлений лінк. Дані беруться з сайту Метеонова . Працює це наступним чином. Скрипт бере дані з сайту і ці дані у текстовому вигляді відправляє на голосовий синтезатор, який формує звуковий файл. Потім цей файл буде відтворюватися системою в етер.

Як завжди, стало доброю традицією додавати необхідні для цього пакети.

apt install sox libsox-fmt-mp3 curl gawk python-smbus python-dev i2c-tools

В архіві є скрипт та файли, які потрібні для цієї процедури. 

Створимо в каталозі /home/pi каталог weatherinfo

cd /home/pi/

mkdir weatherinfo

розпакуємо в цей каталог вміст архіву.

відредагуємо скрипт weatherinfo.sh відповідно до свого населеного пункту. 

nano /weatherifo.sh

Після запуску цього скрипта в каталозі /home/pi/weatherinfo утвориться звуковий файл weather.wav

Внесемо деякі зміни у конфігураційний файл svxlink.conf

sudo nano /etc/svxlink/svxlink.conf

[SimplexLogic]

#Коротка ідентифікація вузла. Кожних 15 хвилин буде промовлятися кличний вузла

SHORT_IDENT_INTERVAL=15

#Активація голосу

SHORT_VOICE_ID_ENABLE=1

#Довга ідентифікація вузла. Кожних 30 хвилин буде промовлятися кличний вузла

#місцевий час та прогноз погоди в населеному пункті

LONG_IDENT_INTERVAL=30

LONG_ANNOUNCE_ENABLE=1

LONG_ANNOUNCE_FILE=/home/pi/weatherinfo/weather.wav

TIME_FORMAT=24

Для автоматичного формування звукового файлу додамо у cron запуск скрипта weatherinfo.sh  чотири раза на добу о 5:50, 11:50, 17:50 та 23:50 За бажанням, ви можете собі налаштувати інші години запуску скрипта.  

crontab -e

50 5 * * * /home/pi/weatherinfo/weatherinfo.sh

50 11 * * * /home/pi/weatherinfo/weatherinfo.sh

50 17 * * * /home/pi/weatherinfo/weatherinfo.sh

50 23 * * * /home/pi/weatherinfo/weatherinfo.sh

Ctrl + X далі Y


 Тут голосову пошту допишу.

Ну що ж. Моя розповідь близиться до кінця. Мабуть вже всі втомилися від неї. 

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

sudo systemctl enable --now svxlink

Перезавантажимо комп

sudo reboot

При виникненні потреби підправити конфіги, не забудьте, що лінк працює в автоматі.

Якщо потрібно буде його зупинити, набираємо

sudo systemctl stop svxlink

Якщо потрібно буде його перезавантажити, набираємо

sudo systemctl restart svxlink

Якщо потрібно буде його стартанути, набираємо

sudo system start svxlink

А, ще для самих допитливих десерт. Якщо вам забагнеться глянути на поведінку лінка, введіть в терміналі

tail -f /var/log/svxlink

Цим ви побачите останні події, що відбулися на лінку.

До зустрічі !

73 ! de UT2YR


воскресенье, 6 декабря 2020 г.

Визначення координат, QTH Loc та синхронізація часу з допомогою GPS у Windows10

У  минулорічній статті  я описував спосіб, з допомогою якого, маючи GPS приймач, можна було засинхронізувати системного годинника в комп'ютері без наявності інтернету. Основна потреба виникла через роботу цифровими режимами, які вимагають точного часу. За цей рік дещо змінилося як і в апаратному так і в програмному напрямку.

Я придбав вдосконалену модель GPS приймача. Називається вона VK-162 Remote Mount USB GPS Dongle


Приймач має на підкладинці потужний магніт. Це дозволяє його безпроблемно зачепити на любу металеву поверхню. Завдяки своїй невеликій вазі, він дуже добре там тримається. 

Підтримує Stratux, Raspberry Pi, Google Earth, Windows, Linux. Одразу скажу - ідеально працює на Linux та RaspberryPi4. В цих системах налаштування таке саме як тут

Але так як мої читачі полюбляють також Windows, то я сьогодні допоможу їм причепити цей приймач до Windows10 (з Windows 7 взагалі ніяких проблем немає).  З допомогою декількох програм, можна буде визначити поточні координати, QTH Loc, та засинхронізувати від супутника системного годинника.  Beelink J45, що вмонтований в даний час в мій переносний аматорський комплекс, поспішає жити. За добу набігає до 10 секунд. Звичайно, з таким відліком часу в WSJT-X, JTDX та JS8CALL не поганяєш. 

Тепер до справи. На комп'ютері повинна стояти остання версія Windows10 з оновленнями. Це важливо через те, що в попередніх збірках не добре працювала геолокація і не було коректно працюючого драйвера GPS приймача. Зараз це поправили і все чудово працює. В мене так точно.

Послідовність така. Підключаємо приймач, USB клавіатуру та USB мишу в USB хаб, який потім підключаємо в USB порт комп'ютера. Така особливість дещо незвична, але це спосіб, що допомагає коректно працювати одночасно приймачеві, клавіатурі та миші. Згідний, що це костиль, але він працює безвідказно.  При умові окремого підключення клавіатури, миші та приймача по різних USB портах, спостерігається періодичне підвисання клавіатури та миші, що не дає комфортно працювати. Максимум часу, скільки буде приймач підключено до комп'ютера становить десять хвилин (він не буде постійно підключений). Координати та час отримав і все. 

При під'єднанні GPS-приймача, Windows10 встановить для нього драйвер. Це має бути саме драйвер від Microsoft. На драйверах від виробника система не бачить супутників і відповідно не можливо отримати ніякі дані. В мене приймач отримав порт Com8.

 Версія драйвера (для перевірки) така.

Ну і про всяк випадок покажу ідентифікатор пристрою в системі, може кому потрібен буде.

Якщо все так як і у мене то все просто чудово. Початок виявися вдалим. Тепер для перевірки роботи встановіть програму u-center версії 20.10 . Скачати її можна звідси .  Виглядає вона ось так.

А значок її ось так.

Встановлення типове, лише вкажу на одну особливість. При встановленні обов'язково зверніть увагу, чи стоїть відмітка на пункті Use Windows USB Serial Driver. Якщо її там немає - встановіть, інакше потім будете викидати з системи драйвера від виробника.

Після її запуску, потрібно в меню Receiver > Connection  встановити на якому com-порту під'єднано приймач. В моєму випадку це COM8  (у вас може бути другий)

та в меню Receiver >  Baudrate встановити швидкість 9600. Решта нічого не чіпаємо. 


В моєму варіанті мені видало координати через 1 хв. 44 сек. на основі даних, отриманих з шести супутників. Тобто, якщо ви побачите щось подібне в себе на моніторі - щиро вітаю. У вас все вийшло ! Найдовше вираховувалося місцеположення при густих хмарах на небі, з яких падав дощ. Тоді час склав 6 хв.12 сек. При такій погоді наберіться терпіння. 

Щоб прив'язатися до місцевості необхідно п'ять супутників з гарним рівнем сигналу. Коли побачите що п'ять стовпчиків змінять колір на зелений, тоді також з'являться координати. 


Переходимо до другого етапу. Визначення QTH Loc та синхронізації часу. В цьому нам допоможе програма GPS2Time. Тут можна про неї почитати і скачати. Запускати її ОБОВ'ЯЗКОВО В РЕЖИМІ АДМІНІСТРАТОРА ! Так виглядає її головне вікно.


Трохи опишу які де гудзики в ній.

У вікні, що розташоване у верхньому лівому кутку вибирається номер com-порту, куди під'єднано приймача. В мене це COM8. При кожному запуску це потрібно робити. Інакше не працює. Нижче під ним є прямокутна кнопка Run GPS. Натискання на неї і запускає програму. Результатом виконання будуть отримані координати, QTH Loc та час. Ось знімок, коли все це було отримано.


Якщо щось подібне буде у вас, то ми разом досягли потрібного результату. QTH Loc на тій позиції, куди я приніс обладнання виявився KN38QK89. У вас, звісно буде інший. Який у вас буде - той і занесіть в налаштування програм. 

Прямокутна кнопка, на якій написано Update Now, засинхронізує системного годинника вашого комп'ютера. У вікні Update Rate вказане значення у хвилинах, через скільки часу буде повторна синхронізація.

Результату досягнуто.

До зустрічі !

73 ! de UT2YR