@mxtommy/kip 4.6.0 → 4.7.0-beta.2
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 +2 -2
- package/package.json +5 -5
- package/plugin/index.js +38 -40
- package/public/3rdpartylicenses.txt +36 -0
- package/public/assets/help-docs/dashboards.md +3 -3
- package/public/assets/help-docs/datainspector.md +3 -3
- package/public/assets/help-docs/history-api.md +31 -21
- package/public/assets/help-docs/menu.json +1 -1
- package/public/assets/help-docs/nodered-control-flows.md +4 -4
- package/public/assets/help-docs/putcontrols.md +6 -6
- package/public/assets/help-docs/widget-historical-series.md +55 -11
- package/public/assets/help-docs/zones.md +1 -1
- package/public/assets/svg/icons.svg +17 -0
- package/public/{chunk-AC6VD2FN.js → chunk-2GOHQZH5.js} +4 -4
- package/public/{chunk-3JA4CQ7T.js → chunk-3MSOVKX6.js} +4 -4
- package/public/{chunk-BMHMHQFO.js → chunk-64MHGMIL.js} +1 -1
- package/public/{chunk-B4NYOD6L.js → chunk-7EAIOLCB.js} +1 -1
- package/public/{chunk-UYHRT3PR.js → chunk-7H5VXIPS.js} +1 -1
- package/public/{chunk-ZY3U4H4Z.js → chunk-AZC2WKQI.js} +1 -1
- package/public/{chunk-MGLD6QDJ.js → chunk-B3VMWHNV.js} +5 -5
- package/public/{chunk-PPF5S5CV.js → chunk-CHMMSVYD.js} +1 -1
- package/public/{chunk-CYTLQDGF.js → chunk-CMHH7BXX.js} +1 -1
- package/public/{chunk-MDNGWQNG.js → chunk-EZZ4IJBX.js} +7 -7
- package/public/{chunk-5SAXWR6Z.js → chunk-FVGLVFWP.js} +8 -8
- package/public/{chunk-QU3JR4YV.js → chunk-FYDLTNP4.js} +1 -1
- package/public/chunk-MXUEYEZU.js +5 -0
- package/public/{chunk-ZXO4VMEH.js → chunk-NFUW7ILE.js} +1 -1
- package/public/{chunk-356CW47X.js → chunk-NK7SNP45.js} +1 -1
- package/public/{chunk-NJISHUGY.js → chunk-PTLDR7X7.js} +1 -1
- package/public/chunk-Y4DXERRE.js +50 -0
- package/public/index.html +1 -1
- package/public/{main-I33LH3HC.js → main-VB3XIM4H.js} +1 -1
- package/public/chunk-6A4NRSCL.js +0 -5
- package/public/chunk-P3M6SJQT.js +0 -50
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# v4.6.0
|
|
2
2
|
## Improvements
|
|
3
|
-
* Built-in Time-Series storage and History-API provider now use the native node:sqlite feature, eliminating
|
|
3
|
+
* Built-in Time-Series storage and History-API provider now use the native node:sqlite feature, eliminating binary and external dependencies.
|
|
4
4
|
* Requires Node.js 22.5.0 or newer. If you use an older Node.js version, you must select an alternative History-API provider.
|
|
5
|
-
* **IMPORTANT:** Before upgrading Node.js, always confirm your Signal K server
|
|
5
|
+
* **IMPORTANT:** Before upgrading Node.js, always confirm your Signal K server and OS supports the required Node.js version. See the [Signal K installation documentation](https://demo.signalk.org/documentation/Installation.html).
|
|
6
6
|
## Fixes
|
|
7
7
|
* Extending v4.5.x features to VenusOS (32bit OS) - Error: Failed to start: Error loading duckdb native binding: unsupported arch 'arm' for platform 'linux'. Fixes #979
|
|
8
8
|
* Uninstallation does not remove all files. Fixes #981
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mxtommy/kip",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.7.0-beta.2",
|
|
4
4
|
"description": "An advanced and versatile marine instrumentation package to display Signal K data.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -76,10 +76,10 @@
|
|
|
76
76
|
"@angular/platform-browser": "21.2.1",
|
|
77
77
|
"@angular/platform-browser-dynamic": "21.2.1",
|
|
78
78
|
"@angular/router": "21.2.1",
|
|
79
|
-
"@angular-devkit/build-angular": "^21.1
|
|
79
|
+
"@angular-devkit/build-angular": "^21.2.1",
|
|
80
80
|
"@angular-devkit/schematics-cli": "^20.1.6",
|
|
81
|
-
"@angular/build": "^21.1
|
|
82
|
-
"@angular/cli": "^21.1
|
|
81
|
+
"@angular/build": "^21.2.1",
|
|
82
|
+
"@angular/cli": "^21.2.1",
|
|
83
83
|
"@angular/compiler-cli": "21.2.1",
|
|
84
84
|
"@angular/language-service": "21.2.1",
|
|
85
85
|
"@types/canvas-gauges": "^2.1.8",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"@types/js-quantities": "^1.6.6",
|
|
90
90
|
"@types/lodash-es": "^4.17.9",
|
|
91
91
|
"@types/node": "^24.1.0",
|
|
92
|
-
"angular-eslint": "21.
|
|
92
|
+
"angular-eslint": "21.3.0",
|
|
93
93
|
"codelyzer": "^6.0.0",
|
|
94
94
|
"eslint": "^9.29.0",
|
|
95
95
|
"jasmine-core": "~4.0.1",
|
package/plugin/index.js
CHANGED
|
@@ -37,6 +37,14 @@ const server_api_1 = require("@signalk/server-api");
|
|
|
37
37
|
const openapi = __importStar(require("./openApi.json"));
|
|
38
38
|
const history_series_service_1 = require("./history-series.service");
|
|
39
39
|
const sqlite_history_storage_service_1 = require("./sqlite-history-storage.service");
|
|
40
|
+
async function defaultGetSqliteModule() {
|
|
41
|
+
try {
|
|
42
|
+
return await Promise.resolve().then(() => __importStar(require('node:sqlite')));
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
40
48
|
const start = (server) => {
|
|
41
49
|
const mutableOpenApi = JSON.parse(JSON.stringify(openapi.default ?? openapi));
|
|
42
50
|
const API_PATHS = {
|
|
@@ -87,7 +95,6 @@ const start = (server) => {
|
|
|
87
95
|
const SQLITE_INIT_WAIT_TIMEOUT_MS = 5000;
|
|
88
96
|
const MIN_NODE_SQLITE_VERSION = '22.5.0';
|
|
89
97
|
let streamUnsubscribes = [];
|
|
90
|
-
let historyApiRegistry = null;
|
|
91
98
|
let historyApiProviderRegistered = false;
|
|
92
99
|
let runtimeSqliteUnavailableMessage = null;
|
|
93
100
|
function logRuntimeDependencyVersions() {
|
|
@@ -95,16 +102,12 @@ const start = (server) => {
|
|
|
95
102
|
const sqliteAvailability = modeConfig && modeConfig.nodeSqliteAvailable ? 'available' : 'unavailable';
|
|
96
103
|
server.debug(`[KIP][RUNTIME] ${nodeIdentity} node:sqlite=${sqliteAvailability}`);
|
|
97
104
|
}
|
|
98
|
-
async function getSqliteModule() {
|
|
99
|
-
try {
|
|
100
|
-
return await Promise.resolve().then(() => __importStar(require('node:sqlite')));
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
105
|
async function detectSqliteRuntime() {
|
|
107
|
-
const
|
|
106
|
+
const exportedStart = start;
|
|
107
|
+
const resolveSqliteModule = typeof exportedStart.getSqliteModule === 'function'
|
|
108
|
+
? exportedStart.getSqliteModule
|
|
109
|
+
: defaultGetSqliteModule;
|
|
110
|
+
const sqliteModule = await resolveSqliteModule();
|
|
108
111
|
if (!sqliteModule) {
|
|
109
112
|
runtimeSqliteUnavailableMessage = `node:sqlite requires Node ${MIN_NODE_SQLITE_VERSION}+`;
|
|
110
113
|
return false;
|
|
@@ -470,7 +473,17 @@ const start = (server) => {
|
|
|
470
473
|
server.debug('[KIP][HISTORY_PROVIDER] registration skipped reason=config-disabled');
|
|
471
474
|
return;
|
|
472
475
|
}
|
|
473
|
-
const
|
|
476
|
+
const serverWithHistoryApi = server;
|
|
477
|
+
const registerHistoryApiProvider = typeof serverWithHistoryApi.registerHistoryApiProvider === 'function'
|
|
478
|
+
? serverWithHistoryApi.registerHistoryApiProvider.bind(serverWithHistoryApi)
|
|
479
|
+
: (typeof serverWithHistoryApi.history?.registerHistoryApiProvider === 'function'
|
|
480
|
+
? serverWithHistoryApi.history.registerHistoryApiProvider.bind(serverWithHistoryApi.history)
|
|
481
|
+
: null);
|
|
482
|
+
// guard when running in SK variants that do not support History API registration
|
|
483
|
+
if (!registerHistoryApiProvider) {
|
|
484
|
+
server.debug('[KIP][HISTORY_PROVIDER] registration skipped reason=api-unavailable');
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
474
487
|
const apiProvider = {
|
|
475
488
|
getValues: async (query) => {
|
|
476
489
|
const resolved = await resolveHistoryValues(buildHistoryQueryFromValuesRequest(query));
|
|
@@ -485,26 +498,9 @@ const start = (server) => {
|
|
|
485
498
|
getPaths: (query) => resolveHistoryPaths(buildHistoryQueryFromRangeRequest(query)),
|
|
486
499
|
getContexts: (query) => resolveHistoryContexts(buildHistoryQueryFromRangeRequest(query))
|
|
487
500
|
};
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
? {
|
|
492
|
-
registerHistoryApiProvider: host.registerHistoryApiProvider.bind(host),
|
|
493
|
-
unregisterHistoryApiProvider: typeof host.unregisterHistoryApiProvider === 'function'
|
|
494
|
-
? host.unregisterHistoryApiProvider.bind(host)
|
|
495
|
-
: undefined
|
|
496
|
-
}
|
|
497
|
-
: null);
|
|
498
|
-
if (registry && typeof registry.registerHistoryApiProvider === 'function') {
|
|
499
|
-
registry.registerHistoryApiProvider(apiProvider);
|
|
500
|
-
historyApiProviderRegistered = true;
|
|
501
|
-
if (typeof registry.unregisterHistoryApiProvider === 'function') {
|
|
502
|
-
historyApiRegistry = { unregisterHistoryApiProvider: registry.unregisterHistoryApiProvider.bind(registry) };
|
|
503
|
-
}
|
|
504
|
-
server.debug('[KIP][HISTORY_PROVIDER] registration success provider=kip');
|
|
505
|
-
return;
|
|
506
|
-
}
|
|
507
|
-
server.debug('[KIP][HISTORY_PROVIDER] registration skipped reason=api-unavailable');
|
|
501
|
+
registerHistoryApiProvider(apiProvider);
|
|
502
|
+
historyApiProviderRegistered = true;
|
|
503
|
+
server.debug('[KIP][HISTORY_PROVIDER] registration success provider=kip');
|
|
508
504
|
}
|
|
509
505
|
function rebuildSeriesCaptureSubscriptions() {
|
|
510
506
|
stopSeriesCapture();
|
|
@@ -742,16 +738,16 @@ const start = (server) => {
|
|
|
742
738
|
.catch(() => undefined)
|
|
743
739
|
.then(() => storageService.close(storageLifecycleToken))
|
|
744
740
|
.catch(() => undefined);
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
historyApiRegistry = null;
|
|
741
|
+
const serverWithHistoryApi = server;
|
|
742
|
+
const unregisterHistoryApiProvider = typeof serverWithHistoryApi.unregisterHistoryApiProvider === 'function'
|
|
743
|
+
? serverWithHistoryApi.unregisterHistoryApiProvider.bind(serverWithHistoryApi)
|
|
744
|
+
: (typeof serverWithHistoryApi.history?.unregisterHistoryApiProvider === 'function'
|
|
745
|
+
? serverWithHistoryApi.history.unregisterHistoryApiProvider.bind(serverWithHistoryApi.history)
|
|
746
|
+
: null);
|
|
747
|
+
if (unregisterHistoryApiProvider) {
|
|
748
|
+
unregisterHistoryApiProvider();
|
|
754
749
|
}
|
|
750
|
+
historyApiProviderRegistered = false;
|
|
755
751
|
sqliteInitializationPromise = null;
|
|
756
752
|
const msg = 'Stopped.';
|
|
757
753
|
server.setPluginStatus(msg);
|
|
@@ -1093,4 +1089,6 @@ const start = (server) => {
|
|
|
1093
1089
|
};
|
|
1094
1090
|
return plugin;
|
|
1095
1091
|
};
|
|
1092
|
+
const startWithHooks = start;
|
|
1093
|
+
startWithHooks.getSqliteModule = defaultGetSqliteModule;
|
|
1096
1094
|
module.exports = start;
|
|
@@ -276,6 +276,42 @@ OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
|
276
276
|
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
|
277
277
|
THIS SOFTWARE.
|
|
278
278
|
|
|
279
|
+
--------------------------------------------------------------------------------
|
|
280
|
+
Package: d3-path
|
|
281
|
+
License: "ISC"
|
|
282
|
+
|
|
283
|
+
Copyright 2015-2022 Mike Bostock
|
|
284
|
+
|
|
285
|
+
Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
286
|
+
with or without fee is hereby granted, provided that the above copyright notice
|
|
287
|
+
and this permission notice appear in all copies.
|
|
288
|
+
|
|
289
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
290
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
291
|
+
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
292
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
293
|
+
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
294
|
+
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
|
295
|
+
THIS SOFTWARE.
|
|
296
|
+
|
|
297
|
+
--------------------------------------------------------------------------------
|
|
298
|
+
Package: d3-shape
|
|
299
|
+
License: "ISC"
|
|
300
|
+
|
|
301
|
+
Copyright 2010-2022 Mike Bostock
|
|
302
|
+
|
|
303
|
+
Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
304
|
+
with or without fee is hereby granted, provided that the above copyright notice
|
|
305
|
+
and this permission notice appear in all copies.
|
|
306
|
+
|
|
307
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
308
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
309
|
+
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
310
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
311
|
+
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
312
|
+
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
|
313
|
+
THIS SOFTWARE.
|
|
314
|
+
|
|
279
315
|
--------------------------------------------------------------------------------
|
|
280
316
|
Package: d3-zoom
|
|
281
317
|
License: "ISC"
|
|
@@ -69,9 +69,9 @@ KIP widgets turn Signal K data into readable visuals and controls. Available wid
|
|
|
69
69
|
- **Position** – Displays latitude and longitude for location tracking and navigation.
|
|
70
70
|
- **Static Label** – Add customizable labels to organize and clarify your dashboard layout.
|
|
71
71
|
- **Zones State Panel**: Monitor the health/state of path data. Each panel control displays path data severity and status messages (driven by Signal K metadata zones).
|
|
72
|
-
- **Switch Panel** – Group of toggle switches, indicator lights, and press buttons for digital switching and operations. See [Digital Switching and PUT Path Setup](putcontrols.md).
|
|
73
|
-
- **Slider** – Range slider for adjusting values (e.g. lighting intensity). See [Digital Switching and PUT Path Setup](putcontrols.md).
|
|
74
|
-
- **Multi State Switch** - Lists all available device/path operating modes/states (e.g., On, Off, Charge Only, Invert Only), highlights the current state, and lets you select a new state to send to the device and see the result. See [Digital Switching and PUT Path Setup](putcontrols.md).
|
|
72
|
+
- **Switch Panel** – Group of toggle switches, indicator lights, and press buttons for digital switching and operations. See [Digital Switching and PUT Path Setup](#/help/putcontrols.md).
|
|
73
|
+
- **Slider** – Range slider for adjusting values (e.g. lighting intensity). See [Digital Switching and PUT Path Setup](#/help/putcontrols.md).
|
|
74
|
+
- **Multi State Switch** - Lists all available device/path operating modes/states (e.g., On, Off, Charge Only, Invert Only), highlights the current state, and lets you select a new state to send to the device and see the result. See [Digital Switching and PUT Path Setup](#/help/putcontrols.md).
|
|
75
75
|
- **Compact Linear** – Simple horizontal linear gauge with a large value label and modern look.
|
|
76
76
|
- **Linear** – Horizontal or vertical linear gauge with zone highlighting.
|
|
77
77
|
- **Radial** – Radial gauge with configurable dials and zone highlighting.
|
|
@@ -24,7 +24,7 @@ The Data Inspector is a good way to validate raw data and available paths withou
|
|
|
24
24
|
|
|
25
25
|
2. **PUT Support**:
|
|
26
26
|
- You can see if a path supports PUT operations, indicated by a green checkmark in the **PUT Support** column.
|
|
27
|
-
- For more details on PUT support and how to use it, refer to the [Updating Signal K Data](putcontrols.md) help documentation.
|
|
27
|
+
- For more details on PUT support and how to use it, refer to the [Updating Signal K Data](#/help/putcontrols.md) help documentation.
|
|
28
28
|
|
|
29
29
|
3. **Multiple Data Sources**:
|
|
30
30
|
- The Data Inspector displays how many sources are providing data for each path.
|
|
@@ -42,8 +42,8 @@ The Data Inspector is a good way to validate raw data and available paths withou
|
|
|
42
42
|
|
|
43
43
|
- **Verify PUT Support**:
|
|
44
44
|
- Check if a path supports PUT operations. It is required to configure widgets like Switch Panel, Slider, or Multi State Switch.
|
|
45
|
-
- For more details on PUT support and how to use it, refer to the [Updating Signal K Data](putcontrols.md) help documentation.
|
|
46
|
-
- If you are learning Node-RED flows and want your flow to work with KIP digital switching widgets, continue with [Node-RED Control Flows for KIP Widgets (Beginner Guide)](nodered-control-flows.md).
|
|
45
|
+
- For more details on PUT support and how to use it, refer to the [Updating Signal K Data](#/help/putcontrols.md) help documentation.
|
|
46
|
+
- If you are learning Node-RED flows and want your flow to work with KIP digital switching widgets, continue with [Node-RED Control Flows for KIP Widgets (Beginner Guide)](#/help/nodered-control-flows.md).
|
|
47
47
|
|
|
48
48
|
- **Troubleshoot Data Issues**:
|
|
49
49
|
- The Data Inspector is a good troubleshooting tool, but it should be used with the Signal K Data Browser when trying to understand raw data and behavior. The combination of these tools provides a more complete picture of the data, its processing, and its behavior.
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
## Using
|
|
1
|
+
## Using External History-API Provider to Obtain Historical Data
|
|
2
2
|
|
|
3
|
-
KIP can
|
|
3
|
+
KIP can, using a special type of plugin called a History Provider, automatically request historical data points when opening chart widgets, seamlessly integrating past data with live updates.
|
|
4
4
|
|
|
5
|
-
This enables the display of minutes, hours, days, weeks, etc. of pre-populated historical data immediately—no waiting, no empty charts.
|
|
6
|
-
|
|
7
|
-
A History Provider can also be used as a source for the widget historical data feature.
|
|
8
|
-
|
|
9
|
-
## What Is the History-API?
|
|
10
|
-
|
|
11
|
-
A Signal K server endpoint that provides access to recorded historical data. Behind the endpoint, the data is served by a history provider plugin. KIP automatically requests historical data points when opening chart widgets, pre-filling the chart instead of starting empty.
|
|
5
|
+
This enables the display of minutes, hours, days, weeks, etc. of pre-populated historical data immediately—no waiting, no empty charts.
|
|
12
6
|
|
|
13
7
|
## Which Widgets Support History?
|
|
14
8
|
|
|
@@ -20,15 +14,16 @@ A Signal K server endpoint that provides access to recorded historical data. Beh
|
|
|
20
14
|
### Wind Trends Widget
|
|
21
15
|
- **Supported**: Yes, uses fixed paths (True Wind Direction and Speed).
|
|
22
16
|
- **Requirements**: Time Span of `5 minutes` or `30 minutes`.
|
|
23
|
-
- See
|
|
17
|
+
- See Wind Trends Fixed Paths below for configuration details.
|
|
24
18
|
|
|
25
|
-
###
|
|
19
|
+
### Mini-chart
|
|
20
|
+
NOTE: This is the optional chart that can be display in the background of the Numeric Widget.
|
|
26
21
|
- **Supported**: No. Mini charts use very short time windows (12 seconds) and skip history seeding.
|
|
27
22
|
- Mini charts start live-only for performance reasons.
|
|
28
23
|
|
|
29
24
|
## What Plugins and Signal K Version Are Required?
|
|
30
25
|
|
|
31
|
-
|
|
26
|
+
You will need both support for the History-API version 2 and a compatible History provider. The History-API version 2 was introduced in Signal K version 2.22.1. Currently, two plugins support the v2 History-API:
|
|
32
27
|
|
|
33
28
|
### 1. signalk-to-influxdb2, v2.0.0 or above
|
|
34
29
|
- **Purpose**: Records Signal K data to an InfluxDB v2 time-series database. Requires pre-installed InfluxDB v2.
|
|
@@ -62,40 +57,55 @@ After history data loads:
|
|
|
62
57
|
- The chart will display only live data starting from when it was opened.
|
|
63
58
|
- This is normal and does not indicate an error.
|
|
64
59
|
|
|
65
|
-
##
|
|
60
|
+
## Provider Configuration Information
|
|
61
|
+
|
|
62
|
+
For performance reasons, all KIP charts display a maximum of 120 datapoints. KIP looks at the chart's configured time span 'window', and ask the provider to gather the requested data and to return results as 120 datapoints.
|
|
63
|
+
|
|
64
|
+
When configuring your provider's path sampling rates, insure your sampling rules meet this requirement. Slower sampling rates will create charts with fewer datapoints/of lesser resolution. Higher sampling rates will NOT create charts with more datapoints/of higher resolution.
|
|
65
|
+
|
|
66
|
+
### Historical Widget Charts
|
|
67
|
+
|
|
68
|
+
Collect an appropriate mount of data samples for the smallest **last 15 minutes** window; every 7.5 seconds. Every 15 seconds is not too bad a resolution either.
|
|
69
|
+
|
|
70
|
+
### Wind Trends Fixed Paths
|
|
66
71
|
|
|
67
72
|
The Wind Trends widget uses two fixed Signal K paths:
|
|
68
73
|
- **True Wind Direction**: `environment.wind.directionTrue`
|
|
69
74
|
- **True Wind Speed**: `environment.wind.speedTrue`
|
|
70
75
|
|
|
71
|
-
For Wind Trends to display historical data, both of these paths **must be configured in your chosen History-API plugin**.
|
|
76
|
+
For Wind Trends to display historical data, both of these paths **must be configured in your chosen History-API plugin**.
|
|
77
|
+
|
|
78
|
+
Plan an appropriate data sampling rate to support the chart duration (5 and 30 minutes are supported).
|
|
72
79
|
|
|
73
80
|
## Limitations
|
|
74
81
|
|
|
75
|
-
For historical data to seed
|
|
82
|
+
For historical data to seed charts, you need to, in most cases, to manually configure your chosen provider to collect the said data. This is not an automatic process when using a External History Provider.
|
|
76
83
|
|
|
77
84
|
## Troubleshooting
|
|
78
85
|
|
|
79
86
|
### History Data Is Not Showing
|
|
80
87
|
|
|
81
|
-
**Check 1:
|
|
88
|
+
**Check 1: Are the Technical Requirements Meet?**
|
|
89
|
+
- Confirm that Signal K server version 2.22.1 or above in installed.
|
|
90
|
+
|
|
91
|
+
**Check 2: Is the History-API plugin installed?**
|
|
82
92
|
- Confirm that a History-API plugin is installed and enabled on your Signal K server.
|
|
83
93
|
- Verify that the plugin is running without errors (check server logs).
|
|
84
94
|
|
|
85
|
-
**Check
|
|
95
|
+
**Check 3: Are the paths configured in the plugin?**
|
|
86
96
|
- Open your plugin's configuration settings.
|
|
87
97
|
- Confirm that the paths you're charting (e.g., `navigation.speedThroughWater`) are in the capture list.
|
|
88
98
|
|
|
89
|
-
**Check
|
|
99
|
+
**Check 4: Is there historical data available?**
|
|
90
100
|
- If the plugin was just installed, data will start recording from that moment forward.
|
|
91
101
|
- Charts will not show history for times before the plugin was enabled or the path configured for recording.
|
|
92
102
|
- Allow the plugin to record data for a while (days or weeks) before expecting deep history.
|
|
93
103
|
|
|
94
|
-
**Check
|
|
104
|
+
**Check 5: Is the chart time scale eligible?**
|
|
95
105
|
- Very short time scales (seconds) skip history seeding for performance.
|
|
96
106
|
- Use time scales of **minutes or longer** to enable history seeding.
|
|
97
107
|
|
|
98
|
-
**Check
|
|
108
|
+
**Check 6: Are there any network or permission issues?**
|
|
99
109
|
- Confirm that KIP can reach the Signal K server's History-API endpoint. Use the OpenApi link in the Server Admin pages to the test.
|
|
100
110
|
- Check browser console logs (F12) for any HTTP errors from history requests.
|
|
101
111
|
|
|
@@ -113,4 +123,4 @@ For historical data to seed widgets, you need to, in most cases, manually config
|
|
|
113
123
|
## Questions or Issues?
|
|
114
124
|
|
|
115
125
|
- Refer to the plugin and History-API documentation for plugin-specific configuration and troubleshooting.
|
|
116
|
-
- For general questions or issues, see `Contact-Us` help page—the
|
|
126
|
+
- For general questions or issues, see `Contact-Us` help page—the Signal K community is active on Discord and GitHub.
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"items": [
|
|
13
13
|
{ "title": "Node-RED (Getting Started)", "file": "nodered-control-flows.md" },
|
|
14
14
|
{ "title": "The Embed Page Viewer", "file": "embedwidget.md" },
|
|
15
|
-
{ "title": "
|
|
15
|
+
{ "title": "External History-API Provider", "file": "history-api.md" },
|
|
16
16
|
{ "title": "Grafana Integration", "file": "grafana.md" },
|
|
17
17
|
{ "title": "InfluxDB and Signal K", "file": "influxdb.md" }
|
|
18
18
|
]
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This guide is for first-time Node-RED users who want KIP control widgets to trigger real actions (like GPIO or relay switching) through Signal K. It is not a full Node-RED product guide or a complete flow-programming course. It focuses on the Signal K and KIP-specific parts you need for digital switching.
|
|
4
4
|
|
|
5
|
-
Before you start building flows, read **[Digital Switching and PUT Path Setup](putcontrols.md)** so you understand the core concepts, data flow, and control logic.
|
|
5
|
+
Before you start building flows, read **[Digital Switching and PUT Path Setup](#/help/putcontrols.md)** so you understand the core concepts, data flow, and control logic.
|
|
6
6
|
|
|
7
7
|
## What You Are Building
|
|
8
8
|
|
|
@@ -120,6 +120,6 @@ Use these terms consistently while setting up your flow.
|
|
|
120
120
|
Use these guides next as needed.
|
|
121
121
|
|
|
122
122
|
- SignalK signalk-node-red: [Show and tell](https://github.com/SignalK/signalk-node-red/discussions/categories/show-and-tell)
|
|
123
|
-
- Path requirements and widget compatibility: [Digital Switching and PUT Path Setup](putcontrols.md)
|
|
124
|
-
- Finding paths and checking PUT support: [Data Inspector](datainspector.md)
|
|
125
|
-
- Adding and configuring widgets: [Dashboards and Layout](dashboards.md)
|
|
123
|
+
- Path requirements and widget compatibility: [Digital Switching and PUT Path Setup](#/help/putcontrols.md)
|
|
124
|
+
- Finding paths and checking PUT support: [Data Inspector](#/help/datainspector.md)
|
|
125
|
+
- Adding and configuring widgets: [Dashboards and Layout](#/help/dashboards.md)
|
|
@@ -4,7 +4,7 @@ Use KIP digital switching controls when you want to do real actions from your da
|
|
|
4
4
|
|
|
5
5
|
The focus here is practical KIP setup: what path type to use, what PUT support is needed, and how to avoid common configuration mistakes. This guide supports built-in server handlers, custom plugins, and Node-RED flows.
|
|
6
6
|
|
|
7
|
-
If you are new to Node-RED, start with this guide, then continue with **[Node-RED Control Flows for KIP Widgets (Beginner Guide)](nodered-control-flows.md)** for beginner flow examples.
|
|
7
|
+
If you are new to Node-RED, start with this guide, then continue with **[Node-RED Control Flows for KIP Widgets (Beginner Guide)](#/help/nodered-control-flows.md)** for beginner flow examples.
|
|
8
8
|
|
|
9
9
|
## What PUT Does (and Does Not Do)
|
|
10
10
|
|
|
@@ -14,8 +14,8 @@ PUT writes a value to a Signal K path. By itself, that write does not trigger ha
|
|
|
14
14
|
|
|
15
15
|
Examples of server-side handlers:
|
|
16
16
|
- A built-in server handler
|
|
17
|
-
- A Signal K plugin (see
|
|
18
|
-
- A Node-RED flow (see
|
|
17
|
+
- A Signal K plugin (see Popular Digital Switching Plugins)
|
|
18
|
+
- A Node-RED flow (see Node-RED Control Flows for KIP Widgets - Beginner Guide)
|
|
19
19
|
|
|
20
20
|
## Basic Requirements
|
|
21
21
|
|
|
@@ -96,6 +96,6 @@ If something does not work, check these first.
|
|
|
96
96
|
|
|
97
97
|
Use these guides next as needed.
|
|
98
98
|
|
|
99
|
-
- **Node-RED beginners:** [Node-RED Control Flows for KIP Widgets (Beginner Guide)](nodered-control-flows.md)
|
|
100
|
-
- **Path discovery and validation:** [Data Inspector](datainspector.md)
|
|
101
|
-
- **Widget overview and placement:** [Dashboards and Layout](dashboards.md)
|
|
99
|
+
- **Node-RED beginners:** [Node-RED Control Flows for KIP Widgets (Beginner Guide)](#/help/nodered-control-flows.md)
|
|
100
|
+
- **Path discovery and validation:** [Data Inspector](#/help/datainspector.md)
|
|
101
|
+
- **Widget overview and placement:** [Dashboards and Layout](#/help/dashboards.md)
|
|
@@ -1,8 +1,49 @@
|
|
|
1
|
+
## What is Historical Widget Data
|
|
1
2
|
|
|
3
|
+
KIP is built first for live sailing data.
|
|
4
|
+
To make charts useful right away and give you easy access to widget history, KIP includes a simple built-in history feature called Time-Series.
|
|
2
5
|
|
|
3
|
-
|
|
6
|
+
With this built-in feature, KIP automatically:
|
|
7
|
+
1. Keeps widget history available for quick viewing.
|
|
8
|
+
2. Pre-seeds Data Chart and Wind Trends so they show recent trends immediately.
|
|
9
|
+
3. Syncs with dashboard and widget configuration, and automatically prunes old or unused data.
|
|
4
10
|
|
|
5
|
-
|
|
11
|
+
## Who Is It For
|
|
12
|
+
|
|
13
|
+
This is for users who want history to “just work”:
|
|
14
|
+
* No extra setup.
|
|
15
|
+
* No plugin to install.
|
|
16
|
+
* No data storage rules and retention policies to configure.
|
|
17
|
+
|
|
18
|
+
It is made for quick, hassle-free chart history, not data engineering.
|
|
19
|
+
|
|
20
|
+
## Built-In Time-Series vs External History Provider
|
|
21
|
+
|
|
22
|
+
### Built-In Time-Series (default)
|
|
23
|
+
- Works automatically with your dashboards and widgets.
|
|
24
|
+
- Stores only the data KIP needs for widget history and chart startup.
|
|
25
|
+
- Keeps a small rolling history and removes older data.
|
|
26
|
+
- If you change widgets or chart paths, KIP updates history storage rules automatically.
|
|
27
|
+
- No screen to manually manage what gets recorded.
|
|
28
|
+
|
|
29
|
+
#### What Time-Series Don't Do
|
|
30
|
+
- KIP’s built-in Time-Series is not a full data-logging system. You cannot manually set capture paths, sampling policies, or long-term retention rules in built-in mode. Use an External History Provider for this purpose.
|
|
31
|
+
- The dialog window displaying widget history offers **a fixed set** of the last 15 minutes, 1 hour, 8 hours, or 24 hours of data. If you are in need of more flexible and powerful data analytics capabilities, use Grafana and similar purpose built, comprehensive platforms.
|
|
32
|
+
|
|
33
|
+
### External History Provider (advanced)
|
|
34
|
+
|
|
35
|
+
KIP can disable its built-in Time-Series/provider registration and query any History-API compatible provider instead.
|
|
36
|
+
You then manage capture and retention in that provider.
|
|
37
|
+
|
|
38
|
+
Choose this if you need full control, such as:
|
|
39
|
+
|
|
40
|
+
- Long-term record keeping.
|
|
41
|
+
- Custom retention and sampling rules.
|
|
42
|
+
- Analytics or integration with other tools.
|
|
43
|
+
|
|
44
|
+
When you switch to an external History-API provider, KIP still uses History API queries, but capture/retention behavior is managed by that provider so you then have to **manually manage capture and retention in that provider**.
|
|
45
|
+
|
|
46
|
+
See [External History-API Provider](#/help/history-api.md) for details.
|
|
6
47
|
|
|
7
48
|
## Accessing Widget Historical Charts
|
|
8
49
|
|
|
@@ -42,25 +83,28 @@ After history data loads:
|
|
|
42
83
|
- The chart smoothly transitions from history to live updates.
|
|
43
84
|
- Old data points are removed to maintain a rolling window of the configured time scale.
|
|
44
85
|
|
|
45
|
-
##
|
|
46
|
-
|
|
47
|
-
KIP and its server-side plugin work together to seamlessly monitor dashboard and widget configurations requiring historical data. For numeric and chart-type widgets (such as Data Chart and Wind Trends), time-series data is automatically captured and managed in the background. This enables pre-filling the chart instead of starting empty.
|
|
86
|
+
## What are the Requirements for Historical Widget Data To Work?
|
|
48
87
|
|
|
49
|
-
|
|
88
|
+
I use KIP's Time-Series built-in feature:
|
|
89
|
+
- Node.JS v20.5.0+: The built-in automatic Time-Series feature (integrated management of data) uses node:sqlite released in Node.JS v20.5.0.
|
|
90
|
+
- Signal K version 2.22.1+: The history querying service uses the History-API v2, introduced in Signal K version 2.22.1.
|
|
50
91
|
|
|
51
|
-
|
|
92
|
+
I use an External History Provider:
|
|
93
|
+
- Signal K version 2.22.1+: The history querying service uses the History-API v2, introduced in Signal K version 2.22.1.
|
|
52
94
|
|
|
53
95
|
## Configuration Options
|
|
54
96
|
|
|
55
97
|
Configuration options are found in **Settings → Options → Display** under the Widget Historical Data section.
|
|
56
98
|
|
|
57
99
|
You can:
|
|
58
|
-
- Disable KIP's automatic
|
|
59
|
-
- Disable access to widget historical charts (disables two-finger tap, mouse right-click, or two-finger click on trackpads).
|
|
100
|
+
- Disable KIP's automatic Time-Series in favor of the History-API provider of your choice (See [External History-API Provider](#/help/history-api.md) in the Integrations Help menu for more details).
|
|
101
|
+
- Disable access to widget historical charts dialogue (disables two-finger tap, mouse right-click, or two-finger click on trackpads).
|
|
60
102
|
|
|
61
|
-
If you want to completely disable
|
|
103
|
+
If you want to completely disable the history feature, under the **Settings → Options → Display** tab in the Widget Historical Data group:
|
|
104
|
+
- Select "Other: Use a different History API provider and configure data logging manually" option. This stops the plugin's data capture and historical query services.
|
|
105
|
+
- Toggle the "Disable widget historical charts" switch. This disables pointer events to access the charts dialogue window.
|
|
62
106
|
|
|
63
107
|
## Questions or Issues?
|
|
64
108
|
|
|
65
|
-
- Refer to [
|
|
109
|
+
- Refer to [External History-API Provider](#/help/history-api.md) to learn how to use other History API providers.
|
|
66
110
|
- For general questions or issues, see the `Contact-Us` help page—the KIP community is active on Discord and GitHub.
|
|
@@ -6,7 +6,7 @@ Stay informed about your vessel’s data with Signal K’s state notifications.
|
|
|
6
6
|
## Zones & Notification Configuration
|
|
7
7
|
|
|
8
8
|
**Zones** are value ranges defined as metadata for each data path. Learn more at the [Signal K Metadata documentation](https://signalk.org/specification/1.7.0/doc/data_model_metadata.html).
|
|
9
|
-
To configure metadata in Signal K, visit the [Data Browser server page](
|
|
9
|
+
To configure metadata in Signal K, visit the [Data Browser server page](/../../admin/#/databrowser) and enable the **Meta Data** switch. Here, you can add or edit **methods** and **zones** for any path you want to monitor.
|
|
10
10
|
|
|
11
11
|
> **Note:** Zone values use base units (e.g., wind speed in meters per second). Define your zone ranges using the base unit for each path. KIP will automatically convert and display these values according to your widget’s unit settings.
|
|
12
12
|
|
|
@@ -331,6 +331,23 @@
|
|
|
331
331
|
<path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M10.3004 7.49991C10.3004 8.4943 9.49426 9.30041 8.49988 9.30041C7.50549 9.30041 6.69938 8.4943 6.69938 7.49991C6.69938 6.50553 7.50549 5.69942 8.49988 5.69942C9.49426 5.69942 10.3004 6.50553 10.3004 7.49991ZM11.205 8C10.9699 9.28029 9.84816 10.2504 8.49988 10.2504C7.1516 10.2504 6.0299 9.28029 5.79473 8H0.5C0.223858 8 0 7.77614 0 7.5C0 7.22386 0.223858 7 0.5 7H5.7947C6.0298 5.71962 7.15154 4.74942 8.49988 4.74942C9.84822 4.74942 10.9699 5.71962 11.2051 7H14.5C14.7761 7 15 7.22386 15 7.5C15 7.77614 14.7761 8 14.5 8H11.205Z" />
|
|
332
332
|
<circle cx="8.5" cy="7.5" r="1.5" fill="var(--mat-sys-primary)" />
|
|
333
333
|
</svg>
|
|
334
|
+
<svg id="battery_available" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 48 48">
|
|
335
|
+
<path stroke="currentColor" stroke-linecap="square" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="3" d="M36.2142 13.502H7.28334c-2.36616 0 -4.28432 1.9181 -4.28432 4.2843v12.4311c0 2.3661 1.91816 4.2843 4.28432 4.2843H36.2142c2.3661 0 4.2843 -1.9182 4.2843 -4.2843V17.7863c0 -2.3662 -1.9182 -4.2843 -4.2843 -4.2843Z"></path>
|
|
336
|
+
<path fill="currentColor" stroke="currentColor" stroke-linecap="square" stroke-miterlimit="10" stroke-width="3" d="M22.1236 18.6504H8.40817c-0.20709 0 -0.37497 0.1679 -0.37497 0.375v9.9489c0 0.207 0.16788 0.3749 0.37497 0.3749H22.1236c0.2072 0 0.375 -0.1679 0.375 -0.3749v-9.9489c0 -0.2071 -0.1678 -0.375 -0.375 -0.375Z"></path>
|
|
337
|
+
<path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="3" d="M44.999 20.501v6.9987"></path>
|
|
338
|
+
</svg>
|
|
339
|
+
<svg id="battery_charging" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16">
|
|
340
|
+
<path d="M9.585 2.568a0.5 0.5 0 0 1 0.226 0.58L8.677 6.832h1.99a0.5 0.5 0 0 1 0.364 0.843l-5.334 5.667a0.5 0.5 0 0 1 -0.842 -0.49L5.99 9.167H4a0.5 0.5 0 0 1 -0.364 -0.843l5.333 -5.667a0.5 0.5 0 0 1 0.616 -0.09z" stroke-width="1"></path>
|
|
341
|
+
<path d="M2 4h4.332l-0.94 1H2a1 1 0 0 0 -1 1v4a1 1 0 0 0 1 1h2.38l-0.308 1H2a2 2 0 0 1 -2 -2V6a2 2 0 0 1 2 -2" stroke-width="1"></path>
|
|
342
|
+
<path d="M2 6h2.45L2.908 7.639A1.5 1.5 0 0 0 3.313 10H2zm8.595 -2 -0.308 1H12a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1H9.276l-0.942 1H12a2 2 0 0 0 2 -2V6a2 2 0 0 0 -2 -2z" stroke-width="1"></path>
|
|
343
|
+
<path d="M12 10h-1.783l1.542 -1.639q0.146 -0.156 0.241 -0.34zm0 -3.354V6h-0.646a1.5 1.5 0 0 1 0.646 0.646M16 8a1.5 1.5 0 0 1 -1.5 1.5v-3A1.5 1.5 0 0 1 16 8" stroke-width="1"></path>
|
|
344
|
+
</svg>
|
|
345
|
+
<svg id="power_available" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
|
|
346
|
+
<path fill="currentColor" d="M12 2c5.5228 0 10 4.47715 10 10 0 5.5228 -4.4772 10 -10 10 -5.52285 0 -10 -4.4772 -10 -10C2 6.47715 6.47715 2 12 2m1 8h3.5l-5.4678 9.9395c0.3174 0.0382 0.6401 0.0605 0.9678 0.0605 4.4183 0 8 -3.5817 8 -8 0 -4.07955 -3.0538 -7.44434 -7 -7.93652zm-1 -6c-4.41828 0 -8 3.58172 -8 8 0 4.0795 3.05384 7.4433 7 7.9355V14H7.5l5.4668 -9.94043C12.6498 4.02138 12.3273 4 12 4" stroke-width="1"></path>
|
|
347
|
+
</svg>
|
|
348
|
+
<svg id="power_renewal" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
|
|
349
|
+
<path fill="currentColor" d="M4.06445 13C4.55672 16.9461 7.92051 20 12 20c2.3364 -0.0002 4.4372 -1.0031 5.8994 -2.6006L15.5 15h6v6l-2.1855 -2.1855C17.4894 20.7734 14.8887 21.9998 12 22c-5.18532 0 -9.44843 -3.9467 -9.9502 -9zM12.5 10H16l-4.5 9v-5H8l4.5 -9zM12 2c5.1851 0.00028 9.4485 3.94685 9.9502 9h-2.0147C19.4434 7.05399 16.0793 4.00027 12 4 9.66354 4 7.56264 5.00292 6.10059 6.60059L8.5 9h-6V3l2.18457 2.18457C6.50965 3.22563 9.11128 2 12 2" stroke-width="1"></path>
|
|
350
|
+
</svg>
|
|
334
351
|
<svg id="dashboard-beating-starboard" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
335
352
|
<g id="g9" transform="matrix(-0.70710678,0.70710678,0.70710678,0.70710678,8.8211956,-6.2237242)">
|
|
336
353
|
<path d="M 12,5.9999999 C 16,9.777778 17.777778,15.444445 16,23 H 8.0000001 C 6.2222223,15.444445 8.0000001,9.777778 12,5.9999999 Z" fill="var(--mat-sys-tertiary)" id="path1" style="stroke-width:0.229061" />
|