Come creare una connessione tra lo smartphone e il network digitale radioamatoriale

di | 03/08/2020

Sempre più spesso si sentono colleghi utilizzare i telefoni cellulari per parlare sul network digitale radioamatoriale, alcuni utilizzando combinazioni software e hardware dedicati (es. PEANUT) mentre altri si affidano a distribuzioni linux fatte da terzi, più o meno complete e complesse, a volte inutili per il singolo e specifico scopo. Proviamo quindi a realizzare un sistema esclusivamente software (senza hardware dedicato alla transcodifica) combinando una serie di programmi esclusivi al compito prefissato. Il nostro “banco di lavoro” sarà un Raspberry (miniPC) 3 oppure 4 con sistema operativo Rasbian pulito, aggiornato. E’ richiesta una conoscenza di base del sistema operativo linux, saper editare e gestire i file (librerie, directory di lavoro, automatismi di esecuzione) e conoscere i principi delle connessioni di reti (protocolli, NAT, …). Come spesso accade questo articolo è completo “ad oggi” ma ovviamente, vista la natura dinamica del progetto e dei software impiegati, occorre saper adattarci anche a future variazioni.

 

Per capire il progetto nella sua completezza, lo schema generale di funzionamento è questo:

MMDVM_Server ↔ MMDVM_Bridge ↔ md380-emu ↔ Analog_Bridge ↔ DVSwitchMobile

“DVSwitchMobile” è l’applicazione da installare sul nostro cellulare Android. L’audio viene quindi “prelevato” dal cellulare e inviato al software di conversione “analogico/digitale”. Avviene quindi una “transcodifica software” grazie all’emulatore md380 e il flusso inviato al collettore “MMDVM_Bridge” che si occupa di gestire il flusso opportunatamente trattato collegandosi ad un server MMDVM (nel nostro caso il server IPSC2-IT-MLINK del network DMR+) per fruttarne tutte le potenzialità (Talkgroup e Reflector) disponibili. Quindi i partecipanti saranno: il cellulare, il raspberry ove è installato il software che opera la conversione analogico/digitale, un server MMDVM in cloud di un network (BrandMeister o DMRPlus) che smista il flusso verso il TG (TalkGroup) di interesse.

Procediamo con installare i programmi DVSwitch:

cd /tmp
wget http://dvswitch.org/install-dvswitch-repo
chmod +x install-dvswitch-repo
./install-dvswitch-repo
apt-get update
apt-get install dvswitch

A questo punto occorre installare MMDVM_Bridge ultima versione per raspberry (.armhf) e renderlo eseguibile:

cd /opt/MMDVM_Bridge
wget -O MMDVM_Bridge https://github.com/DVSwitch/MMDVM_Bridge/raw/master/bin/MMDVM_Bridge.armhf
chmod +x MMDVM_Bridge

e il relativo file di configurazione, sempre ultima versione:

wget https://raw.githubusercontent.com/DVSwitch/MMDVM_Bridge/master/MMDVM_Bridge.ini

Anche per Analog_Bridge debbiamo prelevare l’ultima versione da internet:

cd /opt/Analog_Bridge/
wget -O Analog_Bridge https://github.com/DVSwitch/Analog_Bridge/raw/master/bin/Analog_Bridge.armhf
chmod +x Analog_Bridge

e il file di configurazione:

wget https://raw.githubusercontent.com/DVSwitch/Analog_Bridge/master/Analog_Bridge.ini

 

Ora che i programmi sono stati installati sul raspberry possiamo procedere alla configurazione degli stessi, partendo dal file DVSwitch.ini presente in /opt/MMDVM_Bridge. Poichè ci interessa collegarci ad un server MMDVM DMR (IPSC2-IT-MLINK) e parlare sul TG Multiprotocollo Toscana configuriamo solo la sezione DMR.

Si configura solo la parte DMR con lo SLOT ed il TG da utilizzare e la stringa per il TalkerAlias che comparirà sulle dashboard e apparati:

[DMR]
Address = 127.0.0.1 ; Address to send AMBE TLV frames to (export)
TXPort = 31100 ; Port to send AMBE TLV frames to (export)
RXPort = 31103 ; Port to listen on (import)
Slot = 2 ; Export slot
ExportTG = 2241 ; Multiprotocollo Toscana  
TalkerAlias = Dal cellulare

Le sezioni da configurare nel file MMDVM_Bridge, oltre a quelle riferite al nostro nominativo per la connessione, ID DMR (nostro ID DMR + 2 cifre) e altre relative alla posizione e località sono:

[DMR]
Enable=1
ColorCode=1

e anche

[DMR Network]
Enable=1
Address=it-mlink.grupporadiofirenze.net
Port=55555
Jitter=360
Local=62032
Password=passw0rd
Options=StartRef=4000;Userlink=1;TS2_1=2241;
Slot1=0
Slot2=1
Debug=0

A questo punto la connessione verso il server MMDVM è impostata, quindi il collettore è pronto. Dobbiamo adesso rivolgere la nostra attenzione alla configurazione dell’acquisizione della parte analogica (dal cellulare) che si interfaccia con l’emulatore e il collettore. Il file da modificare è Analog_Bridge.ini e nello specifico:

; General vocoder setup information
decoderFallBack = true ; Allow software AMBE decoding if a hardware decoder is not found
useEmulator = false ; Use the MD380 AMBE emulator for AMBE72 (DMR/YSFN/NXDN)
emulatorAddress = 127.0.0.1:2470 ; IP address and port of the md380 server – la porta 2470 è utilizzata per far dialogare l’emulatore con analog_bridge

La sezione AMBE_AUDIO va configurata con il solito IP gestito in DVSwitch.ini/DMR con le porte TX e RX invertite, quindi:

[AMBE_AUDIO]
address = 127.0.0.1 ; IP address of xx_Bridge
txPort = 31103 ; Transmit TLV frames to partner on this port
rxPort = 31100 ; Listen for TLV frames from partner on this port
ambeMode = DMR ; DMR, DMR_IPSC, DSTAR, NXDN, P25, YSFN, YSFW (encode PCM to this format)
minTxTimeMS = 2500 ; Minimum time in MS for hang delay (0-10000)

; The metadata below is used when ASL is the source since it does not have any concept of digital modes
gatewayDmrId = 222XXXX ; ID to use when transmitting from Analog_Bridge 7 digit ID – viene visualizzato al corrispondente quando parliamo, il nostro ID DMR
repeaterID = 222XXXXYY ; ID of source repeater 7 digit ID plus 2 digit SSID – l’identificativo della connessione, il nostro ID DMR + 2 numeri (vedi quello inserito in MMDVM_Bridge.ini)
txTg = 2241 ; TG to use for all frames sent from Analog_Bridge -> xx_Bridge
txTs = 2 ; Slot to use for frames sent from Analog_Bridge -> xx_Bridge
colorCode = 1 ; Color Code to assign DMR frames

La parte USRP è quella dell’interfaccia con l’applicazione Android, indicare la porta giusta (nel seguente esempio la 2440, quella aperta sul router; occorre una NAT/UDP verso l’IP del raspberry):

[USRP]
address = 127.0.0.1 ; IP address of USRP partner (Allstar/Asterisk or another Analog_Bridge)
txPort = 2440 ; Transmit USRP frames on this port – il cellulare cercherà da fuori questa porta
rxPort = 2440 ; Listen for USRP frames on this port
usrpAudio = AUDIO_UNITY ; Digital -> Analog (AUDIO_UNITY, AUDIO_USE_GAIN, AUDIO_USE_AGC)
usrpGain = 1.10 ; Gain factor when usrpAudio = AUDIO_USE_GAIN (0.0 to 5.0) (1.0 = AUDIO_UNITY)
usrpAgc = -20,10,100 ; Set the agc threshold (db), slope (db) and decay (ms)
tlvAudio = AUDIO_UNITY ; Analog -> Digital (AUDIO_UNITY, AUDIO_USE_GAIN, AUDIO_BPF)
tlvGain = 0.35 ; Gain factor when tlvAudio = AUDIO_USE_GAIN (0.0 to 5.0) (1.0 = AUDIO_UNITY)

 

Finita la configurazione occorre avviare i software, con i relativi argomenti/file di configurazione:

/opt/md380-emu/md380-emu -S 2470

/opt/Analog_Bridge/Analog_Bridge  /opt/Analog_Bridge/Analog_Bridge.ini

/opt/MMDVM_Bridge/MMDVM_Bridge  /opt/MMDVM_Bridge/MMDVM_Bridge.ini

La schermata sopra riportata evidenzia il collettore MMDVM_Bridge che è connesso al server IPSC2-IT-MLINK con impostato il TG statico 2241/SLOT 2, come da parametro Options= configurato nel file MMDVM_Bridge.ini

La procedura corretta è quella di creare delle UNIT di avvio; riporto questo link che dettaglia le varie opzioni. In sostanza si tratta di file “di avvio” e attività dei servizi, che ne gestiscono agevolmente lo stato, lo stop e lo start. Ci sono moltissimi esempi su internet.

https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

A seguire il file di gestione del servizio mmdvm_bridge.service creato in /lib/systemd/system. I file “unit” vanno anche abilitati (enabled) per l’esecuzione automatica all’avvio del sistema operativo.

Questa una schermata (comando htop) relativa ai processi in operatività:

Per ultimare la corretta funzionalità del sistema occorre infine impostare un automatismo che si occupa di cancellare i vecchi file di log (come da impostazione dei file di configurazione), mediante una riga nel cron. E richiamare l’aggiornamento del database degli ID DMR, sempre da cron. Da utente root richiamare ‘crontab -e’ ed inserire:

# clear logs
15 3 * * * find /var/log/mmdvm* -mtime +7 -exec rm {} \;

# download DMR database
30 3 * * * wget –no-check-certificate “https://ham-digital.org/status/DMRIds.dat” -O “/var/lib/mmdvm/DMRIds.dat”

Adesso il nostro “server personale”, ovvero il raspberry è pronto. Dobbiamo installare l’applicazione DVSwitch sul telefono cellulare e configurarla affinche “dialoghi” con il rapsberry. L’applicazione si scarica da Google Play:

https://play.google.com/store/apps/details?id=org.dvswitch&hl=it

Si presenta con una tastiera “stile telefono”. La prima riga permette di scrivere il TG che vogliamo attivare e a seguire occorre premere il bottone SEND per inviare il comando. A questo punto premendo il bottone PTT l’audio verrà processato e inviato grazie al nostro raspberry al TG che vogliamo utilizzare.

Ecco come si presenta la dashboard di IPSC2-IT-MLINK alla pressione del PTT. Si vede bene il flusso (di colore verde) che viene generato dall’applicazione (TG 222) ed inviato a tutti i sistemi collegati.

Il passaggio del flusso sul network BrandMeister:

Ovviamente una volta impostato il TG questo rimarrà attivo come da configurazione del server sul quale ci colleghiamo. Per parlare sarà sufficiente premere solo il bottone PTT. Ma prima ancora di arrivare a fare QSO occorre configurare l’applicazione “mobile” affinchè dialoghi con il raspberry. Dobbiamo creare un “account USRP” nell’apposita sezione del menu, specificando l’indirizzo (IP o DNS) del raspberry (hostname), la porta che è stata configurata sul router e nell’applicazione (TX e RX come nel file Analog_Bridge.ini sezione USRP), il nominativo che usiamo e relativo ID DMR.

Salvata la configurazione nella schermata principale acconto al bottone SEND comparirà REGISTER. Premerlo per “registrarsi” sul raspberry ed iniziare ad usare l’applicazione. L’applicazione risponderà USRP:REG:OK se tutto risulta correttamente collegato. Diversamente verificare che la NAT sul router sia ben impostata, l’IP pubblico o DNS sia raggiungibile e che sul raspberry i software siano attivi. Sull’applicazione mobile è presente una nutrita pagina di configurazione di “macro” (comandi veloci), la gestione dell’audio oltre ad altre impostazioni per personalizzare l’uso del programma per le nostre esigenze.

Non rimane altro che augurare buoni QSO con un sistema “snello” e veloce, e soprattutto senza utilizzare distribuzioni “pronte all’uso” dove non si capisce come il software in realtà funzioni. Siamo radioamatori e sperimentatori quindi impariamo a divertirci con la conoscenza di nuove soluzioni. Ricordo ai colleghi che il TG 2241 è il Multiprotocollo Toscana in uso alla rete BrandMeister e DMRPlus, ci sentiamo quindi su questi network.

Ogni correzione e suggerimento è come sempre ben accettato. Grazie.

Buone prove. David IK5XMK

ps. un ringraziamento al collega ed amico Antonio IU5JAE che ha provato con esito positivo la connessione di questa soluzione ad un centralino telefonico Asterisk per la gestione di una “multiutenza”.