from hexdump import hexdump import binascii packet = \ b"\xF0\x52\x00\x6E\x45\x00\x00\x09\x00\x08\x00\x50\x06\x04\x50\x54\x43\x46\x4C\x01\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x57\x46\x00\x20\x53\x70\x61"+\ b"\x63\x65\x20\x00\x20\x20\x00\x00\x08\x10\x00\x00\x00\x07\x50\x00\x00\x08\x20\x00\x00\x00\x08\x70\x00\x00\x09\x00\x20\x00\x00\x08\x54\x58\x4A\x02\x31\x54\x00\x00\x00\x03\x49\x57\x01\x5B\x03\x67\x03\x0F"+\ b"\x03\x3A\x45\x02\x70\x0E\x67\x17\x70\x79\x02\x35\x02\x3D\x31\x30\x14\x3F\x4E\x11\x63\x0C\x63\x0A\x7A\x5F\x03\x41\x03\x01\x03\x0A\x03\x3A\x4A\x02\x4C\x03\x74\x03\x40\x77\x03\x13\x03\x4E\x02\x49\x13\x3E"+\ b"\x4B\x02\x35\x02\x3D\x03\x4A\x55\x03\x62\x03\x65\x03\x42\x03\x6A\x13\x03\x4F\x03\x54\x03\x45\x77\x03\x13\x03\x68\x02\x45\x02\x60\x37\x01\x42\x00\x00\x54\x58\x00\x45\x31\x44\x00\x00\x00\x43\x00\x75\x74"+\ b"\x74\x69\x6E\x67\x20\x00\x73\x6F\x75\x6E\x64\x20\x73\x00\x75\x69\x74\x61\x62\x6C\x65\x00\x20\x66\x6F\x72\x20\x6C\x61\x00\x74\x65\x20\x31\x30\x27\x73\x00\x20\x41\x6D\x65\x72\x69\x63\x00\x61\x6E\x20\x66"+\ b"\x75\x6E\x6B\x00\x20\x77\x69\x74\x68\x20\x61\x00\x75\x74\x6F\x2D\x77\x61\x68\x00\x2E\x00\x00\x00\x45\x44\x54\x20\x42\x10\x00\x00\x00\x41\x00\x31\x00\x10\x6C\x08\x00\x07\x20\x00\x00\x00\x00\x00\x00\x00"+\ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x0E\x12\x60\x00\x00\x00\x40\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x21\x00\x00\x42\x50\x47\x00\x00\x00\x20\x00\x28"+\ b"\x08\x08\x5C\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x10\x22\x00\x40\x00\x0C\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x61\x00\x00\x12\x10\x16\x74"+\ b"\x00\x02\x10\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x10\x00\x00\x50\x08\x00\x00\x07\x40\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x52"+\ b"\x4D\x32\x20\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x0C\x20\x42\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x4E\x41\x4D\x45\x20\x00"+\ b"\x00\x00\x00\x57\x46\x20\x53\x70\x61\x00\x63\x65\x20\x20\x20\x20\x20\x00\x20\x20\x20\x20\x20\x20\x20\x00\x20\x20\x20\x20\x20\x20\x20\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+\ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+\ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+\ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+\ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+\ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+\ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+\ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+\ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+\ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3A\x68\x4B\x45\x0F\xF7" def unpack(packet): # Unpack data 7bit to 8bit, MSBs in first byte data = bytearray(b"") loop = -1 hibits = 0 for byte in packet: if loop !=-1: if (hibits & (2**loop)): data.append(128 + byte) else: data.append(byte) loop = loop - 1 else: hibits = byte # do we need to acount for short sets (at end of block block)? loop = 6 return(data) #------------------- length = int(packet[12]) * 128 + int(packet[11]) data = unpack(packet[13:13 + length + int(length/7) + 1]) print("length", length) print(hexdump(data)) # confirm checksum (last 5 bytes of packet) checksum = packet[-5] + (packet[-4] << 7) + (packet[-3] << 14) \ + (packet[-2] << 21) + ((packet[-1] & 0x0F) << 28) if (checksum ^ 0xFFFFFFFF) != binascii.crc32(data): print("Checksum error", hex(checksum)) f = open("temp.zptc", "wb") f.write(data) f.close