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.
Contenidos
Antes de comenzar, asegúrate de cumplir los siguientes requisitos:
Actualizar el sistema e instalar dependencias
Actualiza los repositorios e instala todas las bibliotecas necesarias para compilar SoapySX.
Clonar y compilar sxxcvr / SoapySX
Descarga el repositorio sxxcvr y compila el módulo SoapySX, que proporciona soporte SDR al sistema.
sudo ldconfig actualiza la caché de bibliotecas compartidas. Es necesario ejecutarlo tras instalar SoapySX para que el sistema pueda encontrar el módulo correctamente.
Instalar el compilador Rust (rustup)
tetra-bluestation está escrito en Rust. Usa el instalador oficial rustup para obtener la toolchain más reciente.
Clonar el repositorio (rama tetrapack-calls)
Es imprescindible usar la rama tetrapack-calls; otras ramas no son compatibles con la red TETRAPack.
--branch tetrapack-calls. Si ya tienes el repositorio clonado en otra rama, cámbiala con git checkout tetrapack-calls.
Activar el entorno Rust y compilar
Activa el entorno Rust instalado en el paso anterior y compila el binario en modo release.
./target/release/tetra-bluestation.
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:
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:
# 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
[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.
Ejecutar tetra-bluestation
Una vez configurado el archivo config.toml, lanza el binario compilado pasándolo como argumento.
screen, tmux o crear una unidad systemd.