signalk-chiplog 2.0.0 → 2.2.0
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 +186 -37
- package/README.md +340 -134
- package/index.js +80 -40
- package/lib/api.js +109 -1
- package/lib/background-schedule.js +67 -0
- package/lib/crew.js +185 -0
- package/lib/database.js +103 -1
- package/lib/departure-forecast.js +150 -0
- package/lib/detection.js +45 -14
- package/lib/entries.js +96 -48
- package/lib/event-watcher.js +1 -3
- package/lib/events.js +64 -16
- package/lib/export.js +20 -1
- package/lib/landmark-finder.js +209 -0
- package/lib/landmarks.js +210 -0
- package/lib/logbook-pdf.js +368 -17
- package/lib/observation-recorder.js +11 -5
- package/lib/tide-forecaster.js +23 -116
- package/lib/weather-forecaster.js +147 -0
- package/package.json +2 -1
- package/public/app.css +212 -2
- package/public/entry/entry.css +71 -0
- package/public/entry/js/components/CrewDialog.mjs +200 -0
- package/public/entry/js/main.mjs +114 -0
- package/public/entry/sw.js +2 -0
- package/public/js/animation/camera.mjs +180 -0
- package/public/js/animation/formats.mjs +45 -0
- package/public/js/animation/mercator.mjs +50 -0
- package/public/js/animation/mp4.mjs +77 -0
- package/public/js/animation/player.mjs +120 -0
- package/public/js/animation/renderer.mjs +326 -0
- package/public/js/animation/schedule.mjs +49 -0
- package/public/js/animation/storyboard.mjs +195 -0
- package/public/js/animation/tiles.mjs +219 -0
- package/public/js/animation/timeline.mjs +186 -0
- package/public/js/components/AnimationExport.mjs +173 -0
- package/public/js/components/AnimationView.mjs +439 -0
- package/public/js/components/CrewCard.mjs +22 -0
- package/public/js/components/ExportView.mjs +3 -8
- package/public/js/components/PassageView.mjs +49 -19
- package/public/js/components/Timeline.mjs +30 -7
- package/public/js/components/WeatherCard.mjs +134 -0
- package/public/js/context.mjs +7 -0
- package/public/js/days.mjs +10 -0
- package/public/js/format.mjs +15 -0
- package/public/js/i18n.mjs +246 -0
- package/public/js/landmarks.mjs +128 -0
- package/public/js/main.mjs +8 -5
- package/public/js/weather.mjs +193 -0
- package/public/vendor/mediabunny-LICENSE +373 -0
- package/public/vendor/mediabunny.min.mjs +50 -0
package/README.md
CHANGED
|
@@ -1,45 +1,55 @@
|
|
|
1
1
|
# Chiplog
|
|
2
2
|
|
|
3
|
-
An automated logbook for [Signal K](https://signalk.org). Chiplog writes the logbook from the data already on your
|
|
3
|
+
An automated logbook for [Signal K](https://signalk.org). Chiplog writes the logbook from the data already on your
|
|
4
|
+
boat's Signal K server — passages, track, engine and sail, instrument readings, alarms — and lets the crew add what
|
|
5
|
+
sensors cannot know from a tablet at the helm: manoeuvres, notes and handwriting.
|
|
4
6
|
|
|
5
|
-
- **One entry per passage**, opened when the boat leaves and closed
|
|
7
|
+
- **One entry per passage**, opened when the boat leaves and closed as soon as it arrives, carrying on after short stops
|
|
8
|
+
such as a lock or a lunch anchorage.
|
|
6
9
|
- **GPS track**, distance, time under engine and under sail.
|
|
7
10
|
- **Hourly instrument readings**, as on a paper log, plus readings at departure, arrival and each manoeuvre.
|
|
8
11
|
- **Automatic events**: alarms, autopilot changes, strong wind, falling barometer.
|
|
9
12
|
- **Departure and arrival names**, looked up online and corrected once for good.
|
|
10
13
|
- **Consultation webapp**: logbook by day, map, timeline, corrections, export.
|
|
11
|
-
- **
|
|
14
|
+
- **Replay a range of passages** on the map — an hour of sailing per second — and save it as an MP4 for a phone, a
|
|
15
|
+
square post or a widescreen, rendered entirely in your browser.
|
|
16
|
+
- **Tablet entry app**: big buttons for gloves and wet fingers, stylus handwriting, night mode, works through Wi-Fi
|
|
17
|
+
dropouts.
|
|
12
18
|
- **Abandon-ship copy**: JSON, CSV and GPX, downloadable or written to a USB drive.
|
|
13
19
|
|
|
14
20
|
English and French, chosen from the browser's language.
|
|
15
21
|
|
|
16
22
|
## Contents
|
|
17
23
|
|
|
18
|
-
- [Requirements](#requirements)
|
|
19
|
-
- [Installation](#installation)
|
|
20
|
-
- [How the logbook is written](#how-the-logbook-is-written)
|
|
21
|
-
- [The logbook webapp](#the-logbook-webapp)
|
|
22
|
-
- [The tablet entry app](#the-tablet-entry-app)
|
|
23
|
-
- [Configuration](#configuration)
|
|
24
|
-
- [Signal K data used](#signal-k-data-used)
|
|
25
|
-
- [Backups and abandon ship](#backups-and-abandon-ship)
|
|
26
|
-
- [Retrospective analysis](#retrospective-analysis)
|
|
27
|
-
- [Privacy and online services](#privacy-and-online-services)
|
|
28
|
-
- [Troubleshooting](#troubleshooting)
|
|
29
|
-
- [Limitations](#limitations)
|
|
30
|
-
- [Development](#development)
|
|
31
|
-
- [License](#license)
|
|
32
|
-
|
|
33
|
-
## Requirements
|
|
34
|
-
|
|
35
|
-
- **Signal K server 2.x** running on **Node.js 22.13 or later**. Chiplog uses Node's built-in SQLite module, so there is
|
|
24
|
+
- [Requirements](#requirements-)
|
|
25
|
+
- [Installation](#installation-)
|
|
26
|
+
- [How the logbook is written](#how-the-logbook-is-written-)
|
|
27
|
+
- [The logbook webapp](#the-logbook-webapp-)
|
|
28
|
+
- [The tablet entry app](#the-tablet-entry-app-)
|
|
29
|
+
- [Configuration](#configuration-)
|
|
30
|
+
- [Signal K data used](#signal-k-data-used-)
|
|
31
|
+
- [Backups and abandon ship](#backups-and-abandon-ship-)
|
|
32
|
+
- [Retrospective analysis](#retrospective-analysis-)
|
|
33
|
+
- [Privacy and online services](#privacy-and-online-services-)
|
|
34
|
+
- [Troubleshooting](#troubleshooting-)
|
|
35
|
+
- [Limitations](#limitations-)
|
|
36
|
+
- [Development](#development-)
|
|
37
|
+
- [License](#license-)
|
|
38
|
+
|
|
39
|
+
## Requirements ✅
|
|
40
|
+
|
|
41
|
+
- **Signal K server 2.x** running on **Node.js 22.13 or later**. Chiplog uses Node's built-in SQLite module, so there is
|
|
42
|
+
nothing to compile — it installs the same way on a Raspberry Pi.
|
|
36
43
|
- **A position and speed over ground** on the Signal K bus (GPS). Everything else is optional and used when present.
|
|
37
|
-
- **Recommended:** [signalk-autostate](https://github.com/meri-imperiumi/signalk-autostate), which publishes
|
|
38
|
-
|
|
44
|
+
- **Recommended:** [signalk-autostate](https://github.com/meri-imperiumi/signalk-autostate), which publishes
|
|
45
|
+
`navigation.state` (moored, anchored, sailing, motoring). Without it, Chiplog decides from speed alone and says so in
|
|
46
|
+
the apps.
|
|
47
|
+
- **Recommended:** a correct system clock, e.g. with `signalk-set-system-time`. The logbook is dated from the server's
|
|
48
|
+
clock.
|
|
39
49
|
- **Optional:** a USB drive left plugged into the server, for the abandon-ship copy.
|
|
40
50
|
- **Optional:** an internet connection, for map tiles and place names. The logbook itself never needs one.
|
|
41
51
|
|
|
42
|
-
## Installation
|
|
52
|
+
## Installation 📦
|
|
43
53
|
|
|
44
54
|
Install **Chiplog** from the Signal K App Store (**Apps & Plugins → Store**), or from the command line:
|
|
45
55
|
|
|
@@ -50,30 +60,44 @@ npm install signalk-chiplog
|
|
|
50
60
|
|
|
51
61
|
Then restart the Signal K server, and in the Signal K admin:
|
|
52
62
|
|
|
53
|
-
1. Go to **Apps & Plugins → Configuration**, open **Chiplog**, tick **Enabled** and save. The defaults suit most boats;
|
|
63
|
+
1. Go to **Apps & Plugins → Configuration**, open **Chiplog**, tick **Enabled** and save. The defaults suit most boats;
|
|
64
|
+
see [Configuration](#configuration-).
|
|
54
65
|
2. Open **Webapps**: **Chiplog** is listed there. Its two pages are also reachable directly:
|
|
55
66
|
- the logbook: `http://<your-server>:3000/signalk-chiplog/`
|
|
56
67
|
- the tablet entry app: `http://<your-server>:3000/signalk-chiplog/entry/`
|
|
57
68
|
|
|
58
69
|
The logbook is stored in a single SQLite file, `~/.signalk/plugin-config-data/signalk-chiplog/chiplog.sqlite`.
|
|
59
70
|
|
|
60
|
-
## How the logbook is written
|
|
71
|
+
## How the logbook is written 📖
|
|
61
72
|
|
|
62
73
|
### Passages
|
|
63
74
|
|
|
64
75
|
A **passage** is one logbook entry: from leaving a berth or anchorage to arriving at the next one.
|
|
65
76
|
|
|
66
|
-
- **Departure.** A passage opens when the boat gets under way. It is dated from the moment the boat actually left — not
|
|
67
|
-
|
|
68
|
-
- **
|
|
69
|
-
|
|
70
|
-
- **
|
|
71
|
-
|
|
72
|
-
|
|
77
|
+
- **Departure.** A passage opens when the boat gets under way. It is dated from the moment the boat actually left — not
|
|
78
|
+
the few minutes later when the decision was confirmed — and placed where it was last still.
|
|
79
|
+
- **Arrival.** A passage closes as soon as the boat stops, dated and placed where it actually stopped: the arrival is
|
|
80
|
+
named and copied to the USB drive straight away.
|
|
81
|
+
- **Short stops.** Leaving again within the tolerance (30 minutes by default) of that arrival reopens the same passage
|
|
82
|
+
rather than starting a new one. The stop stays on its timeline as its own line, naming the place, followed by a
|
|
83
|
+
departure line when the boat sets off again. A passage you closed yourself from the webapp is never reopened.
|
|
84
|
+
- **Casting off** from the tablet opens the passage right away, before the boat moves (see
|
|
85
|
+
[Departures](#departures-open-the-passage)). Soon after an arrival, it goes to the passage that just ended instead,
|
|
86
|
+
which carries on once the boat moves.
|
|
87
|
+
- **Power cuts and restarts.** If the server comes back after the boat has been still for longer than the tolerance, the
|
|
88
|
+
passage is closed at its last movement. A short restart carries on with the same passage.
|
|
89
|
+
- **Under way or stopped** comes from `navigation.state` when signalk-autostate provides it. Otherwise Chiplog averages
|
|
90
|
+
speed over ground over 3 minutes: under way above 1 knot, stopped below half a knot. This keeps a boat swinging at
|
|
91
|
+
anchor from starting passages.
|
|
92
|
+
|
|
93
|
+
A passage that was split in two — a stop just longer than the tolerance, for instance — can be merged back from the
|
|
94
|
+
logbook webapp. The stop the merge folds away is kept on the timeline as its own line, naming the place, since it would
|
|
95
|
+
otherwise leave no trace once the merge takes the later passage's arrival as its own.
|
|
73
96
|
|
|
74
97
|
### Track and distance
|
|
75
98
|
|
|
76
|
-
While under way, a track point is recorded every 15 seconds, plus extra points on a turn of 15° or more or a speed
|
|
99
|
+
While under way, a track point is recorded every 15 seconds, plus extra points on a turn of 15° or more or a speed
|
|
100
|
+
change of 1 knot, so tacks show on the map without bloating straight lines. The distance is the length of the track.
|
|
77
101
|
|
|
78
102
|
### Engine or sail
|
|
79
103
|
|
|
@@ -84,84 +108,184 @@ Each passage is split into engine and sail periods covering the time under way.
|
|
|
84
108
|
3. `navigation.state` (`motoring` / `sailing`);
|
|
85
109
|
4. the configured default, **sail**.
|
|
86
110
|
|
|
87
|
-
A wrong period can be corrected in the webapp. A correction to the period in progress holds until the engine data
|
|
111
|
+
A wrong period can be corrected in the webapp. A correction to the period in progress holds until the engine data
|
|
112
|
+
actually changes. Each actual switch is also logged as a line in the passage's timeline.
|
|
88
113
|
|
|
89
114
|
### Instrument readings
|
|
90
115
|
|
|
91
|
-
Readings are taken at departure, **every hour on the hour** during the passage (configurable), at arrival, and with each
|
|
116
|
+
Readings are taken at departure, **every hour on the hour** during the passage (configurable), at arrival, and with each
|
|
117
|
+
manoeuvre, note or sketch logged live, so a reef appears with the wind that called for it and a note with the conditions
|
|
118
|
+
when it was written. Each reading holds whatever is available among position, speed and course over ground, heading,
|
|
119
|
+
speed through water, true and apparent wind, depth, barometer, air and water temperature, the log and the hour counter
|
|
120
|
+
of each engine — both engines of a twin-engine boat. A sensor that has gone silent is left blank rather than repeating
|
|
121
|
+
an old value.
|
|
92
122
|
|
|
93
123
|
### Automatic events
|
|
94
124
|
|
|
95
125
|
Added to the timeline without anyone touching anything:
|
|
96
126
|
|
|
97
|
-
- **Alarms** — any Signal K notification reaching `alarm` or `emergency` (man overboard, engine alarm, anchor watch…),
|
|
127
|
+
- **Alarms** — any Signal K notification reaching `alarm` or `emergency` (man overboard, engine alarm, anchor watch…),
|
|
128
|
+
and when it clears.
|
|
98
129
|
- **Autopilot** — engaged, disengaged, mode changes.
|
|
99
|
-
- **Wind** — true wind, averaged over 2 minutes, rising above 20 and 30 knots and falling back below them
|
|
130
|
+
- **Wind** — true wind, averaged over 2 minutes, rising above 20 and 30 knots and falling back below them
|
|
131
|
+
(configurable).
|
|
100
132
|
- **Barometer** — a fall of 4 hPa or more over 3 hours (configurable).
|
|
101
133
|
|
|
102
|
-
An alarm at anchor between two passages goes to the passage that ended there, as long as the boat is within 1 nautical
|
|
134
|
+
An alarm at anchor between two passages goes to the passage that ended there, as long as the boat is within 1 nautical
|
|
135
|
+
mile of that arrival.
|
|
103
136
|
|
|
104
137
|
### Tide forecast
|
|
105
138
|
|
|
106
|
-
When a passage opens, Chiplog fetches the predicted water height near the departure for the next 24 hours (configurable
|
|
139
|
+
When a passage opens, Chiplog fetches the predicted water height near the departure for the next 24 hours (configurable
|
|
140
|
+
service, on by default) and shows it on the passage page: the departure's place, the high and low tide times and
|
|
141
|
+
heights, and the height curve. Fetched once, at departure — not kept up to date afterwards. Offline is handled the same
|
|
142
|
+
way as geocoding: retried for a while, then given up on quietly if the boat stays out of reach, or if the position
|
|
143
|
+
simply has no tide (an inland lake). Hourly data, so times are accurate to within about half an hour — enough for a
|
|
144
|
+
logbook reference, not for timing a lock or a bar crossing to the minute.
|
|
145
|
+
|
|
146
|
+
**Heights are relative to mean sea level, not a charted "hauteur d'eau".** The free tide service used has no notion of
|
|
147
|
+
chart datum (the lowest-astronomical-tide reference SHOM and other official tide tables use), so a reading here can be
|
|
148
|
+
several metres off what a nautical chart or an official tide table would say for the same moment — the app says so under
|
|
149
|
+
the chart. Tide _times_ are unaffected by this: a vertical offset does not move when high or low water falls.
|
|
150
|
+
|
|
151
|
+
### Marine weather forecast
|
|
152
|
+
|
|
153
|
+
When a passage opens, Chiplog also fetches the marine weather forecast near the departure for the next 24 hours (on by
|
|
154
|
+
default, can be turned off) and shows it, titled with the departure place, as a table every 3 hours: sky and rain, wind
|
|
155
|
+
(Beaufort force, direction, speed and gusts), waves and swell (height, period, direction), pressure, visibility, air and
|
|
156
|
+
sea temperature, and current. A thunderstorm or a force 7 or more stands out in red. Each row gives the strongest gust
|
|
157
|
+
and the rain over its three hours. The PDF logbook lists the same forecast, titled the same way, in its own full-width
|
|
158
|
+
block above the day's table of events and observations.
|
|
107
159
|
|
|
108
|
-
|
|
160
|
+
Arrows point where the wind, the sea and the current are going; the compass point next to them is where wind, waves and
|
|
161
|
+
swell come _from_, but where the current flows _to_, as sailors usually read them. Like the tide, it is fetched once at
|
|
162
|
+
departure and not updated afterwards; far from the sea, only the atmospheric part is shown.
|
|
109
163
|
|
|
110
164
|
### Place names
|
|
111
165
|
|
|
112
166
|
Departures and arrivals are named automatically:
|
|
113
167
|
|
|
114
168
|
1. **Known places first.** Within 200 m (configurable) of a place already named, that name is used.
|
|
115
|
-
2. **Otherwise online**, from OpenStreetMap's Nominatim service. Until it answers — at sea, out of reach of a network —
|
|
116
|
-
|
|
169
|
+
2. **Otherwise online**, from OpenStreetMap's Nominatim service. Until it answers — at sea, out of reach of a network —
|
|
170
|
+
the place shows its coordinates (e.g. `46.1466N 1.1686W`) as a provisional name, and the lookup is retried later.
|
|
171
|
+
3. **Corrections are remembered.** Renaming a departure or arrival in the webapp also renames that place for every later
|
|
172
|
+
passage starting or ending nearby. Past passages keep the name they recorded.
|
|
173
|
+
|
|
174
|
+
### Landmarks (amers)
|
|
175
|
+
|
|
176
|
+
Every position in the log is also given the way a paper logbook gives one — as a distance and a bearing **from a
|
|
177
|
+
landmark**, under the coordinates, in a lighter grey:
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
46°08.88′N 001°12.90′W
|
|
181
|
+
2,3 M ENE (065°) — Phare de Chauveau
|
|
182
|
+
```
|
|
117
183
|
|
|
118
|
-
|
|
184
|
+
- **The landmarks come from OpenStreetMap**, fetched area by area through Overpass and kept: lighthouses and major
|
|
185
|
+
lights, capes, named towers and other seamark landmarks, minor lights, isolated-danger and safe-water beacons,
|
|
186
|
+
harbours and marinas. The numbered marks of a channel are left out — "6 c" says nothing in a logbook.
|
|
187
|
+
- **The nearest useful one wins**, not simply the nearest: each kind carries a range (15 nm for a lighthouse, 3 for a
|
|
188
|
+
harbour…), narrowed by the light's own range when known, and the landmark closest relative to its range is the one
|
|
189
|
+
quoted. Offshore, beyond them all, the coordinates stay alone.
|
|
190
|
+
- **Past passages fill in by themselves** once their area has been fetched — the bearing is worked out when the page or
|
|
191
|
+
the PDF is drawn, never stored.
|
|
192
|
+
- Turn **Read each journal line against the nearest landmark** off to keep the boat off Overpass entirely.
|
|
193
|
+
|
|
194
|
+
## The logbook webapp 💻
|
|
119
195
|
|
|
120
196
|
Open **Chiplog** from the Signal K webapps, or `/signalk-chiplog/`. Reading needs no more than read-only access.
|
|
121
197
|
|
|
122
|
-
- **Status bar** — under way under sail or engine, stopped, or waiting for data, with a link to the passage in progress.
|
|
123
|
-
|
|
124
|
-
- **
|
|
198
|
+
- **Status bar** — under way under sail or engine, stopped, or waiting for data, with a link to the passage in progress.
|
|
199
|
+
A warning shows when detection works from speed alone because signalk-autostate is missing.
|
|
200
|
+
- **Logbook** — a summary above the list (number of passages, total distance, total time, across every passage logged,
|
|
201
|
+
not just what is loaded), then passages grouped by day, newest first, with times, departure and arrival, distance,
|
|
202
|
+
duration and an engine/sail bar. A passage across midnight appears on both days. Provisional place names are shown as
|
|
203
|
+
such.
|
|
204
|
+
- **Passage page** — summary (distance, duration, average speed, the highest speed and wind seen, and the crew aboard),
|
|
205
|
+
map of the track (OpenStreetMap with OpenSeaMap seamarks, which can be hidden) with a small boat marker at the
|
|
206
|
+
selected point, a scrubber under the map to step back and forth through its history (defaulting to the latest point,
|
|
207
|
+
so it shows the current position on a passage in progress) with a band of that point's time, SOG, COG, STW, TWS, TWD,
|
|
208
|
+
TWA and AWA, the marine weather forecast every 3 hours from departure, the tide forecast near the departure (place,
|
|
209
|
+
high/low times and heights, height curve) when one was fetched, the engine and sail periods, the boat's status (each
|
|
210
|
+
engine's hour counter at departure and arrival and the hours run, and the tank levels and battery charge, voltage and
|
|
211
|
+
current noted at departure), and the log: every reading and event in order, including handwritten notes. A passage in
|
|
212
|
+
progress refreshes every minute. Each line's comment can be edited (read/write access); a manoeuvre or note the crew
|
|
213
|
+
logged themselves can also be deleted — automatic lines (alarms, autopilot, weather, corrections) can only be
|
|
214
|
+
annotated. Under each position, in grey, its bearing and distance from the nearest landmark.
|
|
125
215
|
- **Corrections** (read/write access):
|
|
126
216
|
- rename the departure, or the arrival once the passage is closed — a passage in progress has none yet to rename;
|
|
127
217
|
- switch an engine period to sail or back;
|
|
128
218
|
- close a passage in progress, e.g. to confirm an arrival;
|
|
129
219
|
- merge with the previous or next passage;
|
|
130
220
|
- delete a passage (admin).
|
|
131
|
-
- **
|
|
132
|
-
|
|
221
|
+
- **Animation** — pick two dates and every passage between them replays on the map, one after another, the port time
|
|
222
|
+
skipped. The map follows the boat at a scale chosen for each passage — a short hop kept readable rather than
|
|
223
|
+
magnified, a long crossing allowed a wider view but never so wide the boat crawls across empty water — while a bubble
|
|
224
|
+
shows the speed, the distance covered since the start and the date. Play, pause and a slider over the animation's own
|
|
225
|
+
time, at ×0,5, ×1, ×2 or ×4. **Export MP4** saves it as a video in one of five shapes (Mobile 9:16, Portrait 3:4,
|
|
226
|
+
Square 1:1, Landscape 4:3, Widescreen 16:9). Everything happens in the browser: nothing is rendered or encoded on the
|
|
227
|
+
Signal K server, and the map tiles are the only thing downloaded.
|
|
228
|
+
- **Export** — download the whole logbook or a date range as a PDF logbook to print, JSON, CSV or GPX, and write the
|
|
229
|
+
abandon-ship copy to the USB drive now (admin). The PDF is written in the webapp's language and the device's time
|
|
230
|
+
zone.
|
|
231
|
+
- **Retrospective** (admin) — reconstruct past passages for a date range from an InfluxDB history (see
|
|
232
|
+
[Retrospective analysis](#retrospective-analysis-)).
|
|
133
233
|
|
|
134
234
|
**Helm entry** in the top bar opens the tablet entry app.
|
|
135
235
|
|
|
136
|
-
## The tablet entry app
|
|
236
|
+
## The tablet entry app 📱
|
|
237
|
+
|
|
238
|
+
Open `/signalk-chiplog/entry/` on the tablet, or follow **Helm entry** from the logbook. For an app-like, full-screen
|
|
239
|
+
launcher, use the browser's **Add to Home Screen** (Safari: Share → Add to Home Screen; Chrome: menu → Add to Home
|
|
240
|
+
screen / Install app).
|
|
137
241
|
|
|
138
|
-
|
|
242
|
+
### Crew
|
|
243
|
+
|
|
244
|
+
A compact, read-only list at the top of the screen shows who is aboard the current passage. The pencil next to the title
|
|
245
|
+
opens a dialog to tick names on or off from the crew list, and to add a new name (with an optional role, e.g. "skipper")
|
|
246
|
+
— typing one both logs it aboard and adds it to the list for next time, no admin login needed. Every name in that
|
|
247
|
+
dialog, including one just added, carries its own pencil to correct it and a trash icon to remove it from the list for
|
|
248
|
+
good; a removal asks to confirm first, and past passages that recorded the name keep it. A new passage starts with the
|
|
249
|
+
same crew as the one before it, ready to adjust rather than re-enter from scratch.
|
|
139
250
|
|
|
140
251
|
### Logging a manoeuvre
|
|
141
252
|
|
|
142
|
-
Tap the manoeuvre: tack, gybe, reef in, shake out reef, sail change, anchor down, anchor up, moor, cast off, watch
|
|
253
|
+
Tap the manoeuvre: tack, gybe, reef in, shake out reef, sail change, anchor down, anchor up, moor, cast off, watch
|
|
254
|
+
change. One tap logs it with the time, the position and an instrument reading.
|
|
143
255
|
|
|
144
|
-
- **Sail change** asks which sail went up: mainsail, genoa, jib, staysail, spinnaker, gennaker, code 0, storm jib, or
|
|
256
|
+
- **Sail change** asks which sail went up: mainsail, genoa, jib, staysail, spinnaker, gennaker, code 0, storm jib, or
|
|
257
|
+
any name you type.
|
|
145
258
|
- A banner then confirms it for 10 seconds, with two big buttons:
|
|
146
259
|
- **Undo**, for a mistaken tap;
|
|
147
260
|
- **Add a comment**, e.g. "25 kn, second reef".
|
|
148
261
|
|
|
149
262
|
### Departures open the passage
|
|
150
263
|
|
|
151
|
-
With no passage open, **Cast off** and **Anchor up** are highlighted. Tapping one opens the passage at that moment, and
|
|
264
|
+
With no passage open, **Cast off** and **Anchor up** are highlighted. Tapping one opens the passage at that moment, and
|
|
265
|
+
the header shows "Ready to leave since…" until the boat moves. Chiplog then carries on with that same passage. If the
|
|
266
|
+
boat does not leave within the tolerance (30 minutes by default), the passage closes at the cast-off; **Undo** right
|
|
267
|
+
after the tap removes it altogether. Within the tolerance of an arrival, the tap goes to the passage that just ended
|
|
268
|
+
instead of opening one: that passage carries on when the boat moves.
|
|
152
269
|
|
|
153
|
-
Other entries made with no passage open go to the last passage if the boat is still within 1 nm of where it ended — a
|
|
270
|
+
Other entries made with no passage open go to the last passage if the boat is still within 1 nm of where it ended — a
|
|
271
|
+
note once moored belongs to the passage that brought you there. Anywhere else, the app asks you to cast off first.
|
|
154
272
|
|
|
155
273
|
### Notes and handwriting
|
|
156
274
|
|
|
157
275
|
- **Note** — type and tap **Log it**.
|
|
158
|
-
- **Handwriting** — takes over the whole screen, with a toolbar above the pad: fine pen, thick pen, highlighter, eraser,
|
|
276
|
+
- **Handwriting** — takes over the whole screen, with a toolbar above the pad: fine pen, thick pen, highlighter, eraser,
|
|
277
|
+
undo, and a choice of colour (kept to the theme's colour in night mode, to spare night vision). Pen pressure also sets
|
|
278
|
+
the line width. The eraser removes only what it actually touches, splitting a stroke rather than deleting all of it;
|
|
279
|
+
undo steps back through strokes and erasing alike. Once a stylus has touched the pad, fingers are ignored, so a palm
|
|
280
|
+
resting on the screen does not draw. Add a comment and tap **Log it** to send.
|
|
159
281
|
|
|
160
|
-
Handwritten notes appear as drawn — colour, pen or highlighter included — in the logbook's timeline and in the PDF
|
|
282
|
+
Handwritten notes appear as drawn — colour, pen or highlighter included — in the logbook's timeline and in the PDF
|
|
283
|
+
export, not just on the tablet.
|
|
161
284
|
|
|
162
285
|
### Latest entries
|
|
163
286
|
|
|
164
|
-
Below, the latest entries of the current passage (or of the last one) are listed with their time. Each can take a
|
|
287
|
+
Below, the latest entries of the current passage (or of the last one) are listed with their time. Each can take a
|
|
288
|
+
comment, and your own entries can be deleted; a note's text can be edited.
|
|
165
289
|
|
|
166
290
|
### Night mode
|
|
167
291
|
|
|
@@ -169,53 +293,64 @@ Below, the latest entries of the current passage (or of the last one) are listed
|
|
|
169
293
|
|
|
170
294
|
### When the Wi-Fi drops
|
|
171
295
|
|
|
172
|
-
Keep logging. The header shows **Not connected** and how many entries are waiting. Each entry is kept on the tablet with
|
|
296
|
+
Keep logging. The header shows **Not connected** and how many entries are waiting. Each entry is kept on the tablet with
|
|
297
|
+
the time it was made, and sent in order as soon as the server answers again, with the position the track recorded at
|
|
298
|
+
that time. An entry sent just before the connection dropped is never logged twice.
|
|
173
299
|
|
|
174
|
-
If the server refuses a waiting entry when it comes back — typically nothing to attach it to — it is shown in red in the
|
|
300
|
+
If the server refuses a waiting entry when it comes back — typically nothing to attach it to — it is shown in red in the
|
|
301
|
+
latest entries, to discard.
|
|
175
302
|
|
|
176
|
-
**Starting the app with no connection** needs HTTPS (see
|
|
303
|
+
**Starting the app with no connection** needs HTTPS (see
|
|
304
|
+
[Troubleshooting](#the-tablet-app-does-not-start-without-a-connection)). Over plain HTTP the app still keeps entries
|
|
305
|
+
through a dropout, as long as it was loaded beforehand.
|
|
177
306
|
|
|
178
307
|
### With Signal K security enabled
|
|
179
308
|
|
|
180
309
|
Logging needs read/write access. The first time, the app shows **This tablet needs access**:
|
|
181
310
|
|
|
182
311
|
1. Tap **Request access for this tablet**.
|
|
183
|
-
2. In the Signal K admin, open **Security → Access Requests**, and approve **Chiplog tablet** with **read/write**
|
|
312
|
+
2. In the Signal K admin, open **Security → Access Requests**, and approve **Chiplog tablet** with **read/write**
|
|
313
|
+
permission. Choose a token expiry of **NEVER** so the tablet is not locked out at sea.
|
|
184
314
|
3. Within a few seconds, the tablet is in. It keeps its token.
|
|
185
315
|
|
|
186
|
-
To revoke it, delete the device under **Security → Devices**: the tablet asks for access again. **Sign in instead** uses
|
|
316
|
+
To revoke it, delete the device under **Security → Devices**: the tablet asks for access again. **Sign in instead** uses
|
|
317
|
+
a regular Signal K user account.
|
|
187
318
|
|
|
188
|
-
## Configuration
|
|
319
|
+
## Configuration 🔧
|
|
189
320
|
|
|
190
321
|
In the Signal K admin, **Apps & Plugins → Configuration → Chiplog**.
|
|
191
322
|
|
|
192
|
-
| Setting
|
|
193
|
-
|
|
|
194
|
-
| Stop duration
|
|
195
|
-
| Under-way speed without navigation.state
|
|
196
|
-
| Propulsion assumed without engine data
|
|
197
|
-
| Instrument snapshot interval
|
|
198
|
-
| Track point interval
|
|
199
|
-
| Place matching radius
|
|
200
|
-
| Name departures and arrivals with online geocoding
|
|
201
|
-
| Geocoding service
|
|
202
|
-
|
|
|
203
|
-
|
|
|
204
|
-
|
|
|
205
|
-
|
|
|
206
|
-
|
|
|
207
|
-
|
|
|
208
|
-
|
|
|
209
|
-
|
|
|
210
|
-
|
|
|
211
|
-
|
|
|
212
|
-
|
|
|
213
|
-
|
|
|
214
|
-
|
|
|
215
|
-
| InfluxDB
|
|
216
|
-
| InfluxDB
|
|
217
|
-
|
|
218
|
-
|
|
323
|
+
| Setting | Default | What it does |
|
|
324
|
+
| ---------------------------------------------------------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
325
|
+
| Stop duration within which a new departure continues the passage | 30 min | A passage closes when the boat stops; leaving again sooner reopens it, the stop kept as a stopover. |
|
|
326
|
+
| Under-way speed without navigation.state | 1 kn | Used only without signalk-autostate: under way above it, stopped below half of it. |
|
|
327
|
+
| Propulsion assumed without engine data | sail | When nothing says whether the engine is running. Set to engine on a motorboat. |
|
|
328
|
+
| Instrument snapshot interval | 60 min | Readings on this clock boundary during a passage. |
|
|
329
|
+
| Track point interval | 15 s | A track point at least this often while moving. |
|
|
330
|
+
| Place matching radius | 200 m | A departure or arrival this close to a known place takes its name. |
|
|
331
|
+
| Name departures and arrivals with online geocoding | on | Turn off to never send positions online; places are then named after their coordinates until corrected. |
|
|
332
|
+
| Geocoding service | `https://nominatim.openstreetmap.org` | Any Nominatim-compatible service, e.g. a self-hosted one. |
|
|
333
|
+
| Read each journal line against the nearest landmark | on | Fetches the landmarks of the areas sailed through from OpenStreetMap, so each position is also given as a bearing and distance from one. Turn off to keep the coordinates alone. |
|
|
334
|
+
| Landmark service (Overpass API) | `https://overpass-api.de/api/interpreter` | Any Overpass-compatible service, e.g. a self-hosted one. |
|
|
335
|
+
| Fetch the tide forecast at departure | on | Turn off to never send the departure position online; the passage page then shows no tide. |
|
|
336
|
+
| Marine service | `https://marine-api.open-meteo.com/v1/marine` | Any Open-Meteo Marine-compatible service, e.g. a self-hosted one. Serves the tide, and the sea state and current of the weather forecast. |
|
|
337
|
+
| Fetch the marine weather forecast at departure | on | Turn off to never send the departure position to the weather services; the passage page and the PDF then show no forecast. |
|
|
338
|
+
| Weather service | `https://api.open-meteo.com/v1/forecast` | Any Open-Meteo-compatible forecast service, e.g. a self-hosted one. |
|
|
339
|
+
| USB export directory | — | Where the abandon-ship copy is written, e.g. `/media/usb`. Empty turns the USB copy off. |
|
|
340
|
+
| Automatic USB copy interval | 15 min | How often the USB copy is brought up to date. 0 turns the periodic copy off. |
|
|
341
|
+
| Copy to the USB drive at each arrival | on | Brings the USB copy up to date as soon as a passage ends. |
|
|
342
|
+
| Logbook language (PDF) | en | Language of the PDF logbooks on the USB drive (English or French). |
|
|
343
|
+
| Ship's time zone (PDF) | the server's | Time zone of the PDF logbooks on the USB drive, e.g. `Europe/Paris`. |
|
|
344
|
+
| Wind speed thresholds | 20, 30 kn | Logged when the 2-minute average true wind crosses them. |
|
|
345
|
+
| Barometric drop warning | 4 hPa / 3 h | 0 turns it off. |
|
|
346
|
+
| InfluxDB host (retrospective analysis) | — | Local or remote host of the InfluxDB 1.x database signalk-to-influxdb writes to. Empty turns the retrospective analysis page off. |
|
|
347
|
+
| InfluxDB port | 8086 | |
|
|
348
|
+
| InfluxDB database | — | |
|
|
349
|
+
| InfluxDB username / password | — | Leave empty if the database needs none. |
|
|
350
|
+
| InfluxDB protocol | http | `http` or `https`. |
|
|
351
|
+
| InfluxDB vessel context | this server's own | Only needed running the replay from a different Signal K server than the one that wrote the history, e.g. development pointed at a production database. |
|
|
352
|
+
|
|
353
|
+
## Signal K data used 🔌
|
|
219
354
|
|
|
220
355
|
None of these is required except position and speed over ground; each feature uses what the boat has.
|
|
221
356
|
|
|
@@ -227,40 +362,74 @@ None of these is required except position and speed over ground; each feature us
|
|
|
227
362
|
| Boat status | `tanks.*.*.currentLevel`, `.currentVolume`, `.capacity`, `.name`, `electrical.batteries.*.voltage`, `.current`, `.capacity.stateOfCharge`, `.temperature`, `.name` |
|
|
228
363
|
| Events | `notifications.*`, `steering.autopilot.state`, `.mode`, `.engaged`, `.target`, `environment.wind.speedTrue`, `environment.outside.pressure` |
|
|
229
364
|
|
|
230
|
-
## Backups and abandon ship
|
|
231
|
-
|
|
232
|
-
- **Download** — Export page → PDF (a paper-style logbook: a page per day with time, position, course, speed, wind,
|
|
233
|
-
|
|
234
|
-
|
|
365
|
+
## Backups and abandon ship 🛟
|
|
366
|
+
|
|
367
|
+
- **Download** — Export page → PDF (a paper-style logbook: a page per day with time, position, course, speed, wind,
|
|
368
|
+
barometer, depth, engine or sail and remarks, handwritten notes and the crew aboard each passage included), JSON (the
|
|
369
|
+
complete record, including tracks and handwriting), CSV (logbook lines in nautical units, for a spreadsheet) or GPX
|
|
370
|
+
(tracks).
|
|
371
|
+
- **USB drive** — leave a USB drive plugged into the server and set the USB export directory. Chiplog then keeps a copy
|
|
372
|
+
on it by itself: every 15 minutes and as soon as a passage ends (both configurable). **Write to the USB drive now** on
|
|
373
|
+
the Export page makes a copy immediately. The copy fills a `chiplog/` folder on the drive with one PDF, JSON, CSV and
|
|
374
|
+
GPX file per passage, named so that sorting by name sorts by date — e.g.
|
|
375
|
+
`2026-09-13_0612Z_La-Rochelle_Les-Sables-d-Olonne.csv` (times in UTC; a passage in progress ends in `underway`).
|
|
376
|
+
- Each export writes only passages that are new or changed since the last one, and removes the files of passages
|
|
377
|
+
deleted, merged or renamed. Other files in the folder are left alone.
|
|
235
378
|
- Each file is flushed to the drive before it appears, so pulling the drive out never leaves a half-written file.
|
|
236
379
|
- The Export page shows the schedule, the last copy, the next one, and the last failure if any.
|
|
237
380
|
- **The database** — `chiplog.sqlite` in the plugin's data folder can be copied while the plugin is stopped.
|
|
238
381
|
|
|
239
|
-
## Retrospective analysis
|
|
240
|
-
|
|
241
|
-
Already have a history of the boat's Signal K data before Chiplog was installed, or from a period the plugin was
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
- **
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
- **
|
|
382
|
+
## Retrospective analysis 🕓
|
|
383
|
+
|
|
384
|
+
Already have a history of the boat's Signal K data before Chiplog was installed, or from a period the plugin was
|
|
385
|
+
stopped? The **Retrospective** page (admin access) reconstructs those passages from it, using the exact same detection
|
|
386
|
+
Chiplog runs live — the same thresholds, so a reconstructed passage is one Chiplog would have logged had it been running
|
|
387
|
+
at the time.
|
|
388
|
+
|
|
389
|
+
- **Requires [signalk-to-influxdb](https://github.com/tkurki/signalk-to-influxdb)** (a recommended companion plugin)
|
|
390
|
+
already having written the boat's data into an InfluxDB 1.x database — local or on another machine, set in **Apps &
|
|
391
|
+
Plugins → Configuration**: host, port, database, and a username/password if it needs one.
|
|
392
|
+
- Pick a **from** and **to** date on the Retrospective page and start it. It runs in the background — the page shows its
|
|
393
|
+
progress — and can be cancelled at any point; a first quick pass finds when the boat moved, and only those stretches
|
|
394
|
+
are then fetched and reconstructed, so weeks in port take next to no time. Once done, the page sums up what it added:
|
|
395
|
+
passages, distance, time under engine and sail, track points and events; what was already reconstructed up to that
|
|
396
|
+
point stays on record.
|
|
397
|
+
- **Refuses to run while a passage is under way**, whatever the date range asked for — it would be reconstructing
|
|
398
|
+
history through the same detection that is simultaneously tracking the live passage.
|
|
399
|
+
- **Refuses a range that overlaps a passage already logged**, to avoid a duplicate or a conflicting one. Reconstruction
|
|
400
|
+
only ever adds passages; it does not edit or merge into an existing one.
|
|
401
|
+
- **What is not reconstructed**: Signal K alarms and emergencies (`sk_alarm` events), since a typical InfluxDB history
|
|
402
|
+
does not archive notifications the way it does a numeric reading; strong-wind and falling-barometer events while the
|
|
403
|
+
boat lay still between passages; and the extra track points recorded live on turns and speed changes — a reconstructed
|
|
404
|
+
track has one point per **Track point interval**. Everything else read from a continuously published path — position,
|
|
405
|
+
speed, wind, engine, autopilot, depth, barometer — is reconstructed the same as live.
|
|
406
|
+
|
|
407
|
+
## Privacy and online services 🔒
|
|
408
|
+
|
|
409
|
+
- **Place names.** With geocoding on, the position of each departure and arrival that matches no known place is sent to
|
|
410
|
+
the geocoding service — OpenStreetMap's public Nominatim by default. Nothing else is sent, and nothing at all when it
|
|
411
|
+
is off.
|
|
412
|
+
- **Landmarks.** With them on, the area a passage sailed through — a half-degree box, not its track — is sent to the
|
|
413
|
+
Overpass service, OpenStreetMap's public instance by default, once per area ever. Nothing at all when it is off.
|
|
414
|
+
- **Tide forecast.** With it on, the departure position of each passage is sent to the tide service — the public
|
|
415
|
+
Open-Meteo by default — once, at departure. Nothing at all when it is off.
|
|
416
|
+
- **Weather forecast.** With it on, the departure position of each passage is sent to the weather service and to the
|
|
417
|
+
marine service — both the public Open-Meteo by default — once, at departure. Nothing at all when it is off.
|
|
418
|
+
- **Maps.** The logbook webapp loads map tiles from OpenStreetMap and OpenSeaMap while the device viewing it is online.
|
|
419
|
+
Offline, the track is still drawn, on a blank background.
|
|
420
|
+
- **Retrospective analysis.** Running one queries the InfluxDB database set in the plugin configuration — the boat's
|
|
421
|
+
own, local or remote, never a third party — for the Signal K history in the requested range.
|
|
255
422
|
- **Nothing else** leaves the boat. There is no account, analytics or cloud service.
|
|
256
423
|
|
|
257
|
-
Map data and place names © OpenStreetMap contributors (ODbL); seamarks © OpenSeaMap; tide data ©
|
|
424
|
+
Map data and place names © OpenStreetMap contributors (ODbL); seamarks © OpenSeaMap; tide and weather data ©
|
|
425
|
+
[Open-Meteo.com](https://open-meteo.com/) (CC BY 4.0).
|
|
258
426
|
|
|
259
|
-
## Troubleshooting
|
|
427
|
+
## Troubleshooting 🐛
|
|
260
428
|
|
|
261
429
|
### "Chiplog is not running"
|
|
262
430
|
|
|
263
|
-
The plugin is disabled or failed to start. Enable it under **Apps & Plugins → Configuration**, and check **Server →
|
|
431
|
+
The plugin is disabled or failed to start. Enable it under **Apps & Plugins → Configuration**, and check **Server →
|
|
432
|
+
Server Logs** if it does not start.
|
|
264
433
|
|
|
265
434
|
### "Detected from speed alone"
|
|
266
435
|
|
|
@@ -268,20 +437,27 @@ Chiplog works, but departures and arrivals are decided from speed only. The mess
|
|
|
268
437
|
|
|
269
438
|
- **"install signalk-autostate"** — nothing publishes `navigation.state`. Install and enable signalk-autostate.
|
|
270
439
|
- **"until signalk-autostate makes its first decision"** — normal for a minute or two after the server starts.
|
|
271
|
-
- **"has not been updated since…"** — the source named stopped publishing. signalk-autostate republishes every 10
|
|
272
|
-
|
|
440
|
+
- **"has not been updated since…"** — the source named stopped publishing. signalk-autostate republishes every 10
|
|
441
|
+
minutes while it receives position and speed: check that the GPS data reaches the server, and that the plugin is
|
|
442
|
+
enabled.
|
|
443
|
+
- **"is “default” (from nmea0183.AI)"** — another device publishes a navigational status Chiplog does not use, typically
|
|
444
|
+
the boat's own AIS transponder, and signalk-autostate's value is not there to take over. Check that signalk-autostate
|
|
445
|
+
is enabled; Chiplog prefers its value over any other source.
|
|
273
446
|
|
|
274
447
|
### Passages are not opening
|
|
275
448
|
|
|
276
|
-
Check that `navigation.position` and `navigation.speedOverGround` are updating under **Data → Browser** in the Signal K
|
|
449
|
+
Check that `navigation.position` and `navigation.speedOverGround` are updating under **Data → Browser** in the Signal K
|
|
450
|
+
admin. Without current data, Chiplog neither opens nor closes passages, and the status shows **Waiting for data**.
|
|
277
451
|
|
|
278
452
|
### "Your Signal K account is not allowed to do this"
|
|
279
453
|
|
|
280
|
-
Security is on and you are not signed in, or your account is read-only. Corrections need read/write access; deleting
|
|
454
|
+
Security is on and you are not signed in, or your account is read-only. Corrections need read/write access; deleting
|
|
455
|
+
passages and writing to the USB drive need an admin.
|
|
281
456
|
|
|
282
457
|
### The tablet says the server does not accept device access requests
|
|
283
458
|
|
|
284
|
-
Turn on **Allow New Device Registration** under **Security → Settings** in the Signal K admin, or use **Sign in
|
|
459
|
+
Turn on **Allow New Device Registration** under **Security → Settings** in the Signal K admin, or use **Sign in
|
|
460
|
+
instead**.
|
|
285
461
|
|
|
286
462
|
### "No passage to log this in"
|
|
287
463
|
|
|
@@ -289,43 +465,68 @@ No passage is open and the boat is not near the last arrival. Tap **Cast off** o
|
|
|
289
465
|
|
|
290
466
|
### The tablet app does not start without a connection
|
|
291
467
|
|
|
292
|
-
Browsers only allow an app to start offline and to be installed over HTTPS. Turn on SSL under **Server → Settings** in
|
|
468
|
+
Browsers only allow an app to start offline and to be installed over HTTPS. Turn on SSL under **Server → Settings** in
|
|
469
|
+
the Signal K admin, restart, and open the app with `https://` on the SSL port. Over plain HTTP, the app still keeps
|
|
470
|
+
entries through Wi-Fi dropouts once it is loaded.
|
|
293
471
|
|
|
294
472
|
### "The last copy failed" on the Export page
|
|
295
473
|
|
|
296
|
-
The USB drive is not mounted at the configured directory, or cannot be written. The failure is also written once to the
|
|
474
|
+
The USB drive is not mounted at the configured directory, or cannot be written. The failure is also written once to the
|
|
475
|
+
Signal K server log and shown in the plugin status. Plug the drive back in — and check it is mounted at the same place —
|
|
476
|
+
and the next automatic copy catches up with everything that changed meanwhile.
|
|
297
477
|
|
|
298
478
|
### Wrong dates in the logbook
|
|
299
479
|
|
|
300
|
-
The server's clock is wrong — common on a Raspberry Pi without a real-time clock. Set it from GPS with
|
|
480
|
+
The server's clock is wrong — common on a Raspberry Pi without a real-time clock. Set it from GPS with
|
|
481
|
+
`signalk-set-system-time`.
|
|
301
482
|
|
|
302
483
|
### Handwriting strokes are dropped or turn into typed text
|
|
303
484
|
|
|
304
|
-
On an iPad, this is Apple's **Scribble** intercepting the Apple Pencil before the page sees it — a known iPadOS/Safari
|
|
485
|
+
On an iPad, this is Apple's **Scribble** intercepting the Apple Pencil before the page sees it — a known iPadOS/Safari
|
|
486
|
+
limitation with no web-page-level fix (Scribble runs beneath the browser). If it happens often, turn Scribble off under
|
|
487
|
+
**Settings → Apple Pencil → Scribble**; a tablet dedicated to Chiplog does not need it.
|
|
305
488
|
|
|
306
489
|
### A retrospective analysis finishes but reconstructs nothing
|
|
307
490
|
|
|
308
|
-
Signal K tags historical data with the vessel it came from; a replay only reads data tagged for its own vessel. This
|
|
491
|
+
Signal K tags historical data with the vessel it came from; a replay only reads data tagged for its own vessel. This
|
|
492
|
+
shows up running the replay from a different Signal K server than the one that wrote the history — a development
|
|
493
|
+
instance pointed at a production database, typically — since each server has its own vessel identity by default. The
|
|
494
|
+
replay's error names the vessel contexts it actually found in the database; set the matching one as **InfluxDB vessel
|
|
495
|
+
context** in the plugin configuration.
|
|
309
496
|
|
|
310
497
|
### A retrospective analysis takes minutes then fails with no clear reason
|
|
311
498
|
|
|
312
|
-
The InfluxDB server did not answer — unreachable, overloaded, a firewall or a VPN not connected. Each query now gives up
|
|
499
|
+
The InfluxDB server did not answer — unreachable, overloaded, a firewall or a VPN not connected. Each query now gives up
|
|
500
|
+
after 30 seconds with the connection problem it ran into, rather than hanging until some far longer, less informative
|
|
501
|
+
failure; check that the server named in the plugin configuration is reachable from wherever Signal K runs, and that it
|
|
502
|
+
is not overloaded.
|
|
313
503
|
|
|
314
504
|
### A retrospective analysis over several days makes the InfluxDB server unresponsive
|
|
315
505
|
|
|
316
|
-
The replay first reads one mean speed per minute, a week at a time, then fetches only the stretches where the boat
|
|
506
|
+
The replay first reads one mean speed per minute, a week at a time, then fetches only the stretches where the boat
|
|
507
|
+
moved, six hours at a time and already reduced to one value per track interval, with a short pause between requests,
|
|
508
|
+
specifically so this does not happen — a boat's InfluxDB often shares a resource-constrained host (a Raspberry Pi) with
|
|
509
|
+
Signal K itself, and one query spanning weeks across every path at once can overwhelm it. If it still struggles on a
|
|
510
|
+
very small or busy host, run the reconstruction over shorter date ranges instead of the whole history at once.
|
|
317
511
|
|
|
318
512
|
### Reconstructed passages keep their provisional place names for a while
|
|
319
513
|
|
|
320
|
-
A replay wakes the geocoding lookup as soon as it finishes, but the lookup itself still needs internet access to succeed
|
|
514
|
+
A replay wakes the geocoding lookup as soon as it finishes, but the lookup itself still needs internet access to succeed
|
|
515
|
+
— the passage page shows the raw coordinates until it does. If the boat (or the Signal K server running the replay) has
|
|
516
|
+
no internet access at the time, naming is retried on the same backoff as any other departure or arrival, up to an hour
|
|
517
|
+
between attempts; nothing is lost, it just takes longer to resolve.
|
|
321
518
|
|
|
322
|
-
## Limitations
|
|
519
|
+
## Limitations 🚧
|
|
323
520
|
|
|
324
521
|
- **Not yet:** a places page, and editing manoeuvre shortcuts from the webapps.
|
|
325
|
-
- **Offline charts** are not provided.
|
|
522
|
+
- **Offline charts** are not provided; the animation draws the tracks on a blank sea when there is no connection.
|
|
523
|
+
- **The MP4 export needs a browser with WebCodecs** — Chrome, Edge, Safari 17 or Firefox 130 and later. Without it the
|
|
524
|
+
animation still plays on screen, and the export button is simply not offered.
|
|
525
|
+
- **A long animation takes a while to export**: every frame waits for its map before it is drawn, so the video is the
|
|
526
|
+
same whatever the connection was doing, but a long range means a lot of tiles. Turning the seamarks off halves them.
|
|
326
527
|
- **One vessel per Signal K server**, and no per-crew-member authorship.
|
|
327
528
|
|
|
328
|
-
## Development
|
|
529
|
+
## Development 🧑💻
|
|
329
530
|
|
|
330
531
|
```bash
|
|
331
532
|
npm install # also copies the browser libraries into public/vendor/
|
|
@@ -334,10 +535,15 @@ npm run lint
|
|
|
334
535
|
npm run demo:seed -- /tmp/chiplog-demo # a demo logbook to try the webapps with
|
|
335
536
|
```
|
|
336
537
|
|
|
337
|
-
The functional specification is in [docs/SPEC.md](docs/SPEC.md), the data model in
|
|
538
|
+
The functional specification is in [docs/SPEC.md](docs/SPEC.md), the data model in
|
|
539
|
+
[docs/DATA_MODEL.md](docs/DATA_MODEL.md), and the REST API in [docs/API.md](docs/API.md). [CLAUDE.md](CLAUDE.md)
|
|
540
|
+
describes the code layout and conventions.
|
|
338
541
|
|
|
339
|
-
`docs/screenshots/` holds the images the Signal K App Store shows for this plugin (`signalk.screenshots` in
|
|
542
|
+
`docs/screenshots/` holds the images the Signal K App Store shows for this plugin (`signalk.screenshots` in
|
|
543
|
+
`package.json`), taken against a demo logbook (`npm run demo:seed`) with a real browser, e.g.
|
|
544
|
+
`google-chrome --headless --window-size=1280,800 --screenshot=docs/screenshots/01-logbook.png http://localhost:3000/signalk-chiplog/?lang=en`.
|
|
545
|
+
Retake them after a visible UI change.
|
|
340
546
|
|
|
341
|
-
## License
|
|
547
|
+
## License 📄
|
|
342
548
|
|
|
343
549
|
MIT — see [LICENSE](LICENSE). Changes are listed in [CHANGELOG.md](CHANGELOG.md).
|