# signalk-mareas-ihm

🇪🇸 [Español](#español) · 🇬🇧 [English](#english)

---

## Español

Plugin de Signal K que convierte tu OpenPlotter / Raspberry Pi en un **visor completo de fondeo**: mareas oficiales del **IHM (Instituto Hidrográfico de la Marina)**, previsión de abrigo, medición de olas a bordo, alarmas inteligentes y soporte para domótica.

### Características principales

#### Mareas
- **Predicción de mareas** automática por GPS o selección manual entre 70 estaciones del IHM.
- **Curvas de marea interactivas** con HAT/LAT anuales, cursor y etiquetas de pleamar/bajamar.
- **Coeficientes oficiales IHM** con descarga automática.
- **Caché offline** de al menos 2 meses de predicciones.
- **Tendencia y coeficiente** visibles en la barra superior del visor.

#### Previsión de abrigo
- **Rosa de 16 sectores** con detección automática del abrigo según la costa (OpenStreetMap).
- **Grado A-F y porcentaje de protección** combinando viento y olas previstos.
- **Strip de exposición** próximas 12 h con previsión hora a hora.
- **Resumen "AHORA / PREDICCIÓN"** con datos en tiempo real de sensores y previsión.
- **Edición manual** de sectores cuando el detector automático no convence.

#### Medición de olas en fondeo
- **Dirección, período y altura** de ola calculados a bordo desde sensores de actitud y aceleración (pypilot IMU u otros compatibles).
- **Historial de las últimas 24 h** en barras de 15 minutos.
- **El grado de abrigo se ajusta automáticamente** cuando la ola medida supera la prevista.

#### Visor de fondeo
- **Mapa Leaflet** con posición GPS en tiempo real y capas múltiples (ESRI, Bing, Google, IHM S-52, SonarChart, MBTiles offline).
- **Anchor Watch** con alarma de garreo visual y sonora.
- **Cadena largada** con slider bidireccional y cálculo automático (métodos tradicional y Vicente).
- **Radio de borneo y alarma** con etiquetas en la carta y predicción según marea.
- **Sincronización multi-dispositivo** en tiempo real (SSE).
- **Cartas náuticas locales** vía servidor MBTiles integrado.

#### Sensores en tiempo real
- Lectura directa de **viento (veleta)**, **temperatura aire/agua** y **presión atmosférica** de Signal K.
- Etiquetas **"Veleta"** y **"Sensor"** distinguen datos reales de previsión.
- **Fallback automático a Open-Meteo** cuando un sensor falla.
- **Sonda inteligente**: detecta congelación / spikes / valores absurdos y deja de mostrar lecturas inventadas.

#### AIS inteligente
- **Detección de colisión** con targets AIS en zona de borneo.
- **ACK por target individual** — silencia alarma de un barco sin desactivar la alarma general.
- **Detección de garreo ajeno** — si un target ACKed se acerca >2 m/min, la alarma se reactiva.
- **Estimación de ancla** de otros barcos mediante análisis de track (centroide + radio máximo).

#### Alarmas y audio
- **Alarmas independientes**: garreo, varada, AIS y sonda con control individual.
- **Voces pregrabadas (OGG)** por idioma — más naturales que el sintetizador.
- **Detección automática** de la salida de audio del Raspberry Pi (USB → analog → HDMI).
- **Soporte móvil** fiable (audio funciona incluso con la pestaña en segundo plano).
- **Patrones distintos** por evento ("tuc tuc tuc" para AIS, sirena para garreo, etc.).

#### Domótica / KIP
- **Botones KIP** para fondear/levar y activar/desactivar alarmas.
- **Endpoints REST** para Alexa, Google Home, Node-RED, MQTT.
- **Endpoint toggle** para mandos a distancia con un solo botón.

#### Bilingüe completo
- Interfaz en **español e inglés** en todas las vistas.
- Compass cardinal en español correcto (N/NE/E/SE/S/SO/O/NO).
- Banderas de idioma en la barra inferior del visor.

### URLs

| URL | Función |
|-----|---------|
| `/signalk-mareas-ihm/` | Landing — selector Mareas / Visor de Fondeo |
| `/signalk-mareas-ihm/mareas` | Vista de Mareas (directo) |
| `/signalk-mareas-ihm/visorfondeo` | Visor de Fondeo (directo) |

### Domótica — Endpoints REST

```bash
# Fondear/Levar con un solo botón
curl -X POST http://openplotter.local:3000/signalk-mareas-ihm/api/anchor-watch/toggle

# Fondear en posición GPS actual
curl -X POST http://openplotter.local:3000/signalk-mareas-ihm/api/anchor-watch/drop

# Levar ancla
curl -X POST http://openplotter.local:3000/signalk-mareas-ihm/api/anchor-watch/lift

# Estado simple (para monitorización)
curl http://openplotter.local:3000/signalk-mareas-ihm/api/anchor-watch/simple
```

### KIP — Paths para Boolean Control

| Path | Función |
|------|---------|
| `environment.anchor.mareasIhm.anchorCommand` | Fondear (true) / Levar (false) |
| `environment.anchor.mareasIhm.garreoAlarmCommand` | Alarma garreo ON/OFF |
| `environment.anchor.mareasIhm.aisAlarmCommand` | Alarma AIS ON/OFF |

### Instalación

Desde el **Signal K Appstore**: buscar `signalk-mareas-ihm` e instalar.

O por línea de comandos:

```bash
cd ~/.signalk
npm install signalk-mareas-ihm@latest --save
sudo systemctl restart signalk
```

---

## English

Signal K plugin that turns your OpenPlotter / Raspberry Pi into a **complete anchor watch viewer**: official Spanish tides from **IHM (Instituto Hidrográfico de la Marina)**, shelter forecast, on-board wave measurement, smart alarms and home automation support.

### Main Features

#### Tides
- **Automatic tide prediction** by GPS or manual selection among 70 IHM stations.
- **Interactive tide curves** with annual HAT/LAT, cursor and high/low tide labels.
- **Official IHM coefficients** with automatic download.
- **Offline cache** of at least 2 months of predictions.
- **Tendency and coefficient** visible in the viewer's top bar.

#### Shelter forecast
- **16-sector rose** with automatic shelter detection from coastline (OpenStreetMap).
- **Grade A-F and protection percentage** combining forecast wind and waves.
- **12 h exposure strip** with hourly forecast.
- **"NOW / FORECAST" summary** with real-time sensor and forecast data.
- **Manual sector override** when the automatic detector is wrong.

#### On-board wave measurement
- **Direction, period and height** of waves computed on board from attitude and acceleration sensors (pypilot IMU or compatible).
- **24 h history** in 15-minute bars.
- **Shelter grade auto-adjusts** when measured wave exceeds forecast.

#### Anchor watch viewer
- **Leaflet map** with real-time GPS position and multiple layers (ESRI, Bing, Google, IHM S-52, SonarChart, offline MBTiles).
- **Anchor Watch** with visual and audible drag alarm.
- **Chain deployed** with bidirectional slider and automatic calculation (traditional and Vicente methods).
- **Swing and alarm radius** with chart labels and tide-aware prediction.
- **Multi-device real-time sync** (SSE).
- **Local nautical charts** via integrated MBTiles server.

#### Real-time sensors
- Direct reading of **wind (anemometer)**, **air/water temperature** and **atmospheric pressure** from Signal K.
- **"Veleta"** and **"Sensor"** badges distinguish real data from forecast.
- **Automatic Open-Meteo fallback** when a sensor drops.
- **Smart depth sounder**: detects frozen / spike / absurd values and stops showing made-up readings.

#### Smart AIS
- **Collision detection** with AIS targets in swing zone.
- **Per-target ACK** — silence alarm for one boat without disabling the general alarm.
- **External dragging detection** — if an ACKed target approaches >2 m/min, alarm reactivates.
- **Anchor estimation** for other boats via track analysis (centroid + max radius).

#### Alarms and audio
- **Independent alarms**: drag, grounding, AIS and depth with individual control.
- **Pre-recorded voices (OGG)** per language — more natural than synthesizer.
- **Automatic detection** of Raspberry Pi audio output (USB → analog → HDMI).
- **Reliable mobile support** (audio works even when the tab is in background).
- **Distinct patterns** per event (rapid beep for AIS, siren for drag, etc.).

#### Home Automation / KIP
- **KIP buttons** for drop/lift and alarm enable/disable.
- **REST endpoints** for Alexa, Google Home, Node-RED, MQTT.
- **Toggle endpoint** for single-button remote controls.

#### Full Bilingual
- Interface in **Spanish and English** across all views.
- Correct Spanish cardinal compass (N/NE/E/SE/S/SO/O/NO).
- Language flags in the viewer's bottom bar.

### URLs

| URL | Function |
|-----|----------|
| `/signalk-mareas-ihm/` | Landing — Tides / Anchor Watch selector |
| `/signalk-mareas-ihm/mareas` | Tides view (direct) |
| `/signalk-mareas-ihm/visorfondeo` | Anchor Watch Viewer (direct) |

### Home Automation — REST Endpoints

```bash
# Drop/Lift with single button
curl -X POST http://openplotter.local:3000/signalk-mareas-ihm/api/anchor-watch/toggle

# Drop anchor at current GPS
curl -X POST http://openplotter.local:3000/signalk-mareas-ihm/api/anchor-watch/drop

# Lift anchor
curl -X POST http://openplotter.local:3000/signalk-mareas-ihm/api/anchor-watch/lift

# Simple status (for monitoring)
curl http://openplotter.local:3000/signalk-mareas-ihm/api/anchor-watch/simple
```

### Installation

From the **Signal K Appstore**: search `signalk-mareas-ihm` and install.

Or via command line:

```bash
cd ~/.signalk
npm install signalk-mareas-ihm@latest --save
sudo systemctl restart signalk
```

---

© IHM — Official data from Spain's Instituto Hidrográfico de la Marina
