signalk-relay-windlass 0.0.4 → 1.0.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/README.md +42 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +118 -15
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/test/external-control.test.ts +460 -0
package/README.md
CHANGED
|
@@ -5,17 +5,14 @@ A Signal K server plugin that provides safe control of an electric windlass (anc
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
- **Dual Relay Control**: Controls windlass up/down operation using separate relays
|
|
8
|
-
- **Safety Timeout**: Configurable automatic shutoff
|
|
8
|
+
- **Safety Timeout**: Configurable automatic shutoff in case of network/swithing failure
|
|
9
9
|
- **Direction Switch Delay**: Prevents rapid direction changes that could damage windlass
|
|
10
10
|
- **Chain Counter**: Automatic tracking of chain deployment based on operation time and configurable rate
|
|
11
|
-
- **
|
|
11
|
+
- **External Control Integration**: Monitor external windlass controls with automatic state and chain tracking
|
|
12
|
+
- **Real-time Status**: Live monitoring of windlass state based on relay and external control feedback
|
|
12
13
|
- **Notification System**: Alert notifications when safety timeout is triggered
|
|
13
14
|
- **PUT Handler**: Control windlass through Signal K PUT requests
|
|
14
15
|
|
|
15
|
-
## Configuration
|
|
16
|
-
|
|
17
|
-
The plugin requires configuration of three main parameters:
|
|
18
|
-
|
|
19
16
|
### Settings
|
|
20
17
|
|
|
21
18
|
- **Windlass State Path**: Signal K path for windlass control state (default: `electrical.windlass.control.state`)
|
|
@@ -25,7 +22,9 @@ The plugin requires configuration of three main parameters:
|
|
|
25
22
|
- **Direction Switch Delay**: Minimum delay when switching between up and down directions in seconds (default: 2, range: 0-30, 0 = disabled)
|
|
26
23
|
- **Chain Rate**: Rate at which chain is deployed/retrieved in feet per minute (default: 60, range: 0-500, 0 = disable chain counter)
|
|
27
24
|
- **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: `
|
|
25
|
+
- **Chain Counter Reset Path**: Signal K path for chain counter reset command (default: `electrical.windlass.chainCounterReset.state`)
|
|
26
|
+
- **External Up Path**: Optional Signal K path for external windlass up control monitoring (used for chain counter tracking and state reporting)
|
|
27
|
+
- **External Down Path**: Optional Signal K path for external windlass down control monitoring (used for chain counter tracking and state reporting)
|
|
29
28
|
|
|
30
29
|
## Usage
|
|
31
30
|
|
|
@@ -33,10 +32,9 @@ The plugin requires configuration of three main parameters:
|
|
|
33
32
|
|
|
34
33
|
The windlass can be controlled through several methods:
|
|
35
34
|
|
|
36
|
-
1. **
|
|
37
|
-
2. **
|
|
38
|
-
3. **
|
|
39
|
-
4. **Node-RED**: Use Signal K nodes in Node-RED flows
|
|
35
|
+
1. **PUT Requests**: Send HTTP PUT requests to the windlass path
|
|
36
|
+
2. **WebSocket**: Send delta messages via WebSocket
|
|
37
|
+
3. **Node-RED**: Use Signal K nodes in Node-RED flows
|
|
40
38
|
|
|
41
39
|
### Control Values
|
|
42
40
|
|
|
@@ -49,12 +47,40 @@ The windlass can be controlled through several methods:
|
|
|
49
47
|
The chain counter can be reset to zero using a PUT request:
|
|
50
48
|
|
|
51
49
|
```bash
|
|
52
|
-
curl -X PUT
|
|
53
|
-
|
|
54
|
-
-
|
|
55
|
-
-d '{"value": true}'
|
|
50
|
+
curl -X PUT -H "Content-Type: application/json" \\
|
|
51
|
+
-d '{"value": true}' \\
|
|
52
|
+
http://your-signalk-server:3000/signalk/v1/api/vessels/self/navigation/anchor/chainCounterReset/state
|
|
56
53
|
```
|
|
57
54
|
|
|
55
|
+
### External Control Monitoring
|
|
56
|
+
|
|
57
|
+
The plugin can monitor external windlass controls (such as NMEA 2000 data or other control systems) for both chain counter tracking and windlass state reporting. When external control paths are configured:
|
|
58
|
+
|
|
59
|
+
- The plugin subscribes to the specified external control paths
|
|
60
|
+
- Chain counter tracking works with both internal relay control and external control
|
|
61
|
+
- **Windlass state path updates**: The configured windlass state path will reflect external control states
|
|
62
|
+
- External control takes precedence over relay control for both chain counter and state reporting
|
|
63
|
+
- When external control is active, the windlass state path shows the external state
|
|
64
|
+
- When external control is inactive, the windlass state path shows the relay state
|
|
65
|
+
- External control does not affect the relay-based windlass PUT handler operations
|
|
66
|
+
- External control is only active when chain counter is enabled (chain rate > 0)
|
|
67
|
+
|
|
68
|
+
This feature is useful when:
|
|
69
|
+
|
|
70
|
+
- Your windlass is controlled by multiple systems (relay plugin + external system)
|
|
71
|
+
- You want to track chain deployment from NMEA 2000 windlass data
|
|
72
|
+
- You need chain counter tracking even when the windlass is operated manually or by other systems
|
|
73
|
+
- You want unified windlass state reporting regardless of which system is controlling the windlass
|
|
74
|
+
- You're integrating with existing windlass control systems while adding chain tracking and state monitoring
|
|
75
|
+
|
|
76
|
+
**State Priority Logic:**
|
|
77
|
+
|
|
78
|
+
- If external up control is active → windlass state path shows "up"
|
|
79
|
+
- If external down control is active → windlass state path shows "down"
|
|
80
|
+
- If external control is off but relay up is active → windlass state path shows "up"
|
|
81
|
+
- If external control is off but relay down is active → windlass state path shows "down"
|
|
82
|
+
- If both external and relay controls are off → windlass state path shows "off"
|
|
83
|
+
|
|
58
84
|
### PUT Request Example
|
|
59
85
|
|
|
60
86
|
```bash
|
|
@@ -68,13 +94,12 @@ curl -X PUT \
|
|
|
68
94
|
|
|
69
95
|
### Automatic Timeout Protection
|
|
70
96
|
|
|
71
|
-
The plugin includes configurable timeout protection
|
|
97
|
+
The plugin includes configurable timeout protection:
|
|
72
98
|
|
|
73
99
|
- **Configurable Duration**: Set maximum run time (0-300 seconds)
|
|
74
100
|
- **Automatic Shutoff**: Both relays automatically deactivated when timeout reached
|
|
75
101
|
- **Visual/Audio Alerts**: Notifications sent through Signal K alert system
|
|
76
102
|
- **Auto-Clear Alerts**: Timeout notifications automatically reset to normal after 10 seconds
|
|
77
|
-
- **Debug Logging**: Timeout events logged for troubleshooting
|
|
78
103
|
|
|
79
104
|
### Direction Switch Delay Protection
|
|
80
105
|
|
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,WA4xB5B,CAAA;AAGD,eAAe,KAAK,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -43,6 +43,10 @@ const start = (app) => {
|
|
|
43
43
|
let lastChainUpdate = Date.now(); // Last time chain counter was updated
|
|
44
44
|
let chainCounterUpdateTimer = null; // Timer for continuous chain counter updates
|
|
45
45
|
let notificationResetTimer = null; // Timer for resetting timeout notification
|
|
46
|
+
// External control state tracking for chain counter
|
|
47
|
+
let externalUpState = false;
|
|
48
|
+
let externalDownState = false;
|
|
49
|
+
let externalCurrentState = WindlassState.Off;
|
|
46
50
|
function clearTimeoutTimer() {
|
|
47
51
|
if (timeoutTimer) {
|
|
48
52
|
app.debug('Clearing windlass timeout timer');
|
|
@@ -76,8 +80,11 @@ const start = (app) => {
|
|
|
76
80
|
const updateInterval = 1000; // Fixed 1 second interval
|
|
77
81
|
app.debug('Starting chain counter continuous updates every 1 second');
|
|
78
82
|
chainCounterUpdateTimer = setInterval(() => {
|
|
79
|
-
// Update chain counter based on
|
|
80
|
-
|
|
83
|
+
// Update chain counter based on the appropriate active state
|
|
84
|
+
// Priority: external control takes precedence if any external path is active
|
|
85
|
+
const externalActive = externalCurrentState !== WindlassState.Off;
|
|
86
|
+
const activeState = externalActive ? externalCurrentState : currentState;
|
|
87
|
+
updateChainCounter(activeState, activeState);
|
|
81
88
|
// Send current chain counter value
|
|
82
89
|
sendChainCounterUpdate();
|
|
83
90
|
}, updateInterval);
|
|
@@ -205,6 +212,45 @@ const start = (app) => {
|
|
|
205
212
|
notificationResetTimer = null;
|
|
206
213
|
}, 10000);
|
|
207
214
|
}
|
|
215
|
+
function updateExternalWindlassState() {
|
|
216
|
+
if (!started)
|
|
217
|
+
return;
|
|
218
|
+
// Only track external state for chain counter if enabled
|
|
219
|
+
if (!props.chainRateFeetPerMinute || props.chainRateFeetPerMinute <= 0) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
let newExternalState;
|
|
223
|
+
if (externalUpState && !externalDownState) {
|
|
224
|
+
newExternalState = WindlassState.Up;
|
|
225
|
+
}
|
|
226
|
+
else if (!externalUpState && externalDownState) {
|
|
227
|
+
newExternalState = WindlassState.Down;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
newExternalState = WindlassState.Off;
|
|
231
|
+
}
|
|
232
|
+
// Handle external windlass state change for chain counter
|
|
233
|
+
if (newExternalState !== externalCurrentState) {
|
|
234
|
+
app.debug(`External windlass state changing: ${externalCurrentState} -> ${newExternalState} (up: ${externalUpState}, down: ${externalDownState})`);
|
|
235
|
+
// Update chain counter based on previous external state
|
|
236
|
+
updateChainCounter(newExternalState, externalCurrentState);
|
|
237
|
+
// Manage chain counter timer based on external state
|
|
238
|
+
// External control takes precedence over relay control for continuous updates
|
|
239
|
+
if (newExternalState === WindlassState.Up ||
|
|
240
|
+
newExternalState === WindlassState.Down) {
|
|
241
|
+
startChainCounterContinuousUpdates();
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
// Only stop if relay control is also off
|
|
245
|
+
if (currentState === WindlassState.Off) {
|
|
246
|
+
stopChainCounterContinuousUpdates();
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
externalCurrentState = newExternalState;
|
|
250
|
+
// Update overall windlass state (external takes precedence)
|
|
251
|
+
updateOverallWindlassState();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
208
254
|
function updateWindlassState() {
|
|
209
255
|
if (!started)
|
|
210
256
|
return;
|
|
@@ -225,11 +271,15 @@ const start = (app) => {
|
|
|
225
271
|
updateChainCounter(newState, currentState);
|
|
226
272
|
clearTimeoutTimer();
|
|
227
273
|
// Manage chain counter timer based on state
|
|
274
|
+
// Only stop continuous updates if both relay and external control are off
|
|
228
275
|
if (newState === WindlassState.Up || newState === WindlassState.Down) {
|
|
229
276
|
startChainCounterContinuousUpdates();
|
|
230
277
|
}
|
|
231
278
|
else {
|
|
232
|
-
|
|
279
|
+
// Only stop if external control is also off
|
|
280
|
+
if (externalCurrentState === WindlassState.Off) {
|
|
281
|
+
stopChainCounterContinuousUpdates();
|
|
282
|
+
}
|
|
233
283
|
}
|
|
234
284
|
// Start timeout timer for active states
|
|
235
285
|
if ((newState === WindlassState.Up || newState === WindlassState.Down) &&
|
|
@@ -240,7 +290,8 @@ const start = (app) => {
|
|
|
240
290
|
}, props.timeoutSeconds * 1000);
|
|
241
291
|
}
|
|
242
292
|
currentState = newState;
|
|
243
|
-
|
|
293
|
+
// Update overall windlass state (external takes precedence if active)
|
|
294
|
+
updateOverallWindlassState();
|
|
244
295
|
}
|
|
245
296
|
}
|
|
246
297
|
const plugin = {
|
|
@@ -255,20 +306,38 @@ const start = (app) => {
|
|
|
255
306
|
app.debug(` chainRateFeetPerMinute: ${props.chainRateFeetPerMinute}`);
|
|
256
307
|
app.debug(` chainCounterPath: ${props.chainCounterPath}`);
|
|
257
308
|
app.debug(` chainCounterResetPath: ${props.chainCounterResetPath}`);
|
|
309
|
+
app.debug(` externalUpPath: ${props.externalUpPath}`);
|
|
310
|
+
app.debug(` externalDownPath: ${props.externalDownPath}`);
|
|
258
311
|
// Initialize chain counter
|
|
259
312
|
lastChainUpdate = Date.now();
|
|
313
|
+
const subscriptionPaths = [
|
|
314
|
+
{
|
|
315
|
+
path: props.upRelayPath,
|
|
316
|
+
period: 100
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
path: props.downRelayPath,
|
|
320
|
+
period: 100
|
|
321
|
+
}
|
|
322
|
+
];
|
|
323
|
+
// Add external control paths if configured
|
|
324
|
+
if (props.externalUpPath && props.chainRateFeetPerMinute > 0) {
|
|
325
|
+
subscriptionPaths.push({
|
|
326
|
+
path: props.externalUpPath,
|
|
327
|
+
period: 100
|
|
328
|
+
});
|
|
329
|
+
app.debug(`Added external up path subscription: ${props.externalUpPath}`);
|
|
330
|
+
}
|
|
331
|
+
if (props.externalDownPath && props.chainRateFeetPerMinute > 0) {
|
|
332
|
+
subscriptionPaths.push({
|
|
333
|
+
path: props.externalDownPath,
|
|
334
|
+
period: 100
|
|
335
|
+
});
|
|
336
|
+
app.debug(`Added external down path subscription: ${props.externalDownPath}`);
|
|
337
|
+
}
|
|
260
338
|
const subscriptionOptions = {
|
|
261
339
|
context: 'vessels.self',
|
|
262
|
-
subscribe:
|
|
263
|
-
{
|
|
264
|
-
path: props.upRelayPath,
|
|
265
|
-
period: 100
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
path: props.downRelayPath,
|
|
269
|
-
period: 100
|
|
270
|
-
}
|
|
271
|
-
]
|
|
340
|
+
subscribe: subscriptionPaths
|
|
272
341
|
};
|
|
273
342
|
app.debug('Setting up subscriptions for relay monitoring');
|
|
274
343
|
app.subscriptionmanager.subscribe(subscriptionOptions, onStop, (error) => {
|
|
@@ -286,6 +355,16 @@ const start = (app) => {
|
|
|
286
355
|
downRelayState = Boolean(value.value);
|
|
287
356
|
updateWindlassState();
|
|
288
357
|
}
|
|
358
|
+
else if (value.path === props.externalUpPath) {
|
|
359
|
+
app.debug(`External up control changed: ${externalUpState} -> ${Boolean(value.value)}`);
|
|
360
|
+
externalUpState = Boolean(value.value);
|
|
361
|
+
updateExternalWindlassState();
|
|
362
|
+
}
|
|
363
|
+
else if (value.path === props.externalDownPath) {
|
|
364
|
+
app.debug(`External down control changed: ${externalDownState} -> ${Boolean(value.value)}`);
|
|
365
|
+
externalDownState = Boolean(value.value);
|
|
366
|
+
updateExternalWindlassState();
|
|
367
|
+
}
|
|
289
368
|
});
|
|
290
369
|
});
|
|
291
370
|
});
|
|
@@ -463,7 +542,7 @@ const start = (app) => {
|
|
|
463
542
|
type: 'number',
|
|
464
543
|
title: 'Direction Switch Delay (seconds)',
|
|
465
544
|
description: 'Delay when switching between up and down directions (0 = no delay)',
|
|
466
|
-
default:
|
|
545
|
+
default: 1
|
|
467
546
|
},
|
|
468
547
|
chainRateFeetPerMinute: {
|
|
469
548
|
type: 'number',
|
|
@@ -482,6 +561,18 @@ const start = (app) => {
|
|
|
482
561
|
title: 'Chain Counter Reset Path',
|
|
483
562
|
description: 'Signal K path for chain counter reset command',
|
|
484
563
|
default: 'electrical.windlass.chainCounterReset.state'
|
|
564
|
+
},
|
|
565
|
+
externalUpPath: {
|
|
566
|
+
type: 'string',
|
|
567
|
+
title: 'External Up Control Path (Optional)',
|
|
568
|
+
description: 'Signal K path for external windlass up control - used for chain counter tracking only',
|
|
569
|
+
default: 'electrical.windlass.externalUp.state'
|
|
570
|
+
},
|
|
571
|
+
externalDownPath: {
|
|
572
|
+
type: 'string',
|
|
573
|
+
title: 'External Down Control Path (Optional)',
|
|
574
|
+
description: 'Signal K path for external windlass down control - used for chain counter tracking only',
|
|
575
|
+
default: 'electrical.windlass.externalDown.state'
|
|
485
576
|
}
|
|
486
577
|
}
|
|
487
578
|
}
|
|
@@ -517,6 +608,18 @@ const start = (app) => {
|
|
|
517
608
|
]
|
|
518
609
|
});
|
|
519
610
|
}
|
|
611
|
+
// Determine and send the current overall windlass state
|
|
612
|
+
// External control takes precedence over relay control
|
|
613
|
+
function updateOverallWindlassState() {
|
|
614
|
+
if (!started)
|
|
615
|
+
return;
|
|
616
|
+
// External control takes precedence
|
|
617
|
+
const overallState = externalCurrentState !== WindlassState.Off
|
|
618
|
+
? externalCurrentState
|
|
619
|
+
: currentState;
|
|
620
|
+
app.debug(`Overall windlass state: ${overallState} (external: ${externalCurrentState}, relay: ${currentState})`);
|
|
621
|
+
sendState(overallState);
|
|
622
|
+
}
|
|
520
623
|
function setWindlassUp(cb) {
|
|
521
624
|
app.debug('Executing windlass UP: turning off down relay first');
|
|
522
625
|
app.putSelfPath(props.downRelayPath, false, (reply) => {
|
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
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
import { expect } from 'chai'
|
|
2
|
+
import { describe, it, beforeEach, afterEach } from 'mocha'
|
|
3
|
+
import windlassPlugin from '../src/index'
|
|
4
|
+
|
|
5
|
+
// Enhanced mock for external control testing
|
|
6
|
+
class ExternalControlMockAPI {
|
|
7
|
+
public messages: any[] = []
|
|
8
|
+
public subscriptions: any[] = []
|
|
9
|
+
public putHandlers: Map<string, Function> = new Map()
|
|
10
|
+
public relayStates: Map<string, boolean> = new Map()
|
|
11
|
+
|
|
12
|
+
debug() {}
|
|
13
|
+
error() {}
|
|
14
|
+
|
|
15
|
+
handleMessage(pluginId: string, message: any) {
|
|
16
|
+
this.messages.push({ pluginId, message, timestamp: Date.now() })
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
subscriptionmanager = {
|
|
20
|
+
subscribe: (
|
|
21
|
+
options: any,
|
|
22
|
+
onStop: any[],
|
|
23
|
+
errorCallback: Function,
|
|
24
|
+
deltaCallback: Function
|
|
25
|
+
) => {
|
|
26
|
+
this.subscriptions.push({ options, onStop, errorCallback, deltaCallback })
|
|
27
|
+
return { unsubscribe: () => {} }
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
registerPutHandler(context: string, path: string, handler: Function) {
|
|
32
|
+
this.putHandlers.set(path, handler)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
putSelfPath(path: string, value: any, callback?: Function) {
|
|
36
|
+
this.relayStates.set(path, Boolean(value))
|
|
37
|
+
|
|
38
|
+
// Also trigger subscription for relay paths
|
|
39
|
+
if (path.includes('relay') || path.includes('.state')) {
|
|
40
|
+
this.simulatePathChange(path, Boolean(value))
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (callback) {
|
|
44
|
+
setTimeout(() => {
|
|
45
|
+
callback({ state: 'COMPLETED', statusCode: 200 })
|
|
46
|
+
}, 1)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
simulatePathChange(path: string, value: boolean) {
|
|
51
|
+
const subscription = this.subscriptions[0]
|
|
52
|
+
if (subscription && subscription.deltaCallback) {
|
|
53
|
+
subscription.deltaCallback({
|
|
54
|
+
updates: [
|
|
55
|
+
{
|
|
56
|
+
values: [
|
|
57
|
+
{
|
|
58
|
+
path: path,
|
|
59
|
+
value: value
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Helper method to get latest chain counter value
|
|
69
|
+
getLatestChainCounterValue() {
|
|
70
|
+
for (let i = this.messages.length - 1; i >= 0; i--) {
|
|
71
|
+
const message = this.messages[i]
|
|
72
|
+
const updates = message.message?.updates || []
|
|
73
|
+
for (const update of updates) {
|
|
74
|
+
const values = update.values || []
|
|
75
|
+
for (const value of values) {
|
|
76
|
+
if (value.path === 'navigation.anchor.chainOut') {
|
|
77
|
+
return value.value
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return null
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
reset() {
|
|
86
|
+
this.messages = []
|
|
87
|
+
this.subscriptions = []
|
|
88
|
+
this.putHandlers.clear()
|
|
89
|
+
this.relayStates.clear()
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
describe('External Control Tests', () => {
|
|
94
|
+
let mockApp: ExternalControlMockAPI
|
|
95
|
+
let plugin: any
|
|
96
|
+
let externalConfig: any
|
|
97
|
+
|
|
98
|
+
beforeEach(() => {
|
|
99
|
+
mockApp = new ExternalControlMockAPI()
|
|
100
|
+
plugin = windlassPlugin(mockApp)
|
|
101
|
+
externalConfig = {
|
|
102
|
+
windlassPath: 'electrical.windlass.control.state',
|
|
103
|
+
upRelayPath: 'electrical.windlass.up.state',
|
|
104
|
+
downRelayPath: 'electrical.windlass.down.state',
|
|
105
|
+
timeoutSeconds: 30,
|
|
106
|
+
switchingDelaySeconds: 0,
|
|
107
|
+
chainRateFeetPerMinute: 60, // 1 foot per second for easy calculation
|
|
108
|
+
chainCounterPath: 'navigation.anchor.chainOut',
|
|
109
|
+
chainCounterResetPath: 'navigation.anchor.chainOut.reset',
|
|
110
|
+
externalUpPath: 'electrical.external.windlass.up',
|
|
111
|
+
externalDownPath: 'electrical.external.windlass.down'
|
|
112
|
+
}
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
afterEach(() => {
|
|
116
|
+
if (plugin && plugin.stop) {
|
|
117
|
+
plugin.stop()
|
|
118
|
+
}
|
|
119
|
+
mockApp.reset()
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
describe('Configuration', () => {
|
|
123
|
+
it('should include external control paths in schema', () => {
|
|
124
|
+
expect(plugin.schema.properties.externalUpPath).to.exist
|
|
125
|
+
expect(plugin.schema.properties.externalDownPath).to.exist
|
|
126
|
+
expect(plugin.schema.properties.externalUpPath.title).to.include(
|
|
127
|
+
'External Up Control Path'
|
|
128
|
+
)
|
|
129
|
+
expect(plugin.schema.properties.externalDownPath.title).to.include(
|
|
130
|
+
'External Down Control Path'
|
|
131
|
+
)
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
it('should start with external control paths configured', () => {
|
|
135
|
+
plugin.start(externalConfig, () => {})
|
|
136
|
+
|
|
137
|
+
// Should have subscriptions for external paths
|
|
138
|
+
expect(mockApp.subscriptions.length).to.equal(1)
|
|
139
|
+
const subscription = mockApp.subscriptions[0]
|
|
140
|
+
const subscribedPaths = subscription.options.subscribe.map(
|
|
141
|
+
(s: any) => s.path
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
expect(subscribedPaths).to.include(externalConfig.externalUpPath)
|
|
145
|
+
expect(subscribedPaths).to.include(externalConfig.externalDownPath)
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
it('should work without external control paths configured', () => {
|
|
149
|
+
const configWithoutExternal = { ...externalConfig }
|
|
150
|
+
delete configWithoutExternal.externalUpPath
|
|
151
|
+
delete configWithoutExternal.externalDownPath
|
|
152
|
+
|
|
153
|
+
plugin.start(configWithoutExternal, () => {})
|
|
154
|
+
|
|
155
|
+
// Should still work normally with just relay paths
|
|
156
|
+
const subscription = mockApp.subscriptions[0]
|
|
157
|
+
const subscribedPaths = subscription.options.subscribe.map(
|
|
158
|
+
(s: any) => s.path
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
expect(subscribedPaths).to.include(configWithoutExternal.upRelayPath)
|
|
162
|
+
expect(subscribedPaths).to.include(configWithoutExternal.downRelayPath)
|
|
163
|
+
expect(subscribedPaths).to.not.include('electrical.external.windlass.up')
|
|
164
|
+
})
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
describe('Chain Counter with External Control', () => {
|
|
168
|
+
beforeEach(() => {
|
|
169
|
+
plugin.start(externalConfig, () => {})
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
it('should update chain counter when external up control is active', (done) => {
|
|
173
|
+
// Clear any initial chain messages
|
|
174
|
+
mockApp.messages = []
|
|
175
|
+
|
|
176
|
+
// First deploy some chain using down control
|
|
177
|
+
mockApp.simulatePathChange(externalConfig.externalDownPath, true)
|
|
178
|
+
|
|
179
|
+
setTimeout(() => {
|
|
180
|
+
// Stop down control
|
|
181
|
+
mockApp.simulatePathChange(externalConfig.externalDownPath, false)
|
|
182
|
+
|
|
183
|
+
setTimeout(() => {
|
|
184
|
+
// Get the chain value after deployment
|
|
185
|
+
const deployedChainValue = mockApp.getLatestChainCounterValue()
|
|
186
|
+
console.log('Deployed chain value:', deployedChainValue)
|
|
187
|
+
|
|
188
|
+
// Clear messages and start up control to retrieve chain
|
|
189
|
+
mockApp.messages = []
|
|
190
|
+
mockApp.simulatePathChange(externalConfig.externalUpPath, true)
|
|
191
|
+
|
|
192
|
+
setTimeout(() => {
|
|
193
|
+
// Stop up control
|
|
194
|
+
mockApp.simulatePathChange(externalConfig.externalUpPath, false)
|
|
195
|
+
|
|
196
|
+
setTimeout(() => {
|
|
197
|
+
// Log all messages for debugging
|
|
198
|
+
const chainMessages = mockApp.messages.filter(
|
|
199
|
+
(m) =>
|
|
200
|
+
m.message?.updates?.[0]?.values?.[0]?.path ===
|
|
201
|
+
'navigation.anchor.chainOut'
|
|
202
|
+
)
|
|
203
|
+
console.log(
|
|
204
|
+
'Up chain messages:',
|
|
205
|
+
chainMessages.map((m) => m.message.updates[0].values[0].value)
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
const finalChainValue = mockApp.getLatestChainCounterValue()
|
|
209
|
+
console.log('Final chain value after retrieval:', finalChainValue)
|
|
210
|
+
|
|
211
|
+
// Should be less than what was deployed
|
|
212
|
+
expect(finalChainValue).to.be.lessThan(deployedChainValue)
|
|
213
|
+
done()
|
|
214
|
+
}, 50)
|
|
215
|
+
}, 300) // Retrieve for 0.3 seconds
|
|
216
|
+
}, 50)
|
|
217
|
+
}, 300) // Deploy for 0.3 seconds first
|
|
218
|
+
}).timeout(3000)
|
|
219
|
+
|
|
220
|
+
it('should update chain counter when external down control is active', (done) => {
|
|
221
|
+
// Simulate external down control activation
|
|
222
|
+
mockApp.simulatePathChange(externalConfig.externalDownPath, true)
|
|
223
|
+
|
|
224
|
+
setTimeout(() => {
|
|
225
|
+
// Stop external control
|
|
226
|
+
mockApp.simulatePathChange(externalConfig.externalDownPath, false)
|
|
227
|
+
|
|
228
|
+
setTimeout(() => {
|
|
229
|
+
const chainValue = mockApp.getLatestChainCounterValue()
|
|
230
|
+
expect(chainValue).to.be.greaterThan(0) // Should be positive (chain going out)
|
|
231
|
+
done()
|
|
232
|
+
}, 50)
|
|
233
|
+
}, 500) // Run for 0.5 seconds
|
|
234
|
+
}).timeout(2000)
|
|
235
|
+
|
|
236
|
+
it('should prioritize external control over relay control for chain counter', (done) => {
|
|
237
|
+
// First deploy some chain using relay control
|
|
238
|
+
mockApp.simulatePathChange(externalConfig.downRelayPath, true)
|
|
239
|
+
|
|
240
|
+
setTimeout(() => {
|
|
241
|
+
mockApp.simulatePathChange(externalConfig.downRelayPath, false)
|
|
242
|
+
const deployedValue = mockApp.getLatestChainCounterValue()
|
|
243
|
+
|
|
244
|
+
// Clear messages and start external down control to deploy more
|
|
245
|
+
mockApp.messages = []
|
|
246
|
+
mockApp.simulatePathChange(externalConfig.externalDownPath, true)
|
|
247
|
+
|
|
248
|
+
setTimeout(() => {
|
|
249
|
+
// Stop external control
|
|
250
|
+
mockApp.simulatePathChange(externalConfig.externalDownPath, false)
|
|
251
|
+
|
|
252
|
+
setTimeout(() => {
|
|
253
|
+
const finalValue = mockApp.getLatestChainCounterValue()
|
|
254
|
+
|
|
255
|
+
// Should have added more chain
|
|
256
|
+
expect(finalValue).to.be.greaterThan(deployedValue)
|
|
257
|
+
done()
|
|
258
|
+
}, 50)
|
|
259
|
+
}, 300) // External control for 0.3 seconds
|
|
260
|
+
}, 300) // Initial deployment
|
|
261
|
+
}).timeout(2000)
|
|
262
|
+
|
|
263
|
+
it('should not interfere with relay-controlled windlass PUT handlers', (done) => {
|
|
264
|
+
const windlassHandler = mockApp.putHandlers.get(
|
|
265
|
+
externalConfig.windlassPath
|
|
266
|
+
)
|
|
267
|
+
expect(windlassHandler).to.exist
|
|
268
|
+
|
|
269
|
+
// External control should not affect PUT handler registration
|
|
270
|
+
const result = windlassHandler(
|
|
271
|
+
'vessels.self',
|
|
272
|
+
externalConfig.windlassPath,
|
|
273
|
+
'up',
|
|
274
|
+
(callbackResult: any) => {
|
|
275
|
+
expect(callbackResult.state).to.equal('COMPLETED')
|
|
276
|
+
setTimeout(() => {
|
|
277
|
+
expect(mockApp.relayStates.get(externalConfig.upRelayPath)).to.be
|
|
278
|
+
.true
|
|
279
|
+
|
|
280
|
+
// Check that windlass state path reflects the relay up state
|
|
281
|
+
const windlassStateMessage = mockApp.messages.find(
|
|
282
|
+
(m) =>
|
|
283
|
+
m.message?.updates?.[0]?.values?.[0]?.path ===
|
|
284
|
+
externalConfig.windlassPath &&
|
|
285
|
+
m.message?.updates?.[0]?.values?.[0]?.value === 'up'
|
|
286
|
+
)
|
|
287
|
+
expect(windlassStateMessage).to.exist
|
|
288
|
+
|
|
289
|
+
done()
|
|
290
|
+
}, 50)
|
|
291
|
+
}
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
// The direct return should be PENDING
|
|
295
|
+
expect(result.state).to.equal('PENDING')
|
|
296
|
+
})
|
|
297
|
+
})
|
|
298
|
+
|
|
299
|
+
describe('Mixed Control Scenarios', () => {
|
|
300
|
+
beforeEach(() => {
|
|
301
|
+
plugin.start(externalConfig, () => {})
|
|
302
|
+
})
|
|
303
|
+
|
|
304
|
+
it('should handle simultaneous relay and external control properly', (done) => {
|
|
305
|
+
// Start with relay control up
|
|
306
|
+
mockApp.simulatePathChange(externalConfig.upRelayPath, true)
|
|
307
|
+
|
|
308
|
+
// After a short time, start external down control
|
|
309
|
+
setTimeout(() => {
|
|
310
|
+
mockApp.simulatePathChange(externalConfig.externalDownPath, true)
|
|
311
|
+
|
|
312
|
+
// Stop relay control while external continues
|
|
313
|
+
setTimeout(() => {
|
|
314
|
+
mockApp.simulatePathChange(externalConfig.upRelayPath, false)
|
|
315
|
+
|
|
316
|
+
// Finally stop external control
|
|
317
|
+
setTimeout(() => {
|
|
318
|
+
mockApp.simulatePathChange(externalConfig.externalDownPath, false)
|
|
319
|
+
|
|
320
|
+
setTimeout(() => {
|
|
321
|
+
const chainValue = mockApp.getLatestChainCounterValue()
|
|
322
|
+
// Chain movement should reflect external control taking precedence
|
|
323
|
+
expect(chainValue).to.be.a('number')
|
|
324
|
+
done()
|
|
325
|
+
}, 50)
|
|
326
|
+
}, 200)
|
|
327
|
+
}, 200)
|
|
328
|
+
}, 200)
|
|
329
|
+
}).timeout(3000)
|
|
330
|
+
})
|
|
331
|
+
|
|
332
|
+
describe('Windlass State Path Updates', () => {
|
|
333
|
+
beforeEach(() => {
|
|
334
|
+
plugin.start(externalConfig, () => {})
|
|
335
|
+
})
|
|
336
|
+
|
|
337
|
+
it('should update windlass state path when external up control is active', (done) => {
|
|
338
|
+
// Clear initial messages
|
|
339
|
+
mockApp.messages = []
|
|
340
|
+
|
|
341
|
+
// Simulate external up control
|
|
342
|
+
mockApp.simulatePathChange(externalConfig.externalUpPath, true)
|
|
343
|
+
|
|
344
|
+
setTimeout(() => {
|
|
345
|
+
// Should have windlass state path update
|
|
346
|
+
const windlassStateMessage = mockApp.messages.find(
|
|
347
|
+
(m) =>
|
|
348
|
+
m.message?.updates?.[0]?.values?.[0]?.path ===
|
|
349
|
+
externalConfig.windlassPath &&
|
|
350
|
+
m.message?.updates?.[0]?.values?.[0]?.value === 'up'
|
|
351
|
+
)
|
|
352
|
+
expect(windlassStateMessage).to.exist
|
|
353
|
+
|
|
354
|
+
// Turn off external control
|
|
355
|
+
mockApp.simulatePathChange(externalConfig.externalUpPath, false)
|
|
356
|
+
|
|
357
|
+
setTimeout(() => {
|
|
358
|
+
// Should update to off state
|
|
359
|
+
const offStateMessage = mockApp.messages.find(
|
|
360
|
+
(m) =>
|
|
361
|
+
m.message?.updates?.[0]?.values?.[0]?.path ===
|
|
362
|
+
externalConfig.windlassPath &&
|
|
363
|
+
m.message?.updates?.[0]?.values?.[0]?.value === 'off'
|
|
364
|
+
)
|
|
365
|
+
expect(offStateMessage).to.exist
|
|
366
|
+
done()
|
|
367
|
+
}, 50)
|
|
368
|
+
}, 50)
|
|
369
|
+
})
|
|
370
|
+
|
|
371
|
+
it('should update windlass state path when external down control is active', (done) => {
|
|
372
|
+
// Clear initial messages
|
|
373
|
+
mockApp.messages = []
|
|
374
|
+
|
|
375
|
+
// Simulate external down control
|
|
376
|
+
mockApp.simulatePathChange(externalConfig.externalDownPath, true)
|
|
377
|
+
|
|
378
|
+
setTimeout(() => {
|
|
379
|
+
// Should have windlass state path update
|
|
380
|
+
const windlassStateMessage = mockApp.messages.find(
|
|
381
|
+
(m) =>
|
|
382
|
+
m.message?.updates?.[0]?.values?.[0]?.path ===
|
|
383
|
+
externalConfig.windlassPath &&
|
|
384
|
+
m.message?.updates?.[0]?.values?.[0]?.value === 'down'
|
|
385
|
+
)
|
|
386
|
+
expect(windlassStateMessage).to.exist
|
|
387
|
+
|
|
388
|
+
done()
|
|
389
|
+
}, 50)
|
|
390
|
+
})
|
|
391
|
+
|
|
392
|
+
it('should prioritize external control state over relay control state', (done) => {
|
|
393
|
+
// Start relay up control
|
|
394
|
+
mockApp.simulatePathChange(externalConfig.upRelayPath, true)
|
|
395
|
+
|
|
396
|
+
setTimeout(() => {
|
|
397
|
+
// Should show up state
|
|
398
|
+
let windlassStateMessages = mockApp.messages.filter(
|
|
399
|
+
(m) =>
|
|
400
|
+
m.message?.updates?.[0]?.values?.[0]?.path ===
|
|
401
|
+
externalConfig.windlassPath
|
|
402
|
+
)
|
|
403
|
+
expect(
|
|
404
|
+
windlassStateMessages[windlassStateMessages.length - 1].message
|
|
405
|
+
.updates[0].values[0].value
|
|
406
|
+
).to.equal('up')
|
|
407
|
+
|
|
408
|
+
// Clear messages and start external down control
|
|
409
|
+
mockApp.messages = []
|
|
410
|
+
mockApp.simulatePathChange(externalConfig.externalDownPath, true)
|
|
411
|
+
|
|
412
|
+
setTimeout(() => {
|
|
413
|
+
// Should now show down state (external takes precedence)
|
|
414
|
+
const externalStateMessage = mockApp.messages.find(
|
|
415
|
+
(m) =>
|
|
416
|
+
m.message?.updates?.[0]?.values?.[0]?.path ===
|
|
417
|
+
externalConfig.windlassPath &&
|
|
418
|
+
m.message?.updates?.[0]?.values?.[0]?.value === 'down'
|
|
419
|
+
)
|
|
420
|
+
expect(externalStateMessage).to.exist
|
|
421
|
+
|
|
422
|
+
// Stop external control
|
|
423
|
+
mockApp.simulatePathChange(externalConfig.externalDownPath, false)
|
|
424
|
+
|
|
425
|
+
setTimeout(() => {
|
|
426
|
+
// Should revert to relay state (up)
|
|
427
|
+
const revertStateMessage = mockApp.messages.find(
|
|
428
|
+
(m) =>
|
|
429
|
+
m.message?.updates?.[0]?.values?.[0]?.path ===
|
|
430
|
+
externalConfig.windlassPath &&
|
|
431
|
+
m.message?.updates?.[0]?.values?.[0]?.value === 'up'
|
|
432
|
+
)
|
|
433
|
+
expect(revertStateMessage).to.exist
|
|
434
|
+
done()
|
|
435
|
+
}, 50)
|
|
436
|
+
}, 50)
|
|
437
|
+
}, 50)
|
|
438
|
+
})
|
|
439
|
+
})
|
|
440
|
+
|
|
441
|
+
describe('External Control Without Chain Counter', () => {
|
|
442
|
+
it('should not subscribe to external paths when chain counter is disabled', () => {
|
|
443
|
+
const configNoChain = { ...externalConfig }
|
|
444
|
+
configNoChain.chainRateFeetPerMinute = 0 // Disable chain counter
|
|
445
|
+
|
|
446
|
+
plugin.start(configNoChain, () => {})
|
|
447
|
+
|
|
448
|
+
const subscription = mockApp.subscriptions[0]
|
|
449
|
+
const subscribedPaths = subscription.options.subscribe.map(
|
|
450
|
+
(s: any) => s.path
|
|
451
|
+
)
|
|
452
|
+
|
|
453
|
+
// Should only have relay paths, not external paths
|
|
454
|
+
expect(subscribedPaths).to.include(configNoChain.upRelayPath)
|
|
455
|
+
expect(subscribedPaths).to.include(configNoChain.downRelayPath)
|
|
456
|
+
expect(subscribedPaths).to.not.include(configNoChain.externalUpPath)
|
|
457
|
+
expect(subscribedPaths).to.not.include(configNoChain.externalDownPath)
|
|
458
|
+
})
|
|
459
|
+
})
|
|
460
|
+
})
|