Device Configuration Packet: Difference between revisions
Tag: Manual revert |
|||
| Line 346: | Line 346: | ||
const timezoneRaw = bitsToSignedInt(bits.slice(112, 120)); | const timezoneRaw = bitsToSignedInt(bits.slice(112, 120)); | ||
const offsetMins = timezoneRaw * 15; | const offsetMins = timezoneRaw * 15; | ||
const localDate = new Date((timestamp + offsetMins * 60) * 1000).toISOString().replace("T", " ").replace(".000Z", ""); | |||
const localDate = new Date((timestamp + offsetMins * 60) * 1000) | |||
show("DateTime", timestamp); | show("DateTime", timestamp); | ||
show("TimeZone", `UTC${offsetMins >= 0 ? '+' : ''}${offsetMins / 60}`); | show("TimeZone", `UTC${offsetMins >= 0 ? '+' : ''}${offsetMins / 60}`); | ||
| Line 366: | Line 361: | ||
show("OneWireSensorCount", bitsToInt(bits.slice(150, 153))); | show("OneWireSensorCount", bitsToInt(bits.slice(150, 153))); | ||
show("OdometerMode", bitsToInt(bits.slice(153, 154))); | show("OdometerMode", bitsToInt(bits.slice(153, 154))); | ||
show("SpeedThreshold", bitsToInt(bits.slice(154, 163))); | |||
show("HAT", bitsToInt(bits.slice(163, 175))); | |||
show("HBT", bitsToInt(bits.slice(175, 187))); | |||
show("RTT", bitsToInt(bits.slice(187, 196))); | |||
show("TAT", bitsToInt(bits.slice(196, 205))); | |||
show(" | show("ImmobilizerStatus", bitsToInt(bits.slice(205, 206))); | ||
show("ImmobilizerSpeed", bitsToInt(bits.slice(206, 215))); | |||
show(" | |||
show(" | |||
show(" | |||
show(" | |||
show(" | |||
show("DigitalInStatus", bitsToInt(bits.slice(215, 219))); | show("DigitalInStatus", bitsToInt(bits.slice(215, 219))); | ||
show("DigitalOutStatus", bitsToInt(bits.slice(219, 221))); | show("DigitalOutStatus", bitsToInt(bits.slice(219, 221))); | ||
| Line 406: | Line 382: | ||
show("APN", bitsToAscii(apnBits)); | show("APN", bitsToAscii(apnBits)); | ||
// End Byte and CRC (last 2 bytes) | |||
const endByte = hex.slice(-4, -2); | const endByte = hex.slice(-4, -2); | ||
const crc = hex.slice(-2); | const crc = hex.slice(-2); | ||
show("End Byte", String.fromCharCode(parseInt(endByte, 16))); | show("End Byte", String.fromCharCode(parseInt(endByte, 16))); | ||
show("CRC", `0x${crc}`); | show("CRC", `0x${crc}`); | ||
show("CRC Status", "Valid"); | show("CRC Status", "Valid"); // CRC logic can be added | ||
} | } | ||
</script> | </script> | ||
</body> | </body> | ||
</html> | </html> | ||
Latest revision as of 15:28, 21 November 2025
| Field | Size (bits) | Bit Range | Description | Breakdown |
|---|---|---|---|---|
| Header (10 Bytes) | ||||
| Start byte | 8 | 0 - 7 | Starting character $ | ASCII value 36 |
| Data length | 12 | 8 - 19 | 2-byte length of the data following the header | |
| Number of data packets | 5 | 20 - 24 | Number of packets | 0–32 |
| IMEI | 50 | 25 - 74 | Unique device identifier | |
| Packet Type | 5 | 75 - 79 | Type of packet | 04 - Device configuration packet |
| Data | ||||
| Time | 32 | 80-111 | UTC Timestamp | UTC time in seconds |
| Timezone | 8 | 112-119 | Timezone in quarter-hours | 22 = +5:30 (22 × 15min = 330min = 5.5hr) |
| IGN Source | 2 | 120-121 | Source of ignition detection | 0 - IGN PIN, 1 – Vibration, 2 - Voltage, 3 - GPS |
| Cell Operator | 4 | 122-125 | Operator name | |
| Fuel Sensor Count | 2 | 126-127 | Number of fuel sensors | |
| Fuel Sensor Name | 4 | 128-131 | Fuel Sensor Name | |
| Fuel Sensor Baudrate | 12 | 132-143 | up to 115200 | |
| Fuel Sensor Mode | 2 | 144-145 | Request/ Passive | |
| Onewire Status | 1 | 146 | Enable or disable | |
| Onewire Sensor Type | 3 | 147-149 | Name of the sensor | |
| Onewire Sensor Count | 3 | 150-152 | Number of onewire sensors | 1,2 or 3 |
| Odometer Mode | 1 | 153 | 0 or 1 (Accumulated or Differential) | |
| Speed Threshold | 9 | 154-162 | Configured Speed limit in km/h | 0–360 |
| HAT | 12 | 163-174 | Configured Harsh acceleration Threshold | 50–3500 |
| HBT | 12 | 175-186 | Configured Harsh Breaking Threshold | 50–3500 |
| RTT | 9 | 187-195 | Configured Rash Turn Threshold | 5–480 |
| Tilt Angle Threshold | 9 | 196-204 | Configured Tilt Angle Threshold | 5–359 |
| Immobilizer Status | 1 | 205 | ON/OFF Status | 0 - OFF, 1 - ON |
| Immobilizer Speed | 9 | 206-214 | ||
| Digital Input Status | 4 | 215-218 | 3 | |
| Digital Output Status | 2 | 219-220 | 0–3 | |
| Analog Input Status | 2 | 221-222 | 0 or 1 | |
| SMS M1 | 51 | 223-273 | MSB 1 - country code included, MSB 0 - no country code | Remaining 50 bits = mobile number |
| SMS M2 | 51 | 274-324 | Same format as SMS M1 | |
| Number of IPs | 3 | 325-327 | 0–5 | |
| IMOBSRC | 3 | 328-330 | Immobilizer source | |
| APN Length | 5 | 331-335 | Length in bytes | |
| APN | Variable | 336 (336+N*8-1) | Access Point Name | Length defined by APN length |
| Tail (2 Bytes) | ||||
| End Character | 8 | 0 - 7 | Ending character * | ASCII value 42 |
| CRC | 8 | 8 - 15 | XOR CRC from $ to * | Excludes $ and * |
Sample Packet
{HEX : "2402e0e21aeb7abfd58468ac2cec160400002408c03203c1e168280100357c8b0712a00000000000020e61697274656c677072732e636f6d2aea" "imei": 862942074896044, "packet_type": 4, "no_packets": 1, "dateTime": 1756114156, "timezone": 22, "dateTime_tz": "2025-08-25 14:59:16", "ign_source": 0, "cell_op": 1, "fs_count": 0, "fs_name": 0, "fs_baudrate": 0, "fs_mode": 0, "onewire_status": 1, "onewire_type": 1, "onewire_count": 0, "odometer_mode": 0, "speed_threshold": 70, "hat": 25, "hbt": 30, "rtt": 30, "tilt_angle_threshold": 45, "imbz_status": 0, "immobilizer_speed": 20, "di_status": 0, "do_status": 0, "ai_status": 0, "sms_m1": "+918891011146", "sms_m2": "+0", "no_ips": 2, "imobsrc": 0, "apn_length": 14, "apn": "airtelgprs.com", "error_code": 0}
Device Configuration Packet Parser
Parsed Output:
| Field | Value |
|---|