signalk-relay-windlass 0.0.1 → 0.0.4
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/.github/workflows/test.yml +2 -2
- package/.mocharc.json +3 -1
- package/README.md +29 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +243 -2
- package/dist/index.js.map +1 -1
- package/package.json +7 -3
- package/test/README.md +125 -0
- package/test/chain-counter.test.ts +324 -0
- package/test/integration.test.ts +233 -0
- package/test/windlass.test.ts +538 -0
- package/signalk-relay-windlass-1.0.0.tgz +0 -0
package/.mocharc.json
CHANGED
package/README.md
CHANGED
|
@@ -6,6 +6,8 @@ A Signal K server plugin that provides safe control of an electric windlass (anc
|
|
|
6
6
|
|
|
7
7
|
- **Dual Relay Control**: Controls windlass up/down operation using separate relays
|
|
8
8
|
- **Safety Timeout**: Configurable automatic shutoff to prevent motor damage from extended operation
|
|
9
|
+
- **Direction Switch Delay**: Prevents rapid direction changes that could damage windlass
|
|
10
|
+
- **Chain Counter**: Automatic tracking of chain deployment based on operation time and configurable rate
|
|
9
11
|
- **Real-time Status**: Live monitoring of windlass state based on relay feedback
|
|
10
12
|
- **Notification System**: Alert notifications when safety timeout is triggered
|
|
11
13
|
- **PUT Handler**: Control windlass through Signal K PUT requests
|
|
@@ -21,6 +23,9 @@ The plugin requires configuration of three main parameters:
|
|
|
21
23
|
- **Down Relay Path**: Path to relay that controls windlass down operation (default: `electrical.windlass.down.state`)
|
|
22
24
|
- **Safety Timeout**: Maximum continuous operation time in seconds (default: 30, range: 0-300, 0 = disabled)
|
|
23
25
|
- **Direction Switch Delay**: Minimum delay when switching between up and down directions in seconds (default: 2, range: 0-30, 0 = disabled)
|
|
26
|
+
- **Chain Rate**: Rate at which chain is deployed/retrieved in feet per minute (default: 60, range: 0-500, 0 = disable chain counter)
|
|
27
|
+
- **Chain Counter Path**: Signal K path for chain out counter in feet (default: `navigation.anchor.chainOut`)
|
|
28
|
+
- **Chain Counter Reset Path**: Signal K path for chain counter reset command (default: `navigation.anchor.chainOut.reset`)
|
|
24
29
|
|
|
25
30
|
## Usage
|
|
26
31
|
|
|
@@ -39,6 +44,17 @@ The windlass can be controlled through several methods:
|
|
|
39
44
|
- `"down"` - Lower the anchor (activates down relay, deactivates up relay)
|
|
40
45
|
- `"off"` - Stop operation (deactivates both relays)
|
|
41
46
|
|
|
47
|
+
### Chain Counter Reset
|
|
48
|
+
|
|
49
|
+
The chain counter can be reset to zero using a PUT request:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
curl -X PUT \
|
|
53
|
+
http://localhost:3000/signalk/v1/api/vessels/self/navigation/anchor/chainOut/reset \
|
|
54
|
+
-H 'Content-Type: application/json' \
|
|
55
|
+
-d '{"value": true}'
|
|
56
|
+
```
|
|
57
|
+
|
|
42
58
|
### PUT Request Example
|
|
43
59
|
|
|
44
60
|
```bash
|
|
@@ -57,6 +73,7 @@ The plugin includes configurable timeout protection to prevent windlass motor da
|
|
|
57
73
|
- **Configurable Duration**: Set maximum run time (0-300 seconds)
|
|
58
74
|
- **Automatic Shutoff**: Both relays automatically deactivated when timeout reached
|
|
59
75
|
- **Visual/Audio Alerts**: Notifications sent through Signal K alert system
|
|
76
|
+
- **Auto-Clear Alerts**: Timeout notifications automatically reset to normal after 10 seconds
|
|
60
77
|
- **Debug Logging**: Timeout events logged for troubleshooting
|
|
61
78
|
|
|
62
79
|
### Direction Switch Delay Protection
|
|
@@ -68,6 +85,17 @@ To prevent motor and gearbox damage from rapid direction changes:
|
|
|
68
85
|
- **Immediate Stop**: Off commands execute immediately for safety
|
|
69
86
|
- **Queue Management**: Direction changes are delayed and automatically executed when safe
|
|
70
87
|
|
|
88
|
+
### Chain Counter
|
|
89
|
+
|
|
90
|
+
Automatic tracking of chain deployment based on windlass operation time:
|
|
91
|
+
|
|
92
|
+
- **Configurable Rate**: Set chain deployment rate in feet per minute (0-500)
|
|
93
|
+
- **Real-time Tracking**: Updates chain out counter while windlass operates
|
|
94
|
+
- **Active State Updates**: Sends chain counter value to Signal K every second only when windlass is in up or down state
|
|
95
|
+
- **Accurate Calculation**: Based on actual operation time and configured rate
|
|
96
|
+
- **Reset Function**: PUT handler to reset chain counter to zero
|
|
97
|
+
- **Signal K Output**: Chain out value available at configurable path (in meters)
|
|
98
|
+
|
|
71
99
|
### State Monitoring
|
|
72
100
|
|
|
73
101
|
- **Real-time Feedback**: Windlass state automatically updates based on relay positions
|
|
@@ -81,6 +109,7 @@ To prevent motor and gearbox damage from rapid direction changes:
|
|
|
81
109
|
| Path | Description | Values |
|
|
82
110
|
| ----------------------------------- | ---------------------- | ------------------------- |
|
|
83
111
|
| `electrical.windlass.control.state` | Current windlass state | `"up"`, `"down"`, `"off"` |
|
|
112
|
+
| `navigation.anchor.chainOut` | Chain out in feet | Number (feet) |
|
|
84
113
|
|
|
85
114
|
### Input Paths (Monitored)
|
|
86
115
|
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EACL,SAAS,EACT,MAAM,EAKP,MAAM,qBAAqB,CAAA;AAsB5B,QAAA,MAAM,KAAK,GAAI,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EACL,SAAS,EACT,MAAM,EAKP,MAAM,qBAAqB,CAAA;AAsB5B,QAAA,MAAM,KAAK,GAAI,KAAK,SAAS,WA2pB5B,CAAA;AAGD,eAAe,KAAK,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -39,6 +39,10 @@ const start = (app) => {
|
|
|
39
39
|
let downRelayState = false;
|
|
40
40
|
let currentState = WindlassState.Off;
|
|
41
41
|
let timeoutTimer = null;
|
|
42
|
+
let chainOut = 0; // Chain out in feet
|
|
43
|
+
let lastChainUpdate = Date.now(); // Last time chain counter was updated
|
|
44
|
+
let chainCounterUpdateTimer = null; // Timer for continuous chain counter updates
|
|
45
|
+
let notificationResetTimer = null; // Timer for resetting timeout notification
|
|
42
46
|
function clearTimeoutTimer() {
|
|
43
47
|
if (timeoutTimer) {
|
|
44
48
|
app.debug('Clearing windlass timeout timer');
|
|
@@ -46,6 +50,112 @@ const start = (app) => {
|
|
|
46
50
|
timeoutTimer = null;
|
|
47
51
|
}
|
|
48
52
|
}
|
|
53
|
+
function clearChainCounterUpdateTimer() {
|
|
54
|
+
if (chainCounterUpdateTimer) {
|
|
55
|
+
app.debug('Clearing chain counter update timer');
|
|
56
|
+
clearTimeout(chainCounterUpdateTimer);
|
|
57
|
+
chainCounterUpdateTimer = null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function clearNotificationResetTimer() {
|
|
61
|
+
if (notificationResetTimer) {
|
|
62
|
+
app.debug('Clearing notification reset timer');
|
|
63
|
+
clearTimeout(notificationResetTimer);
|
|
64
|
+
notificationResetTimer = null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function startChainCounterContinuousUpdates() {
|
|
68
|
+
// Only start continuous updates if chain counter is enabled
|
|
69
|
+
if (!props.chainRateFeetPerMinute || props.chainRateFeetPerMinute <= 0) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Don't start timer if already running
|
|
73
|
+
if (chainCounterUpdateTimer) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const updateInterval = 1000; // Fixed 1 second interval
|
|
77
|
+
app.debug('Starting chain counter continuous updates every 1 second');
|
|
78
|
+
chainCounterUpdateTimer = setInterval(() => {
|
|
79
|
+
// Update chain counter based on current state
|
|
80
|
+
updateChainCounter(currentState, currentState);
|
|
81
|
+
// Send current chain counter value
|
|
82
|
+
sendChainCounterUpdate();
|
|
83
|
+
}, updateInterval);
|
|
84
|
+
}
|
|
85
|
+
function stopChainCounterContinuousUpdates() {
|
|
86
|
+
if (chainCounterUpdateTimer) {
|
|
87
|
+
app.debug('Stopping chain counter continuous updates');
|
|
88
|
+
clearChainCounterUpdateTimer();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function sendChainCounterUpdate() {
|
|
92
|
+
if (!props.chainCounterPath)
|
|
93
|
+
return;
|
|
94
|
+
app.handleMessage(plugin.id, {
|
|
95
|
+
updates: [
|
|
96
|
+
{
|
|
97
|
+
values: [
|
|
98
|
+
{
|
|
99
|
+
path: props.chainCounterPath,
|
|
100
|
+
value: chainOut * 0.3048 // Convert feet to meters
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function updateChainCounter(newState, oldState) {
|
|
108
|
+
if (!props.chainRateFeetPerMinute || props.chainRateFeetPerMinute <= 0) {
|
|
109
|
+
return; // Chain counter disabled
|
|
110
|
+
}
|
|
111
|
+
const now = Date.now();
|
|
112
|
+
// Calculate time since last update
|
|
113
|
+
const deltaTime = (now - lastChainUpdate) / 1000 / 60; // Convert to minutes
|
|
114
|
+
lastChainUpdate = now;
|
|
115
|
+
// Calculate chain movement based on old state
|
|
116
|
+
let chainMovement = 0;
|
|
117
|
+
if (oldState === WindlassState.Up) {
|
|
118
|
+
// Chain coming in (up) - negative movement
|
|
119
|
+
chainMovement = -(deltaTime * props.chainRateFeetPerMinute);
|
|
120
|
+
}
|
|
121
|
+
else if (oldState === WindlassState.Down) {
|
|
122
|
+
// Chain going out (down) - positive movement
|
|
123
|
+
chainMovement = deltaTime * props.chainRateFeetPerMinute;
|
|
124
|
+
}
|
|
125
|
+
// Update chain counter
|
|
126
|
+
chainOut += chainMovement;
|
|
127
|
+
// Ensure chain out doesn't go negative
|
|
128
|
+
chainOut = Math.max(0, chainOut);
|
|
129
|
+
if (Math.abs(chainMovement) > 0.001) {
|
|
130
|
+
// Only log significant changes
|
|
131
|
+
app.debug(`Chain counter updated: ${chainMovement.toFixed(2)}ft movement, total out: ${chainOut.toFixed(2)}ft`);
|
|
132
|
+
}
|
|
133
|
+
// Send chain counter update to Signal K
|
|
134
|
+
sendChainCounter();
|
|
135
|
+
// Also send via continuous update if configured
|
|
136
|
+
sendChainCounterUpdate();
|
|
137
|
+
}
|
|
138
|
+
function sendChainCounter() {
|
|
139
|
+
if (!props.chainCounterPath)
|
|
140
|
+
return;
|
|
141
|
+
app.handleMessage(plugin.id, {
|
|
142
|
+
updates: [
|
|
143
|
+
{
|
|
144
|
+
values: [
|
|
145
|
+
{
|
|
146
|
+
path: props.chainCounterPath,
|
|
147
|
+
value: chainOut * 0.3048
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
function resetChainCounter() {
|
|
155
|
+
app.debug('Resetting chain counter to 0');
|
|
156
|
+
chainOut = 0;
|
|
157
|
+
sendChainCounter();
|
|
158
|
+
}
|
|
49
159
|
function forceWindlassOff() {
|
|
50
160
|
app.debug('Windlass timeout reached - forcing off');
|
|
51
161
|
clearTimeoutTimer();
|
|
@@ -63,8 +173,7 @@ const start = (app) => {
|
|
|
63
173
|
value: {
|
|
64
174
|
state: 'alert',
|
|
65
175
|
method: ['visual', 'sound'],
|
|
66
|
-
message: `Windlass automatically stopped after ${props.timeoutSeconds} seconds
|
|
67
|
-
timestamp: new Date().toISOString()
|
|
176
|
+
message: `Windlass automatically stopped after ${props.timeoutSeconds} seconds`
|
|
68
177
|
}
|
|
69
178
|
}
|
|
70
179
|
]
|
|
@@ -72,6 +181,29 @@ const start = (app) => {
|
|
|
72
181
|
]
|
|
73
182
|
};
|
|
74
183
|
app.handleMessage(plugin.id, timeoutNotification);
|
|
184
|
+
// Set timer to reset notification to normal after 10 seconds
|
|
185
|
+
clearNotificationResetTimer();
|
|
186
|
+
app.debug('Setting timer to reset notification in 10 seconds');
|
|
187
|
+
notificationResetTimer = setTimeout(() => {
|
|
188
|
+
app.debug('Resetting windlass timeout notification to normal');
|
|
189
|
+
const normalNotification = {
|
|
190
|
+
updates: [
|
|
191
|
+
{
|
|
192
|
+
values: [
|
|
193
|
+
{
|
|
194
|
+
path: 'notifications.windlass.timeout',
|
|
195
|
+
value: {
|
|
196
|
+
state: 'normal',
|
|
197
|
+
message: 'Windlass timeout cleared'
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
]
|
|
201
|
+
}
|
|
202
|
+
]
|
|
203
|
+
};
|
|
204
|
+
app.handleMessage(plugin.id, normalNotification);
|
|
205
|
+
notificationResetTimer = null;
|
|
206
|
+
}, 10000);
|
|
75
207
|
}
|
|
76
208
|
function updateWindlassState() {
|
|
77
209
|
if (!started)
|
|
@@ -89,7 +221,16 @@ const start = (app) => {
|
|
|
89
221
|
// Handle timeout logic
|
|
90
222
|
if (newState !== currentState) {
|
|
91
223
|
app.debug(`Windlass state changing: ${currentState} -> ${newState} (up: ${upRelayState}, down: ${downRelayState})`);
|
|
224
|
+
// Update chain counter based on previous state
|
|
225
|
+
updateChainCounter(newState, currentState);
|
|
92
226
|
clearTimeoutTimer();
|
|
227
|
+
// Manage chain counter timer based on state
|
|
228
|
+
if (newState === WindlassState.Up || newState === WindlassState.Down) {
|
|
229
|
+
startChainCounterContinuousUpdates();
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
stopChainCounterContinuousUpdates();
|
|
233
|
+
}
|
|
93
234
|
// Start timeout timer for active states
|
|
94
235
|
if ((newState === WindlassState.Up || newState === WindlassState.Down) &&
|
|
95
236
|
props.timeoutSeconds > 0) {
|
|
@@ -111,6 +252,11 @@ const start = (app) => {
|
|
|
111
252
|
app.debug(` upRelayPath: ${props.upRelayPath}`);
|
|
112
253
|
app.debug(` downRelayPath: ${props.downRelayPath}`);
|
|
113
254
|
app.debug(` timeoutSeconds: ${props.timeoutSeconds}`);
|
|
255
|
+
app.debug(` chainRateFeetPerMinute: ${props.chainRateFeetPerMinute}`);
|
|
256
|
+
app.debug(` chainCounterPath: ${props.chainCounterPath}`);
|
|
257
|
+
app.debug(` chainCounterResetPath: ${props.chainCounterResetPath}`);
|
|
258
|
+
// Initialize chain counter
|
|
259
|
+
lastChainUpdate = Date.now();
|
|
114
260
|
const subscriptionOptions = {
|
|
115
261
|
context: 'vessels.self',
|
|
116
262
|
subscribe: [
|
|
@@ -143,6 +289,34 @@ const start = (app) => {
|
|
|
143
289
|
});
|
|
144
290
|
});
|
|
145
291
|
});
|
|
292
|
+
// Register PUT handler for chain counter reset (if enabled)
|
|
293
|
+
if (props.chainRateFeetPerMinute > 0 && props.chainCounterResetPath) {
|
|
294
|
+
app.debug('Registering PUT handler for chain counter reset');
|
|
295
|
+
app.registerPutHandler('vessels.self', props.chainCounterResetPath, (context, path, value, cb) => {
|
|
296
|
+
app.debug(`Chain counter reset request received: ${path} = ${value}`);
|
|
297
|
+
if (value === true || value === 1) {
|
|
298
|
+
resetChainCounter();
|
|
299
|
+
cb(completed);
|
|
300
|
+
app.handleMessage(plugin.id, {
|
|
301
|
+
updates: [
|
|
302
|
+
{
|
|
303
|
+
values: [
|
|
304
|
+
{
|
|
305
|
+
path: props.chainCounterResetPath,
|
|
306
|
+
value: false
|
|
307
|
+
}
|
|
308
|
+
]
|
|
309
|
+
}
|
|
310
|
+
]
|
|
311
|
+
});
|
|
312
|
+
return completed;
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
app.debug(`Invalid chain reset command: ${value}`);
|
|
316
|
+
return error;
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
}
|
|
146
320
|
app.debug('Registering PUT handler for windlass control');
|
|
147
321
|
app.registerPutHandler('vessels.self', props.windlassPath, (context, path, value, cb) => {
|
|
148
322
|
app.debug(`PUT request received: ${path} = ${value}`);
|
|
@@ -194,13 +368,62 @@ const start = (app) => {
|
|
|
194
368
|
}
|
|
195
369
|
]
|
|
196
370
|
});
|
|
371
|
+
// Add chain counter metadata if enabled
|
|
372
|
+
if (props.chainRateFeetPerMinute > 0 && props.chainCounterPath) {
|
|
373
|
+
const metaEntries = [
|
|
374
|
+
{
|
|
375
|
+
path: props.chainCounterPath,
|
|
376
|
+
value: {
|
|
377
|
+
displayName: 'Chain Out',
|
|
378
|
+
description: 'Length of chain deployed in meters',
|
|
379
|
+
units: 'm'
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
];
|
|
383
|
+
// Add reset path metadata if configured
|
|
384
|
+
if (props.chainCounterResetPath) {
|
|
385
|
+
metaEntries.push({
|
|
386
|
+
path: props.chainCounterResetPath,
|
|
387
|
+
value: {
|
|
388
|
+
displayName: 'Reset Chain Counter',
|
|
389
|
+
description: 'Reset chain counter to zero',
|
|
390
|
+
units: 'bool'
|
|
391
|
+
}
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
app.handleMessage(plugin.id, {
|
|
395
|
+
updates: [
|
|
396
|
+
{
|
|
397
|
+
meta: metaEntries
|
|
398
|
+
}
|
|
399
|
+
]
|
|
400
|
+
});
|
|
401
|
+
}
|
|
197
402
|
sendState(WindlassState.Off);
|
|
403
|
+
// Send initial chain counter value
|
|
404
|
+
if (props.chainRateFeetPerMinute > 0 && props.chainCounterPath) {
|
|
405
|
+
sendChainCounter();
|
|
406
|
+
app.handleMessage(plugin.id, {
|
|
407
|
+
updates: [
|
|
408
|
+
{
|
|
409
|
+
values: [
|
|
410
|
+
{
|
|
411
|
+
path: props.chainCounterResetPath,
|
|
412
|
+
value: false
|
|
413
|
+
}
|
|
414
|
+
]
|
|
415
|
+
}
|
|
416
|
+
]
|
|
417
|
+
});
|
|
418
|
+
}
|
|
198
419
|
app.debug('Windlass plugin started successfully');
|
|
199
420
|
},
|
|
200
421
|
stop: function () {
|
|
201
422
|
app.debug('Stopping windlass plugin');
|
|
202
423
|
started = false;
|
|
203
424
|
clearTimeoutTimer();
|
|
425
|
+
clearChainCounterUpdateTimer();
|
|
426
|
+
clearNotificationResetTimer();
|
|
204
427
|
onStop.forEach((f) => f());
|
|
205
428
|
onStop = [];
|
|
206
429
|
app.debug('Windlass plugin stopped');
|
|
@@ -241,6 +464,24 @@ const start = (app) => {
|
|
|
241
464
|
title: 'Direction Switch Delay (seconds)',
|
|
242
465
|
description: 'Delay when switching between up and down directions (0 = no delay)',
|
|
243
466
|
default: 5
|
|
467
|
+
},
|
|
468
|
+
chainRateFeetPerMinute: {
|
|
469
|
+
type: 'number',
|
|
470
|
+
title: 'Chain Rate (feet per minute)',
|
|
471
|
+
description: 'Rate at which chain is deployed/retrieved in feet per minute (0 = disable chain counter)',
|
|
472
|
+
default: 60
|
|
473
|
+
},
|
|
474
|
+
chainCounterPath: {
|
|
475
|
+
type: 'string',
|
|
476
|
+
title: 'Chain Counter Path',
|
|
477
|
+
description: 'Signal K path for chain out counter in feet',
|
|
478
|
+
default: 'electrical.windlass.chainOut'
|
|
479
|
+
},
|
|
480
|
+
chainCounterResetPath: {
|
|
481
|
+
type: 'string',
|
|
482
|
+
title: 'Chain Counter Reset Path',
|
|
483
|
+
description: 'Signal K path for chain counter reset command',
|
|
484
|
+
default: 'electrical.windlass.chainCounterReset.state'
|
|
244
485
|
}
|
|
245
486
|
}
|
|
246
487
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "signalk-relay-windlass",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "Signal K Plugin to control a windlass using two relay switches",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "mocha --require ts-node/register",
|
|
8
|
+
"test:unit": "mocha --require ts-node/register test/windlass.test.ts",
|
|
9
|
+
"test:timing": "mocha --require ts-node/register test/chain-counter.test.ts",
|
|
10
|
+
"test:integration": "mocha --require ts-node/register test/integration.test.ts",
|
|
11
|
+
"test:watch": "mocha --require ts-node/register --watch",
|
|
8
12
|
"prettier": "prettier --write .",
|
|
9
13
|
"lint": "eslint --fix --format compact .",
|
|
10
14
|
"ci-lint": "eslint && prettier --check .",
|
|
11
|
-
"ci-test": "npm run build && npm run
|
|
15
|
+
"ci-test": "npm run build && npm run test && npm run ci-lint",
|
|
12
16
|
"format": "npm run prettier && npm run lint",
|
|
13
17
|
"build": "tsc",
|
|
14
18
|
"watch": "npm run build -- -w"
|
|
@@ -24,7 +28,7 @@
|
|
|
24
28
|
},
|
|
25
29
|
"repository": {
|
|
26
30
|
"type": "git",
|
|
27
|
-
"url": "https://github.com/sbender9/signalk-relay-windlass"
|
|
31
|
+
"url": "git+https://github.com/sbender9/signalk-relay-windlass.git"
|
|
28
32
|
},
|
|
29
33
|
"devDependencies": {
|
|
30
34
|
"@signalk/server-api": "^2.7.2",
|
package/test/README.md
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Test Suite for Signal K Relay Windlass Plugin
|
|
2
|
+
|
|
3
|
+
This directory contains comprehensive tests for the Signal K Relay Windlass plugin.
|
|
4
|
+
|
|
5
|
+
## Test Structure
|
|
6
|
+
|
|
7
|
+
### `windlass.test.ts` - Core Functionality Tests
|
|
8
|
+
|
|
9
|
+
- Plugin initialization and configuration
|
|
10
|
+
- Basic windlass control (up/down/off commands)
|
|
11
|
+
- PUT handler functionality
|
|
12
|
+
- Signal K message handling
|
|
13
|
+
- Safety timeout functionality
|
|
14
|
+
- Notification system
|
|
15
|
+
- Metadata registration
|
|
16
|
+
|
|
17
|
+
### `chain-counter.test.ts` - Chain Counter & Timing Tests
|
|
18
|
+
|
|
19
|
+
- Chain counter calculation accuracy
|
|
20
|
+
- Timing-sensitive functionality
|
|
21
|
+
- Continuous update behavior
|
|
22
|
+
- Direction switching delays
|
|
23
|
+
- Chain deployment/retrieval calculations
|
|
24
|
+
|
|
25
|
+
### `integration.test.ts` - Integration & Workflow Tests
|
|
26
|
+
|
|
27
|
+
- Complete anchoring workflows
|
|
28
|
+
- Error handling scenarios
|
|
29
|
+
- Plugin lifecycle management
|
|
30
|
+
- Real-world usage patterns
|
|
31
|
+
|
|
32
|
+
## Running Tests
|
|
33
|
+
|
|
34
|
+
### All Tests
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm test
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Specific Test Categories
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Core functionality tests
|
|
44
|
+
npm run test:unit
|
|
45
|
+
|
|
46
|
+
# Timing and chain counter tests
|
|
47
|
+
npm run test:timing
|
|
48
|
+
|
|
49
|
+
# Integration tests
|
|
50
|
+
npm run test:integration
|
|
51
|
+
|
|
52
|
+
# Watch mode for development
|
|
53
|
+
npm run test:watch
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Development Testing
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Run tests in watch mode during development
|
|
60
|
+
npm run test:watch
|
|
61
|
+
|
|
62
|
+
# Run with verbose output
|
|
63
|
+
npx mocha test/*.ts --reporter spec --require tsx
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Test Configuration
|
|
67
|
+
|
|
68
|
+
- **Timeout**: 5 seconds (configured in `.mocharc.json`)
|
|
69
|
+
- **Framework**: Mocha with Chai assertions
|
|
70
|
+
- **TypeScript**: Transpiled using `tsx`
|
|
71
|
+
- **Coverage**: Run `npm run ci-test` for full CI pipeline
|
|
72
|
+
|
|
73
|
+
## Mock Implementation
|
|
74
|
+
|
|
75
|
+
Tests use comprehensive mocks of the Signal K Server API that simulate:
|
|
76
|
+
|
|
77
|
+
- Message handling and subscriptions
|
|
78
|
+
- PUT handler registration
|
|
79
|
+
- Relay state management
|
|
80
|
+
- Timer functionality
|
|
81
|
+
- Real-world timing scenarios
|
|
82
|
+
|
|
83
|
+
## Key Testing Areas
|
|
84
|
+
|
|
85
|
+
1. **Safety Features**
|
|
86
|
+
- Timeout protection with automatic shutoff
|
|
87
|
+
- Direction switching delays
|
|
88
|
+
- Safe state transitions
|
|
89
|
+
|
|
90
|
+
2. **Chain Counter Accuracy**
|
|
91
|
+
- Time-based calculations
|
|
92
|
+
- Rate conversion (feet per minute to meters)
|
|
93
|
+
- Continuous updates during operation
|
|
94
|
+
|
|
95
|
+
3. **Signal K Integration**
|
|
96
|
+
- Proper message formatting
|
|
97
|
+
- Metadata registration
|
|
98
|
+
- Subscription handling
|
|
99
|
+
|
|
100
|
+
4. **Error Handling**
|
|
101
|
+
- Invalid commands
|
|
102
|
+
- Missing configuration
|
|
103
|
+
- Edge cases and recovery
|
|
104
|
+
|
|
105
|
+
## Test Data
|
|
106
|
+
|
|
107
|
+
Tests use realistic configuration values:
|
|
108
|
+
|
|
109
|
+
- Chain rate: 60 feet/minute (1 foot/second for easy calculation)
|
|
110
|
+
- Safety timeout: 30 seconds (reduced to 1 second in safety tests)
|
|
111
|
+
- Switching delay: 2 seconds (disabled in some tests for speed)
|
|
112
|
+
|
|
113
|
+
## Debugging Tests
|
|
114
|
+
|
|
115
|
+
For debugging specific test failures:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Run single test file with detailed output
|
|
119
|
+
npx mocha test/windlass.test.ts --reporter spec --require tsx
|
|
120
|
+
|
|
121
|
+
# Run specific test pattern
|
|
122
|
+
npx mocha test/*.test.ts --grep "Chain Counter" --require tsx
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
All tests include detailed assertions and timing verification to ensure the plugin behaves correctly in production marine environments.
|