jueves, 31 de diciembre de 2020

EchoLink para Raspberry PI, SVXLink de SM0SVX

A fuerza de la necesaria honestidad que el comienzo de un nuevo año merece realmente el sistema EchoLink nunca me llamó demasiado la atención. Nacido como un sistema de tecnología VoIP (Voice over IP) desarrollado sobre plataforma Windows y madurado a lo largo casi una década de uso en una respetable red de mas de 6000 nodos y alrededor de 200000 usuarios a nivel mundial.
La propuesta tecnológica es simple y sofisticada al mismo tiempo, los usuarios acceden a un nodo EchoLink que escucha y transmite en un canal de VHF normalmente, ocasionalmente UHF. Lo que el nodo escucha lo retransmite a todas las estaciones que estén conectadas a ese nodo a traves de un cliente EchoLink. Conexión se hace mediante Internet usando tecnología VoIP, no muy diferente a la que usan programas muy usados como Skype, Teams, Zoom o Google Meet, tan en boga durante el necesario trabajo cooperativo remoto durante el confinamiento de la pandemia. Sin embargo, al momento de su lanzamiento no había muchos programas que usaran esa tecnología, algunos ya no existen mas y otros como Skype se han ido modernizando. El sistema tiene un programa servidor, que opera sobre Windows y programas cliente que operan en un número de plataformas, las mas populares Windows y sistemas operativos de telefonía celular, como Android por ejemplo. El nodo es de instalación relativamente simple; en su configuración mas simple opera en, valga la redundancia, simplex. Lo que el servidor escucha lo retransmite por VoIP a todos los conectados y si alguno de los conectados habla se le comparte al resto de los conectados y lo envia por aire también. Eso permite instalar un sistema sencillo, pero relativamente eficaz de uso compartido entre estaciones operando en radio y estaciones operando en Internet. En su variante "duplex" el sistema se adosa a un repetidor existente, de esa manera permite interconectar muchas estaciones en radio con muchas estaciones en Internet. La interfaz para hacer la conexión es muy simple, poco mas que conectar las salidas y entradas de una placa de sonido a un transceptor VHF/UHF, configurar el software y se está en el aire. Los nodos pueden formar parte de configuraciones relativamente complejas con "salas" geográficas, temáticas y por nodo. También es posible formar parte de la red Echolink sin ningún componente de RF, es decir solo con nodos que gestionan tráfico exclusivamente por Internet.

Ventajas y Desventajas 

En lo técnico el sistema es relativamente simple de instalar y configurar si se despliega un servidor y mas simple aún de usar si solo se usa el cliente, lo que es atractivo para quienes tengan una aproximación a la radio mas orientada a la comunicación que a la experimentación. En algunos casos permite hacer algo de actividad de radio, aunque pudiera paradójicamente no incluir ningún componente de radio, cuando por dificultades de antenas, equipos o propagación hubiera sido imposible de otra manera. Permite también la relación de personas que están físicamente muy dispersas, completamente fuera del alcance de un enlace de VHF o incluso de HF, con una precisión de horarios que la propagación no permite alcanzar. Tiene, claramente, muchas ventajas operativas.
Tiene unos cuantos puntos débiles, los que contribuyen a alimentar eternas polémicas sobre si es un uso legal o incluso ético de la radio. En general son discusiones estériles. En lo reglamentario no hay nada que impida su uso y la ética es una colección amorfa y gaseosa de conceptos que cada uno le dá la forma que le conviene para demostrar lo que necesita. Es claro que, discusiones estériles al margen, hay algunos cuestionamientos técnicos que limitan su utilidad. El mas severo es que es un sistema que depende de redes por fuera de la radio, específicamente Internet. Sin Internet no hay EchoLink.
El otro aspecto, y ya es mas opinable, es que técnicamente es una "caja negra" con poco o ningún lugar para la experimentación fuera de algunas interfaces simples entre equipos de radio y computadoras; técnicamente puede ser un medio "aburrido" (tomar en forma muy liviana y opinable éste concepto). Finalmente, desde el punto de vista de seguridad, tiene algunos puntos debatibles. Cualquiera puede obtener una copia del cliente y con el acceder a recursos que pueden implicar el uso de frecuencias de aficionado, y la cadena para demostrar que se tiene licencia para hacerlo es debil, muy debil. Potencialmente puede haber usos no autorizados de enlaces radiales y hay pocos, poquisimos, recursos para impedirlo.

Mis experiencias

Por todos éstos factores en varias oportunidades he instalado sistemas servidores para experimentar un poco con ellos, pero nunca encontré la motivación para hacer de ellos un sistema permanente. Básicamente implica tener una PC y una estación de VHF andando permanentemente, nada que no haya hecho antes como por ejemplo cuando tuve el nodo ABROWN de packet por casi una década, pero en aquella oportunidad fue la base para una inagotable cantidad de actividad experimental la que incluyó el primer gateway Packet-Internet online que funcionó en Argentina. Aquí en cambio, al ser un sistema cerrado las chances de experimentar son bien pocas, por lo que usualmente al cabo de unas pocas pruebas el sistema quedaba apagado o directamente des instalado. 
Del lado del cliente corrió un poco de mejor suerte, casi siempre he tenido un cliente instalado, en especial desde que se hizo común su disponibilidad en teléfonos celulares, en la última década por decir un marco temporal aproximado. Por lo que ocasionalmente lo he utilizado, tanto para contactos pre-establecidos, como atender eventos en "salas" específicas como para alguna prueba casual durante viajes cuando no tenía nada mas a mano. Pero el uso siempre fue mas bien marginal, siempre preferí usar equipos de radio.

Algo cambió... veamos de que se trata

El estado de cosas anterior se mantuvo hasta que Daniel (LU9DPD), conocedor de cierta experiencia en la plataforma debido a otros experimentos que fui haciendo públicos, me preguntó un día si creia que fuera posible desplegar un nodo Echolink usando una Raspberry Pi.
Para que funcione en una Raspberry Pi primero tiene que funcionar en Linux, y EchoLink lo tenía como un sistema tradicionalmente basado en Windows, mundos que parecen destinados a no juntarse como los protagonistas en la película "El Hechizo del Halcón".
No fue necesario buscar mucho, lo encontré rápidamente, el programa SVXLink, creado por Tobías (SM0SVX), el que no solo brinda soporte completo a un sistema servidor EchoLink bajo Linux sino que también ... ¡soporta a la placa Raspberry Pi!.
El programa es un clon funcional, que tiene capacidad de integrarse a la red EchoLink sin restricciones y ser reconocido como uno nodo perteneciente a ella. Provee además una serie de funciones avanzadas que el programa EchoLink original no contiene.

Instalación y configuración

Como casi cualquier proyecto lo primero que hay que hacer es ingresar al sitio svxlink.org y recorrer la documentación disponible. A continuación hay que realizar un paso crecientemente obligado de buscar en YouTube sobre proyectos similares al que se intenta llevar a cabo (por ejemplo éste, entre muchos otros mas antiguos y mas recientes).
Claramente se trata de un proyecto muy popular, muy transitado y con muchos ejemplos.
Empecé entonces con inicializar una placa Raspberry Pi Zero W con un SD card conteniendo una imagen estandard del sistema operativo Raspbian a último nivel, para hacerlo hay que seguir uno de los miles de tutoriales que indican los distintos pasos. Una vez que ese ambiente estuvo disponible comencé la instalación del hardware y software necesario. 
Elegí como transceptor para el experimento un handy Baofeng, aparato noble y resistente si los hay, a quien le construí un arnés simple para realizar la interfaz de audio. En principio y en un primer enfoque simplificado asumí que el PTT se activaría mediante un sistema VOX. En la placa Raspberry adosé una USB soundcard genérica. Intenté instalar SVXLink desde binarios pero claramente no están preparados para la placa Raspberry Pi Zero y dá numerosos errores; al intentar instalar desde sources mediante la carga de pre-requisitos y compilación del aplicativo también obtuve un número muy elevado de errores, probablemente con tiempo y paciencia esos errores eventualmente se pueden superar, pero no me sobraba ninguno de los dos ingredientes asi que tomé por un camino alternativo. Estoy convencido que a la placa le sobra potencia para operar como nodo, después de todo es un procesador ARM con un clock de 1 GHz para procesar señales de un ancho de banda de unos pocos KHz.
El camino alternativo fue comenzar la instalación de vuelta pero sobre una placa Raspberry Pi 3 B disponible en el cluster que tengo.
La instalación anduvo perfectamente, tanto haciendola a partir de sources (link) como de binarios directamente (link).

Configuración

La configuración del programa svxlink una vez instalado es bastante obscura, la documentación no ofrece "escenarios" sino que mezcla parámetros que son necesarios para funciones muy diferentes del servidor, con lo que termina no siendo demasiado claro que parámetros hay que cambiar y cuales hay que dejar como están. Y cuando se los cambia cual debería ser el valor adecuado para un determinado propósito.
La configuración se realiza cambiando el contenido del archivo /etc/svxlink/svxlink.conf donde los parámetros están indicados por su nombre simbólico seguido del signo "=" para a continuación estar el o los valores que se le asignan (ej. CALLSIGN=LU7DID), en general los parámetros no son sensibles a las mayúsculas. El archivo de configuración debe ser editado mediante sudo pues está ubicado en un directorio de acceso escritura solo para root (bueno, si saben Linux ya saben eso, y si no lo saben descubrirán la necesidad de aprender eso y otros temas antes de hacer ésta instalación).
Finalmente, por prueba y error encontré cual es la configuración mínima que es necesaria para configurar un nodo en simplex, que de eso se trataba. Obviamente hay que cambiar referencias a mi localización, frecuencia y licencia por las que se necesiten configurar.

######################################################################                Configuration file for the SvxLink server        

[GLOBAL]
LOGICS=SimplexLogic
CFG_DIR=svxlink.d
TIMESTAMP_FORMAT="%c"
CARD_SAMPLE_RATE=48000
CARD_CHANNELS=1
LOCATION_INFO=LocationInfo

[SimplexLogic]
TYPE=Simplex
RX=Rx1
TX=Tx1
MODULES=ModuleEchoLink
CALLSIGN=LU7DID-L
SYSOPNAME=Pedro
SHORT_IDENT_INTERVAL=60
LONG_IDENT_INTERVAL=60
EVENT_HANDLER=/usr/share/svxlink/events.tcl
DEFAULT_LANG=en_US
RGR_SOUND_DELAY=0
REPORT_CTCSS=136.5
MACROS=Macros
FX_GAIN_NORMAL=0
FX_GAIN_LOW=-12

[Rx1]
TYPE=Local
AUDIO_DEV=alsa:plughw:1
AUDIO_CHANNEL=0
#AUDIO_CHANNEL=1
SQL_DET=VOX
SQL_START_DELAY=0
SQL_DELAY=0
SQL_HANGTIME=2000
VOX_FILTER_DEPTH=20
VOX_THRESH=200
CTCSS_MODE=2
PEAK_METER=1
DTMF_DEC_TYPE=INTERNAL
DTMF_MUTING=1
DTMF_HANGTIME=40
DTMF_SERIAL=/dev/ttyS0

[Tx1]
TYPE=Local
AUDIO_DEV=alsa:plughw:1
#AUDIO_CHANNEL=1
AUDIO_CHANNEL=1
PTT_TYPE=NONE

TIMEOUT=300
TX_DELAY=500

PREEMPHASIS=0
DTMF_TONE_LENGTH=100
DTMF_TONE_SPACING=50
DTMF_DIGIT_PWR=-15

[LocationInfo]
APRS_SERVER_LIST=euro.aprs2.net:14580
STATUS_SERVER_LIST=aprs.echolink.org:5199
LON_POSITION=56.23.00W
LAT_POSITION=34.48.00S
CALLSIGN=EL-LU7DID

FREQUENCY=145.10
TX_POWER=3
ANTENNA_GAIN=0


Finalmente, de todos los servicios posibles (¡muchos!) solo uno se configurará y pondrá operativo en éste esquema básico y es el correspondiente a EchoLink mismo, para ello hay que editar el archivo localizado en /etc/svxlink/svxlink.d/ModuleEchoLink.conf

[ModuleEchoLink]
NAME=EchoLink
ID=2
TIMEOUT=60
ALLOW_IP=192.168.0.0/24
SERVERS=servers.echolink.org
CALLSIGN=LU7DID-L
PASSWORD=password
SYSOPNAME=Pedro
LOCATION=Adrogue,BA (GF05TE)
PROXY_SERVER=elp108.pi9noz.ampr.org
PROXY_PORT=8100
PROXY_PASSWORD=PUBLIC
MAX_QSOS=10
MAX_CONNECTIONS=11
LINK_IDLE_TIMEOUT=300
DESCRIPTION="You have connected to the LU7DID node\n"
            "QTH:     Adrogue,BA, Argentina (GF05TE)\n"
            "QRG:     Simplex link on 145.20 MHz\n"
            "CTCSS:   No Tone\n"
            "Trx:     BaoFeng UV-5RE\n"
            "Antenna: 5/8 at 12 mts\n"


En ésta configuración se establecen algunos parámetros clave para el funcionamiento del sistema y su integración en la red EchoLink global, para el cual debe registrarse la licencia del nodo (LU7DID-L en éste caso). Tal como está configurado se integrará a la red global a traves del servidor servers.echolink.org.

Funcionamiento

Si bien con lo anterior ya configurado es posible levantar la versión local del programa mediante
el comando

sudo -u svxlink svxlink

lo que irá indicando mediante un "trace" las distintas acciones y si hay algún error en la configuración que deba ser reparado.

Son necesarios sin embargo algunos pasos mas para llegar a tener un sistema funcional.

El primero y mas obvio, o quizás no, es tener registrado el nodo en la red EchoLink. Si se tiene registrada la licencia LU7DID (por ejemplo) la configuración anterior no andará, se requiere tener también registrada la licencia LU7DID-L, para el sistema EchoLink son cosas diferentes (y está bien que lo sean para no perder la capacidad de usar el cliente al mismo tiempo que el servidor está andando).

A continuación notaremos que si bien el nodo se conecta exitosamente a la red EchoLink y aparece publicado como activo no se puede llegar a el. Eso ocurre por las caracteristicas que típicamente tiene una conexión de Internet hogareña, donde el router cambia la dirección IP con que se expone a la red mediante una acción llamada NAT (Network Address Translation, traducción de dirección de red). Eso se hace así para por un lado proteger los dispositivos que uno tenga en casa del acceso externo y por el otro para que todos los dispositivos se presenten a la red como provenientes de una única dirección IP, eso es bueno en general para el uso diario pero no lo es tanto cuando quiero acceder desde el exterior a un dispositivo en particular dentro de una red hogareña, en éste caso la máquina que corre el nodo server.

Hay varias soluciones posibles, la mas neta es abrir un puerto en el router lo que involucra un procedimiento técnicamente complejo (simple cuando se sabe lo que se quiere hacer) pero que requiere reconfigurar la red hogareña entera, queda fuera del alcance de ésta entrada explicarlo.

El problema se explica con cierto detalle en el sitio EchoLink (link).

Una solución mas simple es utilizar un nodo "proxy", es decir que reciba las llamadas para nosotros y mediante un esquema de conexión donde nuestro nodo va a buscar la conexión en vez de esperar recibirla es posible sortear el problema de la traducción de direcciones. Después de todo es un problema muy común para el cual le han pensado ésta solución simple. Hay una lista bastante extensa de nodos proxy disponibles (link), en ocasiones esa página dá problemas de seguridad pero son falsas alarmas y pueden ser ignorados. Claramente no es una solución que escale en tráfico e introduce latencias adicionales que pueden ser molestas, pero para una prueba de concepto es perfectamente aceptable. En la configuración el proxy que utilizo es elp108.pi9noz.ampr.org aunque hay muchos otros.

Finalmente, un último obstáculo a superar, con el proxy configurado puedo acceder al nodo local desde un cliente cualquiera EchoLink, pero el audio es inservible y con una fuerte realimentación. Eso se debe a que la mayoría de los handy tienen una conexión de audio "económica" destinada a simplificar y hacer económico el micrófono, pero que no se lleva bien con éste tipo de uso, se crean lazos de masa indeseables que hacen realimentar la salida a la entrada. Para evitarlo es necesario aislar galvánicamente el circuito de micrófono con el de parlante del handy y los correspondientes a la entrada y salida de la placa de sonido. Eso se logra con un transformador de audio como los que se utilizan para, justamente, eliminar lazos de masa en sistemas de audio.
Con ese último agregado el sistema funciona perfectamente, tiene un retardo aproximadamente similar al del resto de los nodos que funcionan en la red y es por lo tanto usable. Acepta conexiones múltiples y se comporta, a todos los efectos prácticos como cualquier otro nodo de la red EchoLink.

El sistema, como tal, es mucho mas abierto y configurable que su contrapartida en EchoLink, sin ir mas lejos se disponen de los fuentes con lo que se pueden introducir modificaciones al código, y sin llegar tan lejos hay media docena de funciones tales como repetidor Echo, enlaces por red, conexión con APRS y otros que vale la pena explorar. Estimo que hay para muchos meses de experimentación para quien quiera ir en ésta dirección, y es posible que sea un proyecto muy interesante.

Estoy convencido, además, que aunque una placa Raspberry Pi 3 sea suficientemente "pequeña" el uso de CPU y otros recursos es tan bajo que el sistema, con tiempo y paciencia, tiene que poder funcionar en una Raspberry Pi Zero. Un proyecto en si mismo.

Muchas de las objeciones que puede tener el EchoLink como sistema son abordadas por las modernas redes digitales (por ejemplo DMR, Yaesu System Fusion, etc.) a las cuales EchoLink también se puede integrar, generando un interesante ecosistema analógico-digital.

¡No digan que no es tema para abordar en el 2021!




No hay comentarios:

Publicar un comentario