signalk-pypilot-newui 2.3.0 → 2.4.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 CHANGED
@@ -1,5 +1,215 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.4.1 — 2026-09-08 — Rev146..Rev153
4
+
5
+ Patch release. Fixes + UI polish on top of 2.4.0.
6
+
7
+ ### English
8
+
9
+ **Fixed**
10
+
11
+ - **TWS row in Sensor Quality no longer stuck as MISSING** on plain SK
12
+ setups. `environment.wind.speedTrue` (canonical) is rarely populated;
13
+ the canonical row now accepts `.speedOverGround` (what
14
+ `signalk-derived-data` emits) or `.speedOverWater` as alternatives.
15
+ Same treatment for TWA (`.angleTrueWater` / `.angleTrueGround` /
16
+ `.angleTrue`). Rev146-148.
17
+ - **Regression: AP mode selector went blank** after the Rev140 watch
18
+ refactor - `RESERVED_PYPILOT_KEYS` was blocking subscribe too, when
19
+ it should only block re-publish. Restored so the visor keeps
20
+ `ap.enabled/mode/heading_command` in sync. Rev142.
21
+ - **Watch focus was pinning 60+ keys** on `pypilot_web` when the Setup
22
+ launcher was open. Rev149-150: the launcher grid takes NO focus;
23
+ only the Calibration card (fullscreen) bumps the 7 documented
24
+ sliders. Empty focus now triggers explicit release, so the count
25
+ drops back to the ~15 core watches immediately instead of waiting
26
+ for the 60 s TTL. Well under Sean D'Epagnier's 40-path ceiling.
27
+ - **`[current]` prefix in Pi Zero log capture** replaced with the
28
+ parent directory (`[pypilot]`, `[pypilot_web]`, `[pypilot_hat]`) so
29
+ the merged file is actually readable. Rev149.
30
+
31
+ **Changed**
32
+
33
+ - **Rose colour palette (Carlos)**: Target/DIA diamond is now red
34
+ (`--target-red`, matches the AP engage button); AWS/TWS chip below
35
+ the rose is fully tinted amber for apparent, teal for true; corner
36
+ tiles tint value + sub in the matching wind colour; SOG back to
37
+ white; Rev151-152.
38
+ - **Configure-corners modal** — h4 + close button now sticky at the
39
+ top, body scrolls independently. X on the LEFT with the solid red
40
+ `--engaged` style used by the Setup fullscreen cards. Rev151-153.
41
+ - **Mode selector labels re-render on language change**: switching
42
+ language now redraws mode / pilot / profile selects immediately
43
+ instead of waiting for the next backend delta. Rev144.
44
+
45
+ ## 2.4.0 — 2026-09-07 — Rev138..Rev145
46
+
47
+ Feature release. The plugin has learnt to behave itself around the
48
+ Pi Zero (following direct advice from Sean D'Epagnier, pypilot author)
49
+ and now speaks the sailor's language instead of pilot-programmer
50
+ jargon.
51
+
52
+ ### English
53
+
54
+ **Added**
55
+
56
+ - **Dynamic watch focus (Rev140..Rev141)** — the old policy kept ~170
57
+ pypilot subscriptions pinned to `pypilot_web`, which pressured the
58
+ Pi Zero W and eventually locked its socket buffer. The backend now
59
+ keeps a minimal always-on core (~15 paths, 1-2 Hz) and accepts
60
+ short-lived focus requests from the visor: Tune bumps the gain
61
+ paths only while it is on screen, same for the Calibration
62
+ sliders. TTL expires when the tab closes. New endpoints
63
+ `/watch/focus`, `/watch/release`, `/watch/status`, a live inspector
64
+ in Setup → Remote Control Console, and a `Restart pypilot_web`
65
+ button that runs `sv restart pypilot_web` via SSH.
66
+ - **Navigation session recorder + advice loop (Rev143)** — every
67
+ engaged AP session is now saved as JSONL to
68
+ `~/.signalk/plugin-config-data/signalk-pypilot-newui/nav-sessions/`.
69
+ Users label conditions (wind / sea / motor / point of sail / crew)
70
+ from a modal in Setup → Doctor, share the file via WhatsApp or
71
+ email, receive an "advice" JSON back and upload it - the visor
72
+ renders it as a "Consejos recibidos" card. First step of the
73
+ AI-tuned Doctor roadmap: no AI runs at runtime, learning happens
74
+ off-boat and gets injected as plain heuristics in later Revs.
75
+ - **Pi Zero log capture (Rev138)** — piCore keeps `/var/log` in
76
+ tmpfs, so a hard reset wipes the previous session's logs. New
77
+ opt-in poller SSHes into the Pi Zero on a configurable cadence,
78
+ tails `/var/log/pypilot/*` and appends new lines to a persistent
79
+ daily file on the Pi 5. Toggle + downloader live in the Remote
80
+ Control Console.
81
+ - **Plain-language help for every gain (Rev139)** — every P / I / D
82
+ / DD / PR / FF slider in Tune and every documented RangeSetting in
83
+ Setup → Calibration now carries a short "what it does" line plus a
84
+ `?` button that expands into "when to raise, when to lower". EN /
85
+ ES / DE / FR. Aligned with Sean's own forum suggestion.
86
+ - **Doctor findings and summary translated (Rev136)** — backend now
87
+ emits i18n keys with args so the whole Doctor panel reads in the
88
+ active language instead of half English / half Spanish.
89
+ - **Alarm engine i18n (Rev135..Rev136)** — the seven built-in rules
90
+ (heading-deviation, unable-to-steer, servo-overcurrent,
91
+ servo-temp-high, low-voltage, sensor-lost, pypilot-disconnected)
92
+ render banners and speak in the active language. The backend still
93
+ ships English strings on `notifications.autopilot.*` for
94
+ KIP / WilhelmSK compatibility.
95
+ - **Mode selector proper i18n + uppercase tabs (Rev142, Rev144)** —
96
+ `compass`, `wind`, `true wind`, `nav` and the plugin's own
97
+ `aproado` render as translated UPPERCASE labels ("COMPAS", "VIENTO
98
+ APARENTE", "APROADO"). Tab labels are UPPERCASE too so accents
99
+ become optional (RAE convention). Language switch now refreshes
100
+ the mode selector and gain help lines immediately.
101
+ - **Doctor - persistent Hide button (Rev135..Rev136)** — the discard
102
+ action stays visible even after a suggestion has been applied,
103
+ the tile chip mirrors the count.
104
+ - **Setup launcher - live status chips (Rev130..Rev135)** — pypilot
105
+ host+port, active language, calibration last-adjust timestamp
106
+ (with a Reset button), count of active SK sentences vs the plugin
107
+ catalogue total, and an SSH-configured pill on Remote Control
108
+ Console. Sensor Quality gains a per-row Ignore / Restore button so
109
+ a sensor absent from the boat (rudder feedback missing, ...)
110
+ stops turning the chip red.
111
+ - **Chart hover freeze + per-band Y axis (Rev129)** — touch or hover
112
+ to freeze the auto-refresh and read the exact value at that point
113
+ for every band. Min / mid / max ticks in the right gutter.
114
+ - **Tune - per-slider ↺ restore + profile-fork prompt (Rev129,
115
+ Rev132..Rev134)** — snap back to the frozen "was:" baseline, or
116
+ save the change in a new `tune-YYYYMMDD-HHMM` fork on first
117
+ unlock, or Cancel and revert.
118
+ - **Nav bar slide-down gesture (Rev129)** — swipe from the top to
119
+ bring the tab bar back, counterpart to the existing slide-up hide.
120
+
121
+ **Changed**
122
+
123
+ - The `RESERVED_PYPILOT_KEYS` set now only blocks publish, not
124
+ subscribe. Rev141 regression fix: `ap.mode`, `ap.enabled`,
125
+ `ap.heading_command` are needed internally to sync with the SK
126
+ Autopilot API v2.
127
+ - All six screenshots refreshed to match the current UI.
128
+
129
+ ### Español
130
+
131
+ **Añadido**
132
+
133
+ - **Watch focus dinámico** — el plugin mantiene un núcleo mínimo
134
+ suscrito (~15 keys, 1-2 Hz) y sube el rate solo mientras haya una
135
+ pestaña que necesite ver esos valores. Sigue la recomendación de
136
+ Sean D'Epagnier: pypilot_web se satura si le mandas ~170
137
+ suscripciones constantes. Nuevos endpoints, inspector en vivo y
138
+ botón "Reiniciar pypilot_web" en la consola remota.
139
+ - **Grabador de sesiones + loop de consejos** — cada sesión con el
140
+ AP enganchado se guarda como JSONL. Etiquetas por condiciones
141
+ (viento / mar / propulsión / rumbo / tripulación), botón compartir
142
+ por WhatsApp, y subida del JSON de consejos que se recibe de
143
+ vuelta. Primer paso del "Doctor afinado por IA": la IA no corre
144
+ en tiempo real, aprende offline y sus heurísticas se inyectan
145
+ como código en las próximas Revs.
146
+ - **Captura de logs Pi Zero** — piCore guarda `/var/log` solo en
147
+ RAM, un hard reset borra el historial. Toggle en la consola
148
+ remota que hace SSH cada N segundos y guarda los logs en un
149
+ archivo persistente del Pi 5.
150
+ - **Explicaciones "en cristiano" para cada ganancia** — P / I / D /
151
+ DD / PR / FF más los sliders principales de Calibration llevan
152
+ una línea corta con qué hace y un `?` que expande "cuándo subir,
153
+ cuándo bajar". EN / ES / DE / FR.
154
+ - **Doctor + alarmas en tu idioma** — findings, summary y las siete
155
+ reglas de alarma ahora se traducen en el visor. El backend sigue
156
+ enviando inglés al SK para KIP / WilhelmSK.
157
+ - **Selector de modo traducido en MAYÚSCULAS** — "COMPAS", "VIENTO
158
+ APARENTE", "VIENTO REAL", "APROADO", ... con jerga marinera. Las
159
+ pestañas también en MAYÚSCULAS para que la tilde sea opcional.
160
+ - **Doctor - botón Ocultar siempre visible** — no se atasca la
161
+ lista de sugerencias aunque ya las hayas aplicado.
162
+ - **Setup - chips vivos en cada tile** — host + puerto TinyPilot,
163
+ idioma activo, fecha del último ajuste de calibración, sentencias
164
+ SK activas y SSH configurado.
165
+ - **Sensor Quality con Ignorar / Restaurar por fila** — para
166
+ sensores que no existen en el barco (por ejemplo el timón sin
167
+ feedback).
168
+ - **Chart con freeze al pasar el cursor + escala Y por banda**.
169
+ - **Tune con ↺ por slider + fork de perfil al primer cambio**.
170
+ - **Slide desde arriba para mostrar la barra de pestañas**.
171
+
172
+ **Cambiado**
173
+
174
+ - Regresión Rev141 corregida: `RESERVED_PYPILOT_KEYS` bloquea
175
+ solo publish, no subscribe. El selector de modo del AP vuelve
176
+ a poblarse correctamente.
177
+ - 6 screenshots actualizados a la UI actual.
178
+
179
+ ### Deutsch
180
+
181
+ **Neu**
182
+
183
+ - Dynamischer Watch-Fokus, entlastet pypilot_web auf dem Pi Zero.
184
+ - Sitzungs-Rekorder + Ratschlag-Loop (JSONL pro Engage).
185
+ - Pi Zero Log-Capture (persistiert /var/log auf dem Pi 5).
186
+ - Klartext-Hilfe pro Gain-Slider.
187
+ - Doctor + Alarme in aktiver Sprache.
188
+ - Modus-Auswahl uebersetzt in GROSSBUCHSTABEN.
189
+ - Doctor: Verwerfen bleibt sichtbar.
190
+ - Setup-Kacheln zeigen Live-Status.
191
+ - Sensor Quality: Ignorieren pro Zeile.
192
+ - Chart: Hover-Freeze + Y-Achse pro Band.
193
+ - Tune: ↺ pro Slider + Fork-Dialog.
194
+ - Wisch-von-oben blendet Tab-Leiste ein.
195
+
196
+ ### Français
197
+
198
+ **Nouveautés**
199
+
200
+ - Focus d'abonnements dynamique, allege pypilot_web sur le Pi Zero.
201
+ - Enregistreur de sessions + boucle de conseils (JSONL par engage).
202
+ - Capture des logs Pi Zero sur le Pi 5.
203
+ - Aide en clair par slider de gain.
204
+ - Doctor et alarmes dans la langue active.
205
+ - Selecteur de mode traduit en MAJUSCULES.
206
+ - Doctor: bouton Masquer toujours visible.
207
+ - Puces de statut vivantes sur chaque tuile Setup.
208
+ - Sensor Quality avec Ignorer / Restaurer par ligne.
209
+ - Chart: figeage au survol + graduation Y par bande.
210
+ - Tune: ↺ par slider + modal de fork de profil.
211
+ - Glissement du haut vers le bas pour reafficher la barre d'onglets.
212
+
3
213
  ## 2.3.0 — 2026-08-31 — Rev130..Rev137
4
214
 
5
215
  Feature batch on top of 2.2.x. Themes: make the visor speak the user's
package/README.md CHANGED
@@ -23,6 +23,81 @@ by Panaaj — see [Working alongside pypilot-autopilot-provider](#working-alongs
23
23
  |---|---|
24
24
  | ![Race tab](https://raw.githubusercontent.com/Aitonos/signalk-pypilot-newui/main/public/screenshots/05-race-timer.jpg) | ![Info tab](https://raw.githubusercontent.com/Aitonos/signalk-pypilot-newui/main/public/screenshots/06-info.jpg) |
25
25
 
26
+ ## What's new in 2.4.0
27
+
28
+ Feature release. The plugin has learnt to behave itself around the Pi
29
+ Zero and now speaks the sailor's language instead of pilot-programmer
30
+ jargon. The rework was driven by direct feedback from **Sean D'Epagnier**
31
+ (pypilot author) on how his `pypilot_web` handles a firehose of
32
+ subscriptions, and by field observations from Carlos on Tunatunes.
33
+
34
+ - **Dynamic watch focus (per Sean D'Epagnier's advice)** — before, the
35
+ plugin permanently subscribed ~170 pypilot values, which pressured
36
+ `pypilot_web` on the Pi Zero W and eventually locked its socket
37
+ buffer. Now the backend keeps a minimal always-on "core" set (~15
38
+ paths) and accepts short-lived `focus` requests from the visor: the
39
+ Tune tab bumps its gain paths to 2 Hz only while it is on screen,
40
+ same for the Calibration sliders in Setup. When the tab closes the
41
+ TTL expires and the rate drops back. New endpoints
42
+ `/watch/focus`, `/watch/release` and `/watch/status`, a live
43
+ inspector in Setup → Remote Control Console, plus a `Restart
44
+ pypilot_web` button that runs `sv restart pypilot_web` via SSH.
45
+ - **Navigation session recorder + shared-advice loop** — every engaged
46
+ AP session is now saved as JSONL to
47
+ `~/.signalk/plugin-config-data/signalk-pypilot-newui/nav-sessions/`.
48
+ Users label conditions (wind, sea state, propulsion, point of sail,
49
+ crew) from a modal in Setup → Doctor, share the file via WhatsApp
50
+ or email, receive an "advice" JSON back and upload it to the visor,
51
+ where it renders as "Consejos recibidos". First step towards an
52
+ AI-tuned Doctor: the plugin does not run any AI at runtime - all
53
+ the learning happens off-boat and gets injected into future Revs as
54
+ plain heuristics.
55
+ - **Pi Zero log capture** — piCore keeps `/var/log` in tmpfs, so a
56
+ hang wipes the logs the moment the user hits the hard reset relay.
57
+ A new opt-in poller SSHes into the Pi Zero on a configurable
58
+ cadence, tails `/var/log/pypilot/*` and appends the new lines to a
59
+ persistent daily file on the Pi 5. Toggle + downloader live in the
60
+ Remote Control Console.
61
+ - **Plain-language help for every gain** — every P / I / D / DD / PR
62
+ / FF slider in Tune and every documented RangeSetting slider in
63
+ Setup → Calibration now carries a short "what it does" line plus a
64
+ `?` button that expands into "when to raise, when to lower". EN /
65
+ ES / DE / FR. Directly inspired by Sean's own suggestion in the
66
+ pypilot forum.
67
+ - **Alarm engine and Doctor speak the user's language** — the seven
68
+ built-in alarm rules and the Doctor findings + summary now render
69
+ in the active language (EN / ES / DE / FR); the backend still ships
70
+ English strings on `notifications.autopilot.*` for KIP / WilhelmSK
71
+ compatibility.
72
+ - **Mode selector proper i18n and uppercase tabs** — pypilot mode
73
+ strings (`compass`, `wind`, `true wind`, `nav`) plus the plugin's
74
+ own `aproado` pseudo-mode all render as translated UPPERCASE labels
75
+ ("COMPAS", "VIENTO APARENTE", "APROADO", ...). Sailing tab labels
76
+ are UPPERCASE too so accents remain optional per RAE convention.
77
+ - **Doctor UX polish** — every suggestion carries a Hide/Discard
78
+ button that stays visible even after the suggestion has been
79
+ applied, so stale advice never sticks in the list; the Setup tile
80
+ chip mirrors the visible count.
81
+ - **Setup launcher — live status chips on every tile** — pypilot
82
+ host+port, active language, last calibration adjustment timestamp
83
+ (with a Reset button), count of active SK sentences vs the total
84
+ catalogue (all 181 keys), and an SSH-configured pill on Remote
85
+ Control Console. Sensor Quality gains a per-row Ignore / Restore
86
+ button so a rudder feedback that does not exist on this boat stops
87
+ turning the chip red.
88
+ - **Chart tab — hover freeze + per-band Y-axis** — touch or hover
89
+ over the timeline to freeze the auto-refresh and read the exact
90
+ value at that point for every band. Min / mid / max ticks appear
91
+ inside the right gutter of each band.
92
+ - **Tune — per-slider ↺ restore and profile-fork prompt** — every
93
+ gain gets a ↺ that snaps back to the frozen "was:" baseline. The
94
+ first change per unlock triggers a Doctor-style modal to keep the
95
+ tweaks in the current profile, save them in a new
96
+ `tune-YYYYMMDD-HHMM` fork, or Cancel and revert.
97
+ - **Nav bar slide-down gesture** — swipe from the top of the visor
98
+ to bring the tab bar back (counterpart to the existing slide-up
99
+ hide).
100
+
26
101
  ## What's new in 2.3.0
27
102
 
28
103
  Feature batch on top of 2.2.x: