for a start. There's coverage of how to receive a message that is marked at the beginning and end as yours is.
This function
might make short work of your task, or shorter anyway.
Check for availability and read single bytes by hand until you see an STX, which may be a real STX. Then read until you get the ETX or the readBhtesUntil() times out.
Some examination of the collected characters would confirm the reception of a true packet. Convert the eight or as many as 13 byte pairs that make up your data.
If you get ambitious, the checksum could be, um, checked.