Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,35 @@ Update an installed kit with `sudo sdrkit update`.

## [Unreleased]

## [3.13.0] - 2026-10-22

### Added
- **Listen-only user**: an optional second password (`VIEWER_PASSWORD`, set or removed with `sudo sdrkit viewer`). Logging
in with it opens the same panel, marked **👁 Listen only**, where you can look at everything and listen to the live audio,
recordings and downloads, but every change is refused (`403`): tuning, modes, deleting, settings, reboot. It does not see
the saved WiFi networks, the system logs or the update status. Ignored when it equals the administrator password or when
there is no administrator password. `GET /api/status` now includes `role`. It only guards the panel; OpenWebRX+ (port 8073)
keeps its own login. Covered by `tests/test_viewer.py`.

### Changed
- **Roadmap trimmed to 32 features**: Home Assistant (MQTT), the installable app (PWA) and the daily Telegram summary were
dropped; the rest were renumbered (the unified server is now #32). Updated in `ROADMAP.md`, the panel's Roadmap card
and the README.

## [3.12.0] - 2026-10-22

### Added
- **Ship map (AIS)** (Decode → **🚢 Ships**): ships appear on an offline radar-style map around your location, like the aircraft
radar — name, MMSI, type (cargo, tanker, passenger, fishing, sailing, tug…), size, speed, course, destination, distance and
bearing, with trails and colors by type. Ships, aids to navigation and base stations are decoded by SDR-Kit's own AIS
decoder (message types 1–5, 18, 19, 21, 24; checksums verified; multi-part messages joined) fed by **AIS-catcher** or
**rtl_ais** (`sudo apt install rtl-ais`; the installer adds it when the repository has it). Distress beacons
(AIS-SART, man overboard, EPIRB) are flagged red. New mode `ais` (the dongle works on 162 MHz while it is on), API
`GET/POST /api/ais`. Demo mode simulates eight ships and a distress beacon. Covered by `tests/test_ais.py` and the
browser smoke test. *Not verified with real hardware yet: the decoder is tested against real AIS sentences and the
demo, but the AIS-catcher / rtl_ais launch options have not been run on a Pi.*
- The decoder catalog now lists AIS as a panel decoder (before it only pointed at OpenWebRX+).

## [3.11.0] - 2026-10-22

### Added
Expand Down
4 changes: 3 additions & 1 deletion README.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ lugar entras con [Tailscale](https://tailscale.com).
- **Buscapersonas** POCSAG / FLEX, **APRS** con posiciones, alertas **EAS** (multimon-ng)
- **Sensores de 433/868/915 MHz**: estaciones meteorológicas, sensores de llantas, timbres… (rtl_433)
- **Radar de aviones sin internet** en 1090 MHz (dump1090)
- **Mapa de barcos sin internet** (AIS, 162 MHz) con nombre, tipo, velocidad y balizas de socorro
- **Clave de solo escucha** para invitados: pueden ver y escuchar, nunca cambiar ni borrar
- Más de 40 modos en el receptor avanzado (OpenWebRX+): FT8, WSPR, SSTV, fax HF, ACARS…
- Los canales de cada servicio listos: PMR446, FRS/GMRS, marina VHF, aviación, CB, radioaficionados…

Expand Down Expand Up @@ -421,7 +423,7 @@ Sin nube, sin cuentas, sin telemetría.
| [Guía completa en español](docs/es/GUIA.md) | Compras, montaje, instalación, cada pestaña, antenas, voz digital, actualizaciones y problemas |
| [Documentación técnica (inglés)](docs/README.md) | Arquitectura, API HTTP, configuración, desarrollo |
| [Historial de versiones](CHANGELOG.md) · [Cómo contribuir](CONTRIBUTING.md) · [Seguridad](SECURITY.md) | Proyecto |
| [Plan diario de funciones](ROADMAP.md) | 34 funciones nuevas, una por día, y la visión a futuro (un servidor unificado para escuchar las Pi de todo el mundo): qué viene y qué ya está hecho |
| [Plan diario de funciones](ROADMAP.md) | 31 funciones nuevas, una por día, y la visión a futuro (un servidor unificado para escuchar las Pi de todo el mundo): qué viene y qué ya está hecho |

## ⚖️ Legal

Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ internet required. At home it joins your WiFi; in the field it creates its own h
- **Pagers** POCSAG / FLEX, **APRS** with positions, **EAS** alerts (multimon-ng)
- **433/868/915 MHz sensors**: weather stations, tyre sensors, doorbells… (rtl_433)
- **Offline aircraft radar** on 1090 MHz (dump1090)
- **Offline ship map** (AIS, 162 MHz) with name, type, speed and distress beacons
- **Listen-only password** for guests: they can look and listen, never change or delete
- 40+ more modes in the advanced receiver (OpenWebRX+): FT8, WSPR, SSTV, HF fax, ACARS…
- Every service's channel plan built in: PMR446, FRS/GMRS, marine VHF, airband, CB, ham bands…

Expand Down Expand Up @@ -420,7 +422,7 @@ HTTP API: [docs/api.md](docs/api.md).

## 🗺️ Roadmap

📅 **Daily feature plan:** [ROADMAP.md](ROADMAP.md) lists 34 new features, one shipped per day, plus the long-term vision (a unified server where everyone can share and listen to each other's Pis worldwide), with what's done and what's next.
📅 **Daily feature plan:** [ROADMAP.md](ROADMAP.md) lists 31 new features, one shipped per day, plus the long-term vision (a unified server where everyone can share and listen to each other's Pis worldwide), with what's done and what's next.

- [ ] HackRF One sweeps up to 6 GHz in the analyzer (detected automatically; needs more field testing)
- [ ] Second-dongle profiles: aircraft radar or sensors 24/7 while using the analyzer
Expand Down
69 changes: 33 additions & 36 deletions ROADMAP.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 🗺️ SDR-Kit · Plan diario de funciones

Una función nueva por día, en este orden (34 funciones, más una visión a futuro: el servidor unificado). Las primeras aprovechan lo que el kit ya tiene; las que dependen de otras
van después. Cada día se toma **la primera casilla ☐** de la lista (salvo la #35, que primero se diseña: ver su fila).
Una función nueva por día, en este orden (31 funciones, más una visión a futuro: el servidor unificado). Las primeras aprovechan lo que el kit ya tiene; las que dependen de otras
van después. Cada día se toma **la primera casilla ☐** de la lista (salvo la #32, que primero se diseña: ver su fila).

Estado: ☐ pendiente · ◐ hecha en parte (ver nota) · ✅ terminada (fecha · versión)

Expand All @@ -19,8 +19,8 @@ Estado: ☐ pendiente · ◐ hecha en parte (ver nota) · ✅ terminada (fecha
6. **Honesto**: si algo depende de hardware que no se puede probar, se simula, se prueba la parte de software y se dice
claramente en la documentación qué falta verificar con hardware real.
7. **Legal**: el kit sólo recibe. Lo que toque privacidad (TPMS, medidores, monitoreo de personal) lleva su aviso; la
única función que transmite por radio (#34) va casi al final, apagada por defecto y sólo para equipos y bandas
autorizadas. La única que **comparte audio por internet** (#35, servidor unificado) es la última: siempre opcional,
única función que transmite por radio (#31) va casi al final, apagada por defecto y sólo para equipos y bandas
autorizadas. La única que **comparte audio por internet** (#32, servidor unificado) es la última: siempre opcional,
apagada por defecto, y cada usuario elige qué comparte.
8. **Publicación**: commit a nombre de `romartak <dr.robinsonsantos113@gmail.com>`, sin menciones a herramientas de IA
en commits ni archivos; push a `main`; versión menor nueva (`VERSION`, `version()` en `sdrkit_server.py`,
Expand All @@ -33,70 +33,67 @@ Estado: ☐ pendiente · ◐ hecha en parte (ver nota) · ✅ terminada (fecha
| 1 | ✅ 2026-10-18 · 3.7.0 | **Repetición instantánea** «⏪ ¿qué dijo?» | El radio guarda siempre los últimos 30 s en memoria y un botón los reproduce o los guarda como grabación. |
| 2 | ✅ 2026-10-22 · 3.11.0 | **Panel del negocio** | Gráficos de actividad del radio por hora y por día, canal más usado, transmisión más larga; a partir del registro de actividad. |
| 3 | ☐ | **Alertas de aviones** | Aviso (panel + ntfy) por códigos 7700/7600/7500, aviones militares o helicópteros cerca, con filtros configurables. |
| 4 | ☐ | **Mapa de barcos (AIS)** | Modo AIS con mapa sin internet como el radar de aviones (decodificador opcional, p. ej. AIS-catcher); barcos simulados en demo. |
| 5 | ☐ | **Home Assistant (MQTT)** | Sensores de 433 MHz, aviones y actividad del radio publicados por MQTT con *discovery* automático; apagado por defecto. |
| 6 | ☐ | **App instalable (PWA)** | El panel se instala en el celular, funciona sin conexión para lo estático y muestra avisos nativos cuando está abierto. |
| 7 | ☐ | **Resumen diario por Telegram** | Bot opcional (token en `sdrkit.conf`) que manda cada día el resumen de actividad y, si se quiere, grabaciones marcadas. |
| 8 | ☐ | **Usuario de solo escucha** | Segunda contraseña con permisos limitados: escucha y ve todo, pero no cambia configuración ni borra nada. |
| 4 | ✅ 2026-10-22 · 3.12.0 | **Mapa de barcos (AIS)** | Modo AIS con mapa sin internet como el radar de aviones (decodificador opcional, p. ej. AIS-catcher); barcos simulados en demo. |
| 5 | ✅ 2026-10-22 · 3.13.0 | **Usuario de solo escucha** | Segunda contraseña con permisos limitados: escucha y ve todo, pero no cambia configuración ni borra nada. |

## Fase 2 · Herramientas de campo

| # | Estado | Función | Listo cuando… |
|---|---|---|---|
| 9 | ☐ | **Prueba de interferencias** | Asistente que analiza un canal y dice si hay ruido, otra emisora, saturación o señal débil, con consejos. |
| 10 | ☐ | **Barrido de seguridad** | Modo que busca señales sospechosas que aparecen y desaparecen (micrófonos, rastreadores) y las compara con una «línea base». |
| 11 | ☐ | **Cazador con brújula** | El modo cazador usa la brújula del celular y la intensidad para dibujar hacia dónde está el transmisor. |
| 12 | ☐ | **Mapa de cobertura caminando** | Con el GPS del celular, pinta en un mapa el nivel de una frecuencia mientras caminas; exportable. |
| 13 | ☐ | **Medidor de antena (SWR) casero** | Guía y medición con fuente de ruido + puente: curva de retorno y frecuencia de resonancia en el analizador. |
| 14 | ☐ | **Identificador de señales mejorado** | El clasificador reconoce más tipos (DMR, P25, LoRa, POCSAG, portones, TV digital…) con confianza y explicación. |
| 6 | ☐ | **Prueba de interferencias** | Asistente que analiza un canal y dice si hay ruido, otra emisora, saturación o señal débil, con consejos. |
| 7 | ☐ | **Barrido de seguridad** | Modo que busca señales sospechosas que aparecen y desaparecen (micrófonos, rastreadores) y las compara con una «línea base». |
| 8 | ☐ | **Cazador con brújula** | El modo cazador usa la brújula del celular y la intensidad para dibujar hacia dónde está el transmisor. |
| 9 | ☐ | **Mapa de cobertura caminando** | Con el GPS del celular, pinta en un mapa el nivel de una frecuencia mientras caminas; exportable. |
| 10 | ☐ | **Medidor de antena (SWR) casero** | Guía y medición con fuente de ruido + puente: curva de retorno y frecuencia de resonancia en el analizador. |
| 11 | ☐ | **Identificador de señales mejorado** | El clasificador reconoce más tipos (DMR, P25, LoRa, POCSAG, portones, TV digital…) con confianza y explicación. |

## Fase 3 · Casa inteligente y sensores

| # | Estado | Función | Listo cuando… |
|---|---|---|---|
| 15 | ☐ | **Medidores de agua, luz y gas** | Lectura de medidores por radio compatibles (rtl_433 / rtlamr), con gráfico de consumo y aviso de privacidad. |
| 16 | ☐ | **Sensores de llantas (TPMS)** | Lista de sensores TPMS con presión y temperatura; marcar «mi carro» para seguir sólo los propios. |
| 12 | ☐ | **Medidores de agua, luz y gas** | Lectura de medidores por radio compatibles (rtl_433 / rtlamr), con gráfico de consumo y aviso de privacidad. |
| 13 | ☐ | **Sensores de llantas (TPMS)** | Lista de sensores TPMS con presión y temperatura; marcar «mi carro» para seguir sólo los propios. |

## Fase 4 · Espacio y mapas

| # | Estado | Función | Listo cuando… |
|---|---|---|---|
| 17 | ☐ | **Pasos de satélites e ISS** | Cálculo de pasos sin internet (TLE guardados, se actualizan si hay red), aviso y grabación automática al pasar. |
| 18 | ☐ | **Imágenes Meteor-M** | Grabar el paso y obtener la imagen (decodificador opcional); en la Pi Zero se procesa después del paso. |
| 19 | ☐ | **Radiosondas** | Rastreo de globos meteorológicos (400–406 MHz) en el mapa con su trayectoria y punto de caída estimado. |
| 20 | ☐ | **Mapa combinado** | Un solo mapa con aviones, barcos, APRS, radiosondas y tus repetidoras, con capas que se encienden y apagan. |
| 21 | ☐ | **Alimentar ADSBexchange / FlightAware** | Opción de enviar los aviones decodificados a esas redes (y MLAT si aplica), apagada por defecto. |
| 14 | ☐ | **Pasos de satélites e ISS** | Cálculo de pasos sin internet (TLE guardados, se actualizan si hay red), aviso y grabación automática al pasar. |
| 15 | ☐ | **Imágenes Meteor-M** | Grabar el paso y obtener la imagen (decodificador opcional); en la Pi Zero se procesa después del paso. |
| 16 | ☐ | **Radiosondas** | Rastreo de globos meteorológicos (400–406 MHz) en el mapa con su trayectoria y punto de caída estimado. |
| 17 | ☐ | **Mapa combinado** | Un solo mapa con aviones, barcos, APRS, radiosondas y tus repetidoras, con capas que se encienden y apagan. |
| 18 | ☐ | **Alimentar ADSBexchange / FlightAware** | Opción de enviar los aviones decodificados a esas redes (y MLAT si aplica), apagada por defecto. |

## Fase 5 · Radio inteligente

| # | Estado | Función | Listo cuando… |
|---|---|---|---|
| 22 | ☐ | **Varios canales a la vez** | Escuchar 2–3 canales que caben en el ancho del dongle, mezclados o en estéreo izquierda/derecha. |
| 23 | ☐ | **Quién habla** | «Huella» de cada walkie (subtono, desviación, nivel, ID digital) con nombre, mostrada en el radio y el registro. |
| 24 | ☐ | **Transcripción de voz a texto** | Transcripción sin internet de las grabaciones (motor opcional tipo whisper.cpp), buscable en Grabaciones. |
| 25 | ☐ | **Alertas por palabra clave** | Aviso cuando la transcripción contiene palabras elegidas («emergencia», «fuego»…). Depende de #24. |
| 26 | ☐ | **Trunking** | Seguir sistemas troncalizados P25 / DMR (canal de control + voz) con el decodificador opcional. |
| 19 | ☐ | **Varios canales a la vez** | Escuchar 2–3 canales que caben en el ancho del dongle, mezclados o en estéreo izquierda/derecha. |
| 20 | ☐ | **Quién habla** | «Huella» de cada walkie (subtono, desviación, nivel, ID digital) con nombre, mostrada en el radio y el registro. |
| 21 | ☐ | **Transcripción de voz a texto** | Transcripción sin internet de las grabaciones (motor opcional tipo whisper.cpp), buscable en Grabaciones. |
| 22 | ☐ | **Alertas por palabra clave** | Aviso cuando la transcripción contiene palabras elegidas («emergencia», «fuego»…). Depende de #21. |
| 23 | ☐ | **Trunking** | Seguir sistemas troncalizados P25 / DMR (canal de control + voz) con el decodificador opcional. |

## Fase 6 · Comunidad y aprendizaje

| # | Estado | Función | Listo cuando… |
|---|---|---|---|
| 27 | ☐ | **Huella de radio de tu ciudad** | Mapa/calendario de qué se transmite, dónde y cuándo, armado con la vigilancia 24/7. |
| 28 | ☐ | **Modo aprendizaje (tour guiado)** | Recorridos paso a paso («hoy escuchamos aviones») que explican lo que se oye y se ve. |
| 29 | ☐ | **Logros y retos** | Insignias por hitos (primer satélite, 100 aviones, primera repetidora…), guardadas en la Pi. |
| 30 | ☐ | **Repetidoras de la comunidad** | Lista abierta de repetidoras (con subtono) aportada por usuarios mediante el repositorio, cargada por país en Canales. |
| 24 | ☐ | **Huella de radio de tu ciudad** | Mapa/calendario de qué se transmite, dónde y cuándo, armado con la vigilancia 24/7. |
| 25 | ☐ | **Modo aprendizaje (tour guiado)** | Recorridos paso a paso («hoy escuchamos aviones») que explican lo que se oye y se ve. |
| 26 | ☐ | **Logros y retos** | Insignias por hitos (primer satélite, 100 aviones, primera repetidora…), guardadas en la Pi. |
| 27 | ☐ | **Repetidoras de la comunidad** | Lista abierta de repetidoras (con subtono) aportada por usuarios mediante el repositorio, cargada por país en Canales. |

## Fase 7 · Hardware y plataforma

| # | Estado | Función | Listo cuando… |
|---|---|---|---|
| 31 | ☐ | **Dos dongles a la vez** | Asignar un dongle a cada función (p. ej. aviones 24/7 + radio) y usarlos al mismo tiempo. |
| 32 | ☐ | **Respaldo en la nube** | Copia opcional de grabaciones y configuración (rclone: Google Drive, Dropbox…), apagada por defecto. |
| 33 | ☐ | **Más equipos: Airspy, SDRplay, Pi 5** | Soporte detectado automáticamente, con pruebas simuladas como las de la V3. |
| 34 | ☐ | **Hablar por tus radios (PTT)** | Con un walkie conectado por audio + PTT, hablarle a tu equipo desde el panel. Apagado por defecto, con aviso legal: sólo equipos y bandas en las que tengas permiso de transmitir. |
| 28 | ☐ | **Dos dongles a la vez** | Asignar un dongle a cada función (p. ej. aviones 24/7 + radio) y usarlos al mismo tiempo. |
| 29 | ☐ | **Respaldo en la nube** | Copia opcional de grabaciones y configuración (rclone: Google Drive, Dropbox…), apagada por defecto. |
| 30 | ☐ | **Más equipos: Airspy, SDRplay, Pi 5** | Soporte detectado automáticamente, con pruebas simuladas como las de la V3. |
| 31 | ☐ | **Hablar por tus radios (PTT)** | Con un walkie conectado por audio + PTT, hablarle a tu equipo desde el panel. Apagado por defecto, con aviso legal: sólo equipos y bandas en las que tengas permiso de transmitir. |

## Fase 8 · Visión a futuro

| # | Estado | Función | Listo cuando… |
|---|---|---|---|
| 35 | ☐ | **Servidor unificado (SDR-Kit Network)** | Un servidor al que cualquiera puede conectar su Pi para compartir su recepción y escuchar las Pi de otras personas en todos los países, con mapa mundial. Opt-in y apagado por defecto: cada quien elige qué comparte (sólo canales públicos o sin licencia, nunca cifrados ni privados), con aviso legal por país, moderación, límites de ancho de banda y la opción de apagarlo en cualquier momento. Requiere diseñar el servidor, la seguridad y el protocolo antes de escribir código. |
| 32 | ☐ | **Servidor unificado (SDR-Kit Network)** | Un servidor al que cualquiera puede conectar su Pi para compartir su recepción y escuchar las Pi de otras personas en todos los países, con mapa mundial. Opt-in y apagado por defecto: cada quien elige qué comparte (sólo canales públicos o sin licencia, nunca cifrados ni privados), con aviso legal por país, moderación, límites de ancho de banda y la opción de apagarlo en cualquier momento. Requiere diseñar el servidor, la seguridad y el protocolo antes de escribir código. |
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.11.0
3.13.0
2 changes: 2 additions & 0 deletions docs/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ PI=http://sdrpi.local

When `ADMIN_PASSWORD` is set, every route except `/login`, `/logout`, `/favicon.svg`, `/icon.svg` and `/manifest.webmanifest` needs the `sdrkit_auth` cookie. Without it, `/api/*` returns `401` and pages redirect to `/login`.

If `VIEWER_PASSWORD` is also set, logging in with it gives a **listen-only** session: every `GET` works (including the live audio and the downloads) except `/api/wifi`, `/api/logs` and `/api/system/*`, and every `POST` other than `/login` answers `403 {"error":"Modo de solo escucha: …"}`. `GET /api/status` includes `"role": "admin" | "viewer"`.

| Method | Path | Body | Response |
|---|---|---|---|
| `GET` | `/login` | — | Login page (HTML) |
Expand Down
Loading
Loading