Configured my ESPHome with MCP2515 CAN-Bus for Stiebel Eltron heating pump

Hello all,

stiebel eltron script was running well for about 3 years in home assistant.
Today I done update for HA, core and ESPHome Builder und the communication to heat pump doesnt worked. I got some canbus errors.

In this forum I found same issue and solution was to set the canbus setting:
data_rate: 2MHZ. But why it was working for years without this setting?

  • Core 2026.3.1
  • Supervisor 2026.03.0
  • Operating System17.1
  • ESPHome Device Builder 2026.2.4

Did you need a special adapter for that? I wanted to integrate my Stiebel Eltron WWK-I 300 Plus into Home Assistant.Is there a German chat room for this here, too?

Hi Fastbag,
the most people here speaking german :slight_smile:

You can use this script and hardware also with Stiebel Eltron, most likely some CAN ID’s and CAN bus speed will be defferent, so a few adjustments will be necessary.

Before you connect anything to unknown bus and the wwk bus is not part of that project you should first evaluate what bus system is in use here.
So who knows if it’s also a can bus?
You can use a cheap Logic Analyzer and Saleae for that.

I think problems like these are solved for me because I restart the device each day.
Not sure if it was because of this reason though

@Kassel Where did you put that parameter? I have also failed with error code: 2, but esphome says that data_rate is invalid option for canbus.

Hi Valixi,

this ist setting for CANbus, so I placed it in this part of code.

canbus:

  • platform: mcp2515
    data_rate: 2MHZ
    id: my_mcp2515
    spi_id: McpSpi
    cs_pin: GPIO15
    can_id: 680
    use_extended_id: false
    bit_rate: 20kbps

Ah! No dice here as I’m using the ESP32-S3 board.

canbus:
  - platform: esp32_can
    id: my_can
    tx_pin: ${can_tx_pin}
    rx_pin: ${can_rx_pin}
    can_id: ${can_id_pc}
    use_extended_id: false
    bit_rate: 20kbps
    # Increased buffer sizes to prevent overflows
    # ESP32-S3 has much larger buffers than MCP2515 (2 RX buffers)
    rx_queue_len: 256  # Default: 8, increased for high-traffic CAN bus
    tx_queue_len: 64   # Default: 16, increased for burst writes
    on_frame:
      - can_id: 0
        can_id_mask: 0
        then:
          - lambda: |-
              processAndUpdate(can_id, x);