@iobroker/modbus 7.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/build/convert.d.ts +2 -0
  4. package/build/convert.js +102 -0
  5. package/build/convert.js.map +1 -0
  6. package/build/index.d.ts +88 -0
  7. package/build/index.js +1005 -0
  8. package/build/index.js.map +1 -0
  9. package/build/lib/Master.d.ts +27 -0
  10. package/build/lib/Master.js +811 -0
  11. package/build/lib/Master.js.map +1 -0
  12. package/build/lib/Put.d.ts +19 -0
  13. package/build/lib/Put.js +113 -0
  14. package/build/lib/Put.js.map +1 -0
  15. package/build/lib/Slave.d.ts +15 -0
  16. package/build/lib/Slave.js +545 -0
  17. package/build/lib/Slave.js.map +1 -0
  18. package/build/lib/common.d.ts +3 -0
  19. package/build/lib/common.js +371 -0
  20. package/build/lib/common.js.map +1 -0
  21. package/build/lib/crc16modbus.d.ts +1 -0
  22. package/build/lib/crc16modbus.js +33 -0
  23. package/build/lib/crc16modbus.js.map +1 -0
  24. package/build/lib/jsmodbus/modbus-client-core.d.ts +78 -0
  25. package/build/lib/jsmodbus/modbus-client-core.js +528 -0
  26. package/build/lib/jsmodbus/modbus-client-core.js.map +1 -0
  27. package/build/lib/jsmodbus/modbus-server-core.d.ts +33 -0
  28. package/build/lib/jsmodbus/modbus-server-core.js +363 -0
  29. package/build/lib/jsmodbus/modbus-server-core.js.map +1 -0
  30. package/build/lib/jsmodbus/transports/errors.d.ts +7 -0
  31. package/build/lib/jsmodbus/transports/errors.js +40 -0
  32. package/build/lib/jsmodbus/transports/errors.js.map +1 -0
  33. package/build/lib/jsmodbus/transports/modbus-client-serial.d.ts +23 -0
  34. package/build/lib/jsmodbus/transports/modbus-client-serial.js +154 -0
  35. package/build/lib/jsmodbus/transports/modbus-client-serial.js.map +1 -0
  36. package/build/lib/jsmodbus/transports/modbus-client-tcp-rtu.d.ts +24 -0
  37. package/build/lib/jsmodbus/transports/modbus-client-tcp-rtu.js +166 -0
  38. package/build/lib/jsmodbus/transports/modbus-client-tcp-rtu.js.map +1 -0
  39. package/build/lib/jsmodbus/transports/modbus-client-tcp-ssl.d.ts +34 -0
  40. package/build/lib/jsmodbus/transports/modbus-client-tcp-ssl.js +138 -0
  41. package/build/lib/jsmodbus/transports/modbus-client-tcp-ssl.js.map +1 -0
  42. package/build/lib/jsmodbus/transports/modbus-client-tcp.d.ts +27 -0
  43. package/build/lib/jsmodbus/transports/modbus-client-tcp.js +123 -0
  44. package/build/lib/jsmodbus/transports/modbus-client-tcp.js.map +1 -0
  45. package/build/lib/jsmodbus/transports/modbus-server-serial.d.ts +29 -0
  46. package/build/lib/jsmodbus/transports/modbus-server-serial.js +206 -0
  47. package/build/lib/jsmodbus/transports/modbus-server-serial.js.map +1 -0
  48. package/build/lib/jsmodbus/transports/modbus-server-tcp.d.ts +25 -0
  49. package/build/lib/jsmodbus/transports/modbus-server-tcp.js +112 -0
  50. package/build/lib/jsmodbus/transports/modbus-server-tcp.js.map +1 -0
  51. package/build/lib/loggingUtils.d.ts +11 -0
  52. package/build/lib/loggingUtils.js +37 -0
  53. package/build/lib/loggingUtils.js.map +1 -0
  54. package/package.json +68 -0
@@ -0,0 +1,371 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractValue = extractValue;
4
+ exports.writeValue = writeValue;
5
+ function extractValue(type, len, buffer, offset) {
6
+ let i1;
7
+ let i2;
8
+ let buf;
9
+ let _len;
10
+ let str = '';
11
+ switch (type) {
12
+ case 'uint8be':
13
+ return buffer.readUInt8(offset * 2 + 1);
14
+ case 'uint8le':
15
+ return buffer.readUInt8(offset * 2);
16
+ case 'int8be':
17
+ return buffer.readInt8(offset * 2 + 1);
18
+ case 'int8le':
19
+ return buffer.readInt8(offset * 2);
20
+ case 'uint16be':
21
+ return buffer.readUInt16BE(offset * 2);
22
+ case 'uint16le':
23
+ return buffer.readUInt16LE(offset * 2);
24
+ case 'int16be':
25
+ return buffer.readInt16BE(offset * 2);
26
+ case 'int16le':
27
+ return buffer.readInt16LE(offset * 2);
28
+ case 'uint32be':
29
+ return buffer.readUInt32BE(offset * 2);
30
+ case 'uint32le':
31
+ return buffer.readUInt32LE(offset * 2);
32
+ case 'uint32sw':
33
+ buf = Buffer.alloc(4);
34
+ buf[0] = buffer[offset * 2 + 2];
35
+ buf[1] = buffer[offset * 2 + 3];
36
+ buf[2] = buffer[offset * 2 + 0];
37
+ buf[3] = buffer[offset * 2 + 1];
38
+ return buf.readUInt32BE(0);
39
+ case 'uint32sb':
40
+ buf = Buffer.alloc(4);
41
+ buf[0] = buffer[offset * 2 + 1];
42
+ buf[1] = buffer[offset * 2 + 0];
43
+ buf[2] = buffer[offset * 2 + 3];
44
+ buf[3] = buffer[offset * 2 + 2];
45
+ return buf.readUInt32BE(0);
46
+ case 'int32be':
47
+ return buffer.readInt32BE(offset * 2);
48
+ case 'int32le':
49
+ return buffer.readInt32LE(offset * 2);
50
+ case 'int32sw':
51
+ buf = Buffer.alloc(4);
52
+ buf[0] = buffer[offset * 2 + 2];
53
+ buf[1] = buffer[offset * 2 + 3];
54
+ buf[2] = buffer[offset * 2 + 0];
55
+ buf[3] = buffer[offset * 2 + 1];
56
+ return buf.readInt32BE(0);
57
+ case 'int32sb':
58
+ buf = Buffer.alloc(4);
59
+ buf[0] = buffer[offset * 2 + 1];
60
+ buf[1] = buffer[offset * 2 + 0];
61
+ buf[2] = buffer[offset * 2 + 3];
62
+ buf[3] = buffer[offset * 2 + 2];
63
+ return buf.readInt32BE(0);
64
+ case 'uint64be':
65
+ return buffer.readUInt32BE(offset * 2) * 0x100000000 + buffer.readUInt32BE(offset * 2 + 4);
66
+ case 'uint64le':
67
+ return buffer.readUInt32LE(offset * 2) + buffer.readUInt32LE(offset * 2 + 4) * 0x100000000;
68
+ case 'int64be':
69
+ i1 = buffer.readInt32BE(offset * 2);
70
+ i2 = buffer.readUInt32BE(offset * 2 + 4);
71
+ if (i1 >= 0) {
72
+ return i1 * 0x100000000 + i2; // <<32 does not work
73
+ }
74
+ return i1 * 0x100000000 - i2; // I have no solution for that !
75
+ case 'int64le':
76
+ i2 = buffer.readUInt32LE(offset * 2);
77
+ i1 = buffer.readInt32LE(offset * 2 + 4);
78
+ if (i1 >= 0) {
79
+ return i1 * 0x100000000 + i2; // <<32 does not work
80
+ }
81
+ return i1 * 0x100000000 - i2; // I have no solution for that !
82
+ case 'floatbe':
83
+ return buffer.readFloatBE(offset * 2);
84
+ case 'floatle':
85
+ return buffer.readFloatLE(offset * 2);
86
+ case 'floatsw':
87
+ buf = Buffer.alloc(4);
88
+ buf[0] = buffer[offset * 2 + 2];
89
+ buf[1] = buffer[offset * 2 + 3];
90
+ buf[2] = buffer[offset * 2 + 0];
91
+ buf[3] = buffer[offset * 2 + 1];
92
+ return buf.readFloatBE(0);
93
+ case 'floatsb':
94
+ buf = Buffer.alloc(4);
95
+ buf[0] = buffer[offset * 2 + 1];
96
+ buf[1] = buffer[offset * 2 + 0];
97
+ buf[2] = buffer[offset * 2 + 3];
98
+ buf[3] = buffer[offset * 2 + 2];
99
+ return buf.readFloatBE(0);
100
+ case 'doublebe':
101
+ return buffer.readDoubleBE(offset * 2);
102
+ case 'doublele':
103
+ return buffer.readDoubleLE(offset * 2);
104
+ case 'string':
105
+ // find length
106
+ _len = 0;
107
+ while (buffer[offset * 2 + _len] && _len < len * 2) {
108
+ _len++;
109
+ }
110
+ return buffer.toString('ascii', offset * 2, offset * 2 + _len);
111
+ case 'stringle':
112
+ // find length
113
+ _len = 0;
114
+ while (_len < len * 2) {
115
+ if (buffer[offset * 2 + _len + 1]) {
116
+ str += String.fromCharCode(buffer[offset * 2 + _len + 1]);
117
+ if (buffer[offset * 2 + _len]) {
118
+ str += String.fromCharCode(buffer[offset * 2 + _len]);
119
+ }
120
+ else {
121
+ break;
122
+ }
123
+ }
124
+ else {
125
+ break;
126
+ }
127
+ _len += 2;
128
+ }
129
+ return str;
130
+ case 'string16':
131
+ case 'string16le': {
132
+ // find length
133
+ _len = 0;
134
+ const corr = type === 'string16' ? 1 : 0;
135
+ while (_len < len * 2) {
136
+ const pos = offset * 2 + _len;
137
+ if (buffer[pos] || buffer[pos + 1]) {
138
+ str += String.fromCharCode(buffer[pos + corr] + (buffer[pos + (1 - corr)] << 8));
139
+ }
140
+ else {
141
+ break;
142
+ }
143
+ _len += 2;
144
+ }
145
+ return str;
146
+ }
147
+ case 'rawhex':
148
+ // find length
149
+ _len = 0;
150
+ while (_len < len * 2) {
151
+ str += buffer[offset * 2 + _len].toString(16).padStart(2, '0');
152
+ _len += 1;
153
+ }
154
+ return str;
155
+ default:
156
+ throw new Error(`Invalid type: ${type}`);
157
+ }
158
+ }
159
+ function writeValue(type, value, len) {
160
+ let a0;
161
+ let a1;
162
+ let a2;
163
+ let buffer;
164
+ let _len;
165
+ switch (type) {
166
+ case 'uint8be':
167
+ buffer = Buffer.alloc(2);
168
+ buffer[0] = 0;
169
+ buffer.writeUInt8(value & 0xff, 1);
170
+ break;
171
+ case 'uint8le':
172
+ buffer = Buffer.alloc(2);
173
+ buffer[1] = 0;
174
+ buffer.writeUInt8(value & 0xff, 0);
175
+ break;
176
+ case 'int8be':
177
+ buffer = Buffer.alloc(2);
178
+ buffer[0] = 0;
179
+ buffer.writeInt8(value & 0xff, 1);
180
+ break;
181
+ case 'int8le':
182
+ buffer = Buffer.alloc(2);
183
+ buffer[1] = 0;
184
+ buffer.writeInt8(value & 0xff, 0);
185
+ break;
186
+ case 'uint16be':
187
+ buffer = Buffer.alloc(2);
188
+ buffer.writeUInt16BE(value, 0);
189
+ break;
190
+ case 'uint16le':
191
+ buffer = Buffer.alloc(2);
192
+ buffer.writeUInt16LE(value, 0);
193
+ break;
194
+ case 'int16be':
195
+ buffer = Buffer.alloc(2);
196
+ buffer.writeInt16BE(value, 0);
197
+ break;
198
+ case 'int16le':
199
+ buffer = Buffer.alloc(2);
200
+ buffer.writeInt16LE(value, 0);
201
+ break;
202
+ case 'uint32be':
203
+ buffer = Buffer.alloc(4);
204
+ buffer.writeUInt32BE(value, 0);
205
+ break;
206
+ case 'uint32le':
207
+ buffer = Buffer.alloc(4);
208
+ buffer.writeUInt32LE(value, 0);
209
+ break;
210
+ case 'uint32sw':
211
+ buffer = Buffer.alloc(4);
212
+ buffer.writeUInt32BE(value, 0);
213
+ a0 = buffer[0];
214
+ a1 = buffer[1];
215
+ buffer[0] = buffer[2];
216
+ buffer[1] = buffer[3];
217
+ buffer[2] = a0;
218
+ buffer[3] = a1;
219
+ break;
220
+ case 'uint32sb':
221
+ buffer = Buffer.alloc(4);
222
+ buffer.writeUInt32BE(value, 0);
223
+ a0 = buffer[0];
224
+ a2 = buffer[2];
225
+ buffer[0] = buffer[1];
226
+ buffer[2] = buffer[3];
227
+ buffer[1] = a0;
228
+ buffer[3] = a2;
229
+ break;
230
+ case 'int32be':
231
+ buffer = Buffer.alloc(4);
232
+ buffer.writeInt32BE(value, 0);
233
+ break;
234
+ case 'int32le':
235
+ buffer = Buffer.alloc(4);
236
+ buffer.writeInt32LE(value, 0);
237
+ break;
238
+ case 'int32sw':
239
+ buffer = Buffer.alloc(4);
240
+ buffer.writeInt32BE(value, 0);
241
+ a0 = buffer[0];
242
+ a1 = buffer[1];
243
+ buffer[0] = buffer[2];
244
+ buffer[1] = buffer[3];
245
+ buffer[2] = a0;
246
+ buffer[3] = a1;
247
+ break;
248
+ case 'int32sb':
249
+ buffer = Buffer.alloc(4);
250
+ buffer.writeInt32BE(value, 0);
251
+ a0 = buffer[0];
252
+ a2 = buffer[2];
253
+ buffer[0] = buffer[1];
254
+ buffer[2] = buffer[3];
255
+ buffer[1] = a0;
256
+ buffer[3] = a2;
257
+ break;
258
+ case 'uint64be':
259
+ buffer = Buffer.alloc(8);
260
+ buffer.writeUInt32BE(value >> 32, 0);
261
+ buffer.writeUInt32BE(value & 0xffffffff, 4);
262
+ break;
263
+ case 'uint64le':
264
+ buffer = Buffer.alloc(8);
265
+ buffer.writeUInt32LE(value & 0xffffffff, 0);
266
+ buffer.writeUInt32LE(value >> 32, 4);
267
+ break;
268
+ case 'int64be':
269
+ buffer = Buffer.alloc(8);
270
+ buffer.writeInt32BE(value >> 32, 0);
271
+ buffer.writeUInt32BE(value & 0xffffffff, 4);
272
+ break;
273
+ case 'int64le':
274
+ buffer = Buffer.alloc(8);
275
+ buffer.writeUInt32LE(value & 0xffffffff, 0);
276
+ buffer.writeInt32LE(value >> 32, 4);
277
+ break;
278
+ case 'floatbe':
279
+ buffer = Buffer.alloc(4);
280
+ buffer.writeFloatBE(value, 0);
281
+ break;
282
+ case 'floatle':
283
+ buffer = Buffer.alloc(4);
284
+ buffer.writeFloatLE(value, 0);
285
+ break;
286
+ case 'floatsw':
287
+ buffer = Buffer.alloc(4);
288
+ buffer.writeFloatBE(value, 0);
289
+ a0 = buffer[0];
290
+ a1 = buffer[1];
291
+ buffer[0] = buffer[2];
292
+ buffer[1] = buffer[3];
293
+ buffer[2] = a0;
294
+ buffer[3] = a1;
295
+ break;
296
+ case 'floatsb':
297
+ buffer = Buffer.alloc(4);
298
+ buffer.writeFloatBE(value, 0);
299
+ a0 = buffer[0];
300
+ a2 = buffer[2];
301
+ buffer[0] = buffer[1];
302
+ buffer[2] = buffer[3];
303
+ buffer[1] = a0;
304
+ buffer[3] = a2;
305
+ break;
306
+ case 'doublebe':
307
+ buffer = Buffer.alloc(8);
308
+ buffer.writeDoubleBE(value, 0);
309
+ break;
310
+ case 'doublele':
311
+ buffer = Buffer.alloc(8);
312
+ buffer.writeDoubleLE(value, 0);
313
+ break;
314
+ case 'string':
315
+ if (value === null) {
316
+ value = 'null';
317
+ }
318
+ value = value.toString();
319
+ _len = value.length + 1;
320
+ if (_len % 2) {
321
+ _len++;
322
+ }
323
+ buffer = Buffer.alloc(_len);
324
+ buffer.write(value, 0, value.length > _len ? _len : value.length, 'ascii');
325
+ break;
326
+ case 'stringle':
327
+ if (value === null) {
328
+ value = 'null';
329
+ }
330
+ value = value.toString();
331
+ _len = value.length + 1;
332
+ if (_len % 2) {
333
+ _len++;
334
+ }
335
+ buffer = Buffer.alloc(_len);
336
+ for (let b = 0; b < _len >> 1; b++) {
337
+ buffer.writeInt16LE((value.charCodeAt(b * 2) << 8) | value.charCodeAt(b * 2 + 1), b << 1);
338
+ if (b * 2 + 2 >= buffer.length) {
339
+ break;
340
+ }
341
+ }
342
+ break;
343
+ case 'string16':
344
+ case 'string16le':
345
+ if (value === null) {
346
+ value = 'null';
347
+ }
348
+ value = value.toString();
349
+ _len = value.length + 1;
350
+ buffer = Buffer.alloc(len * 2);
351
+ for (let b = 0; b < _len && b < len; b++) {
352
+ buffer.writeInt16LE(value.charCodeAt(b) << (type === 'string16' ? 8 : 0), b * 2);
353
+ }
354
+ break;
355
+ case 'rawhex': {
356
+ if (value === null) {
357
+ value = '';
358
+ }
359
+ value = value.toString();
360
+ const _buffer = Buffer.from(value, 'hex');
361
+ // fix length
362
+ buffer = Buffer.alloc(len * 2);
363
+ _buffer.copy(buffer);
364
+ break;
365
+ }
366
+ default:
367
+ throw new Error(`Invalid type: ${type}`);
368
+ }
369
+ return buffer;
370
+ }
371
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/lib/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export default function crc16modbus(current: Buffer, previous?: number): number;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = crc16modbus;
4
+ const TABLE = [
5
+ 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1,
6
+ 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40,
7
+ 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1,
8
+ 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641,
9
+ 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1,
10
+ 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40,
11
+ 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1,
12
+ 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40,
13
+ 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0,
14
+ 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740,
15
+ 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0,
16
+ 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41,
17
+ 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1,
18
+ 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140,
19
+ 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0,
20
+ 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841,
21
+ 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0,
22
+ 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341,
23
+ 0x4100, 0x81c1, 0x8081, 0x4040,
24
+ ];
25
+ const TABLE32 = new Int32Array(TABLE);
26
+ function crc16modbus(current, previous) {
27
+ let crc = typeof previous !== 'undefined' ? ~~previous : 0xffff;
28
+ for (let index = 0; index < current.length; index++) {
29
+ crc = (TABLE32[(crc ^ current[index]) & 0xff] ^ (crc >> 8)) & 0xffff;
30
+ }
31
+ return crc;
32
+ }
33
+ //# sourceMappingURL=crc16modbus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crc16modbus.js","sourceRoot":"","sources":["../../src/lib/crc16modbus.ts"],"names":[],"mappings":";;AAuBA,8BAMC;AA7BD,MAAM,KAAK,GAAG;IACV,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CACjC,CAAC;AACF,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;AAEtC,SAAwB,WAAW,CAAC,OAAe,EAAE,QAAiB;IAClE,IAAI,GAAG,GAAG,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAChE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IACzE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { EventEmitter } from 'node:events';
2
+ export type ModbusReadResultBinary = {
3
+ unitId: number;
4
+ fc: number;
5
+ byteCount: number;
6
+ payload: Buffer;
7
+ data: boolean[];
8
+ };
9
+ type ModbusReadResultNumber = {
10
+ unitId: number;
11
+ fc: number;
12
+ byteCount: number;
13
+ payload: Buffer;
14
+ register: number[];
15
+ };
16
+ type ModbusWriteResultMultiple = {
17
+ unitId: number;
18
+ fc: number;
19
+ startAddress: number;
20
+ quantity: number;
21
+ };
22
+ type ModbusWriteResultSingleCoil = {
23
+ unitId: number;
24
+ fc: number;
25
+ outputAddress: number;
26
+ outputValue?: boolean;
27
+ };
28
+ type ModbusWriteResultSingleRegister = {
29
+ unitId: number;
30
+ fc: number;
31
+ registerAddress: number;
32
+ registerValue: number;
33
+ registerAddressRaw: Buffer;
34
+ registerValueRaw: Buffer;
35
+ };
36
+ type ModbusFcHandler = (error: {
37
+ message: string;
38
+ timeout?: number;
39
+ errorCode?: number;
40
+ exceptionCode?: number;
41
+ } | null, response?: ModbusReadResultBinary | ModbusReadResultNumber | ModbusWriteResultMultiple | ModbusWriteResultSingleCoil | ModbusWriteResultSingleRegister) => void;
42
+ type ModbusFcState = 'waiting' | 'init' | 'error' | 'ready' | 'connect' | 'closed';
43
+ export default abstract class ModbusClientCore extends EventEmitter {
44
+ #private;
45
+ protected readonly log: ioBroker.Logger;
46
+ private readonly responseHandler;
47
+ private currentRequest;
48
+ private reqFifo;
49
+ private readonly timeout;
50
+ private currentState;
51
+ protected constructor(options: {
52
+ logger: ioBroker.Logger;
53
+ timeout?: number;
54
+ });
55
+ inState(state: ModbusFcState): boolean;
56
+ getState(): ModbusFcState;
57
+ setState(newState: ModbusFcState): void;
58
+ flush: () => void;
59
+ onClosed(): void;
60
+ handleErrorPDU(pdu: Buffer): boolean;
61
+ /**
62
+ * Handle the incoming data, cut out the packet and send the pdu to the listener
63
+ */
64
+ onData: (pdu: Buffer, unitId: number) => void;
65
+ queueRequest: (unitId: number, fc: number, pdu: Buffer, cb: ModbusFcHandler) => void;
66
+ abstract connect(): void;
67
+ abstract reconnect(): void;
68
+ abstract close(): void;
69
+ readCoils: (unitId: number, start: number, quantity: number) => Promise<ModbusReadResultBinary>;
70
+ readDiscreteInputs: (unitId: number, start: number, quantity: number) => Promise<ModbusReadResultBinary>;
71
+ readHoldingRegisters: (unitId: number, start: number, quantity: number) => Promise<ModbusReadResultNumber>;
72
+ readInputRegisters: (unitId: number, start: number, quantity: number) => Promise<ModbusReadResultNumber>;
73
+ writeSingleCoil: (unitId: number, address: number, value: boolean | Buffer) => Promise<ModbusWriteResultSingleCoil>;
74
+ writeSingleRegister: (unitId: number, address: number, value: Buffer | number) => Promise<ModbusWriteResultSingleRegister>;
75
+ writeMultipleCoils: (unitId: number, startAddress: number, data: Buffer | number[], N?: number) => Promise<ModbusWriteResultMultiple>;
76
+ writeMultipleRegisters: (unitId: number, startAddress: number, data: Buffer | number[]) => Promise<ModbusWriteResultMultiple>;
77
+ }
78
+ export {};