It might be helpful to flush your input before you put the request. I.e.,
ser.read(ser.inWaiting())
to read out all bytes which are waiting. Then, hoping that no further bytes are being sent, you can send your command:
ser.write(bytes([0x05, 0x69, 0x02, 0x0A, 0x86]))
This is supposed to make sure that all bytes which are coming next are an answer to this command.
Then read data until you get your 107:
found = False
buffer = '' # what is left from the previous run...
while not found:
rd = ser.read(50)
buffer += rd
sp = buffer.split(chr(107), 1)
if len(sp) == 2:
pkt = chr(107) + sp[1] # candidate for a valid packet
if pkt[1] == chr(105): #
while len(pkt) < 107: # TODO add a timeout condition here...
rd = ser.read(107 - len(pkt))
pkt += rd
found = True
else:
buffer = pkt[1:] # process this further...
else: # no 107 found; empty the buffer.
buffer = ''
# Now we have a pkt of 107 bytes and can do whatever we want with it.