Is there any interest in a Stiebel Eltron climate platform?

Hi guys,
first thanks for the tips in this converation.

Is anyone able to write states for the SG Ready (Modbus 4002/4002) inputs?

Hey @ all modbus enthusiast ;-),

first, thanks for this great integration.

I’m using the following integration

modbus:
  - type: tcp
    host: 192.168.5.58 # Stiebel Eltron LWZ 404
    port: 502
    name: "lwz"
    close_comm_on_error: true
    delay: 5
    timeout: 5
    sensors:
      # Room
      - name: "LWZ RAUMISTTEMP-HK1"
        slave: 1
        address: 1
        input_type: input
        unit_of_measurement: "°C"
        device_class: temperature
        scale: 0.1
        precision: 1

But in my core log I found the following entries:

....
Modbus read failed
Modbus read failed
Modbus read failed
Modbus read failed
Modbus read failed
Modbus read failed
...
2022-01-12 15:09:22 WARNING (MainThread) [homeassistant.components.modbus.validators] LWZ RAUMISTTEMP-HK1  with int is not valid, trying to convert
2022-01-12 15:09:22 WARNING (MainThread) [homeassistant.components.modbus.validators] LWZ RAUMISTTEMP-HK1  with int is not valid, trying to convert

The sensor gives me a value back. The integration is working, but the log entries are confusing me.

Thanks!

Hey hannes,
Thanks for you modbus configuration.
But i dont understand, how to send anythingt to the isg.
Can you maybe help me?
How do you control the values like water temperature or ventilation?

Hi Stefan,

I do it exactly like @ArminF doest in his post on Nov 21.

For examplte for the ventilation settings (day/night) I have an two input numbers and four automations to get/set the value. Here an example for the ventilation day setting:

Input number:

lwz_stufe_tag:
  name:                'LWZ STUFE-TAG'
  min:                 0
  max:                 3
  step:                1
  mode:                box
  icon:                mdi:fan

Setter automation:

id:          lwz_stufe_tag_setter_automation
alias:       'LWZ STUFE-TAG Setterautomatik'
description: 'Synchronisiert LWZ STUFE-TAG Sensor mit LWZ STUFE-TAG Input'
trigger:
  - platform:  state
    entity_id: input_number.lwz_stufe_tag
action:
  - service: modbus.write_register
    data_template:
      unit:    255
      address: 1017
      value:   '{{ states("input_number.lwz_stufe_tag") | int }}'

Getter automation:

id:          lwz_stufe_tag_getter_automation
alias:       'LWZ STUFE-TAG Getterautomatik'
description: 'Synchronisiert LWZ STUFE-TAG Input mit LWZ STUFE-TAG Sensor'
trigger:
  - platform:  state
    entity_id: sensor.lwz_stufe_tag
  - platform: homeassistant
    event:    start
action:
  - service: input_number.set_value
    data_template:
      entity_id: input_number.lwz_stufe_tag
      value:     '{{ states("sensor.lwz_stufe_tag") }}'

Hi!

I’m very interested! I have a WPF07 COOL also and really want to see what is happening.
I read your links, but I’m missing the connection to the Stiebel. How did you connect this?
Thanks in advance!

Stiebel Eltron uses CAN Bus for their communication with external devices like FEK remote control or ISG gateway. And CAN Bus is a standard that can be used with ESP32 too using an MCP 2515 can bus controller.
If you have a look at the heat pump’s manual in the section for electrical connections - for me it is section 12.2.3 and 12.8 you can read, how an ISG should be connected to the heat pump.
In the same way as the ISG, you can connect an MCP2515 CAN Bus component via an ESP32 microcontroller as set up in my thread. ESP32 is easily integrated in home assistant using ESP-Home.

To receive the corresponding signals from the heat pump, you send a hex command over the CAN Bus interface and the heat pump answers respectively. The needed command keys are located in the file “ElsterTable.inc” on the website juerg5524.ch.

Such a send command can look like this in ESP-Home.

          - canbus.send:
              data: [ 0x31, 0x00, 0xfa,0x09,0x22,0x00,0x00 ]
              can_id: 0x680

The first and fourth digits are used to signal the request to the address of the heat pump - here it is the address ,3*8 + 0 =18 + 0 => 180.
Sencond digit “1” means request.
Digits 5 and 6 are usually “fa” with some certain exceptions, when the Elster Index is smaller than ff ff.
Digits 7 to 10 “09 22” is the Elster index key listed in the ElsterTable as “WAERMEERTRAG_2WE_WW_TAG_WH”.

As an answer you’ll get something like d2 00 fa 09 22 xx xx, meaning answer (digit 2 = 2) to can-id 680 (d*8 + 0) for request 09 22 and xx xx the value of the heat pump in double.

For any further questions, please follow up in my thread, as I think it is better discussed there.

Hi Hannes,

I use your example for my ventilation day setting, but there is no action :frowning:
Is “sensor.lwz_stufe_tag” your modbus register name of adress 1017 an how you find the unit id of the ISG?

Jokaan

lwz_stufe_tag is the name of my input number I use to select the value in the Dashboard and trigger the action:

image

It looks like this

lwz_stufe_tag:
  name:                'LWZ STUFE-TAG'
  min:                 0
  max:                 3
  step:                1
  mode:                box
  icon:                mdi:fan

lwz_stufe_nacht:
  name:                'LWZ STUFE-NACHT'
  min:                 0
  max:                 3
  step:                1
  mode:                box
  icon:                mdi:fan

Hello Hannes, ok, thanks. How did you realize the dashboard chart? How can you color the active fan speed and gray the inactive one?
Grüße Jokaan

Kinda offtopic, but anyway: I use a Vertical Stack In Card with four Button Cards. Button cards can change their style depending on a state.

Hello Hannes, thank you for your advice, it works :slight_smile:
Sorry, I’m still learning.

1 Like

Hello everyone, how do I get the decimal displayed in Homeassistant?!

Bildschirmfoto 2022-04-02 um 09.27.29

Thanks!

Today, I am encountered exactly this problem. I my point of view HA and the Modbus Interface do everything right! The problem here is the implementation of the Modbus interface of the ISG. Inside the documentation (ISG Modbus Manual) the entry P-HEIZUNG-TAG documented as:

3022 P-HEIZUNG-TAG x x 0 65535 6 kWh r

where the data type is 6. Compared to other entries it is likely the data type 6 means integer, what is also a explanation to the observed behavior:

10,759 kWh  -> 10 kWh

I think there is not much you can do over the Modbus interface until Stiebel-Eltron update the ISG firmware. I will write a request to the Stiebel-Eltron support, but I do not think that they will change anything.


What should possible is to scrape the data directly from the Servicewelt via http-request. This should be easy to implement, at least for me and I am sure somebody implemented before. My problem is that I have no idea how to implemented a http-request over HA and store the values into a entity and guarantee a periodic schedule.

Ok, thanks for your answer… we will see. I hope Stiebel will update this as soon as possible :wink:

I would like to see the status of the filter change in homeassistant.

2001 OPERATING STATUS > FILTER CHANGE-BOTH B8

what is the easiest way to do this?
thanks

I’m experiencing the same issue.
i managed to create several python scripts to read out the modbus values and post them to MQTT. COP calculations are far more easier especial when a divide by 0 occurs. This happens often in the DHW calculation since the power consumed is shown as 0,369kWh and wil de 0 kWh in the readout.

how did you do this as the default values do not meet the requirements for energy monitoring/usage.

Hello Hannes,
how did you configure your electricity and blinds card so that you can open it and switch it centrally?

For light and switches by adding groups: Group - Home Assistant

For the blinds my KNX device has a special group address that triggers all covers centrally, so this is not handled by HASS. But you could also just group your blinds with the group integration I mentioned above :man_shrugging:

I have a similar problem with the value:
31 VERDICHTERSTARTS x x 0 65535 6 r

In the Stiebel Eltron Web Interface I see the value 65346. However, Home Assistant only shows the value 65.

Solution: with the multiscrape addon you can read the value correctly.

        # Prozesswerte
      - unique_id: se_scrape_pw_verdichterstarts
        select: "div.span-11:nth-child(1) > table:nth-child(1) > tr:nth-child(11) > td:nth-child(2)"

It look like this for example in configuration.yaml:

  sensors:
  - name:                'LWZ BETRIEBSSTATUS'
    slave:                 1
    count:                 1
    address:             2000
    input_type:         input
    data_type:          uint16
binary_sensor:
  - platform: template
    sensors:
      lwz_filterwechsel:
        friendly_name: "LWZ Filterwechsel beide Filter"
        value_template: "{{ states('sensor.LWZ_BETRIEBSSTATUS')|int|bitwise_and(256) > 0 }}"

The entity “LWZ Filterwechsel beide Filter” shows then the status with on/off