queclink-parser 1.9.18 → 1.9.19
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 +12 -0
- package/example.js +6 -5
- package/package.json +1 -1
- package/src/gv310lau.js +12 -2
- package/src/gv58lau.js +13 -2
- package/src/utils.js +5 -19
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
#### 1.9.19 (2025-10-27)
|
|
2
|
+
|
|
3
|
+
##### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* **GTBID:**
|
|
6
|
+
* se corrige dato sin precencia de <beacon Data> en GV58LAU ([fa52eba0](https://github.com/jaayesta/queclink-parser/commit/fa52eba014c77564f38c170923984646773f1854))
|
|
7
|
+
* se corrige dato sin precencia de <beacon Data> ([c8b2344a](https://github.com/jaayesta/queclink-parser/commit/c8b2344a74199fefe6b1c8bce06b94e01081b95e))
|
|
8
|
+
* **canbus:**
|
|
9
|
+
* se verifica para GTCAN y GTERI ([af7ea88b](https://github.com/jaayesta/queclink-parser/commit/af7ea88b41167aaab4fcf6eb9ccbcaf05c71cdab))
|
|
10
|
+
* se corrige lógica para obtención de velocidad en GTERI con CAN100 ([9a6971b7](https://github.com/jaayesta/queclink-parser/commit/9a6971b71576a6e0b59b29ff869ed09b954d799c))
|
|
11
|
+
* se corrige indexación para speed y rpm ([81995527](https://github.com/jaayesta/queclink-parser/commit/8199552714975aefd7137fb57e4897995b36ab7a))
|
|
12
|
+
|
|
1
13
|
#### 1.9.18 (2025-10-13)
|
|
2
14
|
|
|
3
15
|
##### Bug Fixes
|
package/example.js
CHANGED
|
@@ -86,10 +86,11 @@ var newdtt = '+RESP:GTDTT,6E1102,866775051622785,GV310LAU,,,0,9,1134122,0,0.0,17
|
|
|
86
86
|
var dis58 = '+RESP:GTDIS,8020040803,866314061861249,,,10,1,1,0.0,349,399.7,-70.770383,-33.474911,20250516154520,0730,0001,333F,003D0711,01,11,55.2,20250516154521,B08D$'
|
|
87
87
|
var test = '+RESP:GTERI,6E0C03,868589060367102,,00000104,13621,10,1,1,0.0,5,190.7,-71.541291,-33.576625,20250829142314,0730,0001,16A9,00305D03,01,12,31513.0,0002500:06:38,,,,100,110000,0,0,0,1,00,13,0,,4007,,FFFFFFFFFFFF,0,,20250829142315,D3AF$'
|
|
88
88
|
var test2 ="+RESP:GTERI,6E0C03,868589060839548,,00000104,27841,10,1,1,0.0,1,195.5,-71.541562,-33.576687,20250903005133,0730,0001,16A9,00305D03,01,12,21626.9,0000531:51:33,,,,100,210900,0,1,203A2B9F,,2,H7241302,243017.00,0,H4.5,P91.60,,37.09,10.33,0040,00,0.00,0.00,A2BAFF,62,,,,,,,,11910,37.09,1.50,2.20,,,0,, 1,00,13,0,00000000,4007,,78054143F0A5,1,0,20250903005134,C7A3$"
|
|
89
|
-
var cantest = "+RESP:GTCAN,6E0C03,
|
|
90
|
-
var cantest2 = "+RESP:GTERI,
|
|
91
|
-
var cantest3 = '+RESP:
|
|
92
|
-
var t = "+RESP:
|
|
89
|
+
var cantest = "+RESP:GTCAN,6E0C03,868589061030451,gv310lau,00,1,E03DECFF,9BSP6X200N3999611,2,H3403506,99984.57,500,0,85,H1.9,0,264.64,30.70,63.92,6596,FFFF,,00,0.00,0.00,DED0FF,97,4374,0,,,,,,6.61,2238,,,,,0000,1,,,,1,0.0,92,473.0,-70.786429,-33.437795,20251024202114,0730,0003,9C4E,00063E0D,01,12,20251024202114,5FC2$"
|
|
90
|
+
var cantest2 = "+RESP:GTERI,6E0C03,868589060653113,,00000104,27690,10,1,0,9.6,93,634.9,-70.578870,-33.401553,20250829161508,0730,0001,3333,002FA204,01,0,771665.5,0001471:12:04,,,,100,120000,0,1,203FFFFF,,0,H7724170,251352.00,,0,45,H0.0,P39.60,,0,1470.49,902.47,568.02,1270.01,,FFFF,0040,,00,0.00,0.00,FFFFFF,62,,,,,,,,714181,857821,10804,1470.49,53.99,25.48,60368,,,,,,0000,10,0,,1,00,13,0,00000000,4007,,7805414843E0,1,0,20250829165819,68A1$"
|
|
91
|
+
var cantest3 = '+RESP:GTCAN,6E0C03,868589061014489,,00,1,E033A2BF,,2,H84671,2268.84,1187,88,H28.1,,30.77,,FFFF,0200,0.00,0.00,3A2CFF,0,,,,,,,,150,122.45,0.70,,,0000,2,,,1,86.8,31,159.5,-71.508382,-35.292014,20251024201914,0730,0003,177E,000F2C33,01,12,20251024201916,F485$'
|
|
92
|
+
var t = "+RESP:GTBID,6E0C03,868589061029669,,1,0,000A,7805413BD3C9,2989,0,0.0,258,670.8,-70.603452,-33.617190,20251024065630,0730,0001,332E,00307303,01,12,20251024065631,CE7B$"
|
|
93
|
+
var t2 = "+RESP:GTBID,6E0C03,868589061029669,,0,0,0.0,282,670.8,-70.603452,-33.617190,20251024065600,0730,0001,332E,00307303,01,12,20251024065601,CE77$"
|
|
93
94
|
|
|
94
95
|
var data = {
|
|
95
96
|
"imei": 868589060039404,
|
|
@@ -172,7 +173,7 @@ spd = {
|
|
|
172
173
|
"times": "30"
|
|
173
174
|
}
|
|
174
175
|
// console.log(queclink.parseCommand(action))
|
|
175
|
-
const raw = new Buffer.from(
|
|
176
|
+
const raw = new Buffer.from(cantest2)
|
|
176
177
|
console.log(JSON.stringify(queclink.parse(raw), null, 2))
|
|
177
178
|
queclink.parse(raw)
|
|
178
179
|
|
package/package.json
CHANGED
package/src/gv310lau.js
CHANGED
|
@@ -585,7 +585,7 @@ const parse = raw => {
|
|
|
585
585
|
data.hourmeter = canInfo.engineHours
|
|
586
586
|
}
|
|
587
587
|
|
|
588
|
-
if (typeof canInfo?.speed === 'number') {
|
|
588
|
+
if (typeof canInfo?.speed === 'number' && canInfo?.speed > 0) {
|
|
589
589
|
data.gpsSpeed = data.speed;
|
|
590
590
|
data.speed = canInfo.speed;
|
|
591
591
|
}
|
|
@@ -2192,17 +2192,27 @@ const parse = raw => {
|
|
|
2192
2192
|
// Bluetooth beacon detection
|
|
2193
2193
|
let number = parsedData[4] !== '' ? parseInt(parsedData[4]) : 1
|
|
2194
2194
|
let index = 4
|
|
2195
|
+
let binAppendMask = utils.nHexDigit(utils.hex2bin(parsedData[index + 2]), 8)
|
|
2196
|
+
let appendMask = {
|
|
2197
|
+
accessoryMac: binAppendMask[6] == '1',
|
|
2198
|
+
batteryLevel: binAppendMask[4] == '1',
|
|
2199
|
+
signalStrength: binAppendMask[1] == '1',
|
|
2200
|
+
beaconType: binAppendMask[0] == '1'
|
|
2201
|
+
}
|
|
2202
|
+
|
|
2195
2203
|
let appMk, extra
|
|
2196
2204
|
for (let i = 1; i <= number; i++) {
|
|
2197
2205
|
appMk = utils.sumOnes(parsedData[index + 2])
|
|
2198
|
-
extra =
|
|
2206
|
+
extra = appendMask.beaconType ?
|
|
2199
2207
|
parsedData[index + 5] === '0'
|
|
2200
2208
|
? 1
|
|
2201
2209
|
: parsedData[index + 5] === '1'
|
|
2202
2210
|
? 3
|
|
2203
2211
|
: parsedData[index + 5] === '2' ? 2 : 0
|
|
2212
|
+
: 0
|
|
2204
2213
|
index += 2 + appMk + extra
|
|
2205
2214
|
}
|
|
2215
|
+
|
|
2206
2216
|
let satelliteInfo = false
|
|
2207
2217
|
let satIndex = index + 12
|
|
2208
2218
|
|
package/src/gv58lau.js
CHANGED
|
@@ -339,7 +339,7 @@ const parse = raw => {
|
|
|
339
339
|
data.hourmeter = canInfo.engineHours
|
|
340
340
|
}
|
|
341
341
|
|
|
342
|
-
if (typeof canInfo?.speed === 'number') {
|
|
342
|
+
if (typeof canInfo?.speed === 'number' && canInfo?.speed > 0) {
|
|
343
343
|
data.gpsSpeed = data.speed;
|
|
344
344
|
data.speed = canInfo.speed;
|
|
345
345
|
}
|
|
@@ -1970,17 +1970,28 @@ const parse = raw => {
|
|
|
1970
1970
|
// Bluetooth beacon detection
|
|
1971
1971
|
let number = parsedData[4] !== '' ? parseInt(parsedData[4]) : 1
|
|
1972
1972
|
let index = 4
|
|
1973
|
+
|
|
1974
|
+
let binAppendMask = utils.nHexDigit(utils.hex2bin(parsedData[index + 2]), 8)
|
|
1975
|
+
let appendMask = {
|
|
1976
|
+
accessoryMac: binAppendMask[6] == '1',
|
|
1977
|
+
batteryLevel: binAppendMask[4] == '1',
|
|
1978
|
+
signalStrength: binAppendMask[1] == '1',
|
|
1979
|
+
beaconType: binAppendMask[0] == '1'
|
|
1980
|
+
}
|
|
1981
|
+
|
|
1973
1982
|
let appMk, extra
|
|
1974
1983
|
for (let i = 1; i <= number; i++) {
|
|
1975
1984
|
appMk = utils.sumOnes(parsedData[index + 2])
|
|
1976
|
-
extra =
|
|
1985
|
+
extra = appendMask.beaconType ?
|
|
1977
1986
|
parsedData[index + 5] === '0'
|
|
1978
1987
|
? 1
|
|
1979
1988
|
: parsedData[index + 5] === '1'
|
|
1980
1989
|
? 3
|
|
1981
1990
|
: parsedData[index + 5] === '2' ? 2 : 0
|
|
1991
|
+
: 0
|
|
1982
1992
|
index += 2 + appMk + extra
|
|
1983
1993
|
}
|
|
1994
|
+
|
|
1984
1995
|
let satelliteInfo = false
|
|
1985
1996
|
let satIndex = number * index + 12
|
|
1986
1997
|
|
package/src/utils.js
CHANGED
|
@@ -703,22 +703,14 @@ const getCanData = (parsedData, ix, type) => {
|
|
|
703
703
|
return {}
|
|
704
704
|
}
|
|
705
705
|
|
|
706
|
-
let spdIx
|
|
707
|
-
let rpmIx
|
|
708
|
-
let engcIx
|
|
709
706
|
let vinIx = ix + 1 + parseInt(canAppendMask[31])
|
|
710
707
|
let ignIx = vinIx + parseInt(canAppendMask[30])
|
|
711
708
|
let disIx = ignIx + parseInt(canAppendMask[29])
|
|
712
709
|
let fuelIx = disIx + parseInt(canAppendMask[28])
|
|
713
|
-
//
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
engcIx =
|
|
717
|
-
// } else {
|
|
718
|
-
// rpmIx = fuelIx + parseInt(canAppendMask[27])
|
|
719
|
-
// spdIx = rpmIx + parseInt(canAppendMask[26])
|
|
720
|
-
// engcIx = spdIx + parseInt(canAppendMask[25])
|
|
721
|
-
// }
|
|
710
|
+
// Inverted speed and rpm because of inconsistence in documentation
|
|
711
|
+
let rpmIx = fuelIx + parseInt(canAppendMask[26])
|
|
712
|
+
let spdIx = rpmIx + parseInt(canAppendMask[27])
|
|
713
|
+
let engcIx = spdIx + parseInt(canAppendMask[25])
|
|
722
714
|
let fuelcIx = engcIx + parseInt(canAppendMask[24])
|
|
723
715
|
let fuellIx = fuelcIx + parseInt(canAppendMask[23])
|
|
724
716
|
let rngIx = fuellIx + parseInt(canAppendMask[22])
|
|
@@ -873,8 +865,6 @@ const getCanData = (parsedData, ix, type) => {
|
|
|
873
865
|
ignitionKey: canAppendMask[30] === '1',
|
|
874
866
|
totalDistance: canAppendMask[29] === '1',
|
|
875
867
|
totalFuelUsed: canAppendMask[28] === '1',
|
|
876
|
-
// speed: type === 'GTCAN' ? canAppendMask[27] === '1' : canAppendMask[26] === '1',
|
|
877
|
-
// rpm: type === 'GTCAN' ? canAppendMask[26] === '1' : canAppendMask[27] === '1',
|
|
878
868
|
speed: canAppendMask[27] === '1',
|
|
879
869
|
rpm: canAppendMask[26] === '1',
|
|
880
870
|
engineCoolantTemp: canAppendMask[25] === '1',
|
|
@@ -902,13 +892,9 @@ const getCanData = (parsedData, ix, type) => {
|
|
|
902
892
|
ignitionKey: canAppendMask[30] === '1' && parsedData[ignIx] ? parseCanData(parsedData[ignIx], 'ignitionKey') : null,
|
|
903
893
|
totalDistance: canAppendMask[29] === '1' && parsedData[disIx] ? parseCanData(parsedData[disIx], 'totalDistance') : null,
|
|
904
894
|
totalDistanceUnit: canAppendMask[29] === '1' && parsedData[disIx] ? parsedData[disIx].slice(0, 1) === 'H' ? 'km' : 'I' : null,
|
|
905
|
-
fuelUsed: canAppendMask[28] === '1' && parsedData[fuelIx] ? parseFloat(parsedData[fuelIx]) : null,
|
|
895
|
+
fuelUsed: canAppendMask[28] === '1' && parsedData[fuelIx] ? parseFloat(parsedData[fuelIx]) : null,
|
|
906
896
|
speed: canAppendMask[27] === '1' && parsedData[spdIx] ? parseFloat(parsedData[spdIx]) : null,
|
|
907
897
|
rpm: canAppendMask[26] === '1' && parsedData[rpmIx] ? parseInt(parsedData[rpmIx], 10) : null,
|
|
908
|
-
// speed: type === 'GTCAN' ? (canAppendMask[27] === '1' && parsedData[spdIx] ? parseFloat(parsedData[spdIx]) : null) :
|
|
909
|
-
// type === 'GTERI' ? (canAppendMask[26] === '1' && parsedData[spdIx] ? parseFloat(parsedData[spdIx]) : null) : null,
|
|
910
|
-
// rpm: type === 'GTCAN' ? (canAppendMask[26] === '1' && parsedData[rpmIx] ? parseInt(parsedData[rpmIx], 10) : null) :
|
|
911
|
-
// type === 'GTERI' ? (canAppendMask[27] === '1' && parsedData[rpmIx] ? parseInt(parsedData[rpmIx], 10) : null) : null,
|
|
912
898
|
engineCoolantTemp:
|
|
913
899
|
canAppendMask[25] === '1' && parsedData[engcIx] ? parseInt(parsedData[engcIx], 10) : null,
|
|
914
900
|
fuelConsumption: canAppendMask[24] === '1' && parsedData[fuelcIx] ? parseCanData(parsedData[fuelcIx], 'fuelConsumption') : null,
|