queclink-parser 1.9.9 → 1.9.11
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 +16 -0
- package/example.js +8 -4
- package/package.json +1 -1
- package/src/gv310lau.js +68 -275
- package/src/utils.js +330 -54
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
#### 1.9.11 (2024-10-09)
|
|
2
|
+
|
|
3
|
+
##### New Features
|
|
4
|
+
|
|
5
|
+
* **can:** added units of measurement ([7ff59418](https://github.com/jaayesta/queclink-parser/commit/7ff594187491dcaf8c5f2aa690218363ebbba2c6))
|
|
6
|
+
|
|
7
|
+
##### Bug Fixes
|
|
8
|
+
|
|
9
|
+
* **can:** fix index error for externalData in ERI ([f71b874c](https://github.com/jaayesta/queclink-parser/commit/f71b874cd0c2ead80d9cdeae5be3c5408fb6c99b))
|
|
10
|
+
|
|
11
|
+
#### 1.9.10 (2024-10-08)
|
|
12
|
+
|
|
13
|
+
##### New Features
|
|
14
|
+
|
|
15
|
+
* **canbus:** can data from ERI report and others ([8f590b6b](https://github.com/jaayesta/queclink-parser/commit/8f590b6bf35588a01c703c93a71f78b37b4cb1ac))
|
|
16
|
+
|
|
1
17
|
#### 1.9.9 (2024-10-04)
|
|
2
18
|
|
|
3
19
|
##### Bug Fixes
|
package/example.js
CHANGED
|
@@ -56,6 +56,9 @@ var pfr = '+RESP:GTPFR,8020060402,863835020303983,GV57CG,0,,,,,20150407094557,06
|
|
|
56
56
|
var cra = '+RESP:GTCRA,8020060402,867488060596284,GV57CG,06,1,1.0,0,222.0,117.129815,31.839434,20230523062909,0460,0001,DF5C,027A4F1F,01,3,20230523160010,0B67$'
|
|
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
|
+
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
|
+
|
|
59
62
|
|
|
60
63
|
var data = {
|
|
61
64
|
"imei": 864696060046190,
|
|
@@ -86,7 +89,8 @@ var data = {
|
|
|
86
89
|
}
|
|
87
90
|
}
|
|
88
91
|
|
|
89
|
-
console.log(queclink.parseCommand(data))
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
92
|
+
// console.log(queclink.parseCommand(data))
|
|
93
|
+
const raw = new Buffer(eribad)
|
|
94
|
+
console.log(queclink.parse(raw))
|
|
95
|
+
queclink.parse(raw)
|
|
96
|
+
|
package/package.json
CHANGED
package/src/gv310lau.js
CHANGED
|
@@ -113,7 +113,7 @@ const parse = raw => {
|
|
|
113
113
|
state:
|
|
114
114
|
utils.nHexDigit(parsedData[index + 7], 10).substring(4, 6) !== ''
|
|
115
115
|
? utils.states[ // eslint-disable-line
|
|
116
|
-
|
|
116
|
+
utils.nHexDigit(parsedData[index + 7], 10).substring(4, 6)
|
|
117
117
|
]
|
|
118
118
|
: null
|
|
119
119
|
},
|
|
@@ -229,6 +229,19 @@ const parse = raw => {
|
|
|
229
229
|
let index = 7 + 12 * number // position append mask
|
|
230
230
|
let satelliteInfo = false
|
|
231
231
|
|
|
232
|
+
// External Data
|
|
233
|
+
const digitFuelSensor =
|
|
234
|
+
utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[10] === '1'
|
|
235
|
+
const AC100 = utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[9] === '1'
|
|
236
|
+
const canData =
|
|
237
|
+
utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[8] === '1'
|
|
238
|
+
const fuelLevelPercentage =
|
|
239
|
+
utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[7] === '1'
|
|
240
|
+
const fuelVolume =
|
|
241
|
+
utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[6] === '1'
|
|
242
|
+
const bluetoothAccessory =
|
|
243
|
+
utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[2] === '1'
|
|
244
|
+
|
|
232
245
|
// If get satellites is configured
|
|
233
246
|
if (utils.includeSatellites(parsedData[19])) {
|
|
234
247
|
index = 7 + 13 * number
|
|
@@ -308,7 +321,7 @@ const parse = raw => {
|
|
|
308
321
|
state:
|
|
309
322
|
utils.nHexDigit(parsedData[index + 7], 10).substring(4, 6) !== ''
|
|
310
323
|
? utils.states[ // eslint-disable-line
|
|
311
|
-
|
|
324
|
+
utils.nHexDigit(parsedData[index + 7], 10).substring(4, 6)
|
|
312
325
|
]
|
|
313
326
|
: null
|
|
314
327
|
},
|
|
@@ -348,33 +361,42 @@ const parse = raw => {
|
|
|
348
361
|
hourmeter:
|
|
349
362
|
parsedData[index + 2] !== ''
|
|
350
363
|
? utils.getHoursForHourmeter(parsedData[index + 2])
|
|
351
|
-
: null
|
|
364
|
+
: null,
|
|
352
365
|
})
|
|
353
|
-
// External Data
|
|
354
|
-
const digitFuelSensor =
|
|
355
|
-
utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[10] === '1'
|
|
356
|
-
const AC100 = utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[9] === '1'
|
|
357
|
-
const reserved =
|
|
358
|
-
utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[8] === '1'
|
|
359
|
-
const fuelLevelPercentage =
|
|
360
|
-
utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[7] === '1'
|
|
361
|
-
const fuelVolume =
|
|
362
|
-
utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[6] === '1'
|
|
363
|
-
const bluetoothAccessory =
|
|
364
|
-
utils.nHexDigit(utils.hex2bin(parsedData[4]), 11)[2] === '1'
|
|
365
366
|
|
|
366
367
|
const fuelSensorData = digitFuelSensor ? parsedData[index + 9] : null
|
|
367
368
|
const ac100DevicesConnected =
|
|
368
369
|
AC100 && digitFuelSensor
|
|
369
370
|
? parseInt(parsedData[index + 10], 10)
|
|
370
371
|
: AC100 && !digitFuelSensor ? parseInt(parsedData[index + 9], 10) : 0
|
|
372
|
+
|
|
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
|
+
}
|
|
371
393
|
|
|
372
394
|
let externalData = {
|
|
373
395
|
eriMask: {
|
|
374
396
|
raw: parsedData[4],
|
|
375
397
|
digitFuelSensor: digitFuelSensor,
|
|
376
398
|
AC100: AC100,
|
|
377
|
-
|
|
399
|
+
canData: canData,
|
|
378
400
|
fuelLevelPercentage: fuelLevelPercentage,
|
|
379
401
|
fuelVolume: fuelVolume,
|
|
380
402
|
bluetoothAccessory: bluetoothAccessory
|
|
@@ -1474,43 +1496,6 @@ const parse = raw => {
|
|
|
1474
1496
|
satelliteInfo = true
|
|
1475
1497
|
}
|
|
1476
1498
|
|
|
1477
|
-
let inicatorsBin =
|
|
1478
|
-
parsedData[24] !== ''
|
|
1479
|
-
? utils.nHexDigit(utils.hex2bin(parsedData[24]), 16)
|
|
1480
|
-
: null
|
|
1481
|
-
let lights =
|
|
1482
|
-
parsedData[25] !== ''
|
|
1483
|
-
? utils.nHexDigit(utils.hex2bin(parsedData[25]), 8)
|
|
1484
|
-
: null
|
|
1485
|
-
let doors =
|
|
1486
|
-
parsedData[26] !== ''
|
|
1487
|
-
? utils.nHexDigit(utils.hex2bin(parsedData[26]), 8)
|
|
1488
|
-
: null
|
|
1489
|
-
let canExpansionMask =
|
|
1490
|
-
parsedData[29] !== ''
|
|
1491
|
-
? utils
|
|
1492
|
-
.nHexDigit(utils.hex2bin(parsedData[29]), 32)
|
|
1493
|
-
.split('')
|
|
1494
|
-
.reverse()
|
|
1495
|
-
.join('')
|
|
1496
|
-
: null
|
|
1497
|
-
let expansionBin =
|
|
1498
|
-
parsedData[50] !== ''
|
|
1499
|
-
? utils
|
|
1500
|
-
.nHexDigit(utils.hex2bin(parsedData[50]), 16)
|
|
1501
|
-
.split('')
|
|
1502
|
-
.reverse()
|
|
1503
|
-
.join('')
|
|
1504
|
-
: null
|
|
1505
|
-
let tachographBin =
|
|
1506
|
-
parsedData[23] !== ''
|
|
1507
|
-
? utils
|
|
1508
|
-
.nHexDigit(utils.hex2bin(parsedData[23]), 8)
|
|
1509
|
-
.split('')
|
|
1510
|
-
.reverse()
|
|
1511
|
-
.join('')
|
|
1512
|
-
: null
|
|
1513
|
-
|
|
1514
1499
|
data = Object.assign(data, {
|
|
1515
1500
|
alarm: utils.getAlarm(command[1], parsedData[4]),
|
|
1516
1501
|
loc: {
|
|
@@ -1544,201 +1529,9 @@ const parse = raw => {
|
|
|
1544
1529
|
: null,
|
|
1545
1530
|
odometer: null,
|
|
1546
1531
|
hourmeter: null,
|
|
1547
|
-
can:
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
ignitionKey: parsedData[8] !== '' ? parseInt(parsedData[8], 10) : null,
|
|
1551
|
-
distance: parsedData[9] !== '' ? parsedData[9] : null,
|
|
1552
|
-
fuelUsed: parsedData[10] !== '' ? parseFloat(parsedData[10]) : null, // float
|
|
1553
|
-
rpm: parsedData[11] !== '' ? parseInt(parsedData[11], 10) : null, // int
|
|
1554
|
-
speed: parsedData[12] !== '' ? parseFloat(parsedData[12]) : null,
|
|
1555
|
-
coolantTemp:
|
|
1556
|
-
parsedData[13] !== '' ? parseInt(parsedData[13], 10) : null,
|
|
1557
|
-
fuelConsumption: parsedData[14] !== '' ? parsedData[14] : null,
|
|
1558
|
-
fuelLevel: parsedData[15] !== '' ? parsedData[15] : null,
|
|
1559
|
-
range: parsedData[16] !== '' ? parsedData[16] : null,
|
|
1560
|
-
acceleratorPressure:
|
|
1561
|
-
parsedData[17] !== '' ? parseFloat(parsedData[17]) : null, // %
|
|
1562
|
-
engineHours: parsedData[18] !== '' ? parseFloat(parsedData[18]) : null,
|
|
1563
|
-
drivingTime: parsedData[19] !== '' ? parseFloat(parsedData[19]) : null,
|
|
1564
|
-
idleTime: parsedData[20] !== '' ? parseFloat(parsedData[20]) : null,
|
|
1565
|
-
idleFuelUsed: parsedData[21] !== '' ? parseFloat(parsedData[21]) : null,
|
|
1566
|
-
axleWight: parsedData[22] !== '' ? parsedData[22] : null,
|
|
1567
|
-
tachograph: {
|
|
1568
|
-
raw: parsedData[23] !== '' ? parsedData[23] : null,
|
|
1569
|
-
validDriverData: tachographBin ? tachographBin[7] === '1' : null,
|
|
1570
|
-
insertedDriverCard: tachographBin ? tachographBin[5] === '1' : null,
|
|
1571
|
-
driverWorkingState: tachographBin
|
|
1572
|
-
? utils.dWorkingStates[parseInt(tachographBin.substring(3, 5), 2)]
|
|
1573
|
-
: null,
|
|
1574
|
-
drivingTimeState: tachographBin
|
|
1575
|
-
? utils.dTimeStates[parseInt(tachographBin.substring(5, 8), 2)]
|
|
1576
|
-
: null
|
|
1577
|
-
},
|
|
1578
|
-
indicators: {
|
|
1579
|
-
raw: parsedData[24] !== '' ? parsedData[24] : null,
|
|
1580
|
-
lowFuel: inicatorsBin ? inicatorsBin[0] === '1' : null,
|
|
1581
|
-
driverSeatbelt: inicatorsBin ? inicatorsBin[1] === '1' : null,
|
|
1582
|
-
airConditioning: inicatorsBin ? inicatorsBin[2] === '1' : null,
|
|
1583
|
-
cruiseControl: inicatorsBin ? inicatorsBin[3] === '1' : null,
|
|
1584
|
-
brakePedal: inicatorsBin ? inicatorsBin[4] === '1' : null,
|
|
1585
|
-
clutchPedal: inicatorsBin ? inicatorsBin[5] === '1' : null,
|
|
1586
|
-
handbrake: inicatorsBin ? inicatorsBin[6] === '1' : null,
|
|
1587
|
-
centralLock: inicatorsBin ? inicatorsBin[7] === '1' : null,
|
|
1588
|
-
reverseGear: inicatorsBin ? inicatorsBin[8] === '1' : null,
|
|
1589
|
-
runningLights: inicatorsBin ? inicatorsBin[9] === '1' : null,
|
|
1590
|
-
lowBeams: inicatorsBin ? inicatorsBin[10] === '1' : null,
|
|
1591
|
-
highBeams: inicatorsBin ? inicatorsBin[11] === '1' : null,
|
|
1592
|
-
rearFogLights: inicatorsBin ? inicatorsBin[12] === '1' : null,
|
|
1593
|
-
frontFogLights: inicatorsBin ? inicatorsBin[13] === '1' : null,
|
|
1594
|
-
doors: inicatorsBin ? inicatorsBin[14] === '1' : null,
|
|
1595
|
-
trunk: inicatorsBin ? inicatorsBin[15] === '1' : null
|
|
1596
|
-
},
|
|
1597
|
-
lights: {
|
|
1598
|
-
raw: parsedData[25] !== '' ? parsedData[25] : null,
|
|
1599
|
-
running: lights ? lights[0] === '1' : null,
|
|
1600
|
-
lowBeams: lights ? lights[1] === '1' : null,
|
|
1601
|
-
frontFog: lights ? lights[2] === '1' : null,
|
|
1602
|
-
rearFog: lights ? lights[3] === '1' : null,
|
|
1603
|
-
hazard: lights ? lights[4] === '1' : null
|
|
1604
|
-
},
|
|
1605
|
-
doors: {
|
|
1606
|
-
raw: parsedData[26] !== '' ? parsedData[26] : null,
|
|
1607
|
-
driver: doors ? doors[0] === '1' : null,
|
|
1608
|
-
passenger: doors ? doors[1] === '1' : null,
|
|
1609
|
-
rearLeft: doors ? doors[2] === '1' : null,
|
|
1610
|
-
rearRight: doors ? doors[3] === '1' : null,
|
|
1611
|
-
trunk: doors ? doors[4] === '1' : null,
|
|
1612
|
-
hood: doors ? doors[5] === '1' : null
|
|
1613
|
-
},
|
|
1614
|
-
overSpeedTime: parsedData[27] !== '' ? parsedData[27] : null,
|
|
1615
|
-
overSpeedEngineTime: parsedData[28] !== '' ? parsedData[28] : null,
|
|
1616
|
-
canReportExpansionMask: {
|
|
1617
|
-
raw: parsedData[29] !== '' ? parsedData[29] : null,
|
|
1618
|
-
engineTorque: canExpansionMask ? canExpansionMask[23] === '1' : null,
|
|
1619
|
-
rapidAccelerations: canExpansionMask
|
|
1620
|
-
? canExpansionMask[22] === '1'
|
|
1621
|
-
: null,
|
|
1622
|
-
rapidBrakings: canExpansionMask ? canExpansionMask[21] === '1' : null,
|
|
1623
|
-
expansionInformation: canExpansionMask
|
|
1624
|
-
? canExpansionMask[20] === '1'
|
|
1625
|
-
: null,
|
|
1626
|
-
registrationNumber: canExpansionMask
|
|
1627
|
-
? canExpansionMask[19] === '1'
|
|
1628
|
-
: null,
|
|
1629
|
-
tachographDriver2Name: canExpansionMask
|
|
1630
|
-
? canExpansionMask[18] === '1'
|
|
1631
|
-
: null,
|
|
1632
|
-
tachographDriver1Name: canExpansionMask
|
|
1633
|
-
? canExpansionMask[17] === '1'
|
|
1634
|
-
: null,
|
|
1635
|
-
tachographDriver2Card: canExpansionMask
|
|
1636
|
-
? canExpansionMask[16] === '1'
|
|
1637
|
-
: null,
|
|
1638
|
-
tachographDriver1Card: canExpansionMask
|
|
1639
|
-
? canExpansionMask[15] === '1'
|
|
1640
|
-
: null,
|
|
1641
|
-
totalBrakeApplications: canExpansionMask
|
|
1642
|
-
? canExpansionMask[14] === '1'
|
|
1643
|
-
: null,
|
|
1644
|
-
totalAcceleratorKickDownTime: canExpansionMask
|
|
1645
|
-
? canExpansionMask[13] === '1'
|
|
1646
|
-
: null,
|
|
1647
|
-
totalCruiseControlTime: canExpansionMask
|
|
1648
|
-
? canExpansionMask[12] === '1'
|
|
1649
|
-
: null,
|
|
1650
|
-
totalEffectiveEngineSpeedTime: canExpansionMask
|
|
1651
|
-
? canExpansionMask[11] === '1'
|
|
1652
|
-
: null,
|
|
1653
|
-
totalAcceleratorKickDown: canExpansionMask
|
|
1654
|
-
? canExpansionMask[10] === '1'
|
|
1655
|
-
: null,
|
|
1656
|
-
pedalBrakingFactor: canExpansionMask
|
|
1657
|
-
? canExpansionMask[9] === '1'
|
|
1658
|
-
: null,
|
|
1659
|
-
engineBrakingFactor: canExpansionMask
|
|
1660
|
-
? canExpansionMask[8] === '1'
|
|
1661
|
-
: null,
|
|
1662
|
-
analogInputValue: canExpansionMask
|
|
1663
|
-
? canExpansionMask[7] === '1'
|
|
1664
|
-
: null,
|
|
1665
|
-
tachographDrivingDirection: canExpansionMask
|
|
1666
|
-
? canExpansionMask[6] === '1'
|
|
1667
|
-
: null,
|
|
1668
|
-
tachographVehicleMotionSignal: canExpansionMask
|
|
1669
|
-
? canExpansionMask[5] === '1'
|
|
1670
|
-
: null,
|
|
1671
|
-
tachographOverspeedSignal: canExpansionMask
|
|
1672
|
-
? canExpansionMask[4] === '1'
|
|
1673
|
-
: null,
|
|
1674
|
-
AxleWeight4: canExpansionMask ? canExpansionMask[3] === '1' : null,
|
|
1675
|
-
AxleWeight3: canExpansionMask ? canExpansionMask[2] === '1' : null,
|
|
1676
|
-
AxleWeight1: canExpansionMask ? canExpansionMask[1] === '1' : null,
|
|
1677
|
-
adBlueLevel: canExpansionMask ? canExpansionMask[0] === '1' : null
|
|
1678
|
-
},
|
|
1679
|
-
canExpanded: {
|
|
1680
|
-
adBlueLevel:
|
|
1681
|
-
parsedData[30] !== '' ? parseFloat(parsedData[30]) : null,
|
|
1682
|
-
axleWeight1: parsedData[31] !== '' ? parseInt(parsedData[31]) : null,
|
|
1683
|
-
axleWeight3: parsedData[32] !== '' ? parseInt(parsedData[32]) : null,
|
|
1684
|
-
axleWeight4: parsedData[33] !== '' ? parseInt(parsedData[33]) : null,
|
|
1685
|
-
tachographOverspeedSignal:
|
|
1686
|
-
parsedData[34] !== '' ? parseInt(parsedData[34]) : null,
|
|
1687
|
-
tachographVehicleMotionSignal:
|
|
1688
|
-
parsedData[35] !== '' ? parseInt(parsedData[35]) : null,
|
|
1689
|
-
tachographDrivingDirection:
|
|
1690
|
-
parsedData[36] !== '' ? parseInt(parsedData[36]) : null,
|
|
1691
|
-
analogInputValue:
|
|
1692
|
-
parsedData[37] !== '' ? parseInt(parsedData[37]) : null,
|
|
1693
|
-
engineBrakingFactor:
|
|
1694
|
-
parsedData[38] !== '' ? parseInt(parsedData[38]) : null,
|
|
1695
|
-
pedalBrakingFactor:
|
|
1696
|
-
parsedData[39] !== '' ? parseInt(parsedData[39]) : null,
|
|
1697
|
-
totalAcceleratorKickDown:
|
|
1698
|
-
parsedData[40] !== '' ? parseInt(parsedData[40]) : null,
|
|
1699
|
-
totalEffectiveEngineSpeedTime:
|
|
1700
|
-
parsedData[41] !== '' ? parseFloat(parsedData[41]) : null,
|
|
1701
|
-
totalCruiseControlTime:
|
|
1702
|
-
parsedData[42] !== '' ? parseFloat(parsedData[42]) : null,
|
|
1703
|
-
totalAcceleratorKickDownTime:
|
|
1704
|
-
parsedData[43] !== '' ? parseFloat(parsedData[43]) : null,
|
|
1705
|
-
totalBrakeApplications:
|
|
1706
|
-
parsedData[44] !== '' ? parseInt(parsedData[44]) : null,
|
|
1707
|
-
tachographDriver1Card:
|
|
1708
|
-
parsedData[45] !== '' ? parseInt(parsedData[45]) : null,
|
|
1709
|
-
tachographDriver2Card:
|
|
1710
|
-
parsedData[46] !== '' ? parseInt(parsedData[46]) : null,
|
|
1711
|
-
tachographDriver1Name: parsedData[47] !== '' ? parsedData[47] : null,
|
|
1712
|
-
tachographDriver2Name: parsedData[48] !== '' ? parsedData[48] : null,
|
|
1713
|
-
registrationNumber:
|
|
1714
|
-
parsedData[49] !== '' ? parseInt(parsedData[49]) : null,
|
|
1715
|
-
expansionInformation: {
|
|
1716
|
-
raw: parsedData[50] !== '' ? parsedData[50] : null,
|
|
1717
|
-
webasto: expansionBin ? expansionBin[0] === '1' : null,
|
|
1718
|
-
brakeFluidLowIndicator: expansionBin
|
|
1719
|
-
? expansionBin[1] === '1'
|
|
1720
|
-
: null,
|
|
1721
|
-
coolantLevelLowIndicator: expansionBin
|
|
1722
|
-
? expansionBin[2] === '1'
|
|
1723
|
-
: null,
|
|
1724
|
-
batteryIndicator: expansionBin ? expansionBin[3] === '1' : null,
|
|
1725
|
-
brakeSystemaFailureIndicator: expansionBin
|
|
1726
|
-
? expansionBin[4] === '1'
|
|
1727
|
-
: null,
|
|
1728
|
-
oilPressureIndicator: expansionBin ? expansionBin[5] === '1' : null,
|
|
1729
|
-
engineHotIndicator: expansionBin ? expansionBin[6] === '1' : null,
|
|
1730
|
-
ABSFailureIndicator: expansionBin ? expansionBin[7] === '1' : null,
|
|
1731
|
-
checkEngineIndicator: expansionBin ? expansionBin[9] === '1' : null,
|
|
1732
|
-
aribagsIndicator: expansionBin ? expansionBin[10] === '1' : null,
|
|
1733
|
-
serviceCallIndicator: expansionBin
|
|
1734
|
-
? expansionBin[11] === '1'
|
|
1735
|
-
: null,
|
|
1736
|
-
oilLevelLowIndicator: expansionBin ? expansionBin[12] === '1' : null
|
|
1737
|
-
},
|
|
1738
|
-
adblueLevel: parsedData[30] !== '' ? parsedData[30] : null
|
|
1739
|
-
}
|
|
1740
|
-
}
|
|
1741
|
-
})
|
|
1532
|
+
can: utils.getCanData(parsedData, 5),
|
|
1533
|
+
}
|
|
1534
|
+
)
|
|
1742
1535
|
} else if (command[1] === 'GTDAT') {
|
|
1743
1536
|
let dataIndex = 4
|
|
1744
1537
|
// Short format
|
|
@@ -2185,13 +1978,13 @@ const parse = raw => {
|
|
|
2185
1978
|
bluetoothInfo: {
|
|
2186
1979
|
name:
|
|
2187
1980
|
parsedData[index + 2] !== '' &&
|
|
2188
|
-
|
|
1981
|
+
utils.nHexDigit(utils.hex2bin(parsedData[index + 1]), 16)[15] ===
|
|
2189
1982
|
'1'
|
|
2190
1983
|
? parsedData[index + 2]
|
|
2191
1984
|
: null,
|
|
2192
1985
|
mac:
|
|
2193
1986
|
parsedData[index + 3] !== '' &&
|
|
2194
|
-
|
|
1987
|
+
utils.nHexDigit(utils.hex2bin(parsedData[index + 1]), 16)[14] ===
|
|
2195
1988
|
'1'
|
|
2196
1989
|
? parsedData[index + 3]
|
|
2197
1990
|
: null
|
|
@@ -2202,17 +1995,17 @@ const parse = raw => {
|
|
|
2202
1995
|
name: null,
|
|
2203
1996
|
role:
|
|
2204
1997
|
parsedData[index + 4] !== '' &&
|
|
2205
|
-
|
|
1998
|
+
utils.nHexDigit(utils.hex2bin(parsedData[index + 1]), 16)[7] === '1'
|
|
2206
1999
|
? utils.peerRoles[parsedData[index + 4]]
|
|
2207
2000
|
: null,
|
|
2208
2001
|
type:
|
|
2209
2002
|
parsedData[index + 5] !== '' &&
|
|
2210
|
-
|
|
2003
|
+
utils.nHexDigit(utils.hex2bin(parsedData[index + 1]), 16)[5] === '1'
|
|
2211
2004
|
? utils.peerAddressesTypes[parsedData[index + 5]]
|
|
2212
2005
|
: null,
|
|
2213
2006
|
mac:
|
|
2214
2007
|
parsedData[index + 6] !== '' &&
|
|
2215
|
-
|
|
2008
|
+
utils.nHexDigit(utils.hex2bin(parsedData[index + 1]), 16)[4] === '1'
|
|
2216
2009
|
? parsedData[index + 6]
|
|
2217
2010
|
: null
|
|
2218
2011
|
},
|
|
@@ -2549,29 +2342,29 @@ const parse = raw => {
|
|
|
2549
2342
|
appendMask[0] === '1' && parsedData[typeIx + 1] !== ''
|
|
2550
2343
|
? {
|
|
2551
2344
|
idMfrData:
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2345
|
+
parsedData[typeIx] === '0' && parsedData[typeIx + 1] !== ''
|
|
2346
|
+
? parsedData[typeIx + 1]
|
|
2347
|
+
: null,
|
|
2555
2348
|
uuid:
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2349
|
+
parsedData[typeIx] === '1' && parsedData[typeIx + 1] !== ''
|
|
2350
|
+
? parsedData[typeIx + 1]
|
|
2351
|
+
: null,
|
|
2559
2352
|
major:
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2353
|
+
parsedData[typeIx] === '1' && parsedData[typeIx + 2] !== ''
|
|
2354
|
+
? parsedData[typeIx + 2]
|
|
2355
|
+
: null,
|
|
2563
2356
|
minor:
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2357
|
+
parsedData[typeIx] === '1' && parsedData[typeIx + 3] !== ''
|
|
2358
|
+
? parsedData[typeIx + 3]
|
|
2359
|
+
: null,
|
|
2567
2360
|
nid:
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2361
|
+
parsedData[typeIx] === '2' && parsedData[typeIx + 1] !== ''
|
|
2362
|
+
? parsedData[typeIx + 1]
|
|
2363
|
+
: null,
|
|
2571
2364
|
bid:
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2365
|
+
parsedData[typeIx] === '2' && parsedData[typeIx + 2] !== ''
|
|
2366
|
+
? parsedData[typeIx + 2]
|
|
2367
|
+
: null
|
|
2575
2368
|
}
|
|
2576
2369
|
: null
|
|
2577
2370
|
})
|
|
@@ -2652,12 +2445,12 @@ const parse = raw => {
|
|
|
2652
2445
|
: null,
|
|
2653
2446
|
lac:
|
|
2654
2447
|
parsedData[index + 2] !== '' ||
|
|
2655
|
-
|
|
2448
|
+
parsedData[index + 2].toUpperCase() === 'FFFF'
|
|
2656
2449
|
? parseInt(parsedData[index + 2], 16)
|
|
2657
2450
|
: null,
|
|
2658
2451
|
cid:
|
|
2659
2452
|
parsedData[index + 3] !== '' ||
|
|
2660
|
-
|
|
2453
|
+
parsedData[index + 3].toUpperCase() === 'FFFF'
|
|
2661
2454
|
? parseInt(parsedData[index + 3], 16)
|
|
2662
2455
|
: null,
|
|
2663
2456
|
rxLevel:
|
|
@@ -2686,12 +2479,12 @@ const parse = raw => {
|
|
|
2686
2479
|
: null,
|
|
2687
2480
|
lac:
|
|
2688
2481
|
parsedData[index + 2] !== '' ||
|
|
2689
|
-
|
|
2482
|
+
parsedData[index + 2].toUpperCase() === 'FFFF'
|
|
2690
2483
|
? parseInt(parsedData[index + 2], 16)
|
|
2691
2484
|
: null,
|
|
2692
2485
|
cid:
|
|
2693
2486
|
parsedData[index + 3] !== '' ||
|
|
2694
|
-
|
|
2487
|
+
parsedData[index + 3].toUpperCase() === 'FFFF'
|
|
2695
2488
|
? parseInt(parsedData[index + 3], 16)
|
|
2696
2489
|
: null,
|
|
2697
2490
|
rxLevel:
|
package/src/utils.js
CHANGED
|
@@ -241,24 +241,24 @@ const beaconTypes = {
|
|
|
241
241
|
Possible Driving Time Related States
|
|
242
242
|
*/
|
|
243
243
|
const dTimeStates = {
|
|
244
|
-
0: '
|
|
245
|
-
1: '
|
|
246
|
-
2: '
|
|
247
|
-
3: '
|
|
248
|
-
4: '
|
|
249
|
-
5: '
|
|
250
|
-
6: '
|
|
251
|
-
7: '
|
|
244
|
+
0: 'normal',
|
|
245
|
+
1: '04h_15min',
|
|
246
|
+
2: '04h_30min',
|
|
247
|
+
3: '08h_45min',
|
|
248
|
+
4: '09h_00min',
|
|
249
|
+
5: '15h_45min',
|
|
250
|
+
6: '16h_00min',
|
|
251
|
+
7: 'other'
|
|
252
252
|
}
|
|
253
253
|
|
|
254
254
|
/*
|
|
255
255
|
Possible Driving Working States
|
|
256
256
|
*/
|
|
257
257
|
const dWorkingStates = {
|
|
258
|
-
0: '
|
|
259
|
-
1: '
|
|
260
|
-
2: '
|
|
261
|
-
3: '
|
|
258
|
+
0: 'normal',
|
|
259
|
+
1: 'rest',
|
|
260
|
+
2: 'work',
|
|
261
|
+
3: 'driving'
|
|
262
262
|
}
|
|
263
263
|
|
|
264
264
|
/*
|
|
@@ -518,69 +518,344 @@ const getMNC = (countryData, opData) => {
|
|
|
518
518
|
let mnc = parseInt(opData, 10)
|
|
519
519
|
let operator
|
|
520
520
|
if (mcc === 716) {
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
521
|
+
operator = (mnc === 6) ? 'Movistar' :
|
|
522
|
+
(mnc === 7) ? 'Nextel' :
|
|
523
|
+
(mnc === 10) ? 'Claro' :
|
|
524
|
+
(mnc === 15) ? 'Viettel' :
|
|
525
|
+
(mnc === 17) ? 'Entel' :
|
|
526
|
+
(mnc === 20) ? 'Cuy Mobile (Claro)' :
|
|
527
527
|
'Desconocido'
|
|
528
528
|
} else if (mcc === 722) {
|
|
529
529
|
operator = (mnc === 1) ? 'Tuenti' :
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
530
|
+
(mnc === 10) ? 'Movicom' :
|
|
531
|
+
(mnc === 20) ? 'Nextel' :
|
|
532
|
+
(mnc === 34) ? 'Telecom Personal' :
|
|
533
|
+
([310, 320, 330].includes(mnc)) ? 'Claro' :
|
|
534
|
+
'Desconocido'
|
|
535
535
|
} else if (mcc === 724) {
|
|
536
536
|
// Incomplete
|
|
537
537
|
operator = ([2, 3, 4].includes(mnc)) ? 'TIM' :
|
|
538
|
-
|
|
539
|
-
|
|
538
|
+
([5, 6, 12].includes(mnc)) ? 'Claro' :
|
|
539
|
+
'Otra'
|
|
540
540
|
} else if (mcc === 730) {
|
|
541
541
|
operator = ([1, 10].includes(mnc)) ? 'Entel' :
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
542
|
+
([2, 7].includes(mnc)) ? 'Movistar' :
|
|
543
|
+
([3, 23].includes(mnc)) ? 'Claro' :
|
|
544
|
+
(mnc === 8) ? 'VTR (Claro)' :
|
|
545
|
+
(mnc === 9) ? 'WOM' :
|
|
546
|
+
([14, 20, 21, 28].includes(mnc)) ? 'Otro' :
|
|
547
|
+
'Desconocido'
|
|
548
548
|
} else if (mcc === 732) {
|
|
549
549
|
operator = (mnc === 1) ? 'Telecom' :
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
550
|
+
(mnc === 2) ? 'Edatel' :
|
|
551
|
+
(mnc === 101) ? 'Claro' :
|
|
552
|
+
(mnc === 103) ? 'Colombia Móvil' :
|
|
553
|
+
([102, 123].includes(mnc)) ? 'Movistar' :
|
|
554
|
+
(mnc === 360) ? 'WOM' :
|
|
555
|
+
'Desconocido'
|
|
556
556
|
} else if (mcc === 736) {
|
|
557
557
|
operator = (mnc === 1) ? 'Viva Bolivia' :
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
558
|
+
(mnc === 2) ? 'Entel' :
|
|
559
|
+
(mnc === 3) ? 'Telecel' :
|
|
560
|
+
(mnc === 4) ? 'Cotas' :
|
|
561
|
+
(mnc === 5) ? 'Comteco' :
|
|
562
|
+
'Desconocido'
|
|
563
563
|
} else if (mcc === 740) {
|
|
564
564
|
operator = (mnc === 1) ? 'Otecel (Movistar)' :
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
565
|
+
(mnc === 2) ? 'Conecel (Claro)' :
|
|
566
|
+
(mnc === 0) ? 'Telecsa (CNT' :
|
|
567
|
+
'Desconocido'
|
|
568
568
|
} else if (mcc === 744) {
|
|
569
569
|
operator = (mnc === 1) ? 'Hola Paraguay' :
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
570
|
+
(mnc === 2) ? 'AMX Paraguay' :
|
|
571
|
+
(mnc === 3) ? 'Comunicaciones Privadas' :
|
|
572
|
+
(mnc === 4) ? 'Telefónica Celular del Paraguay' :
|
|
573
|
+
(mnc === 5) ? 'Núcleo' :
|
|
574
|
+
'Desconocido'
|
|
575
575
|
} else if (mcc === 748) {
|
|
576
576
|
operator = ([0, 1].includes(mnc)) ? 'Ancel' :
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
577
|
+
(mnc === 7) ? 'Movistar' :
|
|
578
|
+
(mnc === 0) ? 'AMX Wireless' :
|
|
579
|
+
'Desconocido'
|
|
580
580
|
} else {
|
|
581
581
|
operator = 'Desconocido'
|
|
582
582
|
}
|
|
583
|
-
return {
|
|
583
|
+
return {
|
|
584
|
+
country: latamMcc[mcc], mnc: mnc, operator: operator
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
/*
|
|
589
|
+
Hectometer to Kilometer
|
|
590
|
+
*/
|
|
591
|
+
const hToKm = (data) => {
|
|
592
|
+
let h = parseFloat(data.slice(1))
|
|
593
|
+
return parseFloat((h * 0.1).toFixed(2))
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
/*
|
|
597
|
+
Parse CAN100 data
|
|
598
|
+
*/
|
|
599
|
+
const parseCanData = (data, key) => {
|
|
600
|
+
switch (key) {
|
|
601
|
+
case 'ignitionKey':
|
|
602
|
+
return (data === '0' ? 'ignition_off' : data === '1' ? 'ignition_on' : data === '2' ? 'engine_on' : null)
|
|
603
|
+
case 'totalDistance':
|
|
604
|
+
if (data.slice(0,1) === 'H') {
|
|
605
|
+
return hToKm(data)
|
|
606
|
+
} else {
|
|
607
|
+
return data
|
|
608
|
+
}
|
|
609
|
+
case 'range':
|
|
610
|
+
return hToKm(data)
|
|
611
|
+
case 'fuelConsumption':
|
|
612
|
+
if (data[0] === 'H') {
|
|
613
|
+
return hToKm(data) * 1000
|
|
614
|
+
} else if (data[0] === 'L') {
|
|
615
|
+
return parseFloat(parseFloat(data.slice(1)).toFixed(2))
|
|
616
|
+
} else {
|
|
617
|
+
return data
|
|
618
|
+
}
|
|
619
|
+
case 'tachographDrivingDirection':
|
|
620
|
+
return data === '0' ? 'forward' : 'backward'
|
|
621
|
+
default:
|
|
622
|
+
return data
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/*
|
|
627
|
+
Get CANbus data
|
|
628
|
+
*/
|
|
629
|
+
const getCanData = (parsedData, ix) => {
|
|
630
|
+
let inicatorsBin =
|
|
631
|
+
parsedData[ix + 19] !== ''
|
|
632
|
+
? nHexDigit(hex2bin(parsedData[ix + 19]), 16)
|
|
633
|
+
: null
|
|
634
|
+
let lights =
|
|
635
|
+
parsedData[ix + 20] !== ''
|
|
636
|
+
? nHexDigit(hex2bin(parsedData[ix + 20]), 8)
|
|
637
|
+
: null
|
|
638
|
+
let doors =
|
|
639
|
+
parsedData[ix + 21] !== ''
|
|
640
|
+
? nHexDigit(hex2bin(parsedData[ix + 21]), 8)
|
|
641
|
+
: null
|
|
642
|
+
let canExpansionMask =
|
|
643
|
+
parsedData[ix + 24] !== ''
|
|
644
|
+
? nHexDigit(hex2bin(parsedData[ix + 24]), 32)
|
|
645
|
+
.split('')
|
|
646
|
+
.reverse()
|
|
647
|
+
.join('')
|
|
648
|
+
: null
|
|
649
|
+
let expansionBin =
|
|
650
|
+
parsedData[ix + 45] !== ''
|
|
651
|
+
? nHexDigit(hex2bin(parsedData[ix + 45]), 16)
|
|
652
|
+
.split('')
|
|
653
|
+
.reverse()
|
|
654
|
+
.join('')
|
|
655
|
+
: null
|
|
656
|
+
let tachographBin =
|
|
657
|
+
parsedData[ix + 18] !== ''
|
|
658
|
+
? nHexDigit(hex2bin(parsedData[ix + 18]), 8)
|
|
659
|
+
.split('')
|
|
660
|
+
.reverse()
|
|
661
|
+
.join('')
|
|
662
|
+
: null
|
|
663
|
+
|
|
664
|
+
return {
|
|
665
|
+
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
|
+
totalDistanceUnit: parsedData[ix + 4] ? parsedData[ix + 4].slice(0,1) === 'H' ? 'Km' : 'I' : null,
|
|
670
|
+
fuelUsed: parsedData[ix + 5] !== '' ? parseFloat(parsedData[ix + 5]) : null, // float
|
|
671
|
+
rpm: parsedData[ix + 6] !== '' ? parseInt(parsedData[ix + 6], 10) : null, // int
|
|
672
|
+
speed: parsedData[ix + 7] !== '' ? parseFloat(parsedData[ix + 7]) : null,
|
|
673
|
+
engineCoolantTemp:
|
|
674
|
+
parsedData[ix + 8] !== '' ? parseInt(parsedData[ix + 8], 10) : null,
|
|
675
|
+
fuelConsumption: parsedData[ix + 9] !== '' ? parseCanData(parsedData[ix + 9], 'fuelConsumption') : null,
|
|
676
|
+
fuelLevel: parsedData[ix + 10] !== '' ? parseFloat(parsedData[ix + 10].slice(1)) : null,
|
|
677
|
+
fuelLevelUnit: parsedData[ix + 10] ? parsedData[ix + 10].slice(0,1) === 'P' ? '%' : 'L' : null,
|
|
678
|
+
range: parsedData[ix + 11] !== '' ? parseCanData(parsedData[ix + 11], 'range') : null,
|
|
679
|
+
acceleratorPressure:
|
|
680
|
+
parsedData[ix + 12] !== '' ? parseFloat(parsedData[ix + 12]) : null,
|
|
681
|
+
engineHours: parsedData[ix + 13] !== '' ? parseFloat(parsedData[ix + 13]) : null,
|
|
682
|
+
drivingTime: parsedData[ix + 14] !== '' ? parseFloat(parsedData[ix + 14]) : null,
|
|
683
|
+
idleTime: parsedData[ix + 15] !== '' ? parseFloat(parsedData[ix + 15]) : null,
|
|
684
|
+
idleFuelUsed: parsedData[ix + 16] !== '' ? parseFloat(parsedData[ix + 16]) : null,
|
|
685
|
+
axleWight: parsedData[ix + 17] !== '' ? parseFloat(parsedData[ix + 17]) : null,
|
|
686
|
+
tachograph: {
|
|
687
|
+
raw: parsedData[ix + 18] !== '' ? parsedData[ix + 18] : null,
|
|
688
|
+
validDriverData: tachographBin ? tachographBin[7] === '1' : null,
|
|
689
|
+
insertedDriverCard: tachographBin ? tachographBin[5] === '1' : null,
|
|
690
|
+
driverWorkingState: tachographBin
|
|
691
|
+
? dWorkingStates[parseInt(tachographBin.substring(3, 5), 2)]
|
|
692
|
+
: null,
|
|
693
|
+
drivingTimeState: tachographBin
|
|
694
|
+
? dTimeStates[parseInt(tachographBin.substring(5, 8), 2)]
|
|
695
|
+
: null
|
|
696
|
+
},
|
|
697
|
+
indicators: inicatorsBin ? {
|
|
698
|
+
raw: inicatorsBin !== '' ? parsedData[ix + 19] : null,
|
|
699
|
+
lowFuel: inicatorsBin ? inicatorsBin[0] === '1' : null,
|
|
700
|
+
driverSeatbelt: inicatorsBin ? inicatorsBin[1] === '1' : null,
|
|
701
|
+
airConditioning: inicatorsBin ? inicatorsBin[2] === '1' : null,
|
|
702
|
+
cruiseControl: inicatorsBin ? inicatorsBin[3] === '1' : null,
|
|
703
|
+
brakePedal: inicatorsBin ? inicatorsBin[4] === '1' : null,
|
|
704
|
+
clutchPedal: inicatorsBin ? inicatorsBin[5] === '1' : null,
|
|
705
|
+
handbrake: inicatorsBin ? inicatorsBin[6] === '1' : null,
|
|
706
|
+
centralLock: inicatorsBin ? inicatorsBin[7] === '1' : null,
|
|
707
|
+
reverseGear: inicatorsBin ? inicatorsBin[8] === '1' : null,
|
|
708
|
+
runningLights: inicatorsBin ? inicatorsBin[9] === '1' : null,
|
|
709
|
+
lowBeams: inicatorsBin ? inicatorsBin[10] === '1' : null,
|
|
710
|
+
highBeams: inicatorsBin ? inicatorsBin[11] === '1' : null,
|
|
711
|
+
rearFogLights: inicatorsBin ? inicatorsBin[12] === '1' : null,
|
|
712
|
+
frontFogLights: inicatorsBin ? inicatorsBin[13] === '1' : null,
|
|
713
|
+
doors: inicatorsBin ? inicatorsBin[14] === '1' : null,
|
|
714
|
+
trunk: inicatorsBin ? inicatorsBin[15] === '1' : null
|
|
715
|
+
} : null,
|
|
716
|
+
lights: lights ? {
|
|
717
|
+
raw: lights !== '' ? parsedData[ix + 20] : null,
|
|
718
|
+
running: lights ? lights[0] === '1' : null,
|
|
719
|
+
lowBeams: lights ? lights[1] === '1' : null,
|
|
720
|
+
frontFog: lights ? lights[2] === '1' : null,
|
|
721
|
+
rearFog: lights ? lights[3] === '1' : null,
|
|
722
|
+
hazard: lights ? lights[4] === '1' : null
|
|
723
|
+
} : null,
|
|
724
|
+
doors: doors ? {
|
|
725
|
+
raw: doors !== '' ? parsedData[ix + 21] : null,
|
|
726
|
+
driver: doors ? doors[0] === '1' : null,
|
|
727
|
+
passenger: doors ? doors[1] === '1' : null,
|
|
728
|
+
rearLeft: doors ? doors[2] === '1' : null,
|
|
729
|
+
rearRight: doors ? doors[3] === '1' : null,
|
|
730
|
+
trunk: doors ? doors[4] === '1' : null,
|
|
731
|
+
hood: doors ? doors[5] === '1' : null
|
|
732
|
+
} : null,
|
|
733
|
+
overSpeedTime: parsedData[ix + 22] !== '' ? parseFloat(parsedData[ix + 22]) : null,
|
|
734
|
+
overSpeedEngineTime: parsedData[ix + 23] !== '' ? parseFloat(parsedData[ix + 23]) : null,
|
|
735
|
+
canExpanded: {
|
|
736
|
+
canReportExpansionMask: {
|
|
737
|
+
raw: parsedData[ix + 24] !== '' ? parsedData[ix + 24] : null,
|
|
738
|
+
engineTorque: canExpansionMask ? canExpansionMask[23] === '1' : null,
|
|
739
|
+
rapidAccelerations: canExpansionMask
|
|
740
|
+
? canExpansionMask[22] === '1'
|
|
741
|
+
: null,
|
|
742
|
+
rapidBrakings: canExpansionMask ? canExpansionMask[21] === '1' : null,
|
|
743
|
+
expansionInformation: canExpansionMask
|
|
744
|
+
? canExpansionMask[20] === '1'
|
|
745
|
+
: null,
|
|
746
|
+
registrationNumber: canExpansionMask
|
|
747
|
+
? canExpansionMask[19] === '1'
|
|
748
|
+
: null,
|
|
749
|
+
tachographDriver2Name: canExpansionMask
|
|
750
|
+
? canExpansionMask[18] === '1'
|
|
751
|
+
: null,
|
|
752
|
+
tachographDriver1Name: canExpansionMask
|
|
753
|
+
? canExpansionMask[17] === '1'
|
|
754
|
+
: null,
|
|
755
|
+
tachographDriver2Card: canExpansionMask
|
|
756
|
+
? canExpansionMask[16] === '1'
|
|
757
|
+
: null,
|
|
758
|
+
tachographDriver1Card: canExpansionMask
|
|
759
|
+
? canExpansionMask[15] === '1'
|
|
760
|
+
: null,
|
|
761
|
+
totalBrakeApplications: canExpansionMask
|
|
762
|
+
? canExpansionMask[14] === '1'
|
|
763
|
+
: null,
|
|
764
|
+
totalAcceleratorKickDownTime: canExpansionMask
|
|
765
|
+
? canExpansionMask[13] === '1'
|
|
766
|
+
: null,
|
|
767
|
+
totalCruiseControlTime: canExpansionMask
|
|
768
|
+
? canExpansionMask[12] === '1'
|
|
769
|
+
: null,
|
|
770
|
+
totalEffectiveEngineSpeedTime: canExpansionMask
|
|
771
|
+
? canExpansionMask[11] === '1'
|
|
772
|
+
: null,
|
|
773
|
+
totalAcceleratorKickDown: canExpansionMask
|
|
774
|
+
? canExpansionMask[10] === '1'
|
|
775
|
+
: null,
|
|
776
|
+
pedalBrakingFactor: canExpansionMask
|
|
777
|
+
? canExpansionMask[9] === '1'
|
|
778
|
+
: null,
|
|
779
|
+
engineBrakingFactor: canExpansionMask
|
|
780
|
+
? canExpansionMask[8] === '1'
|
|
781
|
+
: null,
|
|
782
|
+
analogInputValue: canExpansionMask
|
|
783
|
+
? canExpansionMask[7] === '1'
|
|
784
|
+
: null,
|
|
785
|
+
tachographDrivingDirection: canExpansionMask
|
|
786
|
+
? canExpansionMask[6] === '1'
|
|
787
|
+
: null,
|
|
788
|
+
tachographVehicleMotionSignal: canExpansionMask
|
|
789
|
+
? canExpansionMask[5] === '1'
|
|
790
|
+
: null,
|
|
791
|
+
tachographOverspeedSignal: canExpansionMask
|
|
792
|
+
? canExpansionMask[4] === '1'
|
|
793
|
+
: null,
|
|
794
|
+
AxleWeight4: canExpansionMask ? canExpansionMask[3] === '1' : null,
|
|
795
|
+
AxleWeight3: canExpansionMask ? canExpansionMask[2] === '1' : null,
|
|
796
|
+
AxleWeight1: canExpansionMask ? canExpansionMask[1] === '1' : null,
|
|
797
|
+
adBlueLevel: canExpansionMask ? canExpansionMask[0] === '1' : null
|
|
798
|
+
},
|
|
799
|
+
adBlueLevel:
|
|
800
|
+
parsedData[ix + 25] !== '' ? parseFloat(parsedData[ix + 25]) : null,
|
|
801
|
+
// adBlueLevelUnit: parsedData[ix + 25] ? parsedData[ix + 25].slice(0,1) === 'P' ? '%' : 'L' : null,
|
|
802
|
+
axleWeight1: parsedData[ix + 26] !== '' ? parseInt(parsedData[ix + 26]) : null,
|
|
803
|
+
axleWeight3: parsedData[ix + 27] !== '' ? parseInt(parsedData[ix + 27]) : null,
|
|
804
|
+
axleWeight4: parsedData[ix + 28] !== '' ? parseInt(parsedData[ix + 28]) : null,
|
|
805
|
+
tachographOverspeedSignal:
|
|
806
|
+
parsedData[ix + 29] !== '' ? (parsedData[ix + 29] === '1') : null,
|
|
807
|
+
tachographVehicleMotionSignal:
|
|
808
|
+
parsedData[ix + 30] !== '' ? (parsedData[ix + 30] === '1') : null,
|
|
809
|
+
tachographDrivingDirection:
|
|
810
|
+
parsedData[ix + 31] !== '' ? parseCanData(parsedData[ix + 31], 'tachographDrivingDirection') : null,
|
|
811
|
+
analogInputValue:
|
|
812
|
+
parsedData[ix + 32] !== '' ? parseFloat(parsedData[ix + 32]) * 1000 : null,
|
|
813
|
+
engineBrakingFactor:
|
|
814
|
+
parsedData[ix + 33] !== '' ? parseInt(parsedData[ix + 33]) : null,
|
|
815
|
+
pedalBrakingFactor:
|
|
816
|
+
parsedData[ix + 34] !== '' ? parseInt(parsedData[ix + 34]) : null,
|
|
817
|
+
totalAcceleratorKickDown:
|
|
818
|
+
parsedData[ix + 35] !== '' ? parseInt(parsedData[ix + 35]) : null,
|
|
819
|
+
totalEffectiveEngineSpeedTime:
|
|
820
|
+
parsedData[ix + 36] !== '' ? parseFloat(parsedData[ix + 36]) : null,
|
|
821
|
+
totalCruiseControlTime:
|
|
822
|
+
parsedData[ix + 37] !== '' ? parseFloat(parsedData[ix + 37]) : null,
|
|
823
|
+
totalAcceleratorKickDownTime:
|
|
824
|
+
parsedData[ix + 38] !== '' ? parseFloat(parsedData[ix + 38]) : null,
|
|
825
|
+
totalBrakeApplications:
|
|
826
|
+
parsedData[ix + 39] !== '' ? parseInt(parsedData[ix + 39]) : null,
|
|
827
|
+
tachographDriver1Card: parsedData[ix + 40] !== '' ? parsedData[ix + 40] : null,
|
|
828
|
+
tachographDriver2Card: parsedData[ix + 41] !== '' ? parsedData[ix + 41] : null,
|
|
829
|
+
tachographDriver1Name: parsedData[ix + 42] !== '' ? parsedData[ix + 42] : null,
|
|
830
|
+
tachographDriver2Name: parsedData[ix + 43] !== '' ? parsedData[ix + 43] : null,
|
|
831
|
+
registrationNumber: parsedData[ix + 44] !== '' ? parsedData[ix + 44] : null,
|
|
832
|
+
expansionInformation: {
|
|
833
|
+
raw: parsedData[ix + 45] !== '' ? parsedData[ix + 45] : null,
|
|
834
|
+
webasto: expansionBin ? expansionBin[0] === '1' : null,
|
|
835
|
+
brakeFluidLowIndicator: expansionBin
|
|
836
|
+
? expansionBin[1] === '1'
|
|
837
|
+
: null,
|
|
838
|
+
coolantLevelLowIndicator: expansionBin
|
|
839
|
+
? expansionBin[2] === '1'
|
|
840
|
+
: null,
|
|
841
|
+
batteryIndicator: expansionBin ? expansionBin[3] === '1' : null,
|
|
842
|
+
brakeSystemaFailureIndicator: expansionBin
|
|
843
|
+
? expansionBin[4] === '1'
|
|
844
|
+
: null,
|
|
845
|
+
oilPressureIndicator: expansionBin ? expansionBin[5] === '1' : null,
|
|
846
|
+
engineHotIndicator: expansionBin ? expansionBin[6] === '1' : null,
|
|
847
|
+
ABSFailureIndicator: expansionBin ? expansionBin[7] === '1' : null,
|
|
848
|
+
checkEngineIndicator: expansionBin ? expansionBin[9] === '1' : null,
|
|
849
|
+
aribagsIndicator: expansionBin ? expansionBin[10] === '1' : null,
|
|
850
|
+
serviceCallIndicator: expansionBin
|
|
851
|
+
? expansionBin[11] === '1'
|
|
852
|
+
: null,
|
|
853
|
+
oilLevelLowIndicator: expansionBin ? expansionBin[12] === '1' : null
|
|
854
|
+
},
|
|
855
|
+
rapidBrakings: parsedData[ix + 46] !== '' ? parseInt(parsedData[ix + 46]) : null,
|
|
856
|
+
rapidAccelerations: parsedData[ix + 47] !== '' ? parseInt(parsedData[ix + 47]) : null,
|
|
857
|
+
engineTorque: parsedData[ix + 48] !== '' ? parseFloat(parsedData[ix + 48]) : null,
|
|
858
|
+
}
|
|
584
859
|
}
|
|
585
860
|
}
|
|
586
861
|
|
|
@@ -1237,6 +1512,7 @@ module.exports = {
|
|
|
1237
1512
|
getHoursForHourmeter: getHoursForHourmeter,
|
|
1238
1513
|
getSignalStrength: getSignalStrength,
|
|
1239
1514
|
getSignalPercentage: getSignalPercentage,
|
|
1515
|
+
getCanData: getCanData,
|
|
1240
1516
|
getAlarm: getAlarm,
|
|
1241
1517
|
bin2dec: bin2dec,
|
|
1242
1518
|
bin2hex: bin2hex,
|