signalk-mareas-ihm 2.1.10 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,265 @@
1
+ # Changelog
2
+
3
+ ## [2.2.1] - 2026-06-20
4
+
5
+ ### English
6
+
7
+ **Documentation & UI**
8
+ - Instructions modal rewritten as a proper user manual: safety notice, 16 sections covering setup, anchoring manoeuvre, swing-circle geometry (blue/red rings), real sensors, AIS proximity watch, shelter, grounding alarm, multi-device audio, FAQ.
9
+ - New "Recommended onboard hardware" section listing what each user typically needs: Raspberry Pi, USB self-amplified speaker (essential for audible alarms), GPS, depth sounder, anemometer, AIS receiver, IMU.
10
+ - Modal typography +2 px for easier reading at arm's length in cockpit conditions.
11
+ - AIS module renamed "anti-collision" → "proximity watch" (no CPA/TCPA yet — honesty matters in safety tooling).
12
+
13
+ **Bug fixes**
14
+ - Map no longer auto-recenters on the boat after a temporary GPS loss. If you dragged the map to look elsewhere, that decision is now respected even if the GPS blinks.
15
+
16
+ **App Store & registry**
17
+ - Screenshots converted to JPEG ≤1778 px wide, each <500 KB, per Signal K App Store spec. Tarball size dropped from 6.1 MB to 2.9 MB.
18
+ - Plugin test suite added using Node's built-in `node:test` (no new devDependencies). Covers Signal K plugin contract, screenshot manifest integrity, files[] correctness and entrypoint import. Runs with `npm test`.
19
+
20
+ ### Español
21
+
22
+ **Documentación y UI**
23
+ - Modal de instrucciones reescrito como manual profesional: aviso de seguridad, 16 secciones con configuración, maniobra de fondeo, geometría de los círculos azul y rojo, sensores reales, vigilancia AIS de proximidad, abrigo, alarma de varada, audio multidispositivo, FAQ.
24
+ - Nueva sección "Hardware recomendado a bordo" con lo que necesita cada usuario: Raspberry Pi, altavoz USB autoamplificado (imprescindible para que las alarmas se oigan), GPS, sonda, anemómetro, receptor AIS, IMU.
25
+ - Tipografía del modal +2 px para leer cómodamente a un metro bajo la luz del sol.
26
+ - Módulo AIS renombrado "anti-colisión" → "vigilancia de proximidad" (no hay CPA/TCPA todavía — la honestidad importa en herramientas de seguridad).
27
+
28
+ **Corrección de bugs**
29
+ - El mapa ya no se auto-centra en el barco tras perder el GPS un instante. Si arrastraste el mapa para mirar otra zona, esa decisión se respeta aunque el GPS parpadee.
30
+
31
+ **App Store y registro**
32
+ - Capturas convertidas a JPEG ≤1778 px ancho, cada una <500 KB, según la especificación del App Store de Signal K. Tamaño del paquete bajado de 6.1 MB a 2.9 MB.
33
+ - Añadida suite de tests del plugin usando `node:test` nativo de Node (sin nuevas dependencias). Cubre contrato del plugin Signal K, integridad del manifiesto de screenshots, corrección de files[] y carga del entrypoint. Se ejecuta con `npm test`.
34
+
35
+ ## [2.2.0] - 2026-06-20
36
+
37
+ Rediseño del sistema AIS, cache persistente entre sesiones, auto-desarme inteligente al motorizar, panel AIS más usable, capturas para el App Store de Signal K.
38
+
39
+ ### Novedades
40
+
41
+ **Sistema AIS — Los barcos vecinos ya no se "olvidan"**
42
+ - El plugin guarda en disco los datos de cada barco AIS visto en los últimos 3 días: nombre, eslora, manga, tipo, callsign, IMO. Al reiniciar el plugin o abrir el visor desde cero, los nombres y datos ya están ahí sin esperar a que cada barco vuelva a emitir su paquete de identificación (que tarda hasta 6 min).
43
+ - Si un barco se queda sin recepción AIS por unos minutos, sigue visible en pantalla con una X discreta indicando "datos estimados".
44
+ - Banner azul claro en el popup cuando el target es estimado: "Datos estimados, mostrando última posición conocida".
45
+
46
+ **Sistema AIS — Lista y filtros nuevos**
47
+ - Slider de radio configurable de 0.5 a 50 km para decidir qué barcos ves en el mapa y en la lista. Se recuerda al recargar.
48
+ - Ordena la lista por distancia, nombre, favoritos primero, MMSI o tipo de barco.
49
+ - Casilla de filtro de texto para buscar por nombre o MMSI con mensaje "Sin resultados" cuando no hay coincidencias.
50
+ - Marca AIS como favorito con una ★ amarilla — se sincroniza entre todos tus dispositivos.
51
+ - Botón 🔍 vesselfinder en cada barco — abre vesselfinder en una nueva pestaña con la info completa del barco (IMO + MMSI).
52
+ - Iconos en la lista ahora distinguen velero, motora, carguero, tanker, pasaje, pesca... a primera vista.
53
+
54
+ **Sistema AIS — Alarma más fiable**
55
+ - Cuando haces ACK a un target y este vuelve a moverse hacia ti, la alarma vuelve a sonar (antes se quedaba muda).
56
+ - El ACK caduca a los 15 min para forzar una nueva evaluación si el barco sigue siendo peligro.
57
+ - Eliminado el bucle "alarma se abre y cierra sola" por fluctuaciones de velocidad pequeñas.
58
+ - La velocidad de acercamiento ya no arrastra valores antiguos cuando ambos barcos están parados.
59
+ - Actualización de tráfico AIS más rápida — el rastro de un barco que se mueve aparece a los pocos segundos en vez de medio minuto.
60
+
61
+ **Sistema AIS — Visor**
62
+ - Click en un barco → el mapa lo centra, lo sigue automáticamente y aparece su distancia al lado del aro azul de identificación.
63
+ - La selección se queda activa aunque cierres el popup. Una X en el aro azul te permite deseleccionar cuando quieras.
64
+ - El rastro del barco seleccionado se ve siempre destacado (más grueso y opaco), aunque esté lejos.
65
+
66
+ **Salida a motor sin alarma de garreo**
67
+ - Cuando sales del fondeo a motor sin acordarte de "levar" en la app, ahora el plugin detecta que llevas más de 30 segundos por encima de 3 nudos y desarma la vigilancia automáticamente. Antes saltaba la sirena de garreo y despertaba al patrón sin motivo.
68
+
69
+ **Previsión de abrigo (rosa de sectores)**
70
+ - Restaurado el algoritmo de detección que tenías en versiones anteriores y funcionaba bien. Los cambios intermedios daban falsos positivos en costas irregulares (caso Moaña). Ahora vuelve a marcar correctamente qué sectores tienen costa o espigón cerca y cuáles están expuestos al mar abierto.
71
+ - El icono del barco dentro de la rosa ya no aparece partido a veces.
72
+
73
+ **Historial de olas**
74
+ - Resolución triplicada: una barra cada 5 minutos en vez de cada 15.
75
+ - Las barras "Ahora" están a la izquierda y el pasado se extiende a la derecha (más intuitivo).
76
+ - Si hay muchas barras hay scroll horizontal con barras más anchas.
77
+ - Escala vertical autoescalable de 0 a 2 m con líneas guía claras a ambos lados.
78
+
79
+ **Ventanas y modales mejorados**
80
+ - Los modales informativos (Escala de exposición, Cómo se calcula la protección, Historial de olas con leyenda y tabla) ahora ocupan casi toda la pantalla con textos cómodos de leer a un metro de distancia bajo la luz del sol.
81
+ - El header de cada modal lleva botón "‹ Atrás" grande y bien visible.
82
+
83
+ **App Store de Signal K**
84
+ - Capturas de pantalla añadidas al paquete — visibles en el App Store de Signal K tras la instalación. La principal es el visor de fondeo en uso real.
85
+
86
+ ### Mejoras de uso (UX)
87
+
88
+ - **Versátil en cualquier pantalla**: del móvil al monitor del puente, el visor reordena y reescala todo para que los controles siempre se puedan tocar cómodamente con el dedo, y los textos sean legibles a la distancia desde la que se usa el dispositivo.
89
+ - Quitado el tooltip molesto "Container ship top view" que salía al pasar el ratón sobre los AIS Class A.
90
+ - El faldón del popup AIS muestra el icono específico del tipo de barco (⛵ velero, 📦 carga, 🛢️ tanque, 🛳️ pasaje, etc.) en vez del genérico.
91
+
92
+ ### Correcciones
93
+
94
+ - Resumen del abrigo ("Abrigado: ninguna de las próximas 12 h…") ahora respeta el idioma del visor en lugar de salir en español cuando la UI está en inglés.
95
+ - El nombre de un barco AIS ya no se pierde si reaparece en el visor sin haber recibido nuevo paquete de identificación.
96
+ - El foco del mapa ya no oscila entre el barco propio y un AIS seleccionado.
97
+ - Al pulsar la X del aro de un AIS, ya no salta accidentalmente la alarma del siguiente barco en zona.
98
+ - El panel "AIS en zona" mantiene fija arriba la cabecera (radio, ordenar, filtro) y solo se mueve la lista al hacer scroll.
99
+ - La rueda del ratón scrollea la lista correctamente desde cualquier parte del panel.
100
+ - Los cambios de pantalla se reflejan al instante tras actualizar el plugin (antes el navegador podía mostrar versión cacheada).
101
+
102
+ ---
103
+
104
+ ## [2.1.11] - 2026-06-13 (pendiente publicación)
105
+
106
+ ### Nuevas funciones
107
+ - **NOAA ENC (EE.UU.)** como capa seleccionable. Servicio WMS Maritime Chart Service del NOAA ENCOnline (`gis.charttools.noaa.gov/.../exts/MaritimeChartService/WMSServer`). Gratis, sin API key. Capas 1-6 activas (naturales+puerto, sondas+corrientes, lecho+obstáculos+pipes, rutas tráfico, áreas especiales, boyas+balizas+faros+radar). Cobertura: aguas costeras EE.UU. (Atlántico, Pacífico, Golfo, Grandes Lagos, Alaska, Hawai, Caribe). Opacidad por defecto 60%. ID interno: `noaa`.
108
+
109
+ ### Cartas no incluidas (notas)
110
+ - **CHS Canadá**: investigada y descartada por ahora. El endpoint NONNA (`nonna-geoserver.api.gc.ca`) está caído/movido. El portal oficial `data.chs-shc.ca` requiere login y no expone WMS público. No hay servicio público sin auth equivalente al de NOAA para Canadá. Se reactivará cuando aparezca alternativa.
111
+
112
+ ### Documentación
113
+ - README: corregido "garreo" → "anchor drag" en la sección de audio inglés (línea 82). Era una fuga del término español dentro del párrafo EN.
114
+
115
+ ## [2.1.10] - 2026-06-10
116
+
117
+ ### Fixes
118
+ - **Alarma meteo activa sin estar fondeado** (feedback Pablo G. Nascimento). `_checkWeatherAlarm` no comprobaba `anch`; quien tuviese el switch ON recibía avisos amarrado al pantalán o navegando. Añadido guard: si no está fondeado, la alarma se fuerza a `false` y el chequeo retorna inmediatamente. La rosa del visor y el historial IMU siguen activos para info general — solo se suprime el aviso/voz/banner.
119
+ - **Rosa de abrigo en marinas con escolleras**: el query Overpass solo buscaba `way["natural"="coastline"]`. En marinas (e.g. Vigo Marina Davila 42.242,-8.724) los espigones están etiquetados como `man_made=breakwater`, `man_made=pier` o `man_made=groyne`, no como costa natural. El cálculo daba "F · 10% protección" para una marina con escolleras gigantes. Ahora el query incluye los tres tipos `man_made` y los trata como obstáculos sólidos en el ray-casting. `ALGORITHM_VERSION` bumpeada a `v76` para invalidar cachés viejas.
120
+
121
+ ### Documentación
122
+ - Nota: las lecturas de olas (intensidad/período/dirección) del IMU son **siempre activas** mientras el plugin corre — son info general útil tanto fondeado como navegando. Los **avisos** (alarma meteo) solo disparan en fondeo. El visor sigue mostrando todos los datos.
123
+
124
+ ## [2.1.5] - 2026-06-03
125
+
126
+ ### Fixes
127
+ - **CRÍTICO: "Cannot set headers after they are sent"** en `/navtiles/:z/:x/:y.png`. El handler hacía `tileResp.pipe(res)` y si la conexión upstream caía mid-stream el `tileReq.on('error')` callback intentaba `res.status(502).send()` cuando los headers ya estaban enviados. Fix: helper `sendFallback()` que comprueba `res.headersSent` antes de enviar; si headers ya fueron enviados, sólo `res.end()` para cerrar el socket limpio. También guard antes de `pipe()` por si `res.headersSent` ya es true al entrar (idempotencia).
128
+ - **Bottom bar Sonda**: el botón solo abría el popup sin llamar `fetchSondaData()` — quedaba con "Cargando..." si no se había abierto antes desde el menú. Ahora ambos paths fetchan.
129
+ - **Quality donut mismatch** (visor ↔ shelter): el donut del bottom bar usaba un mapa hardcoded `{A:100, B:80, C:60, ...}` que no coincidía con el % real de `_shelterCache.assessment.scorePercent`. Ahora lee el valor real del cache; fallback al mapa si no hay cache aún.
130
+
131
+ ### Nuevas funciones
132
+ - **Alarma "Mala condición climática"** en panel de alarmas: nuevo selector con switch. Cuando activado, comprueba cada 5 min las próximas 6h del shelter cache buscando viento > 25 kt u ola > 1.5 m, y dispara `setAlarmActive('weather', true)`. Estado persistido en localStorage.
133
+
134
+ ### Traducciones
135
+ - **Wave history popup** (`#wave-hist-info-pop`): título "Historial de olas — leyenda y detalle" / "Wave history — legend & details", subtitle, badges Calma/Rizada/Moderada/Agitada/Fuerte → Calm/Rippled/Moderate/Rough/Strong, headers tabla Inicio/Intensidad/Período/Altura/RMS → Start/Intensity/Period/Height/RMS, badge ACTUAL → CURRENT, mensaje "No hay datos todavía...". Ampliado de 620px → 900px y 88vh → 92vh.
136
+ - **Tooltips left bar**: m-ham (Menú/Menu), m-cartas audio toggle, m-snooze, m-fav, m-lb-curvas, m-lb-mareas, m-kip, m-fb — todos con `data-i18n-title`.
137
+
138
+ ## [2.1.4] - 2026-06-03
139
+
140
+ ### Traducciones (i18n)
141
+ - **Panel meteo AHORA** (left card): labels VIENTO/RACHA/AIRE/MAR ahora bilingües (WIND/GUST/AIR/SEA en EN).
142
+ - **Filas tabla meteo**: Aire, Presión, Lluvia, T. Mar, Ola, Período, Dir ola → todas con T() (Air/Pressure/Rain/Sea T./Wave/Period/Wave dir).
143
+ - **Resumen meteo** botón colapsable → bilingüe.
144
+ - **Shelter NOW box**: badges "Veleta" → "Vane", "Sensor" igual ambos; labels racha/aire/agua → gust/air/water.
145
+ - **Eje gráfico presión**: "ahora" → "now".
146
+ - **Labels flotantes visor mapa**: "Viento" → "Wind", "Olas" → "Waves", "Mar en calma" → "Calm sea".
147
+
148
+ ### UI consistente
149
+ - **Estilo unificado del back button** y título de cabecera en TODOS los modales:
150
+ - `.m-back-btn` / `.m-modal-title` classes utility.
151
+ - Back: rgba(255,178,63,.15) bg + 1px border var(--org) + color var(--org) + 18px font + 48px min-height + radius 12px.
152
+ - Title: 28px (antes 38px en m-modal-hdr) — coherente con Anchor Calculation, Shelter, Weather Forecast.
153
+ - `m-modal-hdr .m-back` actualizado a las mismas dimensiones que la clase utility (sin min-width:110px, sin height fija 56px).
154
+ - `m-close-spacer` reducido de 110px → 80px para compensar el botón más estrecho.
155
+
156
+ ### Infra i18n
157
+ - `applyLang()` ahora procesa también `data-i18n-title` (atributos title de tooltips) y `data-i18n-placeholder` (placeholders de inputs).
158
+
159
+ ## [2.1.3] - 2026-06-03
160
+
161
+ ### Traducciones
162
+ - Tooltips title="..." del bottom bar (velocidad/viento/sonda/cadena/distancia/presión/abrigo/calidad) y sidebar derecha (anchor/centrar/info/AIS/cartas/abrigo/alarmas/fondeo).
163
+ - Intensidades de ola en la rosa abrigo: Cal/Riz/Mod/Agi/Fue → Calm/Rip/Mod/Rou/Str.
164
+ - Modal "Guardar fondeo favorito": título, hint, placeholder, botones Cancelar/Guardar.
165
+ - Selector modelo meteo "Mejor (automático)" → "Best (automatic)".
166
+ - Spinner "Cargando…" → "Loading…" en popups Sonda y Meteo.
167
+
168
+ ## [2.1.2] - 2026-06-03
169
+
170
+ ### NPM metadata
171
+ - **Descripción ampliada** del paquete (antes hablaba solo de mareas; ahora menciona anchor watch, AIS, shelter, weather, depth, charts).
172
+ - **~70 keywords en inglés** orientados a búsqueda internacional: anchor-watch, ais-alarm, shelter-forecast, weather-forecast, swing-radius, bathymetry, chartplotter, mbtiles, marine-safety, voice-alarm, etc.
173
+
174
+ ## [2.1.1] - 2026-06-02
175
+
176
+ ### Fixes críticos (alarmas y audio)
177
+ - **State machine de alarmas robusta**: detector de loops huérfanos en `setAlarmActive` — si los timers fueron matados externamente (ACK manual, snooze, cancel-silence cross-device) pero `_activeAlarms[kind]=true` persiste, ahora se re-arman correctamente. Antes el plugin quedaba "atascado" sin sonar nunca más.
178
+ - **30s grace para AIS** antes del primer aviso de voz: modal aparece instant, 30s silencio para reaccionar, luego beep + voz.
179
+ - **ACK/snooze/un-mute = re-arme instantáneo** vía flag `_alarmInstantRearm[kind]` — sin esperar 30s adicionales.
180
+ - **Cortar voz al instante**: arquitectura per-kind (cancel tokens `_voiceCancelTokens`, arrays `_activeVoiceSources` y `_activeVoiceAudios`). HTMLAudio fallback se aborta con `removeAttribute('src')+load()`.
181
+ - **Voz garreo INSTANT** (antes esperaba 30s erróneamente porque `_ALARM_VOICE_PRE_DELAY_MS` era global). Default ahora 0, AIS pasa 30000 explícitamente.
182
+ - **Mute 60s window respetado** incluso por SSE del backend: cuando el usuario muta, `_userMuteUntilMs = Date.now()+60s`; durante esa ventana ni garreo crítico ni el push SSE pueden auto-reactivar.
183
+ - **Vibración fallback** (`navigator.vibrate`) + banner rojo "🔇 Audio bloqueado — TOCA aquí" + visibilitychange resume del AudioContext.
184
+ - **Snooze auto-cancela al levar ancla** (POST `/cancel-silence`).
185
+ - **Snooze sólo aplica si AIS está activo** (no permite snooze durante garreo solo).
186
+
187
+ ### UI / UX
188
+ - **Shelter modal portrait fullscreen REAL** — fix del bug `dvw/dvh` × `zoom: var(--ui-scale)` (gracias Gemini): cambio de unidades `100dvw/100dvh` → `100%/100%` para que se cancelen con el factor zoom del overlay.
189
+ - **Chip numérico de opacidad** encima del thumb del slider: bold 900, font 14px, sombra, oculto durante drag, oculto cuando capa desactivada.
190
+ - **Defaults opacidad** capas: Sat=100, Batimetría=13, IHM=13 (preferencia del usuario).
191
+ - **"SonarChart" → "Batimetría"** (cero referencias comerciales). Variable `_navTokenCache` → `_chTokenCache`, comentarios sanitizados en `src/index.ts`.
192
+ - **Triángulos toggle** sidebars apuntan correctamente al borde donde se esconden.
193
+ - **AIS confirm popup** sin truncar título — popups de confirmación corta excluidos del `_mInjectModalHeader` que cortaba con `white-space:nowrap`.
194
+ - Curvas y Mareas solo en left bar (eliminados duplicados sidebar derecha).
195
+ - TidesView centrado fix (`baseW=825, baseH=890` corregidos).
196
+
197
+ ### i18n
198
+ - Info modal completo (Estado, Fondeado/Anchored, etc.).
199
+ - Menú principal (8 items).
200
+ - Bottom bar (Velocidad/Speed, etc.).
201
+ - AIS popup (Acercamiento/Closing, Ancla est./Est. anchor).
202
+ - Shelter (Detección automática, Escala Exposición, Protección, score popup completo, hist olas).
203
+ - Botón ancla Echar/Drop, Levar/Lift.
204
+ - Back buttons del modal-hdr ‹ Atrás / ‹ Back.
205
+
206
+ ## [2.0.0] - 2026-05-22
207
+
208
+ Salto generacional. Lo que era un plugin de mareas pasa a ser un **visor completo de fondeo** con previsión de abrigo, medición de olas en tiempo real y alarmas en barco y móvil.
209
+
210
+ ### Nuevo
211
+
212
+ **Fondeo seguro**
213
+ - Detección automática de garreo con radio predictivo según la marea.
214
+ - Cálculo de cadena recomendada con dos métodos (tradicional y Vicente).
215
+ - Alarmas configurables: garreo, varada, AIS por proximidad.
216
+ - Track de aproximación al fondeo con gradiente de tiempo.
217
+
218
+ **Previsión de abrigo**
219
+ - Rosa de 16 sectores con detección automática del abrigo según la costa (OpenStreetMap).
220
+ - Grado A-F y porcentaje de protección combinando viento y olas.
221
+ - Strip de 12 h con previsión hora a hora.
222
+ - Resumen "AHORA / PREDICCIÓN" con datos en tiempo real.
223
+
224
+ **Medición de olas en fondeo**
225
+ - Dirección, período y altura de ola medidas a bordo (sensores de actitud y aceleración).
226
+ - Historial de las últimas 24 h.
227
+ - El grado de abrigo se ajusta cuando la ola real supera la prevista.
228
+
229
+ **Sensores en tiempo real**
230
+ - Lectura directa de viento (veleta del barco), temperatura del aire y del agua, presión atmosférica.
231
+ - Etiquetas "Veleta" y "Sensor" para distinguir datos reales de previsión.
232
+ - Fallback automático a Open-Meteo si un sensor falla.
233
+
234
+ **Cartas náuticas integradas**
235
+ - Servidor MBTiles incluido para cargar tus propias cartas en el visor.
236
+
237
+ **Audio mejorado**
238
+ - Voces pregrabadas (OGG) por idioma — más naturales que el sintetizador.
239
+ - Detección automática de la salida de audio del Raspberry Pi.
240
+ - Alarmas distintas por evento (AIS, garreo, varada).
241
+ - Soporte fiable en móvil (incluso con la pestaña en segundo plano).
242
+
243
+ **Mareas IHM**
244
+ - Lista completa actualizada (70 estaciones reales de IHM España).
245
+ - Visor del coeficiente y tendencia (subiendo/bajando) en barra superior.
246
+
247
+ ### Mejoras
248
+
249
+ - Compass cardinal en español (N/NE/E/SE/S/SO/O/NO).
250
+ - Sonda inteligente: cuando se congela o da lecturas absurdas, el visor lo detecta y deja de mostrar valores inventados.
251
+ - Estabilidad mejorada en conexiones débiles (4G/Tailscale).
252
+ - Tolerancia a errores de la API de mareas (no se cuelga con respuestas inesperadas).
253
+
254
+ ### Corregido
255
+
256
+ - Identificadores de estación incorrectos que provocaban errores constantes cuando el plugin arrancaba sin GPS.
257
+ - El visor mostraba "Sonda mínima esperada" obsoleta cuando el sensor de sonda se quedaba congelado.
258
+ - Solapamiento de etiquetas en la rosa cuando viento y oleaje coincidían en dirección.
259
+ - Memoria del navegador a las pocas horas con la capa de viento activa.
260
+
261
+ ---
262
+
263
+ ## [1.3.1] - Versiones anteriores
264
+
265
+ Plugin de mareas IHM España con previsión meteo Open-Meteo y barra de estado superior.
package/README.md CHANGED
@@ -1,7 +1,9 @@
1
- # signalk-mareas-ihm
1
+ # signalk-mareas-ihm — Advanced Anchor Watch Manager
2
2
 
3
3
  **A complete anchor watch and marine safety webapp for Signal K.**
4
- Voice alarms, shelter forecasting, on-board wave measurement, multi-source charts and official Spanish IHM tide predictions — running on your OpenPlotter / Raspberry Pi.
4
+ Intelligent anchor monitoring, voice alarms, AIS anti-collision with cross-session cache, shelter forecast, on-board wave measurement and IHM Spain tides — running on your OpenPlotter / Raspberry Pi.
5
+
6
+ **User-friendly UI designed for fingers in sunlight** — from the bridge Pi to the phone in the cockpit, the whole viewer adapts to your screen, keeping comfortable controls and readable text.
5
7
 
6
8
  🇬🇧 [English](#english) · 🇪🇸 [Español](#espanol)
7
9
 
@@ -11,22 +13,21 @@ Voice alarms, shelter forecasting, on-board wave measurement, multi-source chart
11
13
 
12
14
  ### What you get
13
15
 
14
- A single Signal K plugin that turns your boat computer into a serious **anchor watch** with everything a cruiser actually needs:
15
-
16
- - 🗺️ **Marine charts** — customizable transparencies and multilayer viewer with highly detailed worldwide **Bathymetry** + **Esri Satellite** + **IHM ENC S-52** + **MBTiles charts for offline use** + **OpenStreetMap** + **OpenSeaMap** + **SK Charts plugin integration**
17
- - **Smart anchor watch** with predictive swing radius based on tide and weather
18
- - 🌐 **Real-time multi-device sync** via SSE — phone, tablet and chartplotter all show the same state
19
- - 🚢 **AIS anchoring potential collision watch** drag detection on neighbouring boats with voice alarm and per-target ACK
20
- - 🎙️ **Voice alarms** for anchor drag, AIS collision and grounding (in your language, not synth voices)
21
- - 🏔️ **Shelter forecast** — when anchoring, auto-detection of which sectors are open vs sheltered depending on the current conditions and a 12 h hour-by-hour forecast
22
- - 🌅 **Tide predictions** — official IHM Spain for >70 stations, FES2014 global fallback for anywhere else; open to suggestions for other countries' free official or just reliable tide APIs
23
- - 🌊 **On-board wave measurement** from your IMU (no extra sensor needed)
24
- - 📊 **Sounder calculator** chain, scope, depth, swing prediction
25
- - 🌤️ **Weather forecast** with Open-Meteo (multiple models, sea temperature, wave height & period)
26
- - 🌀 **Windy integration**: access to Windy map and forecast directly from your viewer
27
- - **Windregatta.com integration**: a new and promising cutting-edge free sailing route planner a great discovery!
28
- - 🚀 **Shortcuts to KIP and SK Freeboard** directly from your viewer
29
- - 🇬🇧 🇪🇸 **Fully bilingual UI** (English / Spanish) — switch from the menu
16
+ A single Signal K plugin that turns your boat computer into a serious **anchor watch manager** with everything a cruiser actually needs:
17
+
18
+ - **Smart anchor watch** with predictive swing radius (tide + weather over the next 12 h) and automatic disarm when you leave under engine.
19
+ - 🚢 **AIS anti-collision system** with cross-session cache, list filterable by name/MMSI, configurable radius slider, cross-device favorites, vesselfinder integration and drag detection on neighbouring boats.
20
+ - 🌐 **Real-time multi-device sync** via SSE — phone, tablet and chartplotter all show the same state.
21
+ - 🎙️ **Voice alarms** for drift, AIS collision and grounding (natural OGG voices, not synth).
22
+ - 🏔️ **Shelter forecast** 16-sector wind rose with automatic detection from OSM coastline + breakwaters, A-F grade + 0-100% protection score, 12 h strip, real-time downgrade from on-board vane/IMU.
23
+ - 🌊 **On-board wave measurement** — 24 h history from your IMU (intensity, period, height by 5-minute bins).
24
+ - 📊 **Anchoring calculator** — chain, scope, depth, swing prediction.
25
+ - 🗺️ **Multi-layer chart viewer** world bathymetry + Esri Satellite + IHM ENC S-52 + NOAA ENC (USA) + offline MBTiles + OpenStreetMap + OpenSeaMap + SK Charts integration, all with adjustable transparency.
26
+ - 🌅 **Official IHM Spain tides** (>70 stations) + worldwide FES2014 fallback.
27
+ - 🌤️ **Weather forecast** via Open-Meteo (ICON, GFS, ECMWF, Arome, GEM, JMA).
28
+ - 🌀 **Built-in shortcuts** to Windy, Windregatta.com, KIP, SK Freeboard.
29
+ - 📱 **Works on any screen** — from a phone in hand to the big bridge monitor. The viewer reorders itself and buttons stay the right size for finger-touch use.
30
+ - 🇬🇧 🇪🇸 **Fully bilingual UI** (English / Spanish) switch live from the menu.
30
31
 
31
32
  Runs on **Raspberry Pi** (OpenPlotter), **any Linux box** or **macOS / Windows** with Signal K Server.
32
33
 
@@ -38,31 +39,40 @@ Most anchor watch apps are paid, closed source, single-device and tied to a vend
38
39
  - Runs **on your existing Signal K server** — no extra hardware.
39
40
  - Shows the **same alarm on every device** (phone, tablet, chartplotter, Pi screen).
40
41
  - Uses your **boat's real sensors** (anemometer, depth, IMU) when available; falls back to forecast when not.
41
- - Has **mobile-first UI** that works on phone screens, big monitors and the Pi browser.
42
- - Handles **edge cases** real cruisers hit: AudioContext suspended after backgrounding, browser autoplay blocks, multiple AIS targets in zone, snooze + un-snooze, etc.
42
+ - Has a **user-friendly UI** that scales from the phone to a 4K bridge monitor readable text, finger-sized controls, no clutter.
43
+ - Handles **edge cases** real cruisers hit: cross-session AIS data loss, anchor drag false positives when motoring out, GPS dropout, audio autoplay blocks, multiple AIS targets in zone, snooze + un-snooze, etc.
43
44
 
44
45
  ### Key features in detail
45
46
 
46
47
  #### Anchor watch
47
- - **Predictive swing radius**: combines depth, chain deployed and tide cycle to predict the actual swing area over the next 12 h — not just a static circle.
48
+ - **Predictive swing radius** combining depth, chain deployed and tide cycle for the actual swing area over the next 12 h — not a static circle.
48
49
  - **Two chain calculation methods**: classic ratio and the Vicente method (15 + 2 × depth).
49
50
  - **Drag detection** with audible siren that bypasses user mute for safety.
51
+ - **Auto-disarm when leaving under engine**: if SOG stays above 3 kt for 30 s the watch disarms automatically. No more sirens when you forgot to lift in the app.
50
52
  - **GPS track** with time-gradient colouring so you can see exactly where the boat has been.
51
- - **Favourite anchorages** saved with a custom name (or auto-named from geolocation).
52
-
53
- #### AIS collision watch
54
- - **Voice alarm** when an AIS target enters your swing zone.
55
- - **30 s grace window** before voice starts see the modal first, hit ACK if it's a false positive.
56
- - **Per-target ACK** with timestamp, so silencing one boat doesn't disable the alarm for others.
57
- - **Drag detection on neighbours** if an ACKed boat starts approaching >5 m/min, the alarm re-engages.
53
+ - **Favourite anchorages** saved with a custom name (or auto-named from geolocation), synced across all your devices via the backend.
54
+
55
+ #### AIS anti-collision system
56
+ - **Persistent vessel database** for the last 72 h — name, length, beam, type, callsign, IMO. Boats appearing in the viewer already have their data filled in, no waiting for the next AIS static packet (which can take up to 6 minutes).
57
+ - **5-minute ghost cache** when a target loses VHF reception briefly, it stays visible on the map with a discrete X mark indicating "estimated data".
58
+ - **Configurable radius slider** (0.5–50 km) controls what you see on the map and in the list.
59
+ - **5-criteria sorting**: by distance, name, favourites first, MMSI or vessel type.
60
+ - **Filter box** by name/MMSI with "no results" feedback.
61
+ - **★ Favourites** persisted in the backend, synced across devices.
62
+ - **🔍 vesselfinder button** per row — opens vesselfinder.com in a new tab with IMO + MMSI.
63
+ - **Voice alarm** when a target enters your swing zone; 30 s grace before voice starts.
64
+ - **Per-target ACK** with timestamp; silencing one boat doesn't disable the alarm for others.
65
+ - **Drag detection on neighbours** — if an ACKed boat resumes motion towards you (>0.5 kn + closing >5 m/min), the alarm re-engages.
66
+ - **Click-to-focus**: click any target → the map centres on it, auto-follows it and displays its distance next to the blue selection ring. Click the X on the ring to release.
67
+ - **Vessel-type emoji**: list and popup show ⛵ sailing / 📦 cargo / 🛢️ tanker / 🛳️ passenger etc. at a glance.
58
68
  - **Anchor estimation** for other boats via track centroid analysis.
59
69
 
60
70
  #### Shelter forecasting
61
- - **16-sector wind rose** with automatic open/sheltered detection from OpenStreetMap coastline.
71
+ - **16-sector wind rose** with automatic open/sheltered detection from OpenStreetMap coastline + man-made breakwaters/piers/groynes.
62
72
  - **A–F grade** + **0–100 % protection score** computed from forecast wind in exposed sectors.
63
73
  - **12 h strip** with per-hour grade and peak wind.
64
- - **24 h wave history** from on-board IMU (acceleration RMS by intensity band).
65
- - **Real-time degrade**: if measured wind on the anemometer is higher than the forecast in an exposed sector, the grade is downgraded automatically.
74
+ - **24 h wave history** from on-board IMU (5-minute bins, autoscaling vertical axis up to 2 m).
75
+ - **Real-time downgrade**: if the measured wind on the anemometer is higher than the forecast in an exposed sector, the grade is downgraded automatically.
66
76
 
67
77
  #### Tides
68
78
  - **Official IHM Spain predictions** for >70 stations with annual HAT/LAT and constituent coefficients.
@@ -79,12 +89,12 @@ Most anchor watch apps are paid, closed source, single-device and tied to a vend
79
89
  #### Audio & alarms
80
90
  - **Per-language voice clips (OGG)** — natural, no robotic synth.
81
91
  - **Snooze 5 min** for AIS (anchor drag is never snoozable for safety).
82
- - **60 s user-mute window** — if you mute manually, even garreo cannot override for 60 s.
83
- - **Visibility-aware**: when phone screen wakes from sleep, AudioContext is resumed automatically.
92
+ - **60 s user-mute window** — if you mute manually, even anchor drag cannot override for 60 s.
93
+ - **Visibility-aware**: when phone screen wakes from sleep, the audio context resumes automatically.
84
94
  - **Vibration fallback** on Android when autoplay policy blocks audio.
85
95
 
86
96
  #### Charts & layers
87
- - **Esri Satellite**, **IHM ENC S-52** (Spain official charts), **Bathymetry overlay**, **OpenStreetMap**, **OpenSeaMap** seamarks, **Bing Hybrid**, **Esri Clarity**, **Google Satellite**.
97
+ - **Esri Satellite**, **IHM ENC S-52** (Spain official charts), **NOAA ENC** (USA official charts), **Bathymetry overlay**, **OpenStreetMap**, **OpenSeaMap** seamarks, **Bing Hybrid**, **Esri Clarity**, **Google Satellite**.
88
98
  - **MBTiles offline** — drop your `.mbtiles` files in a folder and they show up automatically.
89
99
  - **Signal K registered charts** — any chart you've registered with Signal K appears as a layer.
90
100
  - **Per-layer opacity slider** with default values you can tweak.
@@ -157,26 +167,27 @@ Apache 2.0. Derived from `signalk-tides` (Brandon Keepers, Joachim Bakke, Scott
157
167
 
158
168
  ## Español
159
169
 
160
- Plugin de Signal K que convierte tu OpenPlotter / Raspberry Pi en una **webapp completa de anchor watch y seguridad marina**: alarmas de voz, previsión de abrigo, medición de olas a bordo, cartas náuticas multi-fuente y mareas oficiales del IHM (Instituto Hidrográfico de la Marina) de España.
170
+ Plugin de Signal K que convierte tu OpenPlotter / Raspberry Pi en un **gestor avanzado de fondeo y seguridad marina**: vigilancia inteligente del ancla, alarmas de voz, sistema AIS anti-colisión con cache persistente entre sesiones, previsión de abrigo, medición de olas a bordo y mareas oficiales del IHM de España.
171
+
172
+ **Interfaz user-friendly diseñada para usar con dedos a la luz del sol** — del Pi del puente al móvil en la bañera, todo el visor se adapta a tu pantalla manteniendo controles cómodos y textos legibles.
161
173
 
162
174
  ### Qué te llevas
163
175
 
164
- Un único plugin de Signal K que convierte el ordenador del barco en un **anchor watch serio** con todo lo que un navegante de verdad necesita:
165
-
166
- - 🗺️ **Cartas náuticas** transparencias configurables y visor multicapa con **Batimetría mundial de alto detalle** + **Satélite Esri** + **IHM ENC S-52** + **MBTiles para uso offline** + **OpenStreetMap** + **OpenSeaMap** + **integración con plugin SK Charts**
167
- - **Anchor watch inteligente** con radio de borneo predictivo según marea y meteo
168
- - 🌐 **Sincronización multi-dispositivo en tiempo real** vía SSE — móvil, tablet y chartplotter muestran el mismo estado
169
- - 🚢 **Vigilancia de colisión AIS al fondear** detección de garreo en barcos vecinos con alarma de voz y ACK por target
170
- - 🎙️ **Alarmas de voz** para garreo, colisión AIS y varada (en tu idioma, no voz sintética)
171
- - 🏔️ **Previsión de abrigo** — al fondear, autodetección de qué sectores están abiertos vs abrigados según las condiciones actuales y previsión hora a hora durante 12 h
172
- - 🌅 **Mareas oficiales** — IHM España para >70 estaciones, fallback global FES2014 para el resto del mundo; abierto a sugerencias de otras APIs oficiales gratuitas o fiables
173
- - 🌊 **Medición de olas a bordo** desde tu IMU (sin sensor extra)
174
- - 📊 **Calculadora de fondeo** cadena, scope, sonda, predicción de borneo
175
- - 🌤️ **Previsión meteo** con Open-Meteo (varios modelos, temperatura del mar, altura y período de ola)
176
- - 🌀 **Integración Windy**: acceso al mapa y previsión de Windy directamente desde el visor
177
- - **Integración Windregatta.com**: un nuevo y prometedor planificador de rutas a vela libre y muy puntero ¡un gran descubrimiento!
178
- - 🚀 **Accesos directos a KIP y SK Freeboard** desde el propio visor
179
- - 🇬🇧 🇪🇸 **UI bilingüe completa** (Inglés / Español) — cambio desde el menú
176
+ Un único plugin de Signal K que convierte el ordenador del barco en un **gestor avanzado de fondeo** con todo lo que un navegante de verdad necesita:
177
+
178
+ - **Vigilancia inteligente del ancla** con radio de borneo predictivo (marea + meteo en próximas 12 h) y auto-desarme al salir a motor.
179
+ - 🚢 **Sistema AIS anti-colisión** con cache persistente entre sesiones, lista filtrable por nombre/MMSI, slider de radio configurable, favoritos cross-device, integración vesselfinder y detección de garreo en barcos vecinos.
180
+ - 🌐 **Sincronización multi-dispositivo en tiempo real** vía SSE — móvil, tablet y chartplotter muestran el mismo estado.
181
+ - 🎙️ **Alarmas de voz** para garreo, colisión AIS y varada (voces naturales OGG, no sintéticas).
182
+ - 🏔️ **Previsión de abrigo** rosa de 16 sectores con auto-detección desde costa OSM + escolleras, grado A-F + 0-100% protección, strip 12 h, degradación en tiempo real por veleta/IMU.
183
+ - 🌊 **Medición de olas a bordo** — historial 24 h desde el IMU (intensidad/período/altura por bin de 5 min).
184
+ - 📊 **Calculadora de fondeo** — cadena, scope, sonda, predicción de borneo.
185
+ - 🗺️ **Visor de cartas multicapa** Batimetría mundial + Esri Satélite + IHM ENC S-52 + NOAA ENC (EE.UU.) + MBTiles offline + OpenStreetMap + OpenSeaMap + SK Charts, con transparencias ajustables.
186
+ - 🌅 **Mareas oficiales IHM España** (>70 estaciones) + fallback global FES2014.
187
+ - 🌤️ **Previsión meteo** Open-Meteo (ICON, GFS, ECMWF, Arome, GEM, JMA).
188
+ - 🌀 **Atajos integrados** a Windy, Windregatta.com, KIP, SK Freeboard.
189
+ - 📱 **Versátil en cualquier pantalla** desde el móvil en mano hasta el monitor grande del puente. El visor se reordena solo y los botones se mantienen del tamaño adecuado para tocar sin equivocarte.
190
+ - 🇬🇧 🇪🇸 **UI bilingüe** con cambio en vivo desde el menú.
180
191
 
181
192
  Funciona en **Raspberry Pi** (OpenPlotter), **cualquier Linux** o **macOS / Windows** con Signal K Server.
182
193
 
@@ -188,30 +199,39 @@ La mayoría de apps de anchor watch son de pago, código cerrado, un solo dispos
188
199
  - Corre en tu **Signal K Server existente** — sin hardware extra.
189
200
  - Muestra la **misma alarma en todos los dispositivos** (móvil, tablet, plotter, pantalla del Pi).
190
201
  - Usa los **sensores reales del barco** (veleta, sonda, IMU) cuando están; cae a previsión si no.
191
- - Tiene **UI mobile-first** que funciona en móvil, monitor grande y el navegador del Pi.
192
- - Maneja los **casos límite** que sufre el navegante real: AudioContext suspendido tras background, bloqueo de autoplay del navegador, múltiples targets AIS en zona, snooze + un-snooze, etc.
202
+ - Tiene **UI user-friendly** que escala del móvil al monitor 4K del puente textos legibles, controles del tamaño del dedo, sin desorden visual.
203
+ - Maneja los **casos límite** que sufre el navegante real: pérdida de datos AIS entre sesiones, falso positivo de garreo al salir motorizado, caída de GPS, bloqueo de autoplay del navegador, múltiples targets AIS en zona, snooze + un-snooze, etc.
193
204
 
194
205
  ### Funcionalidades en detalle
195
206
 
196
- #### Anchor watch
207
+ #### Vigilancia de fondeo
197
208
  - **Radio de borneo predictivo**: combina sonda, cadena largada y ciclo de marea para predecir el área real de borneo en las próximas 12 h — no un círculo estático.
198
209
  - **Dos métodos de cálculo de cadena**: ratio clásico y método Vicente (15 + 2 × sonda).
199
210
  - **Detección de garreo** con sirena audible que bypassa el mute del usuario por seguridad.
211
+ - **Auto-desarme al salir a motor**: si el SOG se mantiene >3 kn durante 30 s, la vigilancia se desarma sola. No más sirenas cuando olvidas "levar" en la app.
200
212
  - **Track GPS** con coloreado por gradiente temporal para ver exactamente por dónde ha pasado el barco.
201
- - **Fondeos favoritos** guardados con nombre personalizado (o auto-nombrados por geolocalización).
202
-
203
- #### Vigilancia de colisión AIS
204
- - **Alarma de voz** cuando un target AIS entra en tu zona de borneo.
205
- - **30 s de gracia** antes de que arranque la voz ves el modal primero, ACK si es falso positivo.
206
- - **ACK por target** con timestamp, así silenciar un barco no desactiva la alarma para otros.
207
- - **Detección de garreo en vecinos** si un barco ya ACKeado empieza a acercarse >5 m/min, la alarma se reactiva.
213
+ - **Fondeos favoritos** guardados con nombre personalizado (o auto-nombrados por geolocalización), sincronizados entre todos tus dispositivos vía backend.
214
+
215
+ #### Sistema AIS anti-colisión
216
+ - **Base de datos persistente de barcos** durante las últimas 72 h — nombre, eslora, manga, tipo, callsign, IMO. Los barcos aparecen ya con sus datos sin esperar al próximo paquete AIS estático (que tarda hasta 6 minutos).
217
+ - **Cache fantasma de 5 minutos** cuando un target pierde recepción VHF brevemente, sigue visible en el mapa con una X discreta indicando "datos estimados".
218
+ - **Slider de radio configurable** (0.5–50 km) controla qué barcos ves en mapa y en lista.
219
+ - **5 criterios de ordenación**: distancia, nombre, favoritos primero, MMSI o tipo de barco.
220
+ - **Caja de filtro** por nombre/MMSI con feedback "Sin resultados".
221
+ - **★ Favoritos** persistidos en el backend, sincronizados entre dispositivos.
222
+ - **🔍 Botón vesselfinder** por fila — abre vesselfinder.com en una pestaña nueva con IMO + MMSI.
223
+ - **Alarma de voz** cuando un target entra en tu zona de borneo; 30 s de gracia antes de que arranque la voz.
224
+ - **ACK por target** con timestamp; silenciar un barco no desactiva la alarma para otros.
225
+ - **Detección de garreo en vecinos** — si un barco ya ACKeado reanuda movimiento hacia ti (>0.5 kn + acercamiento >5 m/min), la alarma se reactiva.
226
+ - **Click-to-focus**: click en cualquier target → el mapa lo centra, lo sigue y muestra su distancia junto al aro azul de selección. Click en la X del aro para soltar.
227
+ - **Emoji por tipo**: lista y popup muestran ⛵ velero / 📦 carga / 🛢️ tanque / 🛳️ pasaje, etc. a primera vista.
208
228
  - **Estimación del ancla** de otros barcos vía análisis de centroide del track.
209
229
 
210
230
  #### Previsión de abrigo
211
- - **Rosa de 16 sectores** con detección automática abierto/abrigado desde la línea de costa de OpenStreetMap.
231
+ - **Rosa de 16 sectores** con detección automática abierto/abrigado desde la línea de costa de OpenStreetMap + escolleras/muelles man-made.
212
232
  - **Grado A-F** + **% de protección 0-100** calculado desde el viento previsto en sectores expuestos.
213
233
  - **Strip de 12 h** con grado por hora y viento pico.
214
- - **Historial de olas 24 h** desde el IMU a bordo (RMS de aceleración por banda de intensidad).
234
+ - **Historial de olas 24 h** desde el IMU a bordo (bins de 5 minutos, eje vertical autoescalable hasta 2 m).
215
235
  - **Degradación en tiempo real**: si el viento medido por la veleta es mayor que el previsto en un sector expuesto, el grado baja automáticamente.
216
236
 
217
237
  #### Mareas
@@ -230,11 +250,11 @@ La mayoría de apps de anchor watch son de pago, código cerrado, un solo dispos
230
250
  - **Clips de voz por idioma (OGG)** — naturales, no síntesis robótica.
231
251
  - **Snooze 5 min** para AIS (garreo nunca es snoozable por seguridad).
232
252
  - **Ventana mute-usuario 60 s** — si silencias manualmente, ni el garreo crítico puede reactivar el audio durante 60 s.
233
- - **Consciente de visibilidad**: cuando la pantalla del móvil despierta, el AudioContext se reanuda automáticamente.
253
+ - **Consciente de visibilidad**: cuando la pantalla del móvil despierta, el audio se reanuda automáticamente.
234
254
  - **Vibración fallback** en Android cuando la política de autoplay bloquea el audio.
235
255
 
236
256
  #### Cartas y capas
237
- - **Satélite Esri**, **IHM ENC S-52** (cartas oficiales España), **Batimetría**, **OpenStreetMap**, **OpenSeaMap** señalización marítima, **Bing Hybrid**, **Esri Clarity**, **Google Satélite**.
257
+ - **Satélite Esri**, **IHM ENC S-52** (cartas oficiales España), **NOAA ENC** (cartas oficiales EE.UU.), **Batimetría**, **OpenStreetMap**, **OpenSeaMap** señalización marítima, **Bing Hybrid**, **Esri Clarity**, **Google Satélite**.
238
258
  - **MBTiles offline** — pon tus archivos `.mbtiles` en una carpeta y aparecen automáticamente.
239
259
  - **Cartas registradas en Signal K** — cualquier carta registrada con Signal K aparece como capa.
240
260
  - **Slider de opacidad por capa** con valores por defecto editables.