@signalk/vedirect-serial-usb 1.5.0 → 1.7.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/LICENSE +201 -0
- package/README.md +36 -24
- package/dist/Parser.d.ts +50 -0
- package/dist/Parser.d.ts.map +1 -0
- package/dist/Parser.js +350 -0
- package/dist/Parser.js.map +1 -0
- package/dist/constants.d.ts +5 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +14 -0
- package/dist/constants.js.map +1 -0
- package/dist/fields.d.ts +14 -0
- package/dist/fields.d.ts.map +1 -0
- package/dist/fields.js +439 -0
- package/dist/fields.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +305 -0
- package/dist/index.js.map +1 -0
- package/dist/productIds.d.ts +9 -0
- package/dist/productIds.d.ts.map +1 -0
- package/dist/productIds.js +95 -0
- package/dist/productIds.js.map +1 -0
- package/dist/serial.d.ts +14 -0
- package/dist/serial.d.ts.map +1 -0
- package/dist/serial.js +106 -0
- package/dist/serial.js.map +1 -0
- package/dist/standalone.d.ts +22 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/standalone.js +73 -0
- package/dist/standalone.js.map +1 -0
- package/dist/tcp.d.ts +5 -0
- package/dist/tcp.d.ts.map +1 -0
- package/dist/tcp.js +106 -0
- package/dist/tcp.js.map +1 -0
- package/dist/types.d.ts +181 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/dist/udp.d.ts +5 -0
- package/dist/udp.d.ts.map +1 -0
- package/dist/udp.js +67 -0
- package/dist/udp.js.map +1 -0
- package/docs/screenshots/1_config.png +0 -0
- package/logo.svg +46 -0
- package/package.json +79 -19
- package/.github/FUNDING.yml +0 -1
- package/.travis.yml +0 -13
- package/index.js +0 -159
- package/lib/Parser.js +0 -396
- package/lib/fields.js +0 -503
- package/lib/filestream.js +0 -38
- package/lib/productIds.json +0 -84
- package/lib/serial.js +0 -48
- package/lib/tcp.js +0 -53
- package/lib/udp.js +0 -26
- package/log/one.txt +0 -18
- package/log/run-log.js +0 -7
- package/log/sampleOutput.txt +0 -297
- package/migration.js +0 -57
- package/run.js +0 -10
- package/standalone.js +0 -68
- package/test/index.js +0 -52
- package/todo.md +0 -14
package/dist/Parser.js
ADDED
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.VEDirectParser = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* VE.Direct text-protocol parser.
|
|
9
|
+
*
|
|
10
|
+
* Accumulates raw bytes into blocks (terminated by the `Checksum` field),
|
|
11
|
+
* verifies the block checksum (a running byte sum that must be 0 mod 256),
|
|
12
|
+
* decodes each `label<TAB>value` line via the field table, and emits a Signal
|
|
13
|
+
* K delta per valid block.
|
|
14
|
+
*
|
|
15
|
+
* Block layout on the wire (one field per line, `\r\n`-separated):
|
|
16
|
+
* "\r\nPID\t0xA053\r\nV\t12340\r\n...\r\nChecksum\t<byte>"
|
|
17
|
+
*/
|
|
18
|
+
const debug_1 = __importDefault(require("debug"));
|
|
19
|
+
const events_1 = require("events");
|
|
20
|
+
const fields_1 = __importDefault(require("./fields"));
|
|
21
|
+
const productIds_1 = require("./productIds");
|
|
22
|
+
const constants_1 = require("./constants");
|
|
23
|
+
const defaults = {
|
|
24
|
+
productIds: productIds_1.productIds,
|
|
25
|
+
fields: fields_1.default,
|
|
26
|
+
defaultUnitId: 'victronDevice',
|
|
27
|
+
mainBatt: 'house',
|
|
28
|
+
auxBatt: 'starter',
|
|
29
|
+
bmv: 'bmv',
|
|
30
|
+
solar: 'solar'
|
|
31
|
+
};
|
|
32
|
+
// A VE.Direct block is well under 1 KB. If far more than that accumulates
|
|
33
|
+
// without a Checksum line, the stream is malformed or the sentinel was lost;
|
|
34
|
+
// the cache is dropped rather than left to grow unbounded from device input.
|
|
35
|
+
const MAX_CACHE_LENGTH = 8192;
|
|
36
|
+
class VEDirectParser extends events_1.EventEmitter {
|
|
37
|
+
options;
|
|
38
|
+
fields;
|
|
39
|
+
debug;
|
|
40
|
+
line;
|
|
41
|
+
data;
|
|
42
|
+
cache;
|
|
43
|
+
sum;
|
|
44
|
+
constructor(opts) {
|
|
45
|
+
super();
|
|
46
|
+
this.options = Object.assign({}, defaults, opts || {});
|
|
47
|
+
this.fields = this.options.fields;
|
|
48
|
+
this.debug = (0, debug_1.default)('signalk-vedirect-parser');
|
|
49
|
+
this.line = [];
|
|
50
|
+
this.data = {};
|
|
51
|
+
this.cache = '';
|
|
52
|
+
this.sum = 0;
|
|
53
|
+
}
|
|
54
|
+
addChunk(buf, connectionIndex) {
|
|
55
|
+
if (!Buffer.isBuffer(buf)) {
|
|
56
|
+
this.warn('addChunk: incoming data is not a buffer: ' + typeof buf);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const chunk = buf.toString('ascii');
|
|
60
|
+
buf.forEach((b) => {
|
|
61
|
+
this.sum += b;
|
|
62
|
+
});
|
|
63
|
+
this.cache += chunk;
|
|
64
|
+
if (chunk.toLowerCase().includes('checksum')) {
|
|
65
|
+
// Last line of block. Verify checksum of block in cache and parse
|
|
66
|
+
// line-by-line if checksum is correct.
|
|
67
|
+
this._verifyCacheAndParse(connectionIndex);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (this.cache.length > MAX_CACHE_LENGTH) {
|
|
71
|
+
this.warn(`block exceeded ${MAX_CACHE_LENGTH} bytes without a Checksum line; discarding`);
|
|
72
|
+
this.cache = '';
|
|
73
|
+
this.sum = 0;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
parse(line) {
|
|
77
|
+
if (typeof line !== 'string') {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
this.line = line.trim().split('\t');
|
|
81
|
+
this._parse();
|
|
82
|
+
}
|
|
83
|
+
set(key, value) {
|
|
84
|
+
this.data[key] = value;
|
|
85
|
+
this.emit('change', Object.assign({}, this.data));
|
|
86
|
+
this.emit('set', { key, value });
|
|
87
|
+
}
|
|
88
|
+
get(key) {
|
|
89
|
+
return this.data[key];
|
|
90
|
+
}
|
|
91
|
+
unset(key) {
|
|
92
|
+
if (!Object.prototype.hasOwnProperty.call(this.data, key)) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
this.debug(`Unsetting ${key}`);
|
|
96
|
+
this.emit('change', Object.assign({}, this.data));
|
|
97
|
+
this.emit('unset', key);
|
|
98
|
+
delete this.data[key];
|
|
99
|
+
}
|
|
100
|
+
getData() {
|
|
101
|
+
return Object.assign({}, this.data);
|
|
102
|
+
}
|
|
103
|
+
_verifyCacheAndParse(connectionIndex) {
|
|
104
|
+
const conn = this.options.vedirect?.[connectionIndex];
|
|
105
|
+
// Verify checksum unless ignoreChecksum is explicitly true.
|
|
106
|
+
if (conn?.ignoreChecksum !== true && this.sum % 256 !== 0) {
|
|
107
|
+
this.warn(`block checksum doesn't equal 0: ${this.sum % 256}`);
|
|
108
|
+
this.cache = '';
|
|
109
|
+
this.sum = 0;
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
this.cache
|
|
113
|
+
.trim()
|
|
114
|
+
.split('\n')
|
|
115
|
+
.map((line) => line.trim())
|
|
116
|
+
.filter((line) => line !== '')
|
|
117
|
+
.forEach((line) => {
|
|
118
|
+
this.line = line.split('\t');
|
|
119
|
+
this._parse();
|
|
120
|
+
});
|
|
121
|
+
this.cache = '';
|
|
122
|
+
this.sum = 0;
|
|
123
|
+
this.generateDelta(connectionIndex);
|
|
124
|
+
}
|
|
125
|
+
_parse() {
|
|
126
|
+
if (!Array.isArray(this.line) || this.line.length !== 2) {
|
|
127
|
+
this.warn('_parse() called on invalid line: ' +
|
|
128
|
+
JSON.stringify({ line: this.line }));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const rawKey = this.line[0];
|
|
132
|
+
const rawData = this.line[1];
|
|
133
|
+
if (rawKey === undefined || rawData === undefined) {
|
|
134
|
+
this.warn('Data is NULL, ignoring');
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const fieldKey = String(rawKey).toUpperCase();
|
|
138
|
+
const field = this.fields[fieldKey];
|
|
139
|
+
if (!field || typeof field !== 'object') {
|
|
140
|
+
this.warn(`No field definition for: ${fieldKey}, ignoring`);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const converted = typeof field.value === 'function' ? field.value(rawData, this) : rawData;
|
|
144
|
+
// undefined skips the field, leaving any prior value untouched; null is
|
|
145
|
+
// stored as an explicit null so it clears the value downstream in the
|
|
146
|
+
// delta (see FieldValue). Only undefined means "no update".
|
|
147
|
+
if (converted !== undefined) {
|
|
148
|
+
this.set(field.name, { ...field, value: converted });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
getAlarmReason(alarmReason) {
|
|
152
|
+
switch (parseInt(String(alarmReason), 10)) {
|
|
153
|
+
case 1:
|
|
154
|
+
return 'Low voltage';
|
|
155
|
+
case 2:
|
|
156
|
+
return 'High voltage';
|
|
157
|
+
case 4:
|
|
158
|
+
return 'Low state-of-charge';
|
|
159
|
+
case 8:
|
|
160
|
+
return 'Low starter voltage';
|
|
161
|
+
case 16:
|
|
162
|
+
return 'High starter voltage';
|
|
163
|
+
case 32:
|
|
164
|
+
return 'Low temperature';
|
|
165
|
+
case 64:
|
|
166
|
+
return 'High temperature';
|
|
167
|
+
case 128:
|
|
168
|
+
return 'Mid voltage';
|
|
169
|
+
case 256:
|
|
170
|
+
return 'Overload';
|
|
171
|
+
case 512:
|
|
172
|
+
return 'DC ripple';
|
|
173
|
+
case 1024:
|
|
174
|
+
return 'Low V AC out';
|
|
175
|
+
case 2048:
|
|
176
|
+
return 'High V AC out';
|
|
177
|
+
default:
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
getErrorString(err) {
|
|
182
|
+
switch (parseInt(String(err), 10)) {
|
|
183
|
+
case 2:
|
|
184
|
+
return 'Battery voltage too high';
|
|
185
|
+
case 17:
|
|
186
|
+
return 'Charger temperature too high';
|
|
187
|
+
case 18:
|
|
188
|
+
return 'Charger overcurrent';
|
|
189
|
+
// Can be ignored according to victron protocol
|
|
190
|
+
// case 19:
|
|
191
|
+
// return 'Charger current reversed'
|
|
192
|
+
case 20:
|
|
193
|
+
return 'Bulk time limit exceeded';
|
|
194
|
+
// Can be ignored according to victron protocol
|
|
195
|
+
// case 21:
|
|
196
|
+
// return 'Current sensor issue (sensor bias/sensor broken)'
|
|
197
|
+
case 26:
|
|
198
|
+
return 'Terminals overheated';
|
|
199
|
+
case 33:
|
|
200
|
+
return 'Input voltage too high (solar panel)';
|
|
201
|
+
case 34:
|
|
202
|
+
return 'Input current too high (solar panel)';
|
|
203
|
+
case 38:
|
|
204
|
+
return 'Input shutdown (due to excessive battery voltage)';
|
|
205
|
+
case 116:
|
|
206
|
+
return 'Factory calibration data lost';
|
|
207
|
+
case 117:
|
|
208
|
+
return 'Invalid/incompatible firmware';
|
|
209
|
+
case 119:
|
|
210
|
+
return 'User settings invalid';
|
|
211
|
+
default:
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
getMode(mode) {
|
|
216
|
+
switch (parseInt(String(mode), 10)) {
|
|
217
|
+
case 2:
|
|
218
|
+
return 'on';
|
|
219
|
+
case 4:
|
|
220
|
+
return 'off';
|
|
221
|
+
case 5:
|
|
222
|
+
return 'eco';
|
|
223
|
+
default:
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
getStateOfOperation(cs) {
|
|
228
|
+
switch (parseInt(String(cs), 10)) {
|
|
229
|
+
case 0:
|
|
230
|
+
return 'off';
|
|
231
|
+
case 1:
|
|
232
|
+
return 'low power';
|
|
233
|
+
case 2:
|
|
234
|
+
return 'fault';
|
|
235
|
+
case 3:
|
|
236
|
+
return 'bulk';
|
|
237
|
+
case 4:
|
|
238
|
+
return 'absorption';
|
|
239
|
+
case 5:
|
|
240
|
+
return 'float';
|
|
241
|
+
case 9:
|
|
242
|
+
return 'inverting';
|
|
243
|
+
default:
|
|
244
|
+
return undefined;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
getTrackerOperationMode(mppt) {
|
|
248
|
+
switch (parseInt(String(mppt), 10)) {
|
|
249
|
+
case 0:
|
|
250
|
+
return 'off';
|
|
251
|
+
case 1:
|
|
252
|
+
return 'voltage or current limited';
|
|
253
|
+
case 2:
|
|
254
|
+
return 'mpp tracker active';
|
|
255
|
+
default:
|
|
256
|
+
return undefined;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
getProductLongname(pid) {
|
|
260
|
+
let key = String(pid);
|
|
261
|
+
if (!key.includes('0x')) {
|
|
262
|
+
key = `0x${key}`;
|
|
263
|
+
}
|
|
264
|
+
return this.options.productIds[key] ?? 'Unknown';
|
|
265
|
+
}
|
|
266
|
+
generateDelta(connectionIndex) {
|
|
267
|
+
const values = Object.keys(this.data)
|
|
268
|
+
.map((name) => {
|
|
269
|
+
const path = this.getPath(name, connectionIndex);
|
|
270
|
+
const entry = this.data[name];
|
|
271
|
+
if (path === null || entry === undefined) {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
return { path, value: entry.value };
|
|
275
|
+
})
|
|
276
|
+
.filter((update) => update !== null);
|
|
277
|
+
if (values.length === 0) {
|
|
278
|
+
this.warn('No mutations in this delta');
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
const delta = {
|
|
282
|
+
context: 'vessels.self',
|
|
283
|
+
updates: [
|
|
284
|
+
{
|
|
285
|
+
// Set the Signal K source ref as a bare string rather than a
|
|
286
|
+
// structured `source` object. signalk-server reads any `source.src`
|
|
287
|
+
// as an NMEA 2000 device address, so a VE.Direct delta carrying one
|
|
288
|
+
// would corrupt the server's `sources` tree with bogus
|
|
289
|
+
// `sources.*.n2k.pgns` nodes. A plain `$source` sidesteps that while
|
|
290
|
+
// keeping each connection individually addressable:
|
|
291
|
+
// `vedirect-signalk.0`, `vedirect-signalk.1`, ...
|
|
292
|
+
$source: `${constants_1.PLUGIN_ID}.${connectionIndex}`,
|
|
293
|
+
timestamp: new Date().toISOString(),
|
|
294
|
+
values
|
|
295
|
+
}
|
|
296
|
+
]
|
|
297
|
+
};
|
|
298
|
+
this.emit('delta', delta);
|
|
299
|
+
}
|
|
300
|
+
getPath(name, connectionIndex) {
|
|
301
|
+
const field = Object.values(this.fields).find((f) => f.name === name && f.path !== undefined);
|
|
302
|
+
if (!field?.path) {
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
const conn = this.options.vedirect?.[connectionIndex];
|
|
306
|
+
// On a solar charger, VE.Direct's V/I labels describe the charger's DC
|
|
307
|
+
// output rather than a battery, so those fields are reported under
|
|
308
|
+
// electrical.solar (via the field's solarCharger override) to avoid
|
|
309
|
+
// clashing with a battery monitor on the same bank.
|
|
310
|
+
const override = conn?.deviceType === 'Solar charger' ? field.solarCharger : undefined;
|
|
311
|
+
const path = override?.path ?? field.path;
|
|
312
|
+
const unitId = override?.unitId ?? field.unitId;
|
|
313
|
+
if (unitId === undefined) {
|
|
314
|
+
return path;
|
|
315
|
+
}
|
|
316
|
+
return path.replace('*', this.resolveUnitId(unitId, conn));
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Resolves a field's unit id to the configured device name. The four
|
|
320
|
+
* configurable units come from the connection; aux2Batt/inverter have no
|
|
321
|
+
* config slot and use defaultUnitId. The switch is exhaustive over UnitId,
|
|
322
|
+
* so adding a unit without handling it here is a compile error.
|
|
323
|
+
*/
|
|
324
|
+
resolveUnitId(unitId, conn) {
|
|
325
|
+
switch (unitId) {
|
|
326
|
+
case 'mainBatt':
|
|
327
|
+
return conn?.mainBatt || this.options.defaultUnitId;
|
|
328
|
+
case 'auxBatt':
|
|
329
|
+
return conn?.auxBatt || this.options.defaultUnitId;
|
|
330
|
+
case 'bmv':
|
|
331
|
+
return conn?.bmv || this.options.defaultUnitId;
|
|
332
|
+
case 'solar':
|
|
333
|
+
return conn?.solar || this.options.defaultUnitId;
|
|
334
|
+
case 'aux2Batt':
|
|
335
|
+
case 'inverter':
|
|
336
|
+
return this.options.defaultUnitId;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
warn(message) {
|
|
340
|
+
this.debug(`Warning: ${message}`);
|
|
341
|
+
this.emit('warn', message);
|
|
342
|
+
}
|
|
343
|
+
error(err) {
|
|
344
|
+
this.debug(`Error: ${err.message}`);
|
|
345
|
+
this.emit('error', err);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
exports.VEDirectParser = VEDirectParser;
|
|
349
|
+
exports.default = VEDirectParser;
|
|
350
|
+
//# sourceMappingURL=Parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Parser.js","sourceRoot":"","sources":["../src/Parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,eAAO,MAAM,SAAS,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Plugin-wide constants.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PLUGIN_ID = void 0;
|
|
7
|
+
// The plugin id. signalk-server receives it as the provider id (the first
|
|
8
|
+
// argument to app.handleMessage), and the parser reuses it to namespace the
|
|
9
|
+
// per-connection Signal K source ref it stamps on each delta
|
|
10
|
+
// (`vedirect-signalk.0`, `vedirect-signalk.1`, ...). Both src/index.ts and
|
|
11
|
+
// src/Parser.ts need it; index.ts uses `export =` and so cannot re-export a
|
|
12
|
+
// named const, hence this shared module keeps the two from drifting apart.
|
|
13
|
+
exports.PLUGIN_ID = 'vedirect-signalk';
|
|
14
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,0EAA0E;AAC1E,4EAA4E;AAC5E,6DAA6D;AAC7D,2EAA2E;AAC3E,4EAA4E;AAC5E,2EAA2E;AAC9D,QAAA,SAAS,GAAG,kBAAkB,CAAA"}
|
package/dist/fields.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VE.Direct field definitions.
|
|
3
|
+
*
|
|
4
|
+
* Maps each VE.Direct text-protocol label (e.g. `V`, `SOC`, `PID`) to how it
|
|
5
|
+
* is named, where it lands in the Signal K tree (`path`, with `*` replaced by
|
|
6
|
+
* the configured unit id) and how its raw token is converted. A field with no
|
|
7
|
+
* `value` function stores the raw string. A `value` function returns the value
|
|
8
|
+
* to store, `undefined` to skip the field (leaving any prior value untouched),
|
|
9
|
+
* or `null` to store an explicit null that clears the value in Signal K.
|
|
10
|
+
*/
|
|
11
|
+
import type { FieldMap } from './types';
|
|
12
|
+
declare const fields: FieldMap;
|
|
13
|
+
export default fields;
|
|
14
|
+
//# sourceMappingURL=fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAuCvC,QAAA,MAAM,MAAM,EAAE,QAoZb,CAAA;AAED,eAAe,MAAM,CAAA"}
|