Heater Info 2 (0x22)

Signal ID: 0x22 | PID: 0xE2 | Direction: Slave → Master

Reports power supply status, boiler state, and system flags.

Frame Layout

Frame: 8D F0 31 04 FF FF FF FF
       │  │  │  │  └──┴──┴──┴─── Bytes 4-7: Padding, always 0xFF
       │  │  │  └─────────────── Byte 3: Status
       │  │  └────────────────── Byte 2: Boiler state
       │  └───────────────────── Byte 1: System flags
       └──────────────────────── Byte 0: Voltage / 10

Byte 0: Voltage

voltage_V = byte0 / 10.0
ExampleVoltage
0x7711.9V
0x8213.0V
0x8513.3V

Byte 1: System Flags

Byte 1: 0xF0 = 0b11110000
                 │││││││└─ Bit 0: Unknown (always 0)
                 ││││││└── Bit 1: Unknown (always 0)
                 │││││└─── Bit 2: Unknown (always 0)
                 ││││└──── Bit 3: Unknown (always 0)
                 │││└───── Bit 4: Heating commanded
                 ││└────── Bit 5: 230V AC present
                 │└─────── Bit 6: Heater enabled
                 └──────── Bit 7: Room heating required

Bit 4: Heating Commanded

Set when heating is commanded. Turns on slightly after bit 6. Does not indicate actual combustion - only that heating has been requested.

heating_commanded = (byte1 & 0b0001_0000) != 0

Bit 5: 230V AC Supply

Set when 230V AC power is connected to the heater.

ac_230v_present = (byte1 & 0b0010_0000) != 0

Bit 6: Heater Enabled

Set when heater operation is enabled/commanded. Does not indicate physical operation (combustion fan, flame). This bit can be set even when the heater is completely silent because no actual heating is required.

heater_enabled = (byte1 & 0b0100_0000) != 0

Bit 7: Room Heating Required

Set only when room heating is actually required (setpoint > measured temperature). Not set for water-only heating or when room setpoint is at or below measured temperature.

room_heating_required = (byte1 & 0b1000_0000) != 0

Observed Values

ValueBinaryBit 4Bit 5Bit 6Bit 7Context
0x000000 0000----Idle, heater off, no 230V
0x200010 0000---Standby, 230V connected
0x400100 0000---Heater enabled, no 230V
0x500101 0000--Heating commanded, no 230V
0x600110 0000--Heater enabled, with 230V
0xD01101 0000-Room heating required, no 230V
0xF01111 0000Room heating required, with 230V

Startup Sequence (Room Heating with 230V)

Observed during heater startup:

  1. 0x20 - 230V standby
  2. 0x60 - Heater enabled (bit 6 set)
  3. 0xF0 - Room heating required (bits 4,7 set)

Water-Only Heating Sequence

When only water heating is commanded (no room heating):

  1. 0x00 or 0x20 - Idle (depending on 230V)
  2. 0x40 or 0x60 - Heater enabled
  3. 0x50 - Heating commanded (bit 7 never set)

Note: Bit 7 is only set when room heating is required (setpoint > measured). Water-only heating never sets bit 7.

Room Target Below Current Temperature

When room setpoint is set below current temperature:

  1. 0x00 - Idle
  2. 0x40 - Heater enabled
  3. 0x50 - Heating commanded (bit 7 NOT set, heater silent)

The heater shows 0x50 but remains completely silent (no fan, no combustion) because bit 7 is not set - actual room heating is not required.

Byte 2: Boiler State

Byte 2: 0x31 = 0b00110001
                 │││││││└─ Bit 0: Heating in progress
                 ││││││└── Bit 1: Unknown (always 0)
                 │││││└─── Bit 2: Unknown (always 0)
                 ││││└──── Bit 3: Unknown (always 0)
                 │││└───── Bit 4: Water heating enabled
                 ││└────── Bit 5: Hot level
                 │└─────── Bit 6: Unknown (always 0)
                 └──────── Bit 7: Unknown (always 0)

Bit 0: Heating in Progress

Set when boiler is actively heating water. Cleared when target temperature reached.

heating_in_progress = (byte2 & 0b0000_0001) != 0

Bit 4: Water Heating Enabled

Always set on Combi heaters since the burner is located inside the boiler, meaning any heating operation also heats water. This bit likely indicates that water heating is active/enabled.

water_heating_enabled = (byte2 & 0b0001_0000) != 0

Bit 5: Hot Level

Set when Hot temperature (~60°C) is selected. Cleared for Eco temperature.

hot_level = (byte2 & 0b0010_0000) != 0

Observed Values

ValueBinaryBit 0Bit 4Bit 5State
0x100001 0000--Eco, target reached (~40°C)
0x110001 0001-Eco, heating water
0x300011 0000-Hot, target reached (~60°C)
0x310011 0001Hot, heating water

Byte 3: Status

Byte 3: 0x05 = 0b00000101
                 │││││││└─ Bit 0: Error code present
                 ││││││└── Bit 1: Unknown (always 0)
                 │││││└─── Bit 2: OK / Ready
                 ││││└──── Bit 3: Unknown (always 0)
                 │││└───── Bit 4: Unknown (always 0)
                 ││└────── Bit 5: Unknown (always 0)
                 │└─────── Bit 6: Unknown (always 0)
                 └──────── Bit 7: Unknown (always 0)

Bit 0: Error Code Present

Set when an error code is available via diagnostic query (SID 0xB2, ID 0x23). Requires user acknowledgment to clear.

error_present = (byte3 & 0b0000_0001) != 0

Bit 2: OK / Ready

Set when heater is ready for operation. Cleared during transient fault conditions (e.g., sensor temporarily disconnected while idle).

ok_ready = (byte3 & 0b0000_0100) != 0

Observed Values

ValueBinaryBit 0Bit 2Context
0x000000 0000--Transient fault (sensor unplugged while idle)
0x010000 0001-Operational fault with error code
0x040000 0100-Normal operation
0x050000 0101Window open / Error pending acknowledgment

Fault Sequences

Sensor unplugged while idle (no error code):

0x04 → 0x00 → 0x04 (auto-recovery on reconnect)

Sensor unplugged during heating (error code generated):

0x04 → 0x01 → 0x05 (error persists after reconnect, needs ack)

Ignition failure:

0x04 → 0x00 → 0x01 (error code reported)

Bytes 4-7: Reserved

Always 0xFF FF FF FF.

Example Frames

Idle, no 230V:
82 00 10 04 FF FF FF FF
│  │  │  │
│  │  │  └─ Status: Normal
│  │  └──── Boiler: Eco reached
│  └─────── Flags: 0x00 (idle)
└────────── Voltage: 13.0V

230V Standby:
84 20 10 04 FF FF FF FF
│  │  │  │
│  │  │  └─ Status: Normal
│  │  └──── Boiler: Eco reached
│  └─────── Flags: 0x20 (230V connected)
└────────── Voltage: 13.2V

Heater starting, no 230V:
82 40 10 04 FF FF FF FF
│  │  │  │
│  │  │  └─ Status: Normal
│  │  └──── Boiler: Eco reached
│  └─────── Flags: 0x40 (starting)
└────────── Voltage: 13.0V

Heater starting, 230V:
84 60 10 04 FF FF FF FF
│  │  │  │
│  │  │  └─ Status: Normal
│  │  └──── Boiler: Eco reached
│  └─────── Flags: 0x60 (starting + 230V)
└────────── Voltage: 13.2V

Water heating active, no 230V:
8D 50 11 04 FF FF FF FF
│  │  │  │
│  │  │  └─ Status: Normal
│  │  └──── Boiler: Eco heating
│  └─────── Flags: 0x50 (water heating)
└────────── Voltage: 14.1V

Room heating active, no 230V:
8D D0 10 04 FF FF FF FF
│  │  │  │
│  │  │  └─ Status: Normal
│  │  └──── Boiler: Eco reached
│  └─────── Flags: 0xD0 (room heating)
└────────── Voltage: 14.1V

Room heating active, 230V:
81 F0 10 04 FF FF FF FF
│  │  │  │
│  │  │  └─ Status: Normal
│  │  └──── Boiler: Eco reached
│  └─────── Flags: 0xF0 (room heating + 230V)
└────────── Voltage: 12.9V