Mantenimiento de dockers en Raspberry PI

Docker es una plataforma de contenedores usada para empaquetar, distribuir y ejecutar aplicaciones de forma aislada y reproducible, de forma que su ejecución es igual en cualquier dispositivo. Docker fue creado inicialmente por Solomon Hykes (Docker Inc) en 2013.

Un contenedor:
  • comparte el kernel del sistema operativo, pero tiene:
    • sus librerías
    • binarios
    • configuración
    • red
    • filesystem aislado
Es mucho más ligero que una máquina virtual.

Fuente: chatGPT


Encender o arrancar un docker

sudo docker compose up -d

[+] Running 1/1
 ✔ Container ultrafeeder  Started 

Mejor este

sudo docker start ultrafeeder


Parar dockers

sudo docker stop ultrafeeder

sudo docker compose down

[+] Running 1/1
 ✔ Container ultrafeeder  Removed


Versión docker 

sudo docker version
[sudo] contraseña para pi: 
Client:
 Version:           26.1.5+dfsg1
 API version:       1.45
 Go version:        go1.24.4
 Git commit:        a72d7cd
 Built:             Sat May  9 11:11:51 2026
 OS/Arch:           linux/arm64
 Context:           default
Server:
 Engine:
  Version:          26.1.5+dfsg1
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.24.4
  Git commit:       411e817
  Built:            Sat May  9 11:11:51 2026
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.7.24~ds1
  GitCommit:        1.7.24~ds1-6+deb13u1
 runc:
  Version:          1.1.15+ds1
  GitCommit:        1.1.15+ds1-2+b4
 docker-init:
  Version:          0.19.0
  GitCommit:      

Dónde se ha instalado un docker

sudo find / -name "docker-compose.yml" 2>/dev/null

/opt/adsb-feeder-update/adsb-feeder-image/src/modules/adsb-feeder/filesystem/root/opt/adsb/docker-compose.yml
/opt/adsb/config/docker-compose.yml

cd /opt/adsb/config


Redes de un docker

sudo docker network ls

NETWORK ID     NAME             DRIVER    SCOPE
faa4b4fb995a   adsb_im_bridge   bridge    local
cf665d77beb1   bridge           bridge    local
f3c3e6676a49   host             host      local
3f984db6b5a5   none             null      local


comprobar estado

sudo docker ps

o

sudo docker compose ps

NAME          IMAGE                                                              COMMAND   SERVICE       CREATED          STATUS          PORTS
ultrafeeder   ghcr.io/sdr-enthusiasts/docker-adsb-ultrafeeder:latest-build-923   "/init"   ultrafeeder   49 seconds ago   Up 45 seconds   0.0.0.0:30001-30006->30001-30006/tcp, :::30001-30006->30001-30006/tcp, 0.0.0.0:30047->30047/tcp, :::30047->30047/tcp, 0.0.0.0:30104->30104/tcp, :::30104->30104/tcp, 0.0.0.0:30152->30152/tcp, :::30152->30152/tcp, 0.0.0.0:31003-31006->31003-31006/tcp, :::31003-31006->31003-31006/tcp, 0.0.0.0:32006->32006/tcp, :::32006->32006/tcp, 0.0.0.0:1090->80/tcp, :::1090->80/tcp


Consultar el log del docker

sudo docker logs $(sudo docker ps -q -l)


Advertencia importante


Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.

El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.

© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.

Instalando Kismet en una Raspberry Pi

Kismet en una Raspberry Pi 3B con un dongle SDR es capaz de hacer de sniffer de:
  • Wi-Fi
  • Bluetooth  
  • ISC en 433 MHz y 868 MHz
  • Recepstor ADS-B  en  1090 MHz 
  • Receptor AIS.
  • Localización y Mapeo GPS (Wardriving de Radio) con un receptor GPS USB

Instalacion

sudo apt install build-essential git libwebsockets-dev pkg-config \
zlib1g-dev libnl-3-dev libnl-genl-3-dev libcap-dev libpcap-dev \
libnm-dev libdw-dev libsqlite3-dev libsensors-dev libusb-1.0-0-dev \
libubertooth-dev libbtbb-dev libmosquitto-dev librtlsdr-dev

sudo apt install build-essential git libwebsockets-dev pkg-config \
zlib1g-dev libnl-3-dev libnl-genl-3-dev libcap-dev libpcap-dev \
libnm-dev libdw-dev libsqlite3-dev libsensors-dev libusb-1.0-0-dev \
libubertooth-dev libbtbb-dev libmosquitto-dev librtlsdr-dev

git clone https://www.kismetwireless.net/git/kismet.git

cd kismet

git pull

./configure

make -j2

HAy que limitar el numero de procesadores que se usan para la compilación
en paralelo pues consumen memoria
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
[sudo] contraseña para pi: 2048+0 records in 2048+0 records out 2147483648 bytes (2,1 GB, 2,0 GiB) copied, 151,005 s, 14,2 MB/s

Con todo es posible que haya que crear un fichero de swap para la compilación
sudo chmod 600 /swapfile
sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes) no label, UUID=e115de9a-dc6c-45b5-93f8-05c9c9a6da93
sudo swapon /swapfile
free -h
total usado libre compartido búf/caché disponible Mem: 905Mi 364Mi 68Mi 4,5Mi 539Mi 540Mi Inter: 2,9Gi 338Mi 2,6Gi
cd ~/kismet
make

Para saber que est trabajando dese otro terminal se ahce
htop



Para que no se caiga el terminal
sudo apt update && sudo apt install screen -y
screen -S kismet
... y si se corta basta con hacer screen -r kismet
Desde la sesión se sale con exit y desde fuera con screen -ls

Para ver si sigue vivo screen -ls
Comprobar si se acabó la compilación ls -l ~/kismet/kismet

Despues de la compilación conviene borrarlo
sudo swapoff /swapfile
sudo rm -f /swapfile


Referencias


Advertencia importante


Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.

El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.

© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.


Instalando una Tren-Tierra (UIC 751-3) en una Raspberry Pi con minimodem

minimodem es un módem de audio FSK por  software de propósito general para sistemas GNU/Linux, trabaja tanto como codificador o emisor como decodificador o receptor.

Minimodem es un programa de línea de comandos que decodifica (o genera) tonos de módem de audio a cualquier velocidad de transmisión especificada, utilizando diversos protocolos de trama. Funciona como un módem FSK de software de propósito general e incluye soporte para varios protocolos FSK estándar, como:

  • Bell103
  • Bell202
  • RTTY
  • TTY/TDD
  • NOAA SAME 
  • identificador de llamadas.


Minimodem puede reproducir y capturar tonos de módem de audio en tiempo real a través del dispositivo de audio del sistema, o en modo por lotes mediante archivos de audio.

Lo vamos a utilizar para decodificar las transmisiones del sistema Tren-Tierra (UIC 751-3)


Instalacion

sudo apt update

sudo apt install rtl-sdr minimodem -y


Arrancar

Parar servicios y/o dockers

sudo docker stop ultrafeeder

Lanzar el programa

rtl_fm -f 447.750M -M fm -s 22050 -g 450 | minimodem --rx -M 1500 -S 2300 600

Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Tuner gain set to 49.60 dB.
Tuned to 448003575 Hz.
Oversampling input by: 46x.
Oversampling output by: 1x.
Buffer size: 8.08ms
Exact sample rate is: 1014300.020041 Hz
Allocating 15 zero-copy buffers
Sampling at 1014300 S/s.
Output at 22050 Hz.
...

Errores

  • No supported devices found.
    • No está enchufado el SDR
  • usb_claim_interface error -6 Failed to open rtlsdr device #0.
    • bloquear posibles competidores del SDR
      • echo "blacklist rtl28xxu" | sudo tee /etc/modprobe.d/blacklist-rtl.conf
    • SDR ocupado, hay que matar procesos
      • sudo killall -9 rtl_fm rtl_sdr kismet kismet_cap_rtl sdr_server 2>/dev/null
  • usb_open error -4 Failed to open rtlsdr device #0. 
    • desConectar y conectar el SDR
  • cb transfer status: 5, canceling..
    • Bajar el muestreo y perfilarlo
      • sudo rtl_fm -f 447.750M -M fm -s 22050 -r 24k -g 450 | minimodem --rx -M 1500 -S 2300 600
      • sudo rtl_fm -f 447.750M -M fm -s 22050 -r 24k | minimodem --rx -M 1500 -S 2300 600
      • sudo rtl_fm -f 447.750M -M fm -s 250k -r 22050 | minimodem --rx -M 1500 -S 2300 600
      • sudo rtl_fm -s 250k -r 22050 -f 447.750M -M fm | minimodem --rx -M 1500 -S 2300 600

Ayuda

usage: minimodem [--tx|--rx] [options] {baudmode}
                    -t, --tx, --transmit, --write
                    -r, --rx, --receive,  --read     (default)
                [options]
                    -a, --auto-carrier
                    -i, --inverted
                    -c, --confidence {min-confidence-threshold}
                    -l, --limit {max-confidence-search-limit}
                    -8, --ascii         ASCII  8-N-1
                    -7,                 ASCII  7-N-1
                    -5, --baudot        Baudot 5-N-1
                    -f, --file {filename.flac}
                    -b, --bandwidth {rx_bandwidth}
                    -v, --volume {amplitude or 'E'}
                    -M, --mark {mark_freq}
                    -S, --space {space_freq}
                    --startbits {n}
                    --stopbits {n.n}
                    --invert-start-stop
                    --sync-byte {0xXX}
                    -q, --quiet
                    -R, --samplerate {rate}
                    -V, --version
                    -A, --alsa[=plughw:X,Y]
                    --lut={tx_sin_table_len}
                    --float-samples
                    --rx-one
                    --benchmarks
                    --binary-output
                    --binary-raw {nbits}
                    --print-filter
                    --tx-carrier
                {baudmode}
            any_number_N       Bell-like      N bps --ascii
                    1200       Bell202     1200 bps --ascii
                     300       Bell103      300 bps --ascii
                    rtty       RTTY       45.45 bps --baudot --stopbits=1.5
                     tdd       TTY/TDD    45.45 bps --baudot --stopbits=2.0
                    same       NOAA SAME 520.83 bps --sync-byte=0xAB ...
                callerid       Bell202 CID 1200 bps
     uic{-train,-ground}       UIC-751-3 Train/Ground 600 bps


Referencia

Advertencia importante

Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.

El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.

© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.

Instalando VOR en una Raspberry Pi con vortrack

Instalación

cd /home/pi/
git clone https://github.com/TLeconte/vortrack.git
cd vortrack
make -f Makefile.rtl
sudo cp vortrack /usr/local/bin/
sudo chmod +x /usr/local/bin/vortrack

Arrancar

sudo docker stop ultrafeeder

vortrack 112.5

Found Rafael Micro R820T tuner
Exact sample rate is: 2000000.052982 Hz
Allocating 8 zero-copy buffers

Si la dirección varia de forma aleatoria es que no se recibe una señal de calidad y es efecto del ruido

Sistemas VOR cercanos a Valencia

  • Calles (Valencia)
    • vortrack -g 450 117.55 
  • Aeropuerto de Manises (Valencia)
    • vortrack -g 450 116.10


Ayuda

vor receiver Copyright (c) 2018 Thierry Leconte 
Usage: vortrack [-g gain] [-l interval ] [-p ppm] [-r device] frequency in MHz
 -g gain :              gain in tenth of db (ie : 500 = 50 db)
 -p ppm :               ppm freq shift
 -r n :                 rtl device number
 -l interval :          time between two measurements


Sobre los VOR


Referencias


Advertencia importante


Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.
El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.


© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.

Instalando TETRA en una Raspberry Pi con TetraEar

Existen dos grandes familias de redes troncales digitales (trunking):

  • Tetrapol: es un desarrollo mas antiguo de origen francés (Matra Airbus Defence) y usa la técnica de FDMA (Frequency Division Multiple Access)
  • TETRA: es un sistema europeo mas moderno, con cifrado, permite el envio de voz y datos y usa la técnica de TDMA (Time Division Multiple Access) igual que DMR. Usa canales de 25 kHz dividido en 4 slots 

Comparativa entre TETRA y TETRAPOL Fuente: chatGPT


TETRA

TETRA (Terrestrial Trunked Radio) es el estándar de radio digital móvil que utilizan de forma masiva los servicios de emergencia, ambulancias, policías locales, bomberos, personal de aeropuertos, compañías de autobús, transportes y seguridad privada en toda Europa.

Las bandas son:

  • 410–430 MHz
  • 460–470 MHz


TETRAEAR

TetraEar es un software que actua como un "escáner y grabador automatizado de TETRA". Utiliza el dongle RTL-SDR para monitorizar una frecuencia o canal TETRA, detecta cuándo hay una llamada de voz activa, la demodula, la decodifica y guarda la conversación de audio en un archivo de sonido (.wav o .mp3) junto con los datos de quién habla. Además, tiene una interfaz web maravillosa para escuchar las grabaciones cómodamente desde el móvil o el Mac.

Instalación

Se va intentar instalar en una Raspberry Pi 3B

sudo apt update
sudo apt install libportaudio2 -y

sudo apt update 
git clone https://github.com/syrex1013/TetraEar.git
cd TetraEar
pip install -r requirements.txt
o si da error 
pip install -r requirements.txt --break-system-packages
python -m tetraear.tools.install_tetra_codec
  • da error de acceso la instalación
...
EN PRUEBAS, CON ERRORES


Referencias


Advertencia importante

Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.
El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.


© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.




Instalando DAB/DAB+ en una Raspberry Pi con Abracadabra

No tiene interface web por lo que requiere un monitor dedicado, por el momento se aparca 


Referencias


Advertencia importante

Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.
El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.


© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.

Antena colineal vertical monobanda para 868 MHz

Esta entrada hace una pequeña investigación de mercado cara a la compra de una antena vertical para la banda ISM de 868 MHz para su uso con Meshtastic y  Meshcore.



Las caracteriticas teóticas de todas ellas son

  • Material: fibra de vidrio
  • Material del radiador: cobre
  • Tipo de conector: 
    • N-macho
  • Color: negro/gris/blanco
  • Longitud  y ganancia de la antena: 
    • 35 cm (5,8 dBi) precio aproximado 21€ en aliexpress.
    • 45 cm(7 dBi)  precio aproximado 24€ en aliexpress.
    • 55 cm (8 dBbi) precio aproximado 26€ en aliexpress.
    • 80 cm (10 dBbi) precio aproximado 61€ en aliexpress.
    • 100 cm (12 dBbi) precio aproximado 85 € en aliexpress.
    • 115 cm (14 dBbi) precio aproximado 16 € en aliexpress.
  • Diámetro de la antena: 2 cm
  • Frecuencia: 868MHz
  • Tipo de radiación: Omnidireccional
  • Polarización: Vertical
  • Impedancia nominal: 50 ohmios
  • Potencia máxima de entrada: 50W
  • DIRECCIÓN.: ≤1.5
  • Cable de alimentación RG58 o 3D-FD con conectrores N-SMA:


Comentarios

Polarización

La polarización es muy importante pues los enlaces tienen alcance visual. En teoria la potencia recibida es función del coseno del angulo que forman ls polarizaciones de las antenas emisora y receptora por lo que en cuadratura (90º) la potencia recibida será 0

Ganancia

La ganancia de la antena depende de su longitud pues internamente son un sistema o array  de antenas colineales 

Para la frecuencia de 868 MHz tenemos una longitud de onda  (λ )  de 0,346 m. Una antena de cuarto de onda  λ/4  mide  86 mm y tendría una ganancia de 5,15 dBi (Respecto a un radiador isotrópico)

La antena de 35 cm seguramente está contruida con dos elementos colineales de λ/2 (17,2 cm), que dan una ganacia de  5,15 dBi 

5,15 dBi = 2,15 dBi ( ganacia de un dipolo λ/2) + 3 dB (al ser el doble)

LA de 55 cm pueden ser 3 medias ondas lo que daría 8,15 dBi

En las antenas colineales los elementos en cuarto o media onda se conectan con un desfase de 180º con el fin de sumar sus intensidades, hay dos formas de ahcerlo 





Detalles constructivos para el desfase de 180º sin usar bobinas


Coaxial

RG58 vs 3D-FD segun CharGPT


Conclusiones

Parece que la mejor opción calidad/precio es la colineal de 55 cm (seguramente con independencia de la marca todos son del mismo fabricante) con coaxial 3D-FD lo mas corto posible.


Para leer mas
Referencias



Advertencia importante

Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.
El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.

© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.


Una aplicación de radio para cada servicio

Para la recepción de una banda/servicio de radiocomuicación concreto y hacerlo  de forma continuada lo ideal esdisponer de un dispositivo dedicado que pueda estar 24x7.

A continuación un cuadro en el que se resumen que dispositivo emplear (Raspberry o ESP32) en unión con un RTL-SDR o compatible y que software que haya probado recomiendo para cada caso




Para seguir leyendo


Advertencia importante

Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.

El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.

© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.

Discovery Disk

La antena Discovery Dish es un proyecto que permite recibir varias señales de alta frecuencia con una antena de reflector parabólica ligera de 70 cm de diámetro desmontable que se fija a un mástil:

  • Antena Discovery Dish para satélites meteorológicos de banda L Antena de alimentación activa y filtrada de 1,69 GHz en una carcasa impermeable para recibir datos de los satélites GOES HRIT, GK2A/FengYun LRIT, FengYun-2 S-VISSR, Elektro-L LRIT y HRPT de órbita polar. 
  • Alimentador Discovery de banda S Alimentador activo y filtrado de 2,2 - 2,3 GHz en una carcasa impermeable para la recepción de datos satelitales y enlaces descendentes de telemetría. 
  • Alimentador Inmarsat Discovery Alimentador activo y filtrado de 1,525 - 1,660 GHz en una carcasa impermeable para la recepción de señales satelitales Inmarsat como STD-C y AERO. 
  • Alimentador Discovery para línea de hidrógeno Alimentador activo y filtrado de 1,42 GHz en una carcasa impermeable para observaciones de radioastronomía de línea de hidrógeno. 



Ver también

Referencias




Advertencia importante

Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.
El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.

© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.

Instalando NO-SDR en una raspberry Pi

no-sdr es un software para Linux/Rasberry Pi que convierte los dongles USB RTL-SDR en un receptor de radio web completo. Permite que varios usuarios se conectan a través de su navegador y sintonizan, demodulan y escuchan señales de forma independiente, compartiendo el mismo hardware. Sin plugins ni instalaciones, solo abre una URL. Viene a a ser un  WebSDR privado y abierto que puedes ejecutar en tu ordenador o en un contenedor Docker (compose). 

El proyecto busca alta fidelidad, procesamiento de señales débiles, calidad casi sin pérdidas, bajo consumo de ancho de banda y que todas las funciones se ejecuten también en arquitectura ARM (RPi/MAC). Para x86 se incluyen cuatro binarios y el nivel de capacidad de tu CPU se detecta al iniciar el contenedor. Los procesadores con extensiones de streaming (SSE/AVX, etc.) ofrecen un rendimiento superior y cada cliente consume menos ciclos de CPU. Todo esto es de código abierto.

También incluye un botón para identificar la canción que estás escuchando (necesitas algunas claves API para Audd).


Instalación

Se presupone que cuenta con una Raspberry Pi con piOS 64 bits y una tarjeta de de suficiente capacidad (p.e. 16 Gb)

Si no tiene acceso via web puede instalar una utilidad que le facilite el acceso como cockpit

sudo apt update

sudo apt install -y cockpit

https://192.168.1.xxx:9090/


Conectarse

Desde macOS abrir terminal

ssh [IP]

o desde el navegador 

https://192.168.1.xxx:9090/

o

https://raspberrypi.local:9090



Comprobaciones

Comprobar que esta node.js disponible

node -v

v12.22.12 => v22.22.2

npm -v

7.5.2 => 10.9.7 => 11.15.0

Si no lo esta o no es versión 22.o hay que instalarlo forzardo la ultima versión v22.00

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - 

sudo apt-get install -y nodejs

También se puede bajar directamente el binario

cd /tmp

wget https://nodejs.org/dist/v22.11.0/node-v22.11.0-linux-armv7l.tar.xz

tar -xJf node-v22.11.0-linux-armv7l.tar.xz   

  

... si no está node.js hay que instalarlo

sudo apt-get install -y nodejs npm

Para npm hay que forzar la ultima versión con

sudo npm install -g npm@11.15.0


Comprobar que está instalado el lenguaje GO

go version

go version go1.24.4 linux/arm64

... en caso de que no esté, hay que instalar Go 

sudo apt update

sudo apt install -y golang


Comprobar que están instalados los drivers de SDR

rtl_test

Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Detached kernel driver
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6 
[R82XX] PLL not locked!
Sampling at 2048000 S/s.

... en caso de que no estén, hay que instalar los drivers de RTL-SDR

sudo apt update

sudo apt install -y rtl-sdr


Instalación

Cuando ya tenga todas las comprobaciones realizadas y el software necesario instalado y en versión llega el momento de instalar el NO-SDR

sudo apt-get update

git clone https://github.com/gbozo/no-sdr.git

cd no-sdr

npm install

npm run build

npm start


Configuración

Modificar el fichero de configuración de NO.SDR para poner la IP local si tiene el dongle SDR conectado directamente a la Raspberry Pi

nano config/config.yaml

source:
type: rtl_tcp
host: 127.0.0.1
port: 1234

http://xxx.xxx.xxx.xxx:3000/

Pruebas y problemas

NO SE OYE

No se oye, dando el siguiente error cuando se intenta poner el SOUND=ENABLE


Para saltarse la limitación de los navegadores de que no reproducen si no es bajo sesión segura una de las soluciones es instalar, configurar y arranca un servidor NGINX (De este problema y de su solución no habal nada el desarrollador)

sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx
sudo nano /etc/nginx/sites-available/no-sdr
server {
    listen 80;
    server_name raspberrypi.local;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

sudo ln -s /etc/nginx/sites-available/no-sdr /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo systemctl restart nginx
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Borrar y configurar de nuevo el servidor web

sudo nano /etc/nginx/sites-available/no-sdr
server {
    listen 80;
    listen 443 ssl;
    server_name raspberrypi.local;

    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

sudo systemctl restart nginx

https://raspberrypi.local

Despues de este proceso de isntalación y configuración de NGINX se consigue que se oiga (problema solucionado),  pero se entrecorta mucho. Hay que buscar solución a este sgegundo problema

SE ENTRECORTA

Se han probado las siguientes modificaciones

Disminuir el tamaño de la clave de cifrado
sudo nano /etc/nginx/sites-available/no-sdr
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;

Bajar el sampleRate por defecto 2400000 a 1.200000 o 1.100000, para velocidades mas bajas comienza a reproducirse muy leto. Ajustelo a la potencia del procesador de la Raspberry Pi que tenga en en  config/config.yaml (Raspberry Pi 3 le va justito)

nano config/config.yaml



PROBLEMAS DEL VFO 

NO RESPONDE DE FORMA INMEDIATA

NO ES DE BANDA CONTINUA
SW solo de 5500 a 6600 kHz 

Son temas de la versión y no podemos hacer nada al respecto


ARRANQUE

Procedimiento de arranque (Que no es trivial y hay que automatizar)

  • Arrancar rtl en back
    • rtl_tcp -a 127.0.0.1 -p 1234 > /dev/null 2>&1 &
  • Arrancar NGINX
    • sudo systemctl restart nginx
  • Arrancar npm
    • cd no-sdr
    • npm start
  • Conectarse
    • https://raspberrypi.local/

Conclusiones

Necesita mejorar y completar el proceso de instalación y la resolución de problemas, en su estado actual no es muy usable,


Ver también

Otras instalaciones realizadas con sobre Raspberry Pi + SDR

Referencias


Advertencia importante

Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.
El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.

© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.

Mantenimiento de dockers en Raspberry PI

Docker es una plataforma de contenedores usada para empaquetar, distribuir y ejecutar aplicaciones de forma aislada y reproducible, de form...