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 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,868589061025071,,00,1,E03C1FEF,,2,H5098434,159048.47,1592,70,H4.6,P87.60,,57,160.81,124.42,,00,0.00,0.00,C1FFFF,72,,0,,,,,,94009,62330,1338,160.81,43.27,3.54,3340,,,1,,,,1,0.0,359,475.7,-70.770337,-33.475763,20251013162220,0730,0001,333F,003D0701,01,12,20251013162222,36E8$"
90
- var cantest2 = "+RESP:GTERI,6E0902,868589060831545,,00000104,14065,10,1,1,89.5,264,144.0,-71.280091,-33.650247,20251013160701,0730,0001,3391,02574D03,01,12,434363.5,0000250:27:42,,,,100,220100,0,1,203D24BF,1FUBCYCSX9HAA9810,2,H4345338,132280.27,1571,90,,70,60.29,FFFF,,00,0.00,0.00,D24CFF,,,,,,,,,5421,159.71,,,0000,0,,1,00,13,0,00000000,4007,,7805414BB11A,1,0,20251013160703,19C3$"
91
- var cantest3 = '+RESP:GTERI,6E0C03,868589061025071,,00000104,28534,10,1,1,14.3,157,474.3,-70.771113,-33.475845,20251013160929,0730,0001,333F,003D0701,01,12,1371.2,0000029:30:58,,,,100,220100,0,1,203C1FEF,,2,H5098433,159048.28,911,66,H1.3,P87.60,,0,160.75,124.40,,00,0.00,0.00,C1FFFF,72,,0,,,,,,93992,62309,1338,160.75,43.27,3.54,3339,,,1,,6,00,13,0,00000000,4007,,7805414BB20C,1,0,FE,3,4,000A,78054149496C,,FE,3,4,000A,780541494969,,FE,3,4,000A,7805414948E1,3090,FE,3,4,000A,780541416190,,FE,3,4,000A,780541494879,3060,20251013160931,36B6$'
92
- var t = "+RESP:GTERI,6E0C03,868589061025071,,00000100,25711,10,1,1,0.0,234,471.5,-70.771257,-33.476015,20251013163817,0730,0001,333F,003D0701,01,12,1371.3,0000029:46:32,,,,100,210100,0,6,00,13,0,00000000,4007,,7805414BB20C,1,0,FE,3,4,000A,780541416190,3000,FE,3,4,000A,7805414948D7,3080,FE,3,4,000A,78054149496D,3130,FE,3,4,000A,780541494969,3100,FE,3,4,000A,780541494879,,20251013163820,373D$"
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(t)
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "queclink-parser",
3
- "version": "1.9.18",
3
+ "version": "1.9.19",
4
4
  "description": "Parse raw data from Queclink devices",
5
5
  "main": "src",
6
6
  "scripts": {
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
- // if (type === 'GTCAN') {
714
- spdIx = fuelIx + parseInt(canAppendMask[27])
715
- rpmIx = spdIx + parseInt(canAppendMask[26])
716
- engcIx = rpmIx + parseInt(canAppendMask[25])
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, // float
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,