queclink-parser 1.9.10 → 1.9.12

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,31 @@
1
+ #### 1.9.12 (2024-10-14)
2
+
3
+ ##### New Features
4
+
5
+ * **can:** added adBlueLevelUnit ([cfc663c8](https://github.com/jaayesta/queclink-parser/commit/cfc663c8339dadc6e36750019c7d881007942a45))
6
+
7
+ ##### Bug Fixes
8
+
9
+ * **gv58lau:** digital inputs ([bb78b299](https://github.com/jaayesta/queclink-parser/commit/bb78b29970fa016571d93fd9c1959c73804d294a))
10
+ * **canbus:** new can index consider ac100 or digitFuelSensor data ([b0e9d23e](https://github.com/jaayesta/queclink-parser/commit/b0e9d23e69e9ffacddf0b76cc3a4d04523598ebe))
11
+ * **can:**
12
+ * evaluation for parsedData ([3427d98f](https://github.com/jaayesta/queclink-parser/commit/3427d98f85d273a262dc076c4b36cb88e51c3b54))
13
+ * typo ([08408de4](https://github.com/jaayesta/queclink-parser/commit/08408de4d52d38f8cd280736ff7d821303c5e756))
14
+
15
+ ##### Tests
16
+
17
+ * **can:** test for database when can data exists ([424e28c6](https://github.com/jaayesta/queclink-parser/commit/424e28c63c39d6d3e6a4335d9f9b79c83d574b68))
18
+
19
+ #### 1.9.11 (2024-10-09)
20
+
21
+ ##### New Features
22
+
23
+ * **can:** added units of measurement ([7ff59418](https://github.com/jaayesta/queclink-parser/commit/7ff594187491dcaf8c5f2aa690218363ebbba2c6))
24
+
25
+ ##### Bug Fixes
26
+
27
+ * **can:** fix index error for externalData in ERI ([f71b874c](https://github.com/jaayesta/queclink-parser/commit/f71b874cd0c2ead80d9cdeae5be3c5408fb6c99b))
28
+
1
29
  #### 1.9.10 (2024-10-08)
2
30
 
3
31
  ##### New Features
package/example.js CHANGED
@@ -57,6 +57,8 @@ var cra = '+RESP:GTCRA,8020060402,867488060596284,GV57CG,06,1,1.0,0,222.0,117.12
57
57
  var asc = '+RESP:GTASC,8020060402,867488060595542,GV57CG,0.86,0.52,0.01,0.52,-0.86,0.01,0.01,0.00,-1.00,1,12.6,267,39.7,117.115453,31.827255,20230523055431,0460,0001,DF5C,05F7B315,01,10,20230523135432,03BC$'
58
58
  var hbe = '+RESP:GTHBE,8020060402,866775051515393,GV57CG,,2,0,1,42.5,0,42.6,117.101321,31.827725,20231221034214,0460,0001,DF5C,05F7B40B,01,1,002500040054,FFE2FFFF0051,10,19.8,20231221034215,006B$'
59
59
  var caneri = '+RESP:GTERI,6E0802,868589060350066,,00000104,28696,10,1,1,0.0,344,17.6,-71.604231,-33.043113,20241001170305,0730,0001,13F0,004E2212,01,6 ,10496.6,0000273:06:37,,,,98,210500,0,1,203FFFFF,,2,H4168131,5859.88,513,0,71,H2.4,P92.00,,,386.89,308.11,78.78,173.25,,FFFF,0000,,00,0.00,0.00,FFFFFF,62,,,,,,,,226631,181383,,386.89,79.35,,10178,,,,,,0000,0,0,,1,00,13,0,00000000,4007,,78054133C69C,1,0,20241001170312,26B5$'
60
+ var eribad = "+RESP:GTERI,6E0802,868589060669374,,00000002,28594,10,1,1,18.9,210,542.2,-70.693347,-33.537067,20241009121749,0730,0001,3341,008AF201,01,12,6.9,0000004:57:46,,,,100,220100,2,1,28FF05762863EA12,1,00B1,20241009121755,09BE$"
61
+
60
62
 
61
63
  var data = {
62
64
  "imei": 864696060046190,
@@ -89,6 +91,72 @@ var data = {
89
91
 
90
92
  // console.log(queclink.parseCommand(data))
91
93
  const raw = new Buffer(caneri)
92
- console.log(queclink.parse(raw))
93
- queclink.parse(raw)
94
+ // console.log(queclink.parse(raw))
95
+ // queclink.parse(raw)
96
+
97
+ data = queclink.parse(raw)
98
+ // console.log(data)
99
+ if (data.can) {
100
+ const {
101
+ comunicationOk,
102
+ vin,
103
+ ignitionKey,
104
+ totalDistance,
105
+ totalDistanceUnit,
106
+ rpm,
107
+ speed,
108
+ engineCoolantTemp,
109
+ fuelConsumption,
110
+ fuelLevel,
111
+ fuelLevelUnit,
112
+ range,
113
+ acceleratorPressure,
114
+ engineHours,
115
+ drivingTime,
116
+ idleTime,
117
+ idleFuelUsed,
118
+ axleWeight,
119
+ tachograph,
120
+ indicators,
121
+ lights,
122
+ doors,
123
+ overSpeedTime,
124
+ overSpeedEngineTime
125
+ } = data.can
126
+
127
+ const canData = {
128
+ raw: data.raw,
129
+ imei: data.imei,
130
+ datetime: data.datetime,
131
+ point: data.point,
132
+ comunicationOk,
133
+ vin,
134
+ ignitionKey,
135
+ totalDistance,
136
+ totalDistanceUnit,
137
+ rpm,
138
+ speed,
139
+ engineCoolantTemp,
140
+ fuelConsumption,
141
+ fuelLevel,
142
+ fuelLevelUnit,
143
+ range,
144
+ acceleratorPressure,
145
+ engineHours,
146
+ drivingTime,
147
+ idleTime,
148
+ idleFuelUsed,
149
+ axleWeight,
150
+ tachograph,
151
+ indicators,
152
+ lights,
153
+ doors,
154
+ overSpeedTime,
155
+ overSpeedEngineTime,
156
+ ...data.can.canExpanded
157
+ }
94
158
 
159
+ canData.canReportExpansionMask = canData.canReportExpansionMask.raw
160
+ console.log(canData)
161
+ delete data.can
162
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "queclink-parser",
3
- "version": "1.9.10",
3
+ "version": "1.9.12",
4
4
  "description": "Parse raw data from Queclink devices",
5
5
  "main": "src",
6
6
  "scripts": {
package/src/gv310lau.js CHANGED
@@ -229,6 +229,12 @@ const parse = raw => {
229
229
  let index = 7 + 12 * number // position append mask
230
230
  let satelliteInfo = false
231
231
 
232
+ // If get satellites is configured
233
+ if (utils.includeSatellites(parsedData[19])) {
234
+ index = 7 + 13 * number
235
+ satelliteInfo = true
236
+ }
237
+
232
238
  // External Data
233
239
  const digitFuelSensor =
234
240
  utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[10] === '1'
@@ -242,18 +248,6 @@ const parse = raw => {
242
248
  const bluetoothAccessory =
243
249
  utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[2] === '1'
244
250
 
245
- const fuelSensorData = digitFuelSensor ? parsedData[index + 9] : null
246
- const ac100DevicesConnected =
247
- AC100 && digitFuelSensor
248
- ? parseInt(parsedData[index + 10], 10)
249
- : AC100 && !digitFuelSensor ? parseInt(parsedData[index + 9], 10) : 0
250
-
251
- // If get satellites is configured
252
- if (utils.includeSatellites(parsedData[19])) {
253
- index = 7 + 13 * number
254
- satelliteInfo = true
255
- }
256
-
257
251
  data = Object.assign(data, {
258
252
  alarm: utils.getAlarm(command[1], null),
259
253
  loc: {
@@ -370,26 +364,11 @@ const parse = raw => {
370
364
  : null,
371
365
  })
372
366
 
373
- if (canData) {
374
- let canInfo = utils.getCanData(parsedData, index + 9)
375
- data = Object.assign(data, { can: canInfo })
376
- index = index + 49
377
-
378
- if (canInfo?.totalDistance) {
379
- data.gpsOdometer = data.odometer
380
- data.odometer = canInfo.totalDistance
381
- }
382
-
383
- if (canInfo?.engineHours) {
384
- data.gpsHourmeter = data.hourmeter
385
- data.hourmeter = canInfo.engineHours
386
- }
387
-
388
- if (canInfo?.speed) {
389
- data.gpsSpeed = data.speed
390
- data.speed = canInfo.speed
391
- }
392
- }
367
+ const fuelSensorData = digitFuelSensor ? parsedData[index + 9] : null
368
+ const ac100DevicesConnected =
369
+ AC100 && digitFuelSensor
370
+ ? parseInt(parsedData[index + 10], 10)
371
+ : AC100 && !digitFuelSensor ? parseInt(parsedData[index + 9], 10) : 0
393
372
 
394
373
  let externalData = {
395
374
  eriMask: {
@@ -442,6 +421,7 @@ const parse = raw => {
442
421
  })
443
422
  count += 3
444
423
  }
424
+
445
425
  externalData = Object.assign(externalData, {
446
426
  fuelSensorData: null,
447
427
  AC100Devices: ac100Devices
@@ -536,6 +516,28 @@ const parse = raw => {
536
516
  }
537
517
  }
538
518
 
519
+ if (canData) {
520
+ let newIndex = digitFuelSensor && !AC100 ? index + 9 + 1 : !digitFuelSensor && AC100 ? index + 9 + 4 : digitFuelSensor && AC100 ? index + 9 + 5 : index + 9
521
+ let canInfo = utils.getCanData(parsedData, newIndex)
522
+ data = Object.assign(data, { can: canInfo })
523
+ index = index + 49
524
+
525
+ if (canInfo?.totalDistance) {
526
+ data.gpsOdometer = data.odometer
527
+ data.odometer = canInfo.totalDistance
528
+ }
529
+
530
+ if (canInfo?.engineHours) {
531
+ data.gpsHourmeter = data.hourmeter
532
+ data.hourmeter = canInfo.engineHours
533
+ }
534
+
535
+ if (canInfo?.speed) {
536
+ data.gpsSpeed = data.speed
537
+ data.speed = canInfo.speed
538
+ }
539
+ }
540
+
539
541
  // Bluetooth Accessories
540
542
  if (bluetoothAccessory) {
541
543
  let btDevices = []
package/src/gv58lau.js CHANGED
@@ -56,12 +56,12 @@ const parse = raw => {
56
56
  utils.nHexDigit(
57
57
  utils.hex2bin(parsedData[index + 6].substring(2, 4)),
58
58
  8
59
- )[7] === '1',
59
+ )[6] === '1',
60
60
  '1':
61
61
  utils.nHexDigit(
62
62
  utils.hex2bin(parsedData[index + 6].substring(2, 4)),
63
63
  8
64
- )[6] === '1'
64
+ )[7] === '1'
65
65
  },
66
66
  output: {
67
67
  '3':
package/src/utils.js CHANGED
@@ -601,7 +601,7 @@ const parseCanData = (data, key) => {
601
601
  case 'ignitionKey':
602
602
  return (data === '0' ? 'ignition_off' : data === '1' ? 'ignition_on' : data === '2' ? 'engine_on' : null)
603
603
  case 'totalDistance':
604
- if (data[0] === 'H') {
604
+ if (data.slice(0,1) === 'H') {
605
605
  return hToKm(data)
606
606
  } else {
607
607
  return data
@@ -618,6 +618,12 @@ const parseCanData = (data, key) => {
618
618
  }
619
619
  case 'tachographDrivingDirection':
620
620
  return data === '0' ? 'forward' : 'backward'
621
+ case 'adBlueLevel':
622
+ if(['P','L'].includes(data.slice(0,1))) {
623
+ return parseFloat(parseFloat(data.slice(1)).toFixed(2))
624
+ } else {
625
+ return parseFloat(parseFloat(data).toFixed(2))
626
+ }
621
627
  default:
622
628
  return data
623
629
  }
@@ -663,26 +669,28 @@ const getCanData = (parsedData, ix) => {
663
669
 
664
670
  return {
665
671
  comunicationOk: parsedData[ix] ? parsedData[ix] === '1' : null,
666
- vin: parsedData[ix + 2] !== '' ? parsedData[ix + 2] : null,
667
- ignitionKey: parsedData[ix + 3] !== '' ? parseCanData(parsedData[ix + 3], 'ignitionKey') : null,
668
- totalDistance: parsedData[ix + 4] !== '' ? parseCanData(parsedData[ix + 4], 'totalDistance') : null,
669
- fuelUsed: parsedData[ix + 5] !== '' ? parseFloat(parsedData[ix + 5]) : null, // float
670
- rpm: parsedData[ix + 6] !== '' ? parseInt(parsedData[ix + 6], 10) : null, // int
671
- speed: parsedData[ix + 7] !== '' ? parseFloat(parsedData[ix + 7]) : null,
672
+ vin: parsedData[ix + 2] ? parsedData[ix + 2] : null,
673
+ ignitionKey: parsedData[ix + 3] ? parseCanData(parsedData[ix + 3], 'ignitionKey') : null,
674
+ totalDistance: parsedData[ix + 4] ? parseCanData(parsedData[ix + 4], 'totalDistance') : null,
675
+ totalDistanceUnit: parsedData[ix + 4] ? parsedData[ix + 4].slice(0,1) === 'H' ? 'km' : 'I' : null,
676
+ fuelUsed: parsedData[ix + 5] ? parseFloat(parsedData[ix + 5]) : null, // float
677
+ rpm: parsedData[ix + 6] ? parseInt(parsedData[ix + 6], 10) : null, // int
678
+ speed: parsedData[ix + 7] ? parseFloat(parsedData[ix + 7]) : null,
672
679
  engineCoolantTemp:
673
- parsedData[ix + 8] !== '' ? parseInt(parsedData[ix + 8], 10) : null,
674
- fuelConsumption: parsedData[ix + 9] !== '' ? parseCanData(parsedData[ix + 9], 'fuelConsumption') : null,
675
- fuelLevel: parsedData[ix + 10] !== '' ? parsedData[ix + 10] : null,
676
- range: parsedData[ix + 11] !== '' ? parseCanData(parsedData[ix + 11], 'range') : null,
680
+ parsedData[ix + 8] ? parseInt(parsedData[ix + 8], 10) : null,
681
+ fuelConsumption: parsedData[ix + 9] ? parseCanData(parsedData[ix + 9], 'fuelConsumption') : null,
682
+ fuelLevel: parsedData[ix + 10] ? parseFloat(parsedData[ix + 10].slice(1)) : null,
683
+ fuelLevelUnit: parsedData[ix + 10] ? parsedData[ix + 10].slice(0,1) === 'P' ? '%' : 'L' : null,
684
+ range: parsedData[ix + 11] ? parseCanData(parsedData[ix + 11], 'range') : null,
677
685
  acceleratorPressure:
678
- parsedData[ix + 12] !== '' ? parseFloat(parsedData[ix + 12]) : null,
679
- engineHours: parsedData[ix + 13] !== '' ? parseFloat(parsedData[ix + 13]) : null,
680
- drivingTime: parsedData[ix + 14] !== '' ? parseFloat(parsedData[ix + 14]) : null,
681
- idleTime: parsedData[ix + 15] !== '' ? parseFloat(parsedData[ix + 15]) : null,
682
- idleFuelUsed: parsedData[ix + 16] !== '' ? parseFloat(parsedData[ix + 16]) : null,
683
- axleWight: parsedData[ix + 17] !== '' ? parseFloat(parsedData[ix + 17]) : null,
684
- tachograph: {
685
- raw: parsedData[ix + 18] !== '' ? parsedData[ix + 18] : null,
686
+ parsedData[ix + 12] ? parseFloat(parsedData[ix + 12]) : null,
687
+ engineHours: parsedData[ix + 13] ? parseFloat(parsedData[ix + 13]) : null,
688
+ drivingTime: parsedData[ix + 14] ? parseFloat(parsedData[ix + 14]) : null,
689
+ idleTime: parsedData[ix + 15] ? parseFloat(parsedData[ix + 15]) : null,
690
+ idleFuelUsed: parsedData[ix + 16] ? parseFloat(parsedData[ix + 16]) : null,
691
+ axleWeight: parsedData[ix + 17] ? parseFloat(parsedData[ix + 17]) : null,
692
+ tachograph: parsedData[ix + 18] ? {
693
+ raw: parsedData[ix + 18] ? parsedData[ix + 18] : null,
686
694
  validDriverData: tachographBin ? tachographBin[7] === '1' : null,
687
695
  insertedDriverCard: tachographBin ? tachographBin[5] === '1' : null,
688
696
  driverWorkingState: tachographBin
@@ -691,9 +699,9 @@ const getCanData = (parsedData, ix) => {
691
699
  drivingTimeState: tachographBin
692
700
  ? dTimeStates[parseInt(tachographBin.substring(5, 8), 2)]
693
701
  : null
694
- },
702
+ } : null,
695
703
  indicators: inicatorsBin ? {
696
- raw: inicatorsBin !== '' ? parsedData[ix + 19] : null,
704
+ raw: inicatorsBin ? parsedData[ix + 19] : null,
697
705
  lowFuel: inicatorsBin ? inicatorsBin[0] === '1' : null,
698
706
  driverSeatbelt: inicatorsBin ? inicatorsBin[1] === '1' : null,
699
707
  airConditioning: inicatorsBin ? inicatorsBin[2] === '1' : null,
@@ -712,7 +720,7 @@ const getCanData = (parsedData, ix) => {
712
720
  trunk: inicatorsBin ? inicatorsBin[15] === '1' : null
713
721
  } : null,
714
722
  lights: lights ? {
715
- raw: lights !== '' ? parsedData[ix + 20] : null,
723
+ raw: lights ? parsedData[ix + 20] : null,
716
724
  running: lights ? lights[0] === '1' : null,
717
725
  lowBeams: lights ? lights[1] === '1' : null,
718
726
  frontFog: lights ? lights[2] === '1' : null,
@@ -720,7 +728,7 @@ const getCanData = (parsedData, ix) => {
720
728
  hazard: lights ? lights[4] === '1' : null
721
729
  } : null,
722
730
  doors: doors ? {
723
- raw: doors !== '' ? parsedData[ix + 21] : null,
731
+ raw: doors ? parsedData[ix + 21] : null,
724
732
  driver: doors ? doors[0] === '1' : null,
725
733
  passenger: doors ? doors[1] === '1' : null,
726
734
  rearLeft: doors ? doors[2] === '1' : null,
@@ -728,11 +736,11 @@ const getCanData = (parsedData, ix) => {
728
736
  trunk: doors ? doors[4] === '1' : null,
729
737
  hood: doors ? doors[5] === '1' : null
730
738
  } : null,
731
- overSpeedTime: parsedData[ix + 22] !== '' ? parseFloat(parsedData[ix + 22]) : null,
732
- overSpeedEngineTime: parsedData[ix + 23] !== '' ? parseFloat(parsedData[ix + 23]) : null,
739
+ overSpeedTime: parsedData[ix + 22] ? parseFloat(parsedData[ix + 22]) : null,
740
+ overSpeedEngineTime: parsedData[ix + 23] ? parseFloat(parsedData[ix + 23]) : null,
733
741
  canExpanded: {
734
742
  canReportExpansionMask: {
735
- raw: parsedData[ix + 24] !== '' ? parsedData[ix + 24] : null,
743
+ raw: parsedData[ix + 24] ? parsedData[ix + 24] : null,
736
744
  engineTorque: canExpansionMask ? canExpansionMask[23] === '1' : null,
737
745
  rapidAccelerations: canExpansionMask
738
746
  ? canExpansionMask[22] === '1'
@@ -795,39 +803,40 @@ const getCanData = (parsedData, ix) => {
795
803
  adBlueLevel: canExpansionMask ? canExpansionMask[0] === '1' : null
796
804
  },
797
805
  adBlueLevel:
798
- parsedData[ix + 25] !== '' ? parseFloat(parsedData[ix + 25]) : null,
799
- axleWeight1: parsedData[ix + 26] !== '' ? parseInt(parsedData[ix + 26]) : null,
800
- axleWeight3: parsedData[ix + 27] !== '' ? parseInt(parsedData[ix + 27]) : null,
801
- axleWeight4: parsedData[ix + 28] !== '' ? parseInt(parsedData[ix + 28]) : null,
806
+ parsedData[ix + 25] ? parseCanData(parsedData[ix + 25], 'adBlueLevel') : null,
807
+ adBlueLevelUnit: parsedData[ix + 25] ? parsedData[ix + 25].slice(0,1) === 'P' ? '%' : 'L' ? 'L': 'L' : null,
808
+ axleWeight1: parsedData[ix + 26] ? parseInt(parsedData[ix + 26]) : null,
809
+ axleWeight3: parsedData[ix + 27] ? parseInt(parsedData[ix + 27]) : null,
810
+ axleWeight4: parsedData[ix + 28] ? parseInt(parsedData[ix + 28]) : null,
802
811
  tachographOverspeedSignal:
803
- parsedData[ix + 29] !== '' ? (parsedData[ix + 29] === '1') : null,
812
+ parsedData[ix + 29] ? (parsedData[ix + 29] === '1') : null,
804
813
  tachographVehicleMotionSignal:
805
- parsedData[ix + 30] !== '' ? (parsedData[ix + 30] === '1') : null,
814
+ parsedData[ix + 30] ? (parsedData[ix + 30] === '1') : null,
806
815
  tachographDrivingDirection:
807
- parsedData[ix + 31] !== '' ? parseCanData(parsedData[ix + 31], 'tachographDrivingDirection') : null,
816
+ parsedData[ix + 31] ? parseCanData(parsedData[ix + 31], 'tachographDrivingDirection') : null,
808
817
  analogInputValue:
809
- parsedData[ix + 32] !== '' ? parseFloat(parsedData[ix + 32]) * 1000 : null,
818
+ parsedData[ix + 32] ? parseFloat(parsedData[ix + 32]) * 1000 : null,
810
819
  engineBrakingFactor:
811
- parsedData[ix + 33] !== '' ? parseInt(parsedData[ix + 33]) : null,
820
+ parsedData[ix + 33] ? parseInt(parsedData[ix + 33]) : null,
812
821
  pedalBrakingFactor:
813
- parsedData[ix + 34] !== '' ? parseInt(parsedData[ix + 34]) : null,
822
+ parsedData[ix + 34] ? parseInt(parsedData[ix + 34]) : null,
814
823
  totalAcceleratorKickDown:
815
- parsedData[ix + 35] !== '' ? parseInt(parsedData[ix + 35]) : null,
824
+ parsedData[ix + 35] ? parseInt(parsedData[ix + 35]) : null,
816
825
  totalEffectiveEngineSpeedTime:
817
- parsedData[ix + 36] !== '' ? parseFloat(parsedData[ix + 36]) : null,
826
+ parsedData[ix + 36] ? parseFloat(parsedData[ix + 36]) : null,
818
827
  totalCruiseControlTime:
819
- parsedData[ix + 37] !== '' ? parseFloat(parsedData[ix + 37]) : null,
828
+ parsedData[ix + 37] ? parseFloat(parsedData[ix + 37]) : null,
820
829
  totalAcceleratorKickDownTime:
821
- parsedData[ix + 38] !== '' ? parseFloat(parsedData[ix + 38]) : null,
830
+ parsedData[ix + 38] ? parseFloat(parsedData[ix + 38]) : null,
822
831
  totalBrakeApplications:
823
- parsedData[ix + 39] !== '' ? parseInt(parsedData[ix + 39]) : null,
824
- tachographDriver1Card: parsedData[ix + 40] !== '' ? parsedData[ix + 40] : null,
825
- tachographDriver2Card: parsedData[ix + 41] !== '' ? parsedData[ix + 41] : null,
826
- tachographDriver1Name: parsedData[ix + 42] !== '' ? parsedData[ix + 42] : null,
827
- tachographDriver2Name: parsedData[ix + 43] !== '' ? parsedData[ix + 43] : null,
828
- registrationNumber: parsedData[ix + 44] !== '' ? parsedData[ix + 44] : null,
832
+ parsedData[ix + 39] ? parseInt(parsedData[ix + 39]) : null,
833
+ tachographDriver1Card: parsedData[ix + 40] ? parsedData[ix + 40] : null,
834
+ tachographDriver2Card: parsedData[ix + 41] ? parsedData[ix + 41] : null,
835
+ tachographDriver1Name: parsedData[ix + 42] ? parsedData[ix + 42] : null,
836
+ tachographDriver2Name: parsedData[ix + 43] ? parsedData[ix + 43] : null,
837
+ registrationNumber: parsedData[ix + 44] ? parsedData[ix + 44] : null,
829
838
  expansionInformation: {
830
- raw: parsedData[ix + 45] !== '' ? parsedData[ix + 45] : null,
839
+ raw: parsedData[ix + 45] ? parsedData[ix + 45] : null,
831
840
  webasto: expansionBin ? expansionBin[0] === '1' : null,
832
841
  brakeFluidLowIndicator: expansionBin
833
842
  ? expansionBin[1] === '1'
@@ -849,9 +858,9 @@ const getCanData = (parsedData, ix) => {
849
858
  : null,
850
859
  oilLevelLowIndicator: expansionBin ? expansionBin[12] === '1' : null
851
860
  },
852
- rapidBrakings: parsedData[ix + 46] !== '' ? parseInt(parsedData[ix + 46]) : null,
853
- rapidAccelerations: parsedData[ix + 47] !== '' ? parseInt(parsedData[ix + 47]) : null,
854
- engineTorque: parsedData[ix + 48] !== '' ? parseFloat(parsedData[ix + 48]) : null,
861
+ rapidBrakings: parsedData[ix + 46] ? parseInt(parsedData[ix + 46]) : null,
862
+ rapidAccelerations: parsedData[ix + 47] ? parseInt(parsedData[ix + 47]) : null,
863
+ engineTorque: parsedData[ix + 48] ? parseFloat(parsedData[ix + 48]) : null,
855
864
  }
856
865
  }
857
866
  }