signalk-pypilot-newui 3.0.0 → 3.1.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 +132 -0
- package/README.md +36 -6
- package/dist/index.js +1 -1
- package/package.json +9 -9
- package/public/app.js +557 -103
- package/public/index.html +55 -13
- package/public/screenshots/01-control-rose.png +0 -0
- package/public/screenshots/02-chartplotter-embedded.png +0 -0
- package/public/screenshots/03-logbook-trip-detail.png +0 -0
- package/public/screenshots/04-tune-sliders.png +0 -0
- package/public/style.css +77 -14
- package/public/screenshots/01-control-rose.jpg +0 -0
- package/public/screenshots/02-chart-trip-stats.jpg +0 -0
- package/public/screenshots/03-tune-gains.jpg +0 -0
- package/public/screenshots/04-setup-launcher.jpg +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,137 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.1.1 — 2026-10-10 — Refreshed screenshots
|
|
4
|
+
|
|
5
|
+
Patch: swaps in four up-to-date screenshots (captured on sea trial
|
|
6
|
+
2026-10-10, Rev449) so the SK App Store listing shows the 3.1.0
|
|
7
|
+
feature set — Control rose with heading-precision gauge + AIS hull
|
|
8
|
+
top-view, Freeboard-SK chartplotter embedded in the rose, Logbook
|
|
9
|
+
trip detail with OpenSeaMap trace + SOG/AWS chart, and the refreshed
|
|
10
|
+
Tune sliders. No code changes.
|
|
11
|
+
|
|
12
|
+
## 3.1.0 — 2026-10-10 — Fullscreen auto, configurable bottom chip, heading precision, AIS polish
|
|
13
|
+
|
|
14
|
+
Rolls up Rev439 → Rev449 (11 revs) on top of 3.0.0. Minor bump: a
|
|
15
|
+
family of UX refinements + a couple of safety-oriented fixes;
|
|
16
|
+
backward-compatible with 3.0.0 plugin config and SK paths. The theme
|
|
17
|
+
of the release is **"glance information at a distance"** — the sailor
|
|
18
|
+
mounts the tablet across the cockpit and reads the visor as a true
|
|
19
|
+
instrument, so chip sizes, legibility, precision indicators, and
|
|
20
|
+
fullscreen-by-default all got tightened in this bump.
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- **Fullscreen + Screen Wake Lock auto-on by default** (Rev446/Rev448).
|
|
25
|
+
On the very first user tap, the visor requests browser fullscreen
|
|
26
|
+
on `<html>` and takes a `navigator.wakeLock("screen")` so the
|
|
27
|
+
display never dims nor locks — same UX as YouTube's player. A
|
|
28
|
+
floating ⛶ button top-right toggles both and persists the sailor's
|
|
29
|
+
choice (`localStorage[pypilot-newui.fullscreenAuto]`), so later
|
|
30
|
+
reloads honour "I opted out".
|
|
31
|
+
- **Configurable bottom chip on the rose — up to 4 datapoints
|
|
32
|
+
cycled** (Rev439 → Rev445). Short-tap on the chip under the compass
|
|
33
|
+
cycles through the user-picked set (default: SOG → Depth → %Polar);
|
|
34
|
+
long-press opens a modal where the sailor picks up to 4 datapoints
|
|
35
|
+
from the same catalog as the four configurable corners (base paths +
|
|
36
|
+
performance extras + any custom SK path registered in a corner).
|
|
37
|
+
Persisted in `localStorage[pypilot-newui.roseBottomChipPaths]`.
|
|
38
|
+
Replaces the old "always AWS/TWS mirror" behaviour.
|
|
39
|
+
- **Heading-precision gauge under the compass readout** (Rev443/Rev444).
|
|
40
|
+
Second line inside the `#rose-hdg-chip` shows how far off the pilot
|
|
41
|
+
still is from its own target — the sailor's "glance accuracy
|
|
42
|
+
reading", not the target value itself. Signed `target - current`:
|
|
43
|
+
negative = pilot must correct to port (babor), positive = to
|
|
44
|
+
starboard (estribor). Colour: `|err|<3°` green, `<10°` orange, else
|
|
45
|
+
red. In compass / gps / nav uses heading − target; in wind / aproado
|
|
46
|
+
uses AWA − target; in true wind / empopado uses TWA − target.
|
|
47
|
+
Shows `--` when the AP is OFF (`state.engaged === false`) so a
|
|
48
|
+
stale `state.target` can never mislead the sailor.
|
|
49
|
+
- **Safe-exit to compass after APROADO / EMPOPADO** (Rev440). When
|
|
50
|
+
the user finishes an aproado or empopado without opting in to full
|
|
51
|
+
`restoreAll`, the visor now auto-switches the pilot back to COMPASS
|
|
52
|
+
with the current heading as target. Rationale: leaving the pilot in
|
|
53
|
+
WIND / TRUE WIND after the manoeuvre is less stable for "hold what
|
|
54
|
+
I have now" than COMPASS. Carlos sea-trial 2026-10-10. Falls back
|
|
55
|
+
to no-op if the heading sensor is absent.
|
|
56
|
+
- **AIS target as a tinted top-view hull sprite** (Rev442 → Rev443,
|
|
57
|
+
Rev447 → Rev449). Replaces the plain red triangle with the
|
|
58
|
+
`boat-cenital.svg` sprite (same asset as the own-vessel sprite in
|
|
59
|
+
the rose centre), tinted via SVG `feColorMatrix` filters per state:
|
|
60
|
+
red (alarm, blinking, 150 % scale) · orange (warn, fixed, 100 %) ·
|
|
61
|
+
blue-grey (acked, no blink, 100 %). Bow always points toward the
|
|
62
|
+
self vessel (rotation now `rotate(relDeg + 90)` to match the
|
|
63
|
+
horizontal asset). Alarm sprite blinks; acked stays fully visible
|
|
64
|
+
but muted. Paints as the LAST element inside the rose SVG so it
|
|
65
|
+
stays on top of wind arrows, sectors and HUDs.
|
|
66
|
+
- **Only the 3 most urgent AIS targets painted** (Rev441). When more
|
|
67
|
+
than 3 collision alarms are active, only the 3 lowest-TCPA ones
|
|
68
|
+
render on the rose. The infobox navigator still walks ALL alarms so
|
|
69
|
+
the sailor can scroll through the hidden ones.
|
|
70
|
+
- **Tap on an AIS target opens its data popup** (Rev441). Click
|
|
71
|
+
delegation on `#ais-alarm-layer`: tapping a hull sets
|
|
72
|
+
`_aisInfoboxIdx` to that MMSI and forces the popup open — works for
|
|
73
|
+
both pending and silenced targets. Auto-resets to the newest threat
|
|
74
|
+
after 20 s if no further interaction.
|
|
75
|
+
- **ACK keeps the AIS target arrow on the rose** (Rev441 → Rev442).
|
|
76
|
+
ACK no longer deletes the MMSI from `state.aisAlarms`; the hull
|
|
77
|
+
stays visible (silenced style) until the plugin declares the
|
|
78
|
+
threat gone. Button toggles ACK ↔ ACKED (ES: SILENCIAR ↔
|
|
79
|
+
SILENCIADO), with `disabled` + `.is-acked` styling when the MMSI is
|
|
80
|
+
already acknowledged.
|
|
81
|
+
- **X close button on the AIS infobox** (Rev442). When the sailor
|
|
82
|
+
opened the popup by tapping a hull, the X dismisses it and clears
|
|
83
|
+
the user-pick flag so new threats can take over.
|
|
84
|
+
- **Long "Viento Aparente" / "Viento Real" labels in the mode-selector
|
|
85
|
+
modal** (Rev441). The modal shows the long names so wind modes are
|
|
86
|
+
explicit on first open; the bbar button keeps the short labels
|
|
87
|
+
(APARENTE / REAL) to fit the narrow chip.
|
|
88
|
+
- **Landscape tabbar made compact** (Rev446). `.tab-btn` padding
|
|
89
|
+
`12→4 px`, font-size `14→12 px` inside
|
|
90
|
+
`@media (orientation: landscape)`. Saves ~20 vertical pixels for
|
|
91
|
+
tablets mounted horizontally.
|
|
92
|
+
|
|
93
|
+
### Changed
|
|
94
|
+
|
|
95
|
+
- **Heading chip grows UPWARD** (Rev444). The chip rect height
|
|
96
|
+
expands toward `-y` (bottom edge still at `-84`), so the new
|
|
97
|
+
precision line never covers the target diamond that sits just
|
|
98
|
+
below the top of the compass ring.
|
|
99
|
+
- **AWS / TWS sub-line font-size bumped three steps** (Rev443 →
|
|
100
|
+
Rev445). From `clamp(11, 2vw, 16px)` to `clamp(20, 3.8vw, 32px)`
|
|
101
|
+
so the kn number sits halfway between the dim corner label and
|
|
102
|
+
the big angle value when read from the helm.
|
|
103
|
+
- **AIS voice is a short safety nudge, not a report** (Rev441,
|
|
104
|
+
Rev449). The voice line used to spell CPA / TCPA / MMSI, which TTS
|
|
105
|
+
mangled on long numbers. Now it just says *"Alarma AIS, target en
|
|
106
|
+
rumbo de colisión"* / *"AIS alarm, target on collision course"*;
|
|
107
|
+
the data stays visible in the infobox. ES says "AIS" as a word
|
|
108
|
+
(Rev449 — was "A I S" letter-by-letter).
|
|
109
|
+
|
|
110
|
+
### Fixed
|
|
111
|
+
|
|
112
|
+
- **AIS target bearing was 180° off in some geometries** (Rev448 —
|
|
113
|
+
found during 2026-10-10 sea trial). `renderAisAlarms` checked
|
|
114
|
+
`state.position.latitude` but `state.position` carries short keys
|
|
115
|
+
`{lat, lon}` — the test always failed and the code fell back to
|
|
116
|
+
`cpaPositions.self` (= *projected* self position at CPA future
|
|
117
|
+
time). Bearing was then computed between two **future** positions,
|
|
118
|
+
which can be nowhere near the current geometry. The adapter now
|
|
119
|
+
converts `{lat, lon}` → `{latitude, longitude}` once at render
|
|
120
|
+
time, so the hull always paints at the real bearing to the target
|
|
121
|
+
as-of-now.
|
|
122
|
+
- **Signal K server token kept being asked "every once in a while"**
|
|
123
|
+
(Rev446). `handleAuthWrite` wiped the permanent device token on
|
|
124
|
+
the FIRST `401` and kicked off an access-request modal — a single
|
|
125
|
+
transient 401 (SK restart in flight, proxy hiccup, DNS blip) was
|
|
126
|
+
enough to invalidate a perfectly good token. Now requires THREE
|
|
127
|
+
consecutive 401 writes before wiping; one successful write resets
|
|
128
|
+
the counter.
|
|
129
|
+
- **Precision gauge sign convention** (Rev444). First pass used
|
|
130
|
+
`heading − target`; Carlos's convention is "the correction the
|
|
131
|
+
pilot still has to apply" → `target − heading`. Negative therefore
|
|
132
|
+
means *pilot must go to port* and positive *pilot must go to
|
|
133
|
+
starboard*.
|
|
134
|
+
|
|
3
135
|
## 3.0.0 — 2026-10-10 — AIS collision overlay + Freeboard-SK embedded
|
|
4
136
|
|
|
5
137
|
Rolls up Rev431 through Rev438 (8 revs). The headline feature of 3.0.0
|
package/README.md
CHANGED
|
@@ -10,20 +10,47 @@ watches how your autopilot is behaving and quietly suggests how to
|
|
|
10
10
|
sharpen its settings, so you spend more time sailing and less time
|
|
11
11
|
guessing which slider to move.
|
|
12
12
|
|
|
13
|
+
Since **3.0.0** the visor also ships with an **integrated
|
|
14
|
+
chartplotter**: double-tap the compass rose and
|
|
15
|
+
[Freeboard-SK](https://www.npmjs.com/package/@signalk/freeboard-sk)
|
|
16
|
+
opens embedded inside the rose box with every AIS target, your route
|
|
17
|
+
and all overlays — side panels (mode, nudges, AP) stay reachable, no
|
|
18
|
+
tab switching, no re-authentication. **For charts to render you need a
|
|
19
|
+
Signal K chart provider installed and configured in Freeboard-SK**
|
|
20
|
+
(see [Chart provider is required](#chart-provider-is-required-for-the-embedded-plotter)
|
|
21
|
+
below).
|
|
22
|
+
|
|
13
23
|
Runs alongside [`pypilot-autopilot-provider`](https://www.npmjs.com/package/pypilot-autopilot-provider)
|
|
14
24
|
by Panaaj — see [Working alongside pypilot-autopilot-provider](#working-alongside-pypilot-autopilot-provider).
|
|
15
25
|
|
|
26
|
+
## Chart provider is required for the embedded plotter
|
|
27
|
+
|
|
28
|
+
The chartplotter embedded in the rose uses Freeboard-SK, which itself
|
|
29
|
+
is only a renderer — it needs a Signal K **chart provider** plugin to
|
|
30
|
+
know where to fetch tiles from. Any of the standard providers works:
|
|
31
|
+
|
|
32
|
+
- **[`@signalk/charts-plugin`](https://www.npmjs.com/package/@signalk/charts-plugin)**
|
|
33
|
+
— serves local MBTiles / S57 / XYZ chart sets you drop into
|
|
34
|
+
`~/.signalk/charts/` (OpenCPN-style). Recommended default.
|
|
35
|
+
- **[`signalk-chart-tiler`](https://www.npmjs.com/package/signalk-chart-tiler)**
|
|
36
|
+
or any other upstream raster/vector provider.
|
|
37
|
+
|
|
38
|
+
Without a provider, Freeboard-SK will open embedded in the rose but
|
|
39
|
+
the map area will stay empty. Install one from the SK App Store, add
|
|
40
|
+
your chart sources, and the chartplotter inside pypilot-newui lights
|
|
41
|
+
up automatically.
|
|
42
|
+
|
|
16
43
|
## Screenshots
|
|
17
44
|
|
|
18
|
-

|
|
19
46
|
|
|
20
|
-
|
|
|
47
|
+
| Chartplotter embedded | Logbook · trip detail |
|
|
21
48
|
|---|---|
|
|
22
|
-
|  |  |
|
|
23
50
|
|
|
24
|
-
|
|
|
51
|
+
| Tune · gain sliders | Chart · hover freeze |
|
|
25
52
|
|---|---|
|
|
26
|
-
|  |  |
|
|
27
54
|
|
|
28
55
|

|
|
29
56
|
|
|
@@ -247,7 +274,10 @@ on its own), but installing them unlocks the features listed.
|
|
|
247
274
|
— Double-tap the compass rose to open Freeboard-SK embedded inside
|
|
248
275
|
the rose box (side panels stay visible and usable). Lets you drop
|
|
249
276
|
from the autopilot view to the full chart with every AIS target in
|
|
250
|
-
one tap, without leaving the pypilot-newui session.
|
|
277
|
+
one tap, without leaving the pypilot-newui session. **Pair with a
|
|
278
|
+
Signal K chart provider (e.g. `@signalk/charts-plugin`) or the chart
|
|
279
|
+
area will stay empty** — see
|
|
280
|
+
[Chart provider is required](#chart-provider-is-required-for-the-embedded-plotter).
|
|
251
281
|
See `docs/_feature_ais_overlay.md`.
|
|
252
282
|
|
|
253
283
|
- **[`signalk-collision-alerts`](https://www.npmjs.com/package/signalk-collision-alerts)**
|
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ const trip_recorder_1 = require("./trip-recorder");
|
|
|
28
28
|
const maneuver_trace_1 = require("./maneuver-trace");
|
|
29
29
|
// Rev counter bumped on every build so the user can distinguish deploys
|
|
30
30
|
// from the webapp header (feedback_revision_bump_each_build).
|
|
31
|
-
const PLUGIN_REVISION = "
|
|
31
|
+
const PLUGIN_REVISION = "Rev449";
|
|
32
32
|
// Rev59: read package.json once at load time so /status can report the
|
|
33
33
|
// npm package version alongside the internal Rev counter.
|
|
34
34
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "signalk-pypilot-newui",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"description": "Signal K friendly UI for the pypilot autopilot, with first-class Signal K paths and Simple Switches so any downstream Signal K client can drive or monitor the pilot. Touch-first mobile visor + full pypilot data (servo, gains, calibration, tack, warnings). Coexists with pypilot-autopilot-provider.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -51,20 +51,20 @@
|
|
|
51
51
|
"webapp": "./public",
|
|
52
52
|
"screenshots": [
|
|
53
53
|
{
|
|
54
|
-
"src": "./public/screenshots/01-control-rose.
|
|
55
|
-
"title": "Control - compass rose with
|
|
54
|
+
"src": "./public/screenshots/01-control-rose.png",
|
|
55
|
+
"title": "Control - compass rose with heading + precision gauge (green/orange/red), AWA/TWA wind arrows, hull-fixed sailing wedges, configurable bottom chip (SOG/depth/polar%/custom) and an AIS collision target painted as a tinted top-view hull"
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
|
-
"src": "./public/screenshots/02-
|
|
59
|
-
"title": "
|
|
58
|
+
"src": "./public/screenshots/02-chartplotter-embedded.png",
|
|
59
|
+
"title": "Chartplotter integrated - double-tap the rose to open Freeboard-SK embedded inside the rose box; every AIS target, route and your position with the autopilot buttons still reachable. Needs a Signal K chart provider (e.g. @signalk/charts-plugin)"
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
|
-
"src": "./public/screenshots/03-
|
|
63
|
-
"title": "
|
|
62
|
+
"src": "./public/screenshots/03-logbook-trip-detail.png",
|
|
63
|
+
"title": "Logbook - auto-recorded trip detail with OpenSeaMap trace, speed-coloured track, gust / peak-SOG / low-voltage / tack markers and a SOG vs AWS chart"
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
|
-
"src": "./public/screenshots/04-
|
|
67
|
-
"title": "
|
|
66
|
+
"src": "./public/screenshots/04-tune-sliders.png",
|
|
67
|
+
"title": "Tune - PID gain sliders per pilot/profile with plain-language help ('act now reflex', 'closes sustained drift'), PROFILE badge, locked by default with +/-10 and +/-1 fine-tune buttons and a reset-to-baseline icon"
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
70
|
"src": "./public/screenshots/05-race-timer.jpg",
|