Looking at the data shows it to be nicely consistent, but how is it formatted?

Packet Format?

The SPIRIT1 datasheet gives details of 3 different packet formats that can be chosen.

  • STack
  • Wireless M-Bus
  • Basic

Wireless M-Bus packets would have a postamble but the packets being detected do not have a sequence of bytes that would indicate such a thing.

#Assumption #3 - It's not using Wireless M-Bus packets.

The preamble for both remaining packet formats is a number of bytes consisting of 10101010. Here are the first 41 bytes of the first 6 packets detected by URH.

0                                       40
-----------------------------------------
01010101010101010101010101010101010101010
01010101010101010101010101010101010101010
01010101010101010101010101010101010101010
01010101010101010101010101010101010101010
01010101010101010101010101010101010101010
01010101010101010101010101010101010101010

 10101010
         10101010
                 10101010
                         10101010
                                 10101010

This appears to be a 5 byte preamble.

Assumption #4 - There is a 5 byte preamble configured.

Both packet formats next specify a number (1 - 4) of sync words. Each is 1 byte, so looking at the next 32 bytes we see,

0                              31
--------------------------------
01011010010001110101001001010000
01011010010001110101001001010000
01011010010001110101001001010000
01011010010001110101001001010000
01011010010001110101001001010000
01011010010001110101001001010000

01011010                          = 0x5A
        01000111                  = 0x47
                01010010          = 0x52
                        01010000  = 0x50

These are stable for the messages which appears to suggest that they use a 4 sync words.

Assumption #5 - There are 4 sync words which are 0x5a475250.

Both packet formats next have an optional length parameter which is listed as between 0 and 16 bits. The next 16 bits we encounter are

0              15
----------------
0011110111101110
0011111111101001
0011111111101001
0011111111101001
0011110111101110
0011111111101001

For comparison, the lengths of the detected packets are

1: 552 bits = 69 bytes
2: 264 bits = 33 bytes
3: 264 bits = 33 bytes
4: 264 bits = 33 bytes
5: 552 bits = 69 bytes
6: 264 bits = 33 bytes

It doesn't look like we have those lengths contained in the 16 bits.

Assumption #6 - There is no length field.

Could this be an address field? We have a sender and receiver involved in the conversation so we could have 2 different addresses. Each would be 8 bits.

0      7
--------
00111101  = 0x3d
00111111  = 0x3f
00111111  = 0x3f
00111111  = 0x3f
00111101  = 0x3d
00111111  = 0x3f

We do appear to only have 2 values, so this could well be an address field. I will need to check with a different controller and receiver to see if there is any difference.

Assumption #7 - We have an address field.

If the packet format was STack we should have a destination address as the next 8 bits. Do we?

0      7
--------
11101110  = 0xee
11101001  = 0xe9
11101001  = 0xe9
11101001  = 0xe9
11101110  = 0xee
11101001  = 0xe9

Again we only have 2 values, but if these are source addresses then I would expect them to relate to the previous destination address, which they obviously don't. Additionally the STack packet format has 3 bits that would not fit with what we are seeing being an exact multiple of 8.

Assumption #7 - We have a Basic Packet format.

More to come...

Suggestions or assistance always welcome!