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.
@@ -5,9 +5,9 @@ name: Node.js CI & Test
5
5
 
6
6
  on:
7
7
  push:
8
- branches: ['master']
8
+ branches: ['main']
9
9
  pull_request:
10
- branches: ['master']
10
+ branches: ['main']
11
11
 
12
12
  jobs:
13
13
  build:
package/.mocharc.json CHANGED
@@ -1,5 +1,7 @@
1
1
  {
2
2
  "extension": ["ts"],
3
3
  "spec": "test/*.ts",
4
- "require": "tsx"
4
+ "require": "tsx",
5
+ "timeout": 5000,
6
+ "recursive": true
5
7
  }
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
 
@@ -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,WAkY5B,CAAA;AAGD,eAAe,KAAK,CAAA"}
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.1",
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 build:web && npm run test && npm run ci-lint",
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.