###### tags: `modern system`
# Converto Json Specification
## Change Log
| Version No. | Date | Description | Author |
| :---------: | :--: | :---------- | :----: |
| 1.9.0 | 2020-04-07 | Update event fuel_stats | Neil |
| 1.8.0 | 2020-03-24 | Update padelPattern report(L3 report) <br/> Update vehicle_speeding(value add 118) <br/> Update eco_start(value add 116)<br/> Update non_eco_start(value add 117)| Neil |
| 1.7.0 | 2020-02-25 | Update padelPattern report | Ruby |
| 1.6.0 | 2020-01-16 | Add new event device_system_info| Neil |
| 1.5.0 | 2020-01-13 | Add new event cellular_loss | Greg |
| 1.4.0 | 2020-01-09 | Sync James ver. | Greg & Ruby |
| 1.3.0 | N/A | <ul><li>Update the following reports</li><ul><li>vehicle_DTC_clear</li></ul></ul> | Tina |
| 1.2.0 | 2019-12-03 | <ul><li>Create new reports <ul><li>frequent_harsh</li><li>wifi_status</li><li>vehicle_impact</li></ul><li>Update the following reports<ul><li>vehicle_change</li><li>device_firmware_change</li><li>device_config_change</li></ul></li></li><li>Change vin_change to vehicle_change</li></ul> | Tina |
| 1.1.0 | 2019-11-22 | <ul><li>Update during_trip report</li><li>Create trip_restart report </li></ul> | James |
| 1.0.0 | 2019-11-12 | The first release | Greg |
## Quick Guide
- Events
- [engine_start](#engine_start)
- [engine_off](#engine_off)
- [long_idle_end](#long_idle_end)
- [unexpected_engine_start](#unexpected_engine_start)
- [trip_restart](#trip_restart)
- [during_trip](#during_trip)
- [fuel_stats](#fuel_stats)
- [tow_start](#tow_start)
- [tow_end](#tow_end)
- [keep_alive](#keep_alive)
- [SimpleVehicleEvents](#SimpleVehicleEvents)
- [vehicle_DTC](#vehicle_DTC)
- [vehicle_DTC_clear](#vehicle_DTC_clear)
- [vehicle_impact](#vehicle_impact)
- [DriverEvents](#DriverEvents)
- [vehicle_idle](#DriverEvents)
- [vehicle_speeding](#DriverEvents)
- [harsh_RPM](#DriverEvents)
- [harsh_acc](#DriverEvents)
- [harsh_brake](#DriverEvents)
- [harsh_turn](#DriverEvents)
- [eco_start](#DriverEvents)
- [eco_stop](#DriverEvents)
- [non_eco_start](#DriverEvents)
- [non_eco_stop](#DriverEvents)
- [frequent_harsh](#DriverEvents)
- [driver_pedal_pattern](#driver_pedal_pattern)
- [DeviceEvents](#DeviceEvents)
- [gps_quality](#gps_quality)
- [cellular_service](#cellular_service)
- [cellular_connection](#cellular_connection)
- [wifi_station_list](#wifi_station_list)
- [wifi_site_survey](#wifi_site_survey)
- [wifi_status](#wifi_status)
- [device_system](#device_system)
- [device_firmware_change](#device_firmware_change)
- [device_config_change](#device_config_change)
- [device_reboot](#device_reboot)
- [vehicle_change](#vehicle_change)
- [calibration_status](#calibration_status)
- [ble_data](#ble_data)
- [cellular_loss](#cellular_loss)
- [device_system_info](#device_system_info)
### engine_start
:::info
derived from simple event engine start
**sent to Tripo**
once getting this, Tripo has to archive curVehicleStatus as Park object and refresh curVehicleStatus as a Trip object
:::
```jsonld
{
"eventType": "engine_start",
"dateTime": int, // OBD report time from common hedaer
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": int,
"gpsSpeed": int,
"heading": int
}
```
### engine_off
:::info
derived from simple event engine off
**sent to Tripo**
once getting this, Tripo has to archive curVehicleStatus as Trip object and refresh curVehicleStatus as a Park object
:::
```jsonld
{
"eventType": "engine_off",
"dateTime": int,
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": int,
"gpsSpeed": int,
"heading": int
}
```
### long_idle_end
:::info
derived from excessive long idle end value added event
**sent to Alerto and Drivo**
vehicle idle is ended by engine off or continuing the trip (keep moving on)
if engine off, a simple event “engine_off” will be sent after this event
long_idle_end is passed to Alerto to notify the end of long idle
long_idle_end is passed to Drivo to calculate eco driving score
:::
```jsonld
{
"eventType": "long_idle",
"dateTime": int,
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": int,
"idleEndReason": string, // “engine_off” or “moving_on”
"idleTime": int // total idle seconds, from the start to the end
}
```
### unexpected_engine_start
:::info
derived from simple event engine start
**sent to Tripo and Alerto**
once getting this, Tripo has to archive curVehicleStatus as Park object
and refresh curVehicleStatus as a Trip object
Alerto will handle this as a critical alert (suspicion vehicle theft)
:::
```jsonld
{
"eventType": "unexpected_engine_start",
"dateTime": int,
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": int,
"gpsSpeed" : int,
"heading" : int
}
```
### trip_restart
:::info
derived from simple event trip restart
**sent to Tripo
once getting this, Tripo has to archive curVehicleStatus as Long Idle End object and refresh curVehicleStatus as a Long Idle Start object
:::
```jsonld
{
"eventType": "trip_restart",
"dateTime": int,
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": int,
"gpsSpeed" : int,
"heading" : int
}
```
### during_trip
:::info
derived from L1 or L2 report
**sent to Tripo, Vehicol and Drivo**
this report will contain either L1 or L2 report data
// leave those without data as null
// Tripo has to create a tripPoint and add it to the trip.route
// when the vehicle change heading direction for more than 70 degrees
// Vehicol dashboards these info as realtime OBDII data
:::
```jsonld
{
"eventType": "during_trip",
"reportType": int, // 1: Level one, 2: Level two
"dateTime": int,
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": int,
"maxGpsSpeed": int,
"avgGpsSpeed": int,
"heading": int,
"avgSpeed": int,
"maxSpeed": int,
"minSpeed": int,
"avgAcc": int,
"maxAcc": int,
"avgRPM": int,
"maxRPM": int,
"batVoltage": double,
"coolantTemp": int,
"engineOilTemp": int,
"engineLoad": int,
"amibientTemp": int,
"inTakeAirTemp": int,
"massiveAirFlow": int, // this could be used to calculated fuel consumption
"manifoldAirPressure": int,
"curSpeed": int,
"odoMeter": int,
"throttlePosition": int,
// the following info are original data from OBDII device
// Vehicol is calculating fuel consumption from massiveAirFlow
// we shall differentiate the original data from the calculated
// "instantaneousFuelRate": int,
"fuelRate": int, // optional
"fuelEfficiency": int,
"fuelLevel": int
}
```
### fuel_stats
:::info
derived from L3 report
**sent to Vehicol**
:::
```jsonld
{
"eventType": "fuel_stats",
"dateTime": int,
"IMEI": string,
"longitude": string,
"latitude": string,
"accuracy": string,
"gpsSpeed" : int,
"heading" : int,
// to measure idle fuel and hybrid car distance bonus
"observePeriod": int, // unit: seconds
"idleAirUsed": int, // g, hybrid off the engine when idle
"distanceZeroRPM": int, // distance run when fossil engine is off, RPM=0
"zeroRPMPeriod": int,
"idlePeriod": int,
// to measure the fuel vs speed to find out eco speed range
"avgSpeed" : int,
"airUsed" : int,
"duration" : int // to calculate fuel rate km/liter at speed of km/h
// maintain a table in the vehicle object to characterize
// the car's fuel performance
}
```
### tow_start
:::info
derived from simple vehicle event
**sent to Tripo**
:::
```jsonld
{
"eventType": "tow_start",
"dateTime": int,
"IMEI": string,
"longitude": string,
"latitude": string,
"accuracy": string,
"gpsSpeed" : number,
"heading" : number
}
```
### tow_end
:::info
derived from simple vehicle event
**sent to Tripo**
:::
```jsonld
{
"eventType": "tow_end",
"dateTime": int,
"IMEI": string,
"longitude": string,
"latitude": string,
"accuracy": string,
"gpsSpeed" : number,
"heading" : number
}
```
### keep_alive
>> YC, Timer in Info might not exist
:::info
derived from keep alive value added event
**sent to Tripo**
the report content is for Tripo to update the following data when parking
// 1. main battery voltage
// 2. the vehicle location
// 3. counting keep_alive reporting time
// 4. counting vehicle move reporting time // coming from **vehicle_move**
// Special conditions may happen when parking:
// 1. main battery low: resulting **low_battery** sent to Tripo and Alerto
// Tripo will expect that no more keep_alive will be sent again to save device power
// 2. **freq_vehicle_move** will trigger Alerto to notify the owner of the abnormality
// 3. Tripo will monitor if the keep_alive is received at the right interval.
// If the keep_alive is not sent for longer than 50% of the interval,
// e.g 15min with formal interval of every 10min.
// an alert shall be issued to Alerto to remind the abnormality
// One **Timer** service may be created to handle timer service.
// Tripo will start a timer to after 3 consecutive keep_alive message are received
// Tripo will reset the timer when receiving one keep_alive
:::
```jsonld
{
"eventType": "keep_alive",
"dateTime": int,
"IMEI": string,
"longitude": sting,
"latitude": string,
"accuracy": string,
"gpsSpeed" : number,
"heading" : number,
// battery voltage
"batVoltage": number,
// cellular Data for positioning
"mcc": string,
"mnc": string,
"cellularID": string,
"lac": string,
// neighboring wifi ap mac address
"wifiApMac" : [{"mac":string,"signal": number}]
}
```
### SimpleVehicleEvents
:::info
derived from vehicle simple event
**sent to Vehicol and Alerto**
// all the types share the same JSON content except the
// eventType is different:
//
// 1. engine over load = "engine_overload"
// 2. high RPM = "high_rpm"
// 3. high engine coolant = "high_coolant_temp"
// 4. low battery = “low_battery" // during engine off 電池蓄電能力降低
// 5. vehicle move = “vehicle_move"
// 6. alternator problem = “alternator_problem” // during engine on 發電機故障導致電壓低
// 7. frequent vehicle move = “freq_vehicle_move” // vehicle_move happens too freq
:::
```jsonld
{
"eventType": "// one of the above type ",
"dateTime": int,
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": string,
"gpsSpeed" : number,
"heading" : number
}
```
### vehicle_DTC
:::info
derived from DTC value-added event
**sent to Vehicol and Alerto**
// a new service carExpert is required to decode the DTC
// Notifian will consult carExpert to get description text for DTC
//
// DTC is has standard and proprietary definition
// internet Crawler may be required to collect Proprietary definition
// for different models and makes of ca
:::
```jsonld
{
"eventType": "vehicle_DTC",
"dateTime": int,
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": number,
"gpsSpeed" : number,
"heading" : number,
// DTC
"pendingDTC" : {"", … , ""}, // null if no pending DTC
"DTC" : {"",... , ""} // null if no DTC
}
```
### vehicle_DTC_clear
:::info
derived from DTC clear value-added event
**sent to Vehicol and Alerto**
// a new service carExpert is required to decode the DTC
// Notifian will consult carExpert to get description text for DTC
//
// DTC is has standard and proprietary definition
// internet Crawler may be required to collect Proprietary definition
// for different models and makes of cars
:::
```jsonld
{
"eventType": "vehicle_DTC_clear",
"dateTime": int,
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": number,
"gpsSpeed" : number,
"heading" : number,
// DTC
"pendingDTC" : boolean, // 1 if clearing pending DTC state; otherwise 0
"DTC" : boolean // 1 if clearing DTC state; otherwise 0
}
```
### vehicle_speeding
:::info
derived from Over Speed value-added event 118
**sent to Tripo、Alerto**
:::
```jsonld
{
"eventType": "vehicle_speeding",
"dateTime": int,
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": number,
"gpsSpeed" : number,
"heading" : number,
// SPEED
"limit" : number,
"curSpeed" : number
}
```
### eco_start/non_eco_start
:::info
derived from New ECO/Non-ECO Start value-added event 116/117
**sent to Drivo**
:::
```jsonld
{
"eventType": "eco_start|non_eco_start",
"dateTime": int,
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": number,
"gpsSpeed" : number,
"heading" : number,
// ECO DATA
"airUsed": number,
"duration": number
}
```
### vehicle_impact
:::info
derived from vehicle impact value-added event
**sent to Vehicol and Alert**
:::
```jsonld
{
"eventType": "vehicle_impact",
"dateTime": int,
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": double,
"gpsSpeed" : number,
"heading" : number,
// g-sensor data (10 sets)
"gsensorData":{
{
"gSensorDataAxis1": number,
"gSensorDataAxis2": number,
"gSensorDataAxis3": number
}, … ,
{
"gSensorDataAxis1": number,
"gSensorDataAxis2": number,
"gSensorDataAxis3": number
}
}
}
```
### DriverEvents
:::info
// could be one of the following types
// all the types share the same JSON content except the
// eventType is different:
//
// 1. vehicle idle = "vehicle_idle"
// 2. vehicle speeding = "vehicle_speeding" // 已移除 20200324
// 3. harsh RPM = "harsh_rpm"
// 4. harsh acc = "harsh_acc"
// 5. harsh brake = "harsh_brake"
// 6. harsh turn = "harsh_turn"
// 7. Eco Start = "eco_start" // 已移除 20200324
// 8. Eco Stop = "eco_stop"
// 9. non eco start = "non_eco_start" // 已移除 20200324
// 10. non eco stop = "non_eco_stop"
// 11. frequent harsh = “frequent_harsh”
:::
```jsonld
{
"eventType": "// one of the above type ",
"dateTime": int,
"IMEI": string,
"longitude": double,
"latitude": double,
"accuracy": number,
"gpsSpeed" : number,
"heading" : number
}
```
### driver_pedal_pattern
:::info
derived from L3 report
sent to Drivo、Vehicol
:::
```jsonld
{
"eventType": "driver_pedal_pattern",
"dateTime": int,
"IMEI": string,
// gps info
"longitude" : double,
"latitude" : double,
"accuracy" : number,
// pedal pattern
"observePeriod": number,
"idlePeriod" : number,
"accPeriod" : number,
"brakePeriod" : number,
"coastPeriod" : number,
"stopAndGoCount": number,
// fuel_stats
"idleAirUsed": number,
"distanceZeroRPM": number,
"zeroRPMPeriod": number,
"ecoRPMPeriod": number,
// Speed Report
"highSpeedPeriod": number,
"mediumSpeedPeriod": number,
"lowSpeedPeriod": number,
"speedDuration": {
"speed1": number,
"speed2": number,
"speed3": number,
"speed4": number,
"speed5": number,
"speed6": number,
"speed7": number,
"speed8": number,
"speed9": number,
"speed10": number,
"speed11": number,
"speed12": number,
"speed13": number,
"speed14": number,
"speed15": number,
"speed16": number,
"speed17": number
}
}
```
### DeviceEvent
#### gps_quality
:::info
derived from level 1 report
sent to Devicio
:::
```jsonld
{
"eventType": "gps_quality",
"dateTime": int,
"IMEI": string,
"longitude" : double,
"latitude" : double,
"satelliteNum" : number,
"accuracy" : number,
"confidenceLevel" : int
}
```
#### cellular_service
:::info
derived from level 2 report
sent to Devicio
:::
```jsonld
{
"eventType": "cellular_service",
"dateTime": int,
"IMEI": string,
"longitude" : double,
"latitude" : double,
"accuracy" : number,
"cellularID" : string,
"lac" : string,
"rat" : string, // could "2g","3g", or "4g"
"signalStrength": string,
"band" : number,
"ulThroughput" : number, //units: kbps
"dlThroughput" : number, //units: kbps
"ulDeltaAmount" : number, //units: KB
"dlDeltaAmount" : number, //units: KB
"ulAmountMonth2Now" : number, // units: KB, since the month begins
"dlAmountMonth2Now" : number // units: KB
}
```
#### cellular_connection
:::info
derived from Cellular Connection Value-added event
sent to Devicio
:::
```jsonld
{
"eventType": "cellular_connection",
"dateTime": int,
"IMEI": string,
"longitude" : double,
"latitude" : double,
"accuracy" : number,
"mcc": string,
"mnc": strinf,
"imsi": string,
"cellularID" : string,
"lac" : string,
"disconnectTime": number,
"disconnectReason" : string // check the VM protocol
}
```
#### wifi_station_list
:::info
derived from wifi connection value-added event
sent to Devicio
:::
```jsonld
{
"eventType": "wifi_station_list",
"dateTime": int,
"IMEI": string,
"longitude" : double,
"latitude" : double,
"accuracy" : number,
"wifiStationMac" : [{"mac":string}]
}
```
#### wifi_site_survey
:::info
derived from wifi site survey value added event
sent to Devicio
:::
```jsonld
{
"eventType": "wifi_site_survey",
"dateTime": int,
"IMEI": string,
"longitude" : double,
"latitude" : double,
"accuracy" : number,
"wifiApMac" : [{"mac":double,"signal": numbers}]
}
```
#### wifi_status
:::info
derived from wifi on/off value-added event
sent to Devicio and Alerto
:::
```jsonld
{
"eventType": "wifi_status",
"dateTime": int,
"IMEI": string,
"longitude" : double,
"latitude" : double,
"accuracy" : number,
// wifi internet status
"wifiStatus" : number
}
```
#### device_system
:::info
derived from device system value-added event ( to be defined )
sent to Devicio
device system event
// VM will send one value added event to report
// CPE temperature, CPU load, Memory and Flash load periodically
:::
```jsonld
{
"eventType": "device_system",
"dateTime": int,
"IMEI": string,
"longitude" : double,
"latitude" : double,
"accuracy" : number,
"cpuTemp" : number,
"cpuLoad" : number, // percentage number
"memLoad" : number,
"flashLoad" : number
}
```
#### device_firmware_change
:::info
derived from simple event engine start
// sent to Devicio
5. device firmware change
// when receiving firmware update success/failure MQTT
:::
```jsonld
{
"eventType": "device_firmware_change",
"dateTime": int,
"IMEI": string,
"longitude" : double,
"latitude" : double,
"accuracy" : number,
“changeStatus”: number, // 0 if success, 1 if failure
"newFwVersion" : string // only presents if success
}
```
#### device_config_change
:::info
derived from simple event engine start
// sent to Devicio
// 6. device config change
// when receiving firmware update success/failure MQTT
:::
```jsonld
{
"eventType": "device_config_change",
"dateTime": int,
"IMEI": string,
"longitude" : double,
"latitude" : double,
"accuracy" : number,
// Config change information
“changeStatus”: number, // 0 if success, 1 if failure
"newConfigVersion" : string
}
```
#### device_reboot
:::info
derived from simple event engine start
// sent to Devicio
// 7. device reboot
// when receiving device reboot value added event
:::
```jsonld
{
"eventType": "device_reboot",
"dateTime": int,
"IMEI": string,
"longitude" : double,
"latitude" : double,
"accuracy" : number,
"deviceMode" : string, // "tracker", "J1979","J1939", or "Ignition"
"obdProtocolCode" : number,
"modelName" : string,
"serialNum" : string,
"wifiMac" : string,
"fwVersion" : sting,
"configVersion" : string,
}
```
#### vehicle_change
:::info
// derived value-added report vehicle change
// sent to Devicio and Alerto
:::
```jsonld
{
"eventType": "vehicle_change",
"dateTime": int,
"IMEI": string,
"longitude" : double,
"latitude" : double,
"accuracy" : number,
// vehicle change info
“vehicleChangeType” : number,
“vinLockStatus” : number,
"newVIN" : string,
"oldVIN" : string
}
```
#### calibration_status
:::info
derived from value-added event calibration complete
// sent to Devicio
:::
```jsonld
{
"eventType": "calibration_status",
"dateTime": int,
"IMEI": string,
"longitude" : double,
"latitude" : double,
"accuracy" : number,
// calibration status
"deviceMode" : "", // "tracker", "J1979","J1939", or "ignition"
"accOnVoltage" : float,
"highLowVoltage" : float,
"lowHighVoltage" : float,
"devicePosX" : number,
"devicePosY" : number,
"devicePosZ" : number,
"cosThetaX" : number
}
```
#### ble_data
:::info
derived from L1 report tmps fields
// sent to Sensol
:::
```jsonld
{
"eventType": "ble_data",
"dateTime": int,
"IMEI": string,
// gps info
"longitude" : double,
"latitude" : double,
"accuracy" : number,
// ble info
"iBeacon" :
[
{
"uuidByte0" : number,
"uuidByte7" : number,
"major" : string,
"minor" : string
}
]
}
```
### cellular_loss
:::info
derived from MQTT Broker (LWT)
**sent to Devicio, Alerto**
:::
```jsonld
{
"eventType": "cellular_loss",
"dateTime": int,
// system time when received LWT
"IMEI": string
}
```
### device_system_info
:::info
derived from L3 report
**sent to Devicio**
:::
```jsonld
{
"eventType": "device_system_info",
"dateTime": int,
"IMEI": string,
// gps info
"longitude" : string,
"latitude" : string,
"accuracy" : number,
"maxCpuTemperature" : number,
"cpuLoad" : number,
"ramLoad" : number
}
```