LWZ 130 display protocol

The Stiebel Eltron LWZ 130 mechanical ventilator comes with a remote display that shows the current fan setting, temperature, and other settings, and also lets the user change the current fan setting or temporarily boost the fan.

I plan to connect this to Home Assistant, and this page covers the protocol and decodes some of the fields.

The display is connected by a four wire 5 V I2C bus where the in-wall unit acts as the master and sends write commands to the display. The bus frequency is 15 kHz. The pins are SCL, GND, VCC (+5 V), and SDA.

All writes are to address 0. Some example transactions are:

  • Level 0: F7 20 0B 20 6D 00 00 00 3F 00 5B 5B 7D 15 55 04 00 00 00 10 00 00 05 01 00 00 00 C7
  • Level 1: F7 20 0B 20 6D 00 00 00 06 00 5B 5B 7F 15 55 00 00 00 00 10 00 00 05 01 00 00 00 89
  • Level 2: F7 20 0B 20 6D 00 00 00 5B 00 5B 5B 7D 15 55 00 00 00 00 10 00 00 05 01 00 00 00 83
  • Level 3: F7 20 0B 20 6D 00 00 00 4F 00 5B 5B 7D 15 55 00 00 00 00 10 00 00 05 01 00 00 01 4E

In all cases the display was showing the current temperature and had the ‘check filter’ symbol lit. Level 0 also lights a ‘power’ segment on the display, and level 3 also lights a ‘boost’ LED. Running reveng shows that the last byte is a frame check with width=8 poly=0x49 init=0x00 refin=false refout=false xorout=0x00 check=0x6b residue=0x00 name=(none), which has the same polynomial as CRC-8/GSM-B.

The 8th byte is the current fan speed encoded as a 7 segment display. 3F is the 6 segments of 0, 06 is the 2 segments of 1, 5B is the 5 segments of 2, and 4F is the 5 segments of 3. This matches the table at https://hosteng.com/dmdhelp/content/instruction_set/SEG_Hex_BCD_to_7_Segment_Display.htm.

Given this, the 5B 5B 7D is the current temperature of 22.6 Celsius.

So the update display command is:

  • F7 - update display command
  • 32 - constant across command types
  • 0B 20 6D 00 00 00 - unknown
  • 3F - fan speed as a 7 segment display
  • 00 - unknown
  • 5B 5B 7D - temperature as three 7 segment display digits
  • 15 55 - unknown
  • 04 - 04 if the ‘power off’ segment is set
  • 00 00 00 10 00 00 05 01 00 00 - unknown
  • 01 - 01 if the ‘boost’ LED is on
  • C7 - CRC-8

Keys

  • Wheel clockwise: E3 30 20 00 00 02 92
  • Wheel anti-clockwise: E3 30 20 00 00 01 49
  • Boost: E3 20 10 3B 00 00 CF

reveng confirms that the last byte is the same frame check as above.

It’s unclear which unit which writes which byte. It’s likely that the in-wall sends the E3 as a “poll keys”.

Avatar
Michael Hope
Software Engineer