queclink-parser 1.9.29 → 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 +15 -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/gv800w.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
|
}
|
|
@@ -48,59 +48,59 @@ const parse = raw => {
|
|
|
48
48
|
raw: parsedData[26],
|
|
49
49
|
sos: false,
|
|
50
50
|
input: {
|
|
51
|
-
|
|
51
|
+
1:
|
|
52
52
|
utils.nHexDigit(
|
|
53
53
|
utils.hex2bin(parsedData[26].substring(2, 4)),
|
|
54
54
|
6
|
|
55
55
|
)[5] === '1',
|
|
56
|
-
|
|
56
|
+
2:
|
|
57
57
|
utils.nHexDigit(
|
|
58
58
|
utils.hex2bin(parsedData[26].substring(2, 4)),
|
|
59
59
|
6
|
|
60
60
|
)[4] === '1',
|
|
61
|
-
|
|
61
|
+
3:
|
|
62
62
|
utils.nHexDigit(
|
|
63
63
|
utils.hex2bin(parsedData[26].substring(2, 4)),
|
|
64
64
|
6
|
|
65
65
|
)[3] === '1',
|
|
66
|
-
|
|
66
|
+
4:
|
|
67
67
|
utils.nHexDigit(
|
|
68
68
|
utils.hex2bin(parsedData[26].substring(2, 4)),
|
|
69
69
|
6
|
|
70
70
|
)[2] === '1',
|
|
71
|
-
|
|
71
|
+
5:
|
|
72
72
|
utils.nHexDigit(
|
|
73
73
|
utils.hex2bin(parsedData[26].substring(2, 4)),
|
|
74
74
|
6
|
|
75
75
|
)[1] === '1',
|
|
76
|
-
|
|
76
|
+
6:
|
|
77
77
|
utils.nHexDigit(
|
|
78
78
|
utils.hex2bin(parsedData[26].substring(2, 4)),
|
|
79
79
|
6
|
|
80
80
|
)[0] === '1'
|
|
81
81
|
},
|
|
82
82
|
output: {
|
|
83
|
-
|
|
83
|
+
1:
|
|
84
84
|
utils.nHexDigit(
|
|
85
85
|
utils.hex2bin(parsedData[26].substring(4, 6)),
|
|
86
86
|
5
|
|
87
87
|
)[4] === '1',
|
|
88
|
-
|
|
88
|
+
2:
|
|
89
89
|
utils.nHexDigit(
|
|
90
90
|
utils.hex2bin(parsedData[26].substring(4, 6)),
|
|
91
91
|
5
|
|
92
92
|
)[3] === '1',
|
|
93
|
-
|
|
93
|
+
3:
|
|
94
94
|
utils.nHexDigit(
|
|
95
95
|
utils.hex2bin(parsedData[26].substring(4, 6)),
|
|
96
96
|
5
|
|
97
97
|
)[2] === '1',
|
|
98
|
-
|
|
98
|
+
4:
|
|
99
99
|
utils.nHexDigit(
|
|
100
100
|
utils.hex2bin(parsedData[26].substring(4, 6)),
|
|
101
101
|
5
|
|
102
102
|
)[1] === '1',
|
|
103
|
-
|
|
103
|
+
5:
|
|
104
104
|
utils.nHexDigit(
|
|
105
105
|
utils.hex2bin(parsedData[26].substring(4, 6)),
|
|
106
106
|
5
|
|
@@ -163,59 +163,59 @@ const parse = raw => {
|
|
|
163
163
|
raw: parsedData[27],
|
|
164
164
|
sos: false,
|
|
165
165
|
input: {
|
|
166
|
-
|
|
166
|
+
1:
|
|
167
167
|
utils.nHexDigit(
|
|
168
168
|
utils.hex2bin(parsedData[27].substring(2, 4)),
|
|
169
169
|
6
|
|
170
170
|
)[5] === '1',
|
|
171
|
-
|
|
171
|
+
2:
|
|
172
172
|
utils.nHexDigit(
|
|
173
173
|
utils.hex2bin(parsedData[27].substring(2, 4)),
|
|
174
174
|
6
|
|
175
175
|
)[4] === '1',
|
|
176
|
-
|
|
176
|
+
3:
|
|
177
177
|
utils.nHexDigit(
|
|
178
178
|
utils.hex2bin(parsedData[27].substring(2, 4)),
|
|
179
179
|
6
|
|
180
180
|
)[3] === '1',
|
|
181
|
-
|
|
181
|
+
4:
|
|
182
182
|
utils.nHexDigit(
|
|
183
183
|
utils.hex2bin(parsedData[27].substring(2, 4)),
|
|
184
184
|
6
|
|
185
185
|
)[2] === '1',
|
|
186
|
-
|
|
186
|
+
5:
|
|
187
187
|
utils.nHexDigit(
|
|
188
188
|
utils.hex2bin(parsedData[27].substring(2, 4)),
|
|
189
189
|
6
|
|
190
190
|
)[1] === '1',
|
|
191
|
-
|
|
191
|
+
6:
|
|
192
192
|
utils.nHexDigit(
|
|
193
193
|
utils.hex2bin(parsedData[27].substring(2, 4)),
|
|
194
194
|
6
|
|
195
195
|
)[0] === '1'
|
|
196
196
|
},
|
|
197
197
|
output: {
|
|
198
|
-
|
|
198
|
+
1:
|
|
199
199
|
utils.nHexDigit(
|
|
200
200
|
utils.hex2bin(parsedData[27].substring(4, 6)),
|
|
201
201
|
5
|
|
202
202
|
)[4] === '1',
|
|
203
|
-
|
|
203
|
+
2:
|
|
204
204
|
utils.nHexDigit(
|
|
205
205
|
utils.hex2bin(parsedData[27].substring(4, 6)),
|
|
206
206
|
5
|
|
207
207
|
)[3] === '1',
|
|
208
|
-
|
|
208
|
+
3:
|
|
209
209
|
utils.nHexDigit(
|
|
210
210
|
utils.hex2bin(parsedData[27].substring(4, 6)),
|
|
211
211
|
5
|
|
212
212
|
)[2] === '1',
|
|
213
|
-
|
|
213
|
+
4:
|
|
214
214
|
utils.nHexDigit(
|
|
215
215
|
utils.hex2bin(parsedData[27].substring(4, 6)),
|
|
216
216
|
5
|
|
217
217
|
)[1] === '1',
|
|
218
|
-
|
|
218
|
+
5:
|
|
219
219
|
utils.nHexDigit(
|
|
220
220
|
utils.hex2bin(parsedData[27].substring(4, 6)),
|
|
221
221
|
5
|
|
@@ -263,7 +263,7 @@ const parse = raw => {
|
|
|
263
263
|
let externalData = {
|
|
264
264
|
eriMask: {
|
|
265
265
|
raw: parsedData[4],
|
|
266
|
-
oneWire
|
|
266
|
+
oneWire,
|
|
267
267
|
digitFuelSensor: false,
|
|
268
268
|
rpm: false,
|
|
269
269
|
rf: false
|
|
@@ -271,9 +271,9 @@ const parse = raw => {
|
|
|
271
271
|
uartDeviceType: null
|
|
272
272
|
}
|
|
273
273
|
if (oneWire) {
|
|
274
|
-
|
|
274
|
+
const oneWireDevices = []
|
|
275
275
|
let count = 30
|
|
276
|
-
for (
|
|
276
|
+
for (let k = 0; k < oneWireConnected; k++) {
|
|
277
277
|
oneWireDevices.push({
|
|
278
278
|
deviceNumber: parsedData[count],
|
|
279
279
|
deviceType: parsedData[count + 1],
|
|
@@ -289,7 +289,7 @@ const parse = raw => {
|
|
|
289
289
|
})
|
|
290
290
|
}
|
|
291
291
|
data = Object.assign(data, {
|
|
292
|
-
externalData
|
|
292
|
+
externalData
|
|
293
293
|
})
|
|
294
294
|
} else if (command[1] === 'GTHBD') {
|
|
295
295
|
// Heartbeat. It must response an ACK command
|
|
@@ -833,19 +833,19 @@ const parse = raw => {
|
|
|
833
833
|
raw: parsedData[25] + parsedData[26],
|
|
834
834
|
sos: utils.nHexDigit(utils.hex2bin(parsedData[27]), 6)[4] === '1',
|
|
835
835
|
input: {
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
836
|
+
1: utils.nHexDigit(utils.hex2bin(parsedData[27]), 6)[5] === '1',
|
|
837
|
+
2: utils.nHexDigit(utils.hex2bin(parsedData[27]), 6)[4] === '1',
|
|
838
|
+
3: utils.nHexDigit(utils.hex2bin(parsedData[27]), 6)[3] === '1',
|
|
839
|
+
4: utils.nHexDigit(utils.hex2bin(parsedData[27]), 6)[2] === '1',
|
|
840
|
+
5: utils.nHexDigit(utils.hex2bin(parsedData[27]), 6)[1] === '1',
|
|
841
|
+
6: utils.nHexDigit(utils.hex2bin(parsedData[27]), 6)[0] === '1'
|
|
842
842
|
},
|
|
843
843
|
output: {
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
844
|
+
1: utils.nHexDigit(utils.hex2bin(parsedData[27]), 5)[4] === '1',
|
|
845
|
+
2: utils.nHexDigit(utils.hex2bin(parsedData[27]), 5)[3] === '1',
|
|
846
|
+
3: utils.nHexDigit(utils.hex2bin(parsedData[27]), 5)[2] === '1',
|
|
847
|
+
4: utils.nHexDigit(utils.hex2bin(parsedData[27]), 5)[1] === '1',
|
|
848
|
+
5: utils.nHexDigit(utils.hex2bin(parsedData[27]), 5)[0] === '1'
|
|
849
849
|
},
|
|
850
850
|
charge: parseFloat(parsedData[4]) > 5
|
|
851
851
|
},
|
|
@@ -1031,7 +1031,7 @@ const parse = raw => {
|
|
|
1031
1031
|
uartDeviceType: 'Camaleon',
|
|
1032
1032
|
fuelSensorData: null
|
|
1033
1033
|
}
|
|
1034
|
-
|
|
1034
|
+
const AC100Devices = [
|
|
1035
1035
|
{
|
|
1036
1036
|
deviceNumber: `${parsedData[2]}|1`,
|
|
1037
1037
|
deviceType: '1',
|
|
@@ -1048,11 +1048,11 @@ const parse = raw => {
|
|
|
1048
1048
|
})
|
|
1049
1049
|
}
|
|
1050
1050
|
externalData = Object.assign(externalData, {
|
|
1051
|
-
AC100Devices
|
|
1051
|
+
AC100Devices
|
|
1052
1052
|
})
|
|
1053
1053
|
data = Object.assign(data, {
|
|
1054
1054
|
alarm: utils.getAlarm('GTERI', null),
|
|
1055
|
-
externalData
|
|
1055
|
+
externalData
|
|
1056
1056
|
})
|
|
1057
1057
|
} else if (/^>ET/.test(parsedData[7])) {
|
|
1058
1058
|
// Temp Alarms
|
|
@@ -1064,7 +1064,7 @@ const parse = raw => {
|
|
|
1064
1064
|
parsedSerialData[4]
|
|
1065
1065
|
])
|
|
1066
1066
|
data = Object.assign(data, {
|
|
1067
|
-
alarm
|
|
1067
|
+
alarm
|
|
1068
1068
|
})
|
|
1069
1069
|
} else if (/^>ID/.test(parsedData[7])) {
|
|
1070
1070
|
// Checks if its a iButton GTDAT -> DT
|
|
@@ -1073,7 +1073,7 @@ const parse = raw => {
|
|
|
1073
1073
|
const driverID = parsedSerialData[2] ? parsedSerialData[2] : ''
|
|
1074
1074
|
const alarm = utils.getAlarm('GTIDA', `${driverID},1`)
|
|
1075
1075
|
data = Object.assign(data, {
|
|
1076
|
-
alarm
|
|
1076
|
+
alarm
|
|
1077
1077
|
})
|
|
1078
1078
|
} else {
|
|
1079
1079
|
// Normal GTDAT
|
|
@@ -1139,5 +1139,5 @@ const parse = raw => {
|
|
|
1139
1139
|
}
|
|
1140
1140
|
|
|
1141
1141
|
module.exports = {
|
|
1142
|
-
parse
|
|
1142
|
+
parse
|
|
1143
1143
|
}
|
package/src/index.js
CHANGED
|
@@ -78,7 +78,7 @@ const getAckHeartBeat = (protocolVersion, count) => {
|
|
|
78
78
|
Returns the ACK for the given data
|
|
79
79
|
*/
|
|
80
80
|
const getAck = serial => {
|
|
81
|
-
|
|
81
|
+
const count = utils.nHexDigit(utils.dec2hex(serial), 4).toUpperCase()
|
|
82
82
|
return `+SACK:${count}$`
|
|
83
83
|
}
|
|
84
84
|
|
|
@@ -174,13 +174,13 @@ const parse = (raw, options) => {
|
|
|
174
174
|
Returns the ack command
|
|
175
175
|
*/
|
|
176
176
|
const getAckCommand = (raw, lang) => {
|
|
177
|
-
const messages = utils.langs[lang] || utils.langs
|
|
177
|
+
const messages = utils.langs[lang] || utils.langs.es
|
|
178
178
|
const rawData = raw.substr(0, raw.length - 1)
|
|
179
179
|
const parsedData = rawData.split(',')
|
|
180
180
|
const command = parsedData[0].split(':')
|
|
181
181
|
const isGT = command[1].startsWith('GT')
|
|
182
182
|
|
|
183
|
-
|
|
183
|
+
const data = {
|
|
184
184
|
raw: rawData,
|
|
185
185
|
rawCommand: command[1],
|
|
186
186
|
manufacturer: 'queclink',
|
|
@@ -237,7 +237,7 @@ const getNackCommand = (raw, lang) => {
|
|
|
237
237
|
utils.hex2dec(parsedData[parsedData.length - 4]).toString()
|
|
238
238
|
] || 'Unknown'
|
|
239
239
|
|
|
240
|
-
|
|
240
|
+
const data = {
|
|
241
241
|
raw: rawData,
|
|
242
242
|
rawCommand: command[1],
|
|
243
243
|
manufacturer: 'queclink',
|
|
@@ -284,15 +284,15 @@ const parseCommand = data => {
|
|
|
284
284
|
AT+GTOUT=gv800w,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,F,0,0,0,0,0,FFFF$
|
|
285
285
|
AT+GTOUT=gv800w,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,,0426$
|
|
286
286
|
*/
|
|
287
|
-
|
|
287
|
+
const _data = data.instruction.split('_')
|
|
288
288
|
port = parseInt(_data[0], 10)
|
|
289
289
|
state = _data[1]
|
|
290
290
|
prevOutputs = data.previousOutput || utils.createDefaultOut(5, false)
|
|
291
291
|
prevDurations = data.previousDuration || utils.createDefaultOut(5, 0)
|
|
292
292
|
prevToggles = data.previousToggle || utils.createDefaultOut(5, 0)
|
|
293
293
|
|
|
294
|
-
const outputs = Object.keys(prevOutputs).map(
|
|
295
|
-
|
|
294
|
+
const outputs = Object.keys(prevOutputs).map(key =>
|
|
295
|
+
prevOutputs[key] === true ? 1 : 0
|
|
296
296
|
)
|
|
297
297
|
outputs[0] = !outputs[0] ? 0 : outputs[0]
|
|
298
298
|
outputs[1] = !outputs[1] ? 0 : outputs[1]
|
|
@@ -375,7 +375,7 @@ const parseCommand = data => {
|
|
|
375
375
|
command = `AT+GTGPJ=${password},${mode},15,3,,,,,0,0,0,0,,${serialId}$`
|
|
376
376
|
} else if (/^temp_alarm_(on|off)(E)?$/.test(data.instruction)) {
|
|
377
377
|
// Temperature Alarm
|
|
378
|
-
|
|
378
|
+
const _data = data.instruction.split('_')
|
|
379
379
|
state = _data[2]
|
|
380
380
|
mode = /on(E)?/.test(state) ? 3 : 0
|
|
381
381
|
const alarmId = data.alarmId || 0
|
|
@@ -410,12 +410,12 @@ const parseCommand = data => {
|
|
|
410
410
|
}
|
|
411
411
|
|
|
412
412
|
module.exports = {
|
|
413
|
-
parse
|
|
414
|
-
isQueclink
|
|
415
|
-
isHeartBeat
|
|
416
|
-
getAckHeartBeat
|
|
417
|
-
getAck
|
|
418
|
-
parseCommand
|
|
419
|
-
getRebootCommand
|
|
420
|
-
getImei
|
|
413
|
+
parse,
|
|
414
|
+
isQueclink,
|
|
415
|
+
isHeartBeat,
|
|
416
|
+
getAckHeartBeat,
|
|
417
|
+
getAck,
|
|
418
|
+
parseCommand,
|
|
419
|
+
getRebootCommand,
|
|
420
|
+
getImei
|
|
421
421
|
}
|