import time import serial port = serial.Serial("/dev/ttyUSB0", 2400) def decode_packet(bytes): value = (ord(bytes[2]) << 16) | (ord(bytes[1]) << 8) | ord(bytes[0]) first = value & 0x555555 second = ((value & 0xAAAAAA) >> 1) ^ 0x555555 if first != second: return None result = 0 for i in range(12): if first & (1 << (i * 2)): result |= (1 << i); return result packets = [] start = time.time() prevtime = start prev_packet = start while True: byte = port.read(1) if byte == '\xCC': packet = port.read(3) #print "Got CC", ' '.join([hex(ord(c)) for c in packet]) if decode_packet(packet) is not None: packets.append(packet) packets = packets[-16:] prev_packet = time.time() if time.time() - prev_packet > 0.1: if packets and packets.count(packets[-1]) >= 2: packet = packets[-1] count = packets.count(packet) packets = [] temp = decode_packet(packet) if time.time() - prevtime > 0.2: print '\r', "%5d" % int(time.time() - start), "%02.2f" % (temp / 16.0), "\t", count, " " prevtime = time.time() print '\r', "%5d" % (int(time.time() - prevtime)), len(packets),