Yes, that is a protocol. Doesn’t look too bad.
If you are only sending "REQ’ commands your transmit command is very similar for all of them, the only change is the command number and the checksum.
How are you calculating the checksum? It would be good to have the strategy calculate this. This way you can verify a good checksum on the response.
The response processing will be more difficult than the request since it can have a variable amount of bytes and you may want to handle some unit conversion.
On a quick look, I would create subroutines for the following:
Calculating the checksum
Building the command string
Transmit the command and return response payload (this would validate the response checksum and return just the n d-bytes through d-byte n values)
A process response subroutine for each command type you want to handle - so one to handle temperatures, one to handle status, one to handle flow, etc.
Each of these subroutines would be fairly small and helps break down the problems into smaller steps. Don’t forget that subroutines can call other subroutines. The basic rule for subroutines is that if you find yourself creating the same flow logic multiple times, then you probably can use a subroutine.
Let me know if you need any specific help.