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 +28 -0
- package/example.js +70 -2
- package/package.json +1 -1
- package/src/gv310lau.js +34 -32
- package/src/gv58lau.js +2 -2
- package/src/utils.js +59 -50
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
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
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
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
|
-
)[
|
|
59
|
+
)[6] === '1',
|
|
60
60
|
'1':
|
|
61
61
|
utils.nHexDigit(
|
|
62
62
|
utils.hex2bin(parsedData[index + 6].substring(2, 4)),
|
|
63
63
|
8
|
|
64
|
-
)[
|
|
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
|
|
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]
|
|
667
|
-
ignitionKey: parsedData[ix + 3]
|
|
668
|
-
totalDistance: parsedData[ix + 4]
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
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]
|
|
674
|
-
fuelConsumption: parsedData[ix + 9]
|
|
675
|
-
fuelLevel: parsedData[ix + 10]
|
|
676
|
-
|
|
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]
|
|
679
|
-
engineHours: parsedData[ix + 13]
|
|
680
|
-
drivingTime: parsedData[ix + 14]
|
|
681
|
-
idleTime: parsedData[ix + 15]
|
|
682
|
-
idleFuelUsed: parsedData[ix + 16]
|
|
683
|
-
|
|
684
|
-
tachograph: {
|
|
685
|
-
raw: parsedData[ix + 18]
|
|
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
|
|
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
|
|
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
|
|
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]
|
|
732
|
-
overSpeedEngineTime: parsedData[ix + 23]
|
|
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]
|
|
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]
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
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]
|
|
812
|
+
parsedData[ix + 29] ? (parsedData[ix + 29] === '1') : null,
|
|
804
813
|
tachographVehicleMotionSignal:
|
|
805
|
-
parsedData[ix + 30]
|
|
814
|
+
parsedData[ix + 30] ? (parsedData[ix + 30] === '1') : null,
|
|
806
815
|
tachographDrivingDirection:
|
|
807
|
-
parsedData[ix + 31]
|
|
816
|
+
parsedData[ix + 31] ? parseCanData(parsedData[ix + 31], 'tachographDrivingDirection') : null,
|
|
808
817
|
analogInputValue:
|
|
809
|
-
parsedData[ix + 32]
|
|
818
|
+
parsedData[ix + 32] ? parseFloat(parsedData[ix + 32]) * 1000 : null,
|
|
810
819
|
engineBrakingFactor:
|
|
811
|
-
parsedData[ix + 33]
|
|
820
|
+
parsedData[ix + 33] ? parseInt(parsedData[ix + 33]) : null,
|
|
812
821
|
pedalBrakingFactor:
|
|
813
|
-
parsedData[ix + 34]
|
|
822
|
+
parsedData[ix + 34] ? parseInt(parsedData[ix + 34]) : null,
|
|
814
823
|
totalAcceleratorKickDown:
|
|
815
|
-
parsedData[ix + 35]
|
|
824
|
+
parsedData[ix + 35] ? parseInt(parsedData[ix + 35]) : null,
|
|
816
825
|
totalEffectiveEngineSpeedTime:
|
|
817
|
-
parsedData[ix + 36]
|
|
826
|
+
parsedData[ix + 36] ? parseFloat(parsedData[ix + 36]) : null,
|
|
818
827
|
totalCruiseControlTime:
|
|
819
|
-
parsedData[ix + 37]
|
|
828
|
+
parsedData[ix + 37] ? parseFloat(parsedData[ix + 37]) : null,
|
|
820
829
|
totalAcceleratorKickDownTime:
|
|
821
|
-
parsedData[ix + 38]
|
|
830
|
+
parsedData[ix + 38] ? parseFloat(parsedData[ix + 38]) : null,
|
|
822
831
|
totalBrakeApplications:
|
|
823
|
-
parsedData[ix + 39]
|
|
824
|
-
tachographDriver1Card: parsedData[ix + 40]
|
|
825
|
-
tachographDriver2Card: parsedData[ix + 41]
|
|
826
|
-
tachographDriver1Name: parsedData[ix + 42]
|
|
827
|
-
tachographDriver2Name: parsedData[ix + 43]
|
|
828
|
-
registrationNumber: parsedData[ix + 44]
|
|
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]
|
|
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]
|
|
853
|
-
rapidAccelerations: parsedData[ix + 47]
|
|
854
|
-
engineTorque: parsedData[ix + 48]
|
|
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
|
}
|