in transform_binary_payload/src-payload-decoders/python/globalsat_lt100.py [0:0]
def dict_from_payload(base64_input: str, fport: int = None):
decoded = base64.b64decode(base64_input)
if DEBUG_OUTPUT:
print(f"Input: {decoded.hex().upper()}")
# Get device type from byte 0
device_type = decoded[0]
# Get gps fix from byte 1, bit 6-7
gps_fix_flag = (decoded[1] & 0b11000000) >> 6
gps_fix = "unknown"
if gps_fix_flag == 0b00:
gps_fix = "not fix"
elif gps_fix_flag == 0b01:
gps_fix = "2D"
elif gps_fix_flag == 0b10:
gps_fix = "3D"
# Get report type from byte 1, bit 0-5
report_type_flag = (decoded[1] & 0b00111111)
report_type = "unknown"
if report_type_flag == 2:
report_type = "Periodic mode report"
elif report_type_flag == 4:
report_type = "Motion mode static report"
elif report_type_flag == 5:
report_type = "Motion mode moving report"
elif report_type_flag == 6:
report_type = "Motion mode static to motion report"
elif report_type_flag == 7:
report_type = "Motion mode moving to static report"
elif report_type_flag == 14:
report_type = "SOS alarm report"
elif report_type_flag == 15:
report_type = "Low battery alarm report"
elif report_type_flag == 17:
report_type = "Power on (temperature)"
elif report_type_flag == 19:
report_type = "Power off (low battery)"
elif report_type_flag == 20:
report_type = "Power off (temperature)"
# Get battery capacity from byte 2
battery_capacity = int(decoded[2])
# Get latitude from byte 3-6
lat = ((decoded[3] << 24) | (decoded[4] << 16) |
(decoded[5] << 8) | (decoded[6]))
lat = helpers.bin32dec(lat) / 1000000
# Get longitude from byte 7-10
long = ((decoded[7] << 24) | (decoded[8] << 16) |
(decoded[9] << 8) | (decoded[10]))
long = helpers.bin32dec(long) / 1000000
# Output
result = {
"deviceType": device_type,
"gpsFix": gps_fix,
"reportType": report_type,
"batteryCapacity": battery_capacity,
"lat": lat,
"long": long
}
if DEBUG_OUTPUT:
print(f"Output: {json.dumps(result,indent=2)}")
return result