Buscar este blog

KiwiSDR + WSPR Daemon

Existe la posibilidad de usar de forma conjunta KiwiSDR con el programa WSPR Daemon instalado en un entorno LINUX (p.e. Raspberry Pi) y conectados por red local, lo cual permite recibir de forma simultánea hasta 8 bandas de WSPR a la vez (por ejemplo: 160m, 80m, 40m, 30m, 20m, 17m, 15m y 10m). 

Ademas permite medir el nivel de ruido y almacenarlo en https://www.wsprdaemon.org/grafana y subir adicionalmente a WSPR la información a PSKreporter

Instalación

git clone https://github.com/rrobinett/wsprdaemon.git

Clonando en 'wsprdaemon'...
remote: Enumerating objects: 9683, done.
remote: Counting objects: 100% (474/474), done.
remote: Compressing objects: 100% (150/150), done.
remote: Total 9683 (delta 384), reused 387 (delta 318), pack-reused 9209 (from 2)
Recibiendo objetos: 100% (9683/9683), 21.47 MiB | 1.07 MiB/s, listo.
Resolviendo deltas: 100% (6289/6289), listo.
Actualizando archivos: 100% (405/405), listo.

cd wsprdaemon

./wsprdaemon.sh -h

[sudo] contraseña para pi: 
Updated user 'pi' to auto-sudo
A reference to '~/wsprdaemon/bash-aliases' has been added to ' ~/.bash_aliases'
Tue 25 Aug 2026 18:05:06 UTC: remote_access_connection_status() wsprdaemon.conf has not yet been configured. Edit it and run this again

OPCIONES DE wsprdaemon.sh

/home/pi/wsprdaemon/wsprdaemon.sh -[asz] Start,Show Status, or Stop the watchdog daemon
-a    => stArt watchdog daemon which will start all scheduled jobs ( -w a )
-A    => install wsprdaemon as a service started at linux boot/reboot/powerup time and then stArt it
-z   => stop watchdog daemon and all jobs it is currently running (-w z )   (i.e.zzzz => go to sleep)
-Z  => stop any running WD and also remove it from being run by Linux at boot/reboot/powerup time
-s  => show Status of watchdog and jobs it is currently running  (-w s ; -j s )
-l     [e,n,d]  => show log files lines using 'tail -F'.  'e' = new ERROR lines from all logs files.  'n' = wsprnet.org uploading. 'd' = wsprdaemon.org uploading 
-h  => print this help message (execute '-vh' to get a description of the architecture of this program)

These flags are mostly intended for advanced configuration:
-i  => list audio and RTL-SDR devices attached to this computer
-v  => Increase verbosity of diagnotic printouts 
-d  => Signal all running processes as found in the *.pid files in the current directory to increment the logging verbosity 
This permits changes to logging verbosity without restarting WD
-D  => Signal all to decrement verbosity

Configurar el archivo wsprdaemon.conf

cp wd_template.conf wsprdaemon.conf

nano ~/wsprdaemon/wsprdaemon.conf

Editar parámetros clave:

  • Descomentar la línea borrando '#' y cambiar "<....>" por el valor
    • Tu indicativo de radioaficionado (Callsign)
      • # WSPRNET_REPORTER_ID="<YOUR_REPORTER_ID>"
      • WSPRNET_REPORTER_ID=
    • Grid Locator (ej. BP51...)
      • # REPORTER_GRID="<YOUR_GRID>"
  • Dirección IP de tu KiwiSDR en la red local.
    • declare RECEIVER_LIST=( "KIWI_0 192.168.1.27:8073  ${WSPRNET_REPORTER_ID} ${REPORTER_GRID}<SDR_PASSWORD_IF_NEEDED>") 
  • D e los 8 canales de que dispone KiwiSDR solamente tomamos 6, pero definimos unicamente 4 
    • declare WSPR_SCHEDULE_only_kiwi=(  "00:00     KIWI_0,80,W2:F2:F5    KIWI_0,40,W2:F2:F5      KIWI_0,20,W2:F2:F5    KIWI_0,10,W2:F2:F5" )
    • Las 8 bandas/frecuencias en las que quieres que sintonice los canales audio.
  • No se da acceso remoto a los desarrolladores de WSPRDAemon
    • # RAC=<RAC_INTEGER_ID>
  • No se activa para que subida el nivel de ruido a la B.D. de WSPR 
    • SIGNAL_LEVEL_UPLOAD="no"
  • No se activa la subida a Grafana

Ejemplo que funciona para 4 canlaes con KiwiSDR

#!/bin/bash
WSPRNET_REPORTER_ID="EA5JTT"
REPORTER_GRID="IM99kp"
WSPRNET_REPORTER_ID="${WSPRNET_REPORTER_ID-EA5JTT}"           
REPORTER_GRID="${REPORTER_GRID-IM99KP}"
ANTENNA_DESCRIPTION="End-fed 16.2m"
KA9Q_WEB_TITLE="${WSPRNET_REPORTER_ID}_@${REPORTER_GRID}_${ANTENNA_DESCRIPTION}"
## The default is to upload extented spot and background noise level data to wsprdaemon.org   
##  These are small files, so they add little to the site's Internet bandwidth usage
# SIGNAL_LEVEL_UPLOAD="no"
## If "yes" the site uploads a 150 KByte .png file to wsprnet.org 
## where it can be viewed at http://wsprdaemon.org/graphs/${WSPRNET_REPORTER_ID}/
## Since better, configurable Grafana graphs are available from the wsprdeamon.org, 
## to conserve your site's Internet usage I now discourage the use of this feature
#SIGNAL_LEVEL_UPLOAD_GRAPHS="yes"
declare RECEIVER_LIST=( "KIWI_0 192.168.1.27:8073 EA5JTT IM99kp NULL" )
declare WSPR_SCHEDULE_only_kiwi=(
    "00:00 KIWI_0,80,W2:F2:F5 KIWI_0,40,W2:F2:F5 KIWI_0,20,W2:F2:F5 KIWI_0,10,W2:F2:F5")
declare WSPR_SCHEDULE=( "${WSPR_SCHEDULE_only_kiwi[@]}" )

Parametros de decodificacion

Modo Significado
W2 WSPR clásico de 2 minutos (el modo "de toda la vida", decodificado con wsprd) — es el que por defecto se usa si no especificas nada
F2 FST4W-120 (variante FST4W de ciclo de 2 minutos)
F5 FST4W-300 (ciclo de 5 minutos)
F15 FST4W-900 (ciclo de 15 minutos)
F30 FST4W-1800 (ciclo de 30 minutos)
W0 Modo "solo ruido" — no decodifica, solo mide nivel de ruido de fondo (no se puede combinar con los demás)

En KiwiSDR

En ADMIN => CONTROL => 

  • Number of simultaneous channels available for connection by non-Kiwi apps = 4

En ADMIN => EXTENSION => FT8/WSPR

  • Poner todos los canales como "regular use"


Arrancar el servicio

Iniciar el daemon con ./wsprdaemon.sh -a

A partir de ahí, y tras instalar todas las dependencias que faltan que en nuestro caso con ( time, vim, at, gawk) el script se ejecuta en segundo plano, se conecta al KiwiSDR por red, decodifica cada tramo de 2 minutos y envía los datos automáticamente a WSPRnet, PSKReporter y bases de datos de ruido https://www.wsprdaemon.org/grafana, si se ha configurado así en el fichero

Comandos

Parada

./wsprdaemon.sh -z

Arranque

./wsprdaemon.sh -a

Estatus

./wsprdaemon.sh -s

       KIWI_0,80,W2:F2:F5:       KIWI_0,80   posting     Pid = 363151
       KIWI_0,80,W2:F2:F5:       KIWI_0,80   decoding    Pid = 363202
       KIWI_0,80,W2:F2:F5:       KIWI_0,80   recording   Pid = 363616
       KIWI_0,40,W2:F2:F5:       KIWI_0,40   posting     Pid = 363223
       KIWI_0,40,W2:F2:F5:       KIWI_0,40   decoding    Pid = 363298
       KIWI_0,40,W2:F2:F5:       KIWI_0,40   recording   Pid = 363811
       KIWI_0,20,W2:F2:F5:       KIWI_0,20   posting     Pid = 363347
       KIWI_0,20,W2:F2:F5:       KIWI_0,20   decoding    Pid = 363455
       KIWI_0,20,W2:F2:F5:       KIWI_0,20   recording   Pid = 364071
       KIWI_0,10,W2:F2:F5:       KIWI_0,10   posting     Pid = 363477
       KIWI_0,10,W2:F2:F5:       KIWI_0,10   decoding    Pid = 363600
       KIWI_0,10,W2:F2:F5:       KIWI_0,10   recording   Pid = 364187
Found 4 running jobs
Tue 25 Aug 2026 21:59:10 UTC: get_status_of_daemon() Daemon '               watchdog_daemon' is running with pid 362800 in '/home/pi/wsprdaemon'
Tue 25 Aug 2026 21:59:10 UTC: get_status_of_daemon() Daemon '      upload_to_wsprnet_daemon' is running with pid 363077 in '/home/pi/wsprdaemon/uploads/wsprnet/spots'
Tue 25 Aug 2026 21:59:10 UTC: get_status_of_daemon() Daemon '   upload_to_wsprdaemon_daemon' is running with pid 363084 in '/home/pi/wsprdaemon/uploads/wsprdaemon'

Errores

./wsprdaemon.sh -le


Comprobaciones

Ademas de ver los tres procesos por canal con ./wsprdaemon.sh -s (posting, decoding y recording) se puede comprobar en el KiwiSDR en STATUS que hay 4 conexiones locales que se corresponden a los canales/bandas configurados
Por último se puede hacer una QUERY en WSPR Rocks para comprobar que las codificaciones se estan almacenando correctamente en la B.D. de WSPR

SELECT time, tx_sign, band, snr, distance
FROM wspr.rx
WHERE rx_sign = 'EA5JTT'
AND time >= now() - INTERVAL 10 MINUTE
ORDER BY time DESC;



Comentarios

La versión de KiwiSDR 2 permite configuar directamente hasta 8 canales para recibir WSPR por lo que no es imprescindible usar WSPR Daemon para la decodificación en paralelo. WSPRDaemon aporta el poder subir intormacion sobre el ruido e informar a PKreporter y Grafana de información, y según algunos autores podria obtenerse un porcentaje mayor de decodificación (Se está comprobando).

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.

No hay comentarios:

Publicar un comentario

ENTRADAS POPULARES (ULTIMO MES)