Hi!
Packets sent to the destination address 0x0015 with command 0x0100 are so called „block type packets“. Normally you can just ignore those block type packets because all information contained within should be contained in the „normal“ packets as well. And their structure differs quite a lot from „normal“ packets, too, so they are more difficult to parse.
Normal packets contain payload in their frame data that can be decoded according to the VBus protocol specification and / or the VBus specification file (VSF). You simply look up the combination of destination address, source address and command and find a byte-by-byte description of the payload.
Block type packets serve a different purpose. They are intended to be consumed by attached generalized accessories like a SD3 smart display, a VBus/PWM converter or an alarm module AM1. And instead of putting support for each and every controller into those accessories, block type packets are used to transmit the information in a device-independent way.
I have used a small program to decode the block type information stored in your hex dump and got the following:
- 00_0015_0000_10_0100_02_01_4
- 00_0015_0000_10_0100_02_01_4_004_2_0: name = "Temperature sensor 1", rawValue = 34, textValue = "34.0 °C"
- 00_0015_0000_10_0100_02_01_4_006_2_0: name = "Temperature sensor 2", rawValue = 21, textValue = "21.0 °C"
- 00_0015_0000_10_0100_02_01_4_008_2_0: name = "Temperature sensor 3", rawValue = 61, textValue = "61.0 °C"
- 00_0015_0000_10_0100_02_01_4_010_2_0: name = "Temperature sensor 4", rawValue = -999.9000000000001, textValue = "-999.9 °C"
- 00_0015_0000_10_0100_01_08_4
- 00_0015_0000_10_0100_01_08_4_004_1_0: name = "Pump speed relay 1", rawValue = 35, textValue = "35%"
- 00_0015_0000_10_0100_01_08_4_005_1_0: name = "Pump speed relay 2", rawValue = 100, textValue = "100%"
- 00_0015_0000_10_0100_01_08_4_006_1_0: name = "Pump speed relay 3", rawValue = 0, textValue = "0%"
- 00_0015_0000_10_0100_01_08_4_007_1_0: name = "Pump speed relay 4", rawValue = 0, textValue = "0%"
- 00_0015_0000_10_0100_02_0A_1
- 00_0015_0000_10_0100_02_0A_1_004_2_0: name = "Temperatur Kollektor", rawValue = 34, textValue = "34.0 °C"
- 00_0015_0000_10_0100_02_0A_1_006_2_0: name = "Temperatur Speicher", rawValue = 21, textValue = "21.0 °C"
- 00_0015_0000_10_0100_02_0A_1_008_4_0: name = "Heat quantity", rawValue = 0, textValue = "0 Wh"
- 00_0015_0000_10_0100_01_0B_1
- 00_0015_0000_10_0100_01_0B_1_004_4_0: name = "Error mask", rawValue = 0, textValue = "0"
So the payload stored in your block type packet included information of four different types:
- A block with a list of temperatures measured by the controller
- A block with a list of pump speeds calculated by your controller (e.g. for a VBus/PWM converter)
- A block of two temperatures and a heat quantity (for the SD3 smart display)
- A block containing the error mask (for the AM1 alarm module)
Best regards,
Daniel