queclink-parser 1.9.28 → 1.9.31
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/CHANGELOG.md +21 -0
- package/README.md +30 -23
- package/package.json +37 -35
- package/src/gl300.js +6 -6
- package/src/gl50.js +2 -2
- package/src/gl533cg.js +25 -9
- package/src/gmt100.js +10 -10
- package/src/gv200.js +56 -58
- package/src/gv300.js +55 -51
- package/src/gv300w.js +77 -73
- package/src/gv310lau.js +215 -200
- package/src/gv350ceu.js +278 -263
- package/src/gv500.js +2 -2
- package/src/gv50p.js +10 -10
- package/src/gv55.js +10 -10
- package/src/gv57cg.js +142 -142
- package/src/gv58lau.js +504 -483
- package/src/gv600w.js +39 -39
- package/src/gv75w.js +71 -67
- package/src/gv800w.js +44 -44
- package/src/index.js +16 -16
- package/src/utils.js +725 -720
package/src/gv300w.js
CHANGED
|
@@ -23,7 +23,7 @@ const parse = raw => {
|
|
|
23
23
|
imei: parsedData[2],
|
|
24
24
|
protocolVersion: utils.getProtocolVersion(parsedData[1]),
|
|
25
25
|
temperature: null,
|
|
26
|
-
history
|
|
26
|
+
history,
|
|
27
27
|
sentTime: utils.parseDate(parsedData[parsedData.length - 2]),
|
|
28
28
|
serialId: parseInt(parsedData[parsedData.length - 1], 16)
|
|
29
29
|
}
|
|
@@ -31,7 +31,7 @@ const parse = raw => {
|
|
|
31
31
|
// Gps
|
|
32
32
|
if (command[1] === 'GTFRI') {
|
|
33
33
|
try {
|
|
34
|
-
|
|
34
|
+
const number = parsedData[6] !== '' ? parseInt(parsedData[6], 10) : 1
|
|
35
35
|
let index = 6 + 12 * number
|
|
36
36
|
let satelliteInfo = false
|
|
37
37
|
|
|
@@ -58,28 +58,28 @@ const parse = raw => {
|
|
|
58
58
|
raw: parsedData[index + 6],
|
|
59
59
|
sos: false,
|
|
60
60
|
input: {
|
|
61
|
-
|
|
61
|
+
1:
|
|
62
62
|
utils.nHexDigit(
|
|
63
63
|
utils.hex2bin(
|
|
64
64
|
utils.nHexDigit(parsedData[index + 6], 10).substring(6, 8)
|
|
65
65
|
),
|
|
66
66
|
4
|
|
67
67
|
)[3] === '1',
|
|
68
|
-
|
|
68
|
+
2:
|
|
69
69
|
utils.nHexDigit(
|
|
70
70
|
utils.hex2bin(
|
|
71
71
|
utils.nHexDigit(parsedData[index + 6], 10).substring(6, 8)
|
|
72
72
|
),
|
|
73
73
|
4
|
|
74
74
|
)[2] === '1',
|
|
75
|
-
|
|
75
|
+
3:
|
|
76
76
|
utils.nHexDigit(
|
|
77
77
|
utils.hex2bin(
|
|
78
78
|
utils.nHexDigit(parsedData[index + 6], 10).substring(6, 8)
|
|
79
79
|
),
|
|
80
80
|
4
|
|
81
81
|
)[1] === '1',
|
|
82
|
-
|
|
82
|
+
4:
|
|
83
83
|
utils.nHexDigit(
|
|
84
84
|
utils.hex2bin(
|
|
85
85
|
utils.nHexDigit(parsedData[index + 6], 10).substring(6, 8)
|
|
@@ -88,21 +88,21 @@ const parse = raw => {
|
|
|
88
88
|
)[0] === '1'
|
|
89
89
|
},
|
|
90
90
|
output: {
|
|
91
|
-
|
|
91
|
+
1:
|
|
92
92
|
utils.nHexDigit(
|
|
93
93
|
utils.hex2bin(
|
|
94
94
|
utils.nHexDigit(parsedData[index + 6], 10).substring(8, 10)
|
|
95
95
|
),
|
|
96
96
|
3
|
|
97
97
|
)[2] === '1',
|
|
98
|
-
|
|
98
|
+
2:
|
|
99
99
|
utils.nHexDigit(
|
|
100
100
|
utils.hex2bin(
|
|
101
101
|
utils.nHexDigit(parsedData[index + 6], 10).substring(8, 10)
|
|
102
102
|
),
|
|
103
103
|
3
|
|
104
104
|
)[1] === '1',
|
|
105
|
-
|
|
105
|
+
3:
|
|
106
106
|
utils.nHexDigit(
|
|
107
107
|
utils.hex2bin(
|
|
108
108
|
utils.nHexDigit(parsedData[index + 6], 10).substring(8, 10)
|
|
@@ -114,8 +114,8 @@ const parse = raw => {
|
|
|
114
114
|
state:
|
|
115
115
|
utils.nHexDigit(parsedData[index + 6], 10).substring(4, 6) !== ''
|
|
116
116
|
? utils.states[ // eslint-disable-line
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
utils.nHexDigit(parsedData[index + 6], 10).substring(4, 6)
|
|
118
|
+
]
|
|
119
119
|
: null
|
|
120
120
|
},
|
|
121
121
|
azimuth: parsedData[9] !== '' ? parseFloat(parsedData[9]) : null,
|
|
@@ -164,9 +164,9 @@ const parse = raw => {
|
|
|
164
164
|
|
|
165
165
|
// More than 1 GNSS report in data
|
|
166
166
|
if (number > 1) {
|
|
167
|
-
|
|
167
|
+
const moreData = []
|
|
168
168
|
for (let i = 1; i < number; i++) {
|
|
169
|
-
|
|
169
|
+
const gnssIx = satelliteInfo ? 7 + 13 * i : 7 + 12 * i
|
|
170
170
|
moreData.push({
|
|
171
171
|
index: i,
|
|
172
172
|
loc: {
|
|
@@ -221,14 +221,14 @@ const parse = raw => {
|
|
|
221
221
|
})
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
-
data = Object.assign(data, { moreData
|
|
224
|
+
data = Object.assign(data, { moreData })
|
|
225
225
|
}
|
|
226
226
|
} catch (err) {
|
|
227
227
|
return { type: 'UNKNOWN', raw: data.raw.toString() }
|
|
228
228
|
}
|
|
229
229
|
} else if (command[1] === 'GTERI') {
|
|
230
230
|
// GPS with AC100 Devices Connected
|
|
231
|
-
|
|
231
|
+
const number = parsedData[7] !== '' ? parseInt(parsedData[7], 10) : 1
|
|
232
232
|
let index = 7 + 12 * number // position append mask
|
|
233
233
|
let satelliteInfo = false
|
|
234
234
|
|
|
@@ -255,28 +255,28 @@ const parse = raw => {
|
|
|
255
255
|
raw: parsedData[index + 6],
|
|
256
256
|
sos: false,
|
|
257
257
|
input: {
|
|
258
|
-
|
|
258
|
+
1:
|
|
259
259
|
utils.nHexDigit(
|
|
260
260
|
utils.hex2bin(
|
|
261
261
|
utils.nHexDigit(parsedData[index + 6], 10).substring(6, 8)
|
|
262
262
|
),
|
|
263
263
|
4
|
|
264
264
|
)[3] === '1',
|
|
265
|
-
|
|
265
|
+
2:
|
|
266
266
|
utils.nHexDigit(
|
|
267
267
|
utils.hex2bin(
|
|
268
268
|
utils.nHexDigit(parsedData[index + 6], 10).substring(6, 8)
|
|
269
269
|
),
|
|
270
270
|
4
|
|
271
271
|
)[2] === '1',
|
|
272
|
-
|
|
272
|
+
3:
|
|
273
273
|
utils.nHexDigit(
|
|
274
274
|
utils.hex2bin(
|
|
275
275
|
utils.nHexDigit(parsedData[index + 6], 10).substring(6, 8)
|
|
276
276
|
),
|
|
277
277
|
4
|
|
278
278
|
)[1] === '1',
|
|
279
|
-
|
|
279
|
+
4:
|
|
280
280
|
utils.nHexDigit(
|
|
281
281
|
utils.hex2bin(
|
|
282
282
|
utils.nHexDigit(parsedData[index + 6], 10).substring(6, 8)
|
|
@@ -285,21 +285,21 @@ const parse = raw => {
|
|
|
285
285
|
)[0] === '1'
|
|
286
286
|
},
|
|
287
287
|
output: {
|
|
288
|
-
|
|
288
|
+
1:
|
|
289
289
|
utils.nHexDigit(
|
|
290
290
|
utils.hex2bin(
|
|
291
291
|
utils.nHexDigit(parsedData[index + 6], 10).substring(8, 10)
|
|
292
292
|
),
|
|
293
293
|
3
|
|
294
294
|
)[2] === '1',
|
|
295
|
-
|
|
295
|
+
2:
|
|
296
296
|
utils.nHexDigit(
|
|
297
297
|
utils.hex2bin(
|
|
298
298
|
utils.nHexDigit(parsedData[index + 6], 10).substring(8, 10)
|
|
299
299
|
),
|
|
300
300
|
3
|
|
301
301
|
)[1] === '1',
|
|
302
|
-
|
|
302
|
+
3:
|
|
303
303
|
utils.nHexDigit(
|
|
304
304
|
utils.hex2bin(
|
|
305
305
|
utils.nHexDigit(parsedData[index + 6], 10).substring(8, 10)
|
|
@@ -311,8 +311,8 @@ const parse = raw => {
|
|
|
311
311
|
state:
|
|
312
312
|
utils.nHexDigit(parsedData[index + 6], 10).substring(4, 6) !== ''
|
|
313
313
|
? utils.states[ // eslint-disable-line
|
|
314
|
-
|
|
315
|
-
|
|
314
|
+
utils.nHexDigit(parsedData[index + 6], 10).substring(4, 6)
|
|
315
|
+
]
|
|
316
316
|
: null
|
|
317
317
|
},
|
|
318
318
|
azimuth: parsedData[10] !== '' ? parseFloat(parsedData[10]) : null,
|
|
@@ -368,16 +368,18 @@ const parse = raw => {
|
|
|
368
368
|
const ac100DevicesConnected =
|
|
369
369
|
AC100 && digitFuelSensor
|
|
370
370
|
? parseInt(parsedData[index + 9], 10)
|
|
371
|
-
: AC100 && !digitFuelSensor
|
|
371
|
+
: AC100 && !digitFuelSensor
|
|
372
|
+
? parseInt(parsedData[index + 8], 10)
|
|
373
|
+
: 0
|
|
372
374
|
|
|
373
375
|
let externalData = {
|
|
374
376
|
eriMask: {
|
|
375
377
|
raw: parsedData[4],
|
|
376
|
-
digitFuelSensor
|
|
377
|
-
AC100
|
|
378
|
-
reserved
|
|
379
|
-
fuelLevelPercentage
|
|
380
|
-
fuelVolume
|
|
378
|
+
digitFuelSensor,
|
|
379
|
+
AC100,
|
|
380
|
+
reserved,
|
|
381
|
+
fuelLevelPercentage,
|
|
382
|
+
fuelVolume
|
|
381
383
|
},
|
|
382
384
|
uartDeviceType: utils.uartDeviceTypes[parsedData[index + 7]]
|
|
383
385
|
}
|
|
@@ -396,17 +398,17 @@ const parse = raw => {
|
|
|
396
398
|
fuelVolume && fuelLevelPercentage && parsedData[index + 12] !== ''
|
|
397
399
|
? parseInt(parsedData[index + 12], 10)
|
|
398
400
|
: fuelVolume &&
|
|
399
|
-
|
|
400
|
-
|
|
401
|
+
!fuelLevelPercentage &&
|
|
402
|
+
parsedData[index + 11] !== ''
|
|
401
403
|
? parseInt(parsedData[index + 11], 10)
|
|
402
404
|
: null
|
|
403
405
|
},
|
|
404
406
|
AC100Devices: null
|
|
405
407
|
})
|
|
406
408
|
} else if (!digitFuelSensor && AC100) {
|
|
407
|
-
|
|
409
|
+
const ac100Devices = []
|
|
408
410
|
let count = index + 10
|
|
409
|
-
for (
|
|
411
|
+
for (let i = 0; i < ac100DevicesConnected; i++) {
|
|
410
412
|
ac100Devices.push({
|
|
411
413
|
deviceNumber: parsedData[count],
|
|
412
414
|
deviceType: parsedData[count + 1],
|
|
@@ -421,12 +423,14 @@ const parse = raw => {
|
|
|
421
423
|
AC100Devices: ac100Devices
|
|
422
424
|
})
|
|
423
425
|
} else if (digitFuelSensor && AC100) {
|
|
424
|
-
|
|
426
|
+
const ac100Devices = []
|
|
425
427
|
let count =
|
|
426
428
|
fuelVolume && fuelLevelPercentage
|
|
427
429
|
? 33
|
|
428
|
-
: fuelVolume && !fuelLevelPercentage
|
|
429
|
-
|
|
430
|
+
: fuelVolume && !fuelLevelPercentage
|
|
431
|
+
? index + 13
|
|
432
|
+
: index + 12
|
|
433
|
+
for (let j = 0; j < ac100DevicesConnected; j++) {
|
|
430
434
|
ac100Devices.push({
|
|
431
435
|
deviceNumber: parsedData[count],
|
|
432
436
|
deviceType: parsedData[count + 1],
|
|
@@ -448,8 +452,8 @@ const parse = raw => {
|
|
|
448
452
|
fuelVolume && fuelLevelPercentage && parsedData[index + 13] !== ''
|
|
449
453
|
? parseInt(parsedData[index + 13], 10)
|
|
450
454
|
: fuelVolume &&
|
|
451
|
-
|
|
452
|
-
|
|
455
|
+
!fuelLevelPercentage &&
|
|
456
|
+
parsedData[index + 12] !== ''
|
|
453
457
|
? parseInt(parsedData[index + 12], 10)
|
|
454
458
|
: null
|
|
455
459
|
},
|
|
@@ -459,9 +463,9 @@ const parse = raw => {
|
|
|
459
463
|
} else if (parsedData[index + 7] === '2') {
|
|
460
464
|
// AC100 1 Wire Bus
|
|
461
465
|
if (!digitFuelSensor && AC100) {
|
|
462
|
-
|
|
466
|
+
const ac100Devices = []
|
|
463
467
|
let count = index + 9
|
|
464
|
-
for (
|
|
468
|
+
for (let k = 0; k < ac100DevicesConnected; k++) {
|
|
465
469
|
ac100Devices.push({
|
|
466
470
|
deviceNumber: parsedData[count],
|
|
467
471
|
deviceType: parsedData[count + 1],
|
|
@@ -486,9 +490,9 @@ const parse = raw => {
|
|
|
486
490
|
AC100Devices: null
|
|
487
491
|
})
|
|
488
492
|
} else if (digitFuelSensor && AC100) {
|
|
489
|
-
|
|
493
|
+
const ac100Devices = []
|
|
490
494
|
let count = index + 10
|
|
491
|
-
for (
|
|
495
|
+
for (let l = 0; l < ac100DevicesConnected; l++) {
|
|
492
496
|
ac100Devices.push({
|
|
493
497
|
deviceNumber: parsedData[count],
|
|
494
498
|
deviceType: parsedData[count + 1],
|
|
@@ -510,14 +514,14 @@ const parse = raw => {
|
|
|
510
514
|
}
|
|
511
515
|
}
|
|
512
516
|
data = Object.assign(data, {
|
|
513
|
-
externalData
|
|
517
|
+
externalData
|
|
514
518
|
})
|
|
515
519
|
|
|
516
520
|
// More than 1 GNSS report in data
|
|
517
521
|
if (number > 1) {
|
|
518
|
-
|
|
522
|
+
const moreData = []
|
|
519
523
|
for (let i = 1; i < number; i++) {
|
|
520
|
-
|
|
524
|
+
const gnssIx = satelliteInfo ? 8 + 13 * i : 8 + 12 * i
|
|
521
525
|
moreData.push({
|
|
522
526
|
index: i,
|
|
523
527
|
loc: {
|
|
@@ -572,7 +576,7 @@ const parse = raw => {
|
|
|
572
576
|
})
|
|
573
577
|
}
|
|
574
578
|
|
|
575
|
-
data = Object.assign(data, { moreData
|
|
579
|
+
data = Object.assign(data, { moreData })
|
|
576
580
|
}
|
|
577
581
|
} else if (command[1] === 'GTHBD') {
|
|
578
582
|
// Heartbeat. It must response an ACK command
|
|
@@ -603,16 +607,16 @@ const parse = raw => {
|
|
|
603
607
|
raw: parsedData[18] + parsedData[19],
|
|
604
608
|
sos: false,
|
|
605
609
|
input: {
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
+
4: utils.nHexDigit(utils.hex2bin(parsedData[20][1]), 4)[0] === '1',
|
|
611
|
+
3: utils.nHexDigit(utils.hex2bin(parsedData[20][1]), 4)[1] === '1',
|
|
612
|
+
2: utils.nHexDigit(utils.hex2bin(parsedData[20][1]), 4)[2] === '1',
|
|
613
|
+
1: utils.nHexDigit(utils.hex2bin(parsedData[20][1]), 4)[3] === '1'
|
|
610
614
|
},
|
|
611
615
|
output: {
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
+
4: utils.nHexDigit(utils.hex2bin(parsedData[19][1]), 4)[0] === '1',
|
|
617
|
+
3: utils.nHexDigit(utils.hex2bin(parsedData[19][1]), 4)[1] === '1',
|
|
618
|
+
2: utils.nHexDigit(utils.hex2bin(parsedData[19][1]), 4)[2] === '1',
|
|
619
|
+
1: utils.nHexDigit(utils.hex2bin(parsedData[19][1]), 4)[3] === '1'
|
|
616
620
|
},
|
|
617
621
|
charge: parsedData[8] === '1'
|
|
618
622
|
},
|
|
@@ -721,8 +725,8 @@ const parse = raw => {
|
|
|
721
725
|
})
|
|
722
726
|
} else if (command[1] === 'GTTMP') {
|
|
723
727
|
// Temperature Alarm
|
|
724
|
-
|
|
725
|
-
|
|
728
|
+
const number = parsedData[7] !== '' ? parseInt(parsedData[7], 10) : 1
|
|
729
|
+
const index = 8 + 12 * number // odometer
|
|
726
730
|
data = Object.assign(data, {
|
|
727
731
|
alarm: utils.getAlarm(command[1], parsedData[6], [
|
|
728
732
|
parsedData[index + 9],
|
|
@@ -743,27 +747,27 @@ const parse = raw => {
|
|
|
743
747
|
raw: `${parsedData[index + 4]}${parsedData[index + 5]}`,
|
|
744
748
|
sos: false,
|
|
745
749
|
input: {
|
|
746
|
-
|
|
750
|
+
4:
|
|
747
751
|
utils.nHexDigit(utils.hex2bin(parsedData[index + 4][1]), 4)[0] ===
|
|
748
752
|
'1',
|
|
749
|
-
|
|
753
|
+
3:
|
|
750
754
|
utils.nHexDigit(utils.hex2bin(parsedData[index + 4][1]), 4)[1] ===
|
|
751
755
|
'1',
|
|
752
|
-
|
|
756
|
+
2:
|
|
753
757
|
utils.nHexDigit(utils.hex2bin(parsedData[index + 4][1]), 4)[2] ===
|
|
754
758
|
'1',
|
|
755
|
-
|
|
759
|
+
1:
|
|
756
760
|
utils.nHexDigit(utils.hex2bin(parsedData[index + 4][1]), 4)[3] ===
|
|
757
761
|
'1'
|
|
758
762
|
},
|
|
759
763
|
output: {
|
|
760
|
-
|
|
764
|
+
3:
|
|
761
765
|
utils.nHexDigit(utils.hex2bin(parsedData[index + 5][1]), 4)[1] ===
|
|
762
766
|
'1',
|
|
763
|
-
|
|
767
|
+
2:
|
|
764
768
|
utils.nHexDigit(utils.hex2bin(parsedData[index + 5][1]), 4)[2] ===
|
|
765
769
|
'1',
|
|
766
|
-
|
|
770
|
+
1:
|
|
767
771
|
utils.nHexDigit(utils.hex2bin(parsedData[index + 5][1]), 4)[3] ===
|
|
768
772
|
'1'
|
|
769
773
|
},
|
|
@@ -1236,15 +1240,15 @@ const parse = raw => {
|
|
|
1236
1240
|
hourmeter: null
|
|
1237
1241
|
})
|
|
1238
1242
|
} else if (command[1] === 'GTCAN') {
|
|
1239
|
-
|
|
1243
|
+
const inicatorsBin =
|
|
1240
1244
|
parsedData[24] !== ''
|
|
1241
1245
|
? utils.nHexDigit(utils.hex2bin(parsedData[24]), 16)
|
|
1242
1246
|
: null
|
|
1243
|
-
|
|
1247
|
+
const lights =
|
|
1244
1248
|
parsedData[25] !== ''
|
|
1245
1249
|
? utils.nHexDigit(utils.hex2bin(parsedData[25]), 8)
|
|
1246
1250
|
: null
|
|
1247
|
-
|
|
1251
|
+
const doors =
|
|
1248
1252
|
parsedData[26] !== ''
|
|
1249
1253
|
? utils.nHexDigit(utils.hex2bin(parsedData[26]), 8)
|
|
1250
1254
|
: null
|
|
@@ -1425,7 +1429,7 @@ const parse = raw => {
|
|
|
1425
1429
|
uartDeviceType: 'Camaleon',
|
|
1426
1430
|
fuelSensorData: null
|
|
1427
1431
|
}
|
|
1428
|
-
|
|
1432
|
+
const AC100Devices = [
|
|
1429
1433
|
{
|
|
1430
1434
|
deviceNumber: `${parsedData[2]}|1`,
|
|
1431
1435
|
deviceType: '1',
|
|
@@ -1442,11 +1446,11 @@ const parse = raw => {
|
|
|
1442
1446
|
})
|
|
1443
1447
|
}
|
|
1444
1448
|
externalData = Object.assign(externalData, {
|
|
1445
|
-
AC100Devices
|
|
1449
|
+
AC100Devices
|
|
1446
1450
|
})
|
|
1447
1451
|
data = Object.assign(data, {
|
|
1448
1452
|
alarm: utils.getAlarm('GTERI', null),
|
|
1449
|
-
externalData
|
|
1453
|
+
externalData
|
|
1450
1454
|
})
|
|
1451
1455
|
} else if (/^>ET/.test(parsedData[7])) {
|
|
1452
1456
|
// Temp Alarms
|
|
@@ -1458,7 +1462,7 @@ const parse = raw => {
|
|
|
1458
1462
|
parsedSerialData[4]
|
|
1459
1463
|
])
|
|
1460
1464
|
data = Object.assign(data, {
|
|
1461
|
-
alarm
|
|
1465
|
+
alarm
|
|
1462
1466
|
})
|
|
1463
1467
|
} else if (/^>ID/.test(parsedData[7])) {
|
|
1464
1468
|
// Checks if its a iButton GTDAT -> DT
|
|
@@ -1467,7 +1471,7 @@ const parse = raw => {
|
|
|
1467
1471
|
const driverID = parsedSerialData[2] ? parsedSerialData[2] : ''
|
|
1468
1472
|
const alarm = utils.getAlarm('GTIDA', `${driverID},1`)
|
|
1469
1473
|
data = Object.assign(data, {
|
|
1470
|
-
alarm
|
|
1474
|
+
alarm
|
|
1471
1475
|
})
|
|
1472
1476
|
} else {
|
|
1473
1477
|
// Normal GTDAT
|
|
@@ -1597,5 +1601,5 @@ const parse = raw => {
|
|
|
1597
1601
|
}
|
|
1598
1602
|
|
|
1599
1603
|
module.exports = {
|
|
1600
|
-
parse
|
|
1604
|
+
parse
|
|
1601
1605
|
}
|