Hotspot TMO Conectar tu hotspot TETRA a la red TETRAPack

  Guía de instalación — Hotspot TETRA para TETRAPack

Esta guía describe paso a paso cómo compilar e instalar el software necesario para conectar un hotspot TETRA de radioaficionado a la red TETRAPack en modo TMO. Se utilizará el receptor/transmisor de software sxxcvr junto con la aplicación tetra-bluestation.

Publicado el 14/02/2025 · Probado con SXceiver
Aviso de vigencia: Estas instrucciones pueden quedar obsoletas en cuanto se publique una nueva versión del software. Comprueba siempre la Wiki de TETRAPack y el repositorio de tetra-bluestation para verificar que los pasos siguen siendo válidos.
1. Requisitos previos

Antes de comenzar, asegúrate de cumplir los siguientes requisitos:

Debian 12 Bookworm Hardware SDR compatible con SoapySDR Acceso sudo Conexión a internet
Sistema operativo: Esta guía está probada únicamente en Debian 12 Bookworm. No se garantiza el correcto funcionamiento en otras distribuciones o versiones.
2. Instalación de dependencias y SoapySX
1

Actualizar el sistema e instalar dependencias

Actualiza los repositorios e instala todas las bibliotecas necesarias para compilar SoapySX.

sudo apt update sudo apt-get install -y --no-install-recommends git make g++ cmake libsoapysdr-dev libasound2-dev libgpiod-dev clang llvm-dev libclang-dev
2

Clonar y compilar sxxcvr / SoapySX

Descarga el repositorio sxxcvr y compila el módulo SoapySX, que proporciona soporte SDR al sistema.

cd git clone "https://github.com/tejeez/sxxcvr.git" cd sxxcvr/SoapySX mkdir build cd build cmake .. make sudo make install sudo ldconfig
El comando sudo ldconfig actualiza la caché de bibliotecas compartidas. Es necesario ejecutarlo tras instalar SoapySX para que el sistema pueda encontrar el módulo correctamente.
3. Instalación de Rust
3

Instalar el compilador Rust (rustup)

tetra-bluestation está escrito en Rust. Usa el instalador oficial rustup para obtener la toolchain más reciente.

curl https://sh.rustup.rs -sSf | sh
Durante la instalación, acepta las opciones predeterminadas cuando el instalador lo solicite. Una vez finalizado, el entorno Rust aún no estará activo en la sesión actual — actívalo con el comando del paso siguiente antes de compilar.
4. Compilación de tetra-bluestation
4

Clonar el repositorio (rama tetrapack-calls)

Es imprescindible usar la rama tetrapack-calls; otras ramas no son compatibles con la red TETRAPack.

cd git clone -b tetrapack-calls --single-branch https://github.com/misadeks/tetra-bluestation.git cd tetra-bluestation
Rama obligatoria: Asegúrate de clonar con --branch tetrapack-calls. Si ya tienes el repositorio clonado en otra rama, cámbiala con git checkout tetrapack-calls.
5

Activar el entorno Rust y compilar

Activa el entorno Rust instalado en el paso anterior y compila el binario en modo release.

# Activa el entorno Rust (necesario en la sesión actual) . "$HOME/.cargo/env" # Compila en modo release cargo build --release
La compilación puede tardar varios minutos dependiendo del hardware. El binario resultante se encontrará en ./target/release/tetra-bluestation.
5. Configuración

Antes de ejecutar la aplicación es necesario crear un archivo de configuración. Puedes tomar como punto de partida el archivo de ejemplo incluido en el repositorio:

# Copia el archivo de ejemplo y edítalo con tus parámetros cp example_config/config.toml config.toml nano config.toml

El archivo de configuración sigue el formato TOML. A continuación se muestra la estructura típica con los parámetros más relevantes:

config.toml — archivo de configuración de ejemplo completo   TX 438.600 MHz  ·  RX 431.000 MHz
# Archivo de configuración de ejemplo de TETRA BlueStation
# Este es un archivo de configuración de ejemplo para la pila de estación base TETRA
# NO EJECUTAR sin editar para mantenerse dentro de los límites legales de tu jurisdicción

config_version = "0.5"

# Modo de operación de la pila: "Bs" (Estación Base), "Ms" (Estación Móvil) o "Mon" (Monitor)
stack_mode = "Bs"

# Descomentar para grabar log de depuración. Los archivos crecen rápidamente y generan carga adicional en el sistema
# debug_log = "./verbose_log.txt"

###############################################################################

# Configuración de entrada/salida de la capa PHY

[phy_io]

# Tipo de entrada: establecer en SoapySdr. Puede permitir backends RF futuros sin SoapySDR.
backend = "SoapySdr"

# Código DEBUG/PRUEBAS. Los archivos de captura crecen rápidamente.
# dl_tx_file = "./dl_output.bin"    # Depuración; descomentar para guardar muestras RF DL generadas en archivo
# ul_rx_file = "./ul_output.bin"    # Depuración; descomentar para guardar muestras RF UL recibidas en archivo

[phy_io.soapysdr]
# Frecuencias de transmisión tx(dl) y recepción rx(ul) en Hz
# !!! Asegúrate de editar también todos los campos relacionados en la sección cell_info para que coincidan con esta frecuencia.
# Consulta ETSI TS 100 392-15 V1.5.1 Cláusula 6: Separación dúplex
tx_freq = 438600000
rx_freq = 431000000
ppm_err = 0.0                       # Ajustar si tu SDR tiene un error de sintonía no despreciable

# Valores recomendados para LimeSDR
# [phy_io.soapysdr.iocfg_limesdr]
# rx_ant = "LNAL"
# tx_ant = "BAND1"
# rx_gain_lna = 18.0
# rx_gain_tia = 6.0
# rx_gain_pga = 10.0
# tx_gain_pad = 18.0
# tx_gain_iamp = 3.0

# Valores recomendados para LimeSDR Mini v2
# [phy_io.soapysdr.iocfg_limesdr]
# rx_ant = "LNAW"
# tx_ant = "BAND2"
# rx_gain_lna = 18.0
# rx_gain_tia = 6.0
# rx_gain_pga = 10.0
# tx_gain_pad = 18.0
# tx_gain_iamp = 3.0

# Valores recomendados para SXceiver
[phy_io.soapysdr.iocfg_sxceiver]
rx_ant = "RX"
tx_ant = "TX"
rx_gain_lna = 42.0
rx_gain_pga = 16.0
tx_gain_dac = 9.0
tx_gain_mixer = 30.0

# Valores recomendados para Ettus USRP B210 (y probablemente B200)
#[phy_io.soapysdr.iocfg_usrpb2xx]
#rx_ant = "TX/RX"
#tx_ant = "TX/RX"
#rx_gain_pga = 50.0
#tx_gain_pga = 35.0

###############################################################################

# Información de red
[net_info]
# Código de País Móvil (MCC) - identifica tu país
mcc = 901  # Tetrapack

# Código de Red Móvil (MNC) - identifica la red TETRA
# ASEGÚRATE DE QUE EL MNC PUEDE USARSE, CONSULTA A LAS AUTORIDADES COMPETENTES SI ES NECESARIO
mnc = 9999  # Tetrapack

# Información de la celda
[cell_info]

# Estos parámetros especifican las frecuencias DL y UL
# Lee la especificación si tienes dudas. Asegúrate de que coinciden con las frecuencias tx/rx indicadas arriba
freq_band = 4                       # Banda de 400 MHz
main_carrier = 1544                 # + 1521 * 25kHz = 38250kHz
duplex_spacing = 7                  # Usa separación de 5 MHz entre ul y dl (para banda de 400 MHz)
custom_duplex_spacing = 7600000     # No descomentar salvo que hayas programado una entrada de separación dúplex personalizada en tus radios
freq_offset = 0                     # Desplazamiento respecto al portador. Normalmente 0. Opciones: 0, 6250, -6250, 12500.
reverse_operation = false           # False: UL por debajo de DL. True: UL por encima de DL.

# Identificador de área de localización
location_area = 2

# Código de color (0-3), ayuda a distinguir celdas adyacentes en la misma frecuencia
colour_code = 1

###############################################################################

# OPCIONAL: Parámetros adicionales de la celda
# En desarrollo; descomentar y configurar según sea necesario; muchos no están implementados aún,
# los valores predeterminados deberían ser suficientes

# Configuración de difusión de celdas vecinas
# neighbor_cell_broadcast = 0

# Carga de celda (Asignación de Canal) - carga actual
# cell_load_ca = 0

# Soporte de entrada tardía - permite unirse a llamadas de grupo en curso
# late_entry_supported = true

# Clase de abonado - define qué clases de MS pueden acceder a esta celda
# subscriber_class = 0xFFFF

# Funciones de registro y movilidad
# registration = true
# deregistration = true
# priority_cell = false
# no_minimum_mode = false
# migration = false

# Indicadores de disponibilidad de servicios
system_wide_services = true  # Si es false, los radios operarán en modo de reserva
voice_service = true  # Aún no implementado, pero puede ser necesario para mantener contentos a ciertos terminales
# circuit_mode_data_service = true
# sndcp_service = true
# aie_service = false
# advanced_link = false

# Código de sistema (0-15) - identifica la versión del sistema TETRA
# system_code = 0

# Modo de compartición para el canal de control principal
# sharing_mode = 0

# Tramas reservadas para la asignación de ranuras de tiempo
# ts_reserved_frames = 0

# Transmisión Discontinua (DTX) en el plano de usuario
# u_plane_dtx = false

# Soporte de extensión de trama 18
# frame_18_ext = false

###############################################################################

# Protocolo Brew: Conectar al servidor TetraPack/BrandMeister mediante el Protocolo Homebrew TETRA.
# Ver: https://wiki.tetrapack.online/books/tetra/page/brew

[brew]
enabled = true

# Dirección del servidor
host = "core.tetrapack.online"
port = 3003

# Usar TLS (wss:// / https://) — obligatorio
tls = true

# User-Agent para autenticación HTTP (formato: TETRAHS/XXXXXX) — obligatorio
user_agent = "TETRAHS/TU INDICATIVO" # Pon aquí tu indicativo

# Credenciales de autenticación HTTP Digest — obligatorias
username = "214xxxx" # Tu ID de DMR
password = "HOTSPOT SECURITY" # Tu contraseña de Hotspot Security del Selfcare de BrandMeister

# ISSI con el que registrarse en el servidor
issi = 214xxxx

# IDs de grupo (GSSIs) a los que afiliarse — grupos de conversación que recibirá esta BTS
groups = [9, 91] # Los TGs de los que se recibirá tráfico de BrandMeister, el resto de TGs quedarán como locales

# Retardo de reconexión (en segundos)
reconnect_delay_secs = 15
Los valores de ganancia de la sección [phy_io.soapysdr.iocfg_sxceiver] son los recomendados para SXceiver, que es el hardware con el que se ha probado esta guía. Para otros dispositivos (LimeSDR, USRP B210…) consulta los bloques comentados en el archivo de configuración.
6. Ejecución
6

Ejecutar tetra-bluestation

Una vez configurado el archivo config.toml, lanza el binario compilado pasándolo como argumento.

./target/release/tetra-bluestation config.toml
Si quieres ejecutarlo en segundo plano o como servicio, considera usar screen, tmux o crear una unidad systemd.

  Resumen — todos los comandos en orden

# 1. Dependencias del sistema sudo apt update sudo apt-get install -y --no-install-recommends \ git make g++ cmake libsoapysdr-dev libasound2-dev \ libgpiod-dev clang llvm-dev libclang-dev # 2. SoapySX cd git clone "https://github.com/tejeez/sxxcvr.git" cd sxxcvr/SoapySX mkdir build cd build cmake .. make sudo make install sudo ldconfig # 3. Rust curl https://sh.rustup.rs -sSf | sh # 4. tetra-bluestation (rama tetrapack-calls) cd ~ git clone -b tetrapack-calls --single-branch https://github.com/misadeks/tetra-bluestation.git cd tetra-bluestation # 5. Activar Rust y compilar . "$HOME/.cargo/env" cargo build --release # 6. Configurar y ejecutar cp example_config/config.toml config.toml nano config.toml ./target/release/tetra-bluestation config.toml