Is there any interest in a Stiebel Eltron climate platform?

Hello everyone,

I have a question regarding he control of the ventilation.
I’m able to set the ventilation steps via the custom button cards an the tab_action. But how can I highlight the current state of the buttons? There should be one button that is “active”. I tried around the color with the current state of my ventilation sensor, but ist doesn’t work.
Any ideas?

type: horizontal-stack
title: Lüftung Stufe Tag
cards:
  - type: custom:button-card
    icon: mdi:fan-off
    color: |-
      [[[
        if (state['sensor.heizung_lueftung_stufe_tag'].state === 0)
          return "yellow";
        else return "grey";
      ]]] 
    tap_action:
      action: call-service
      service: modbus.write_register
      service_data:
        address: 1017
        slave: 1
        hub: ISG
        value: 0
  - type: custom:button-card
    icon: mdi:fan-speed-1
    tap_action:
      action: call-service
      service: modbus.write_register
      service_data:
        address: 1017
        slave: 1
        hub: ISG
        value: 1
  - type: custom:button-card
    icon: mdi:fan-speed-2
    tap_action:
      action: call-service
      service: modbus.write_register
      service_data:
        address: 1017
        slave: 1
        hub: ISG
        value: 2
  - type: custom:button-card
    icon: mdi:fan-speed-3
    tap_action:
      action: call-service
      service: modbus.write_register
      service_data:
        address: 1017
        slave: 1
        hub: ISG
        value: 3

Edit:
I found a solution with Mushroom template cards thats works fine for me:

type: horizontal-stack
title: Lüftungsstufe Tag
cards:
  - type: custom:mushroom-template-card
    primary: Aus
    secondary: ''
    icon: mdi:fan-off
    entity: sensor.heizung_lueftung_stufe_tag
    layout: vertical
    icon_color: |
      {% if is_state('sensor.heizung_lueftung_stufe_tag', '0') %}
        red
      {% else %}
        grey
      {% endif %}
    tap_action:
      action: call-service
      service: modbus.write_register
      service_data:
        address: 1017
        slave: 1
        hub: ISG
        value: 0
  - type: custom:mushroom-template-card
    primary: Stufe 1
    secondary: ''
    icon: mdi:fan-speed-1
    entity: sensor.heizung_lueftung_stufe_tag
    layout: vertical
    icon_color: |
      {% if is_state('sensor.heizung_lueftung_stufe_tag', '1') %}
        blue
      {% else %}
        grey
      {% endif %}
    tap_action:
      action: call-service
      service: modbus.write_register
      service_data:
        address: 1017
        slave: 1
        hub: ISG
        value: 1
  - type: custom:mushroom-template-card
    primary: Stufe 2
    secondary: ''
    icon: mdi:fan-speed-2
    entity: sensor.heizung_lueftung_stufe_tag
    layout: vertical
    icon_color: |
      {% if is_state('sensor.heizung_lueftung_stufe_tag', '2') %}
        blue
      {% else %}
        grey
      {% endif %}
    tap_action:
      action: call-service
      service: modbus.write_register
      service_data:
        address: 1017
        slave: 1
        hub: ISG
        value: 2
  - type: custom:mushroom-template-card
    primary: Stufe 3
    secondary: ''
    icon: mdi:fan-speed-3
    entity: sensor.heizung_lueftung_stufe_tag
    layout: vertical
    icon_color: |
      {% if is_state('sensor.heizung_lueftung_stufe_tag', '3') %}
        blue
      {% else %}
        grey
      {% endif %}
    tap_action:
      action: call-service
      service: modbus.write_register
      service_data:
        address: 1017
        slave: 1
        hub: ISG
        value: 3
1 Like

@ingo.niehues
I roughly adapted your dashboard to my heat pump and my dashboard style, made little adjustments - this is the result (NOT finished)

First of all: THANK YOU!!!

Second:
How can I lose the “wp_betriebsstatus_heizbetrieb” and make it to “Heizbetrieb”? If I change the name, it doesn’t work anymore, because you filter for wp_betriebsstatus_*. I had the same issue with the “heute, gesamt, je Tag” - but here renaming worked, because there is no filter. However, I assume you also did that one different.

Thank you in advance for your help.

Dear Schlichi83, would it be possible to look at my post what am I making wrong? I do not have any buttons for temperature adjustment an all is black. I am really desperate. Thanks.

Yes, no problem. But I’m really no expert myself.

Go to Automations, create a new automation, switch to YAML-Version and cope&paste the code of the first one (for Input-Numbers) there, give it a proper name and click save. Then create another one for Input_Select, give it a proper name as well and save again.

Then you have to create the Input_Numbers and the Input_Selects in the Helper-Section. In my German localized Home Assistant Input_Numbers the according helper is “Nummer” (in english probably Number), the according one for Input_Select is “Dropdown”.

Then you have to work throught the code of the automations and create a number and dropdown-helper for every entity-ID.

For example:
input_number.wp_heizkurve - you call it “wp_heizkurve” - the input_number comes automatically.
input_select.wp_betriebsart - you call it “wp_betriebsart” - the input_select comes automatically

You have to configure the input_number and input_select according to the function that lies beneath.
e.g. wp_heizkurve: minimal value: 0, maximal value 3 in 0.1 steps
e.g. wp_ww_eco: minimal value: 0, unit: °C, maximal value: 60, in 0.1 steps etc.
the according values you can get from the ISG Web Interface - there is always minimum and maximum

Then it works like this:
If you change a value in ISG WebIF Home Assistant recognizes this, runs the automation and changes the value in the variable (that is the number you see in your dashboard). If you change a value in your dashboard, an action is called to write the new value via ModBus to ISG and changes the value. During the change HA recognizes the change again, runs the automation and changes the variable on your dashboard. Ingo did that REALLY good.

What I don’t know is, if the ModBus codes are universal and working for every Stiebel heatpump. Because Ingo and I have exactly the same heatpump, so of course his codes work for mine as well. But if you have a different one, I don’t know if they are the same.

I am new to the HomeAssistant environment through my WPL25AC and have already learned a lot here through this community. Thanks to all :slight_smile: But without any coding experience, I guess I’m quickly reaching my limits and would therefore like to ask directly for help in creating some missing basic dashboard elements:

  1. How do I add the electricity consumption and heat production values of heating and hot water to a kwh total value?

  2. How do I calculate the ratio of these values? JAZ per day, per month/year and total?

  3. Is there a value that represents the energy consumption per hour?

I have currently installed no additional addons for the dashboards and work mainly with the templates of Ingo here from January.

In screenshots here in the forum I have seen the values already represented.

About copy/paste examples for these values I would be very happy. JAZ

Modbus codes (register). Yeah there are quite the same, you have to look on your manager (Regler). There are 3 main types of managers by Stiebel.

The first group is the “WPL” group (mostly air to water heat pumps) with the WPMsystem (WPM4), WPM3 and WPM3i manager. That one uses the same register group. Depending on some other parameters (firmware versions of the ISG, components in the heat pump (plus their firmware versions) it´s possible, that the parameter is minus one (for example a 502 register hast to be 501).

The second group of heat pumps are the Integral ventilation units (LWZ and LWA) with other modbus registers, because of another manager.

The third group are the big machines with (WPE-I 33-87) with another manager, called the WPM G. They have another set of modbus registers.

So the registers are the same within these three groups.

1 Like

The Input numbers and Input select are done. That´s really nice. 2 questions though:

  1. Ingo did a great job and has created template-sensors. Where should I put them? (automations, configuration yaml or where)
  2. Can you copy me an example from the helper?

German is not a problem, I am speaking german better than english.

Ich antworte erstmal auf Deutsch und versuche dann eine rudimentäre Übersetzung.

ALSO:
zu 1.) Ich habe bereits verschiedene Template-Sensoren im /packages Ordner im Zusammenhang mit meiner PV-Anlage von SolarEdge. Dort habe ich einfach neben den bestehenden yaml Dateien (z.B. electricity.yaml) eine neue aufgebaut: heatpump.yaml. Dort rein habe ich die Template Sensoren gepackt. Bei mir funktionieren aber noch nicht alle Template-Sensoren. Damit muss ich mich nochmal irgendwann in Ruhe beschäftigen. Aber ein nennenswerter Teil funktioniert.

Wenn du noch keinen packages-Ordner hast, dann müssen die in die configuration.yaml. Mit Automationen hat das nichts zu tun.

zu 2.) Die Helfer kann man leider nicht in YAML exportieren. Aber ich hab 6 Helfer erstellt.
input_select_wp_betriebsart mit den 5 Betriebsarten Notbetrieb, Bereitschaftsbetrieb, Programmbetrieb, Komfortbetrieb und Eco-Betrieb
input_number_wp_heizkurve mit 0 min, 3 max, Schrittgröße 0,1
input_number_wp_temp_eco mit 0 min, 75 max, Einheit °C, Schrittgröße 0,1
input_number_wp_temp_komfort mit 0 min, 75 max, Einheit °C, Schrittgröße 0,1
input_number_wp_ww_temp_eco mit 0 min, 60 max, Einheit °C, Schrittgröße 0,1
input_number_wp_ww_temp_komfort mit 0 min, 60 Max, Einheit °C, Schrittgröße 0,1

Hoffe das hilft.

English version:
OKAY
1.) I already had different Template-Sensors in the /packages folder due to my SolarEdge system (solar energy). So I simple created a new yaml File in the /packages folder called “heatpump.yaml” and put the template sensors in there. Not all of them are working, but quite a few do. Have to look after that when I have time.

If you don’t have a packages folder yet, put them in the configuration.yaml. NOT in Automations - that has nothing to do with an automation.

2.) You can’t export the helpers in YAML. But I created 6 helpers.
(in the German version you find all 6 helpers with the exact configuration)

1 Like

Dear All,

I had managed to perfectly create the entities/sensors and read the data from my heat pump.
With one or the other small automation to be warned if such or such event happened.
And while I was about to try to move to the “read & write” stage, I noticed that the values of my sensors are no longer updating almost continuously as before. But only during OS events, such as a reboot or update, or…
While I haven’t changed anything in my config…
By acquired conscience, I started from scratch.
I scratched my ssd, and I reinstalled everything. Not a restore from a backup, a complete reinstall from scratch.

But I see that the problem is the same, while all my sensors update continuously, those linked to my ISG Stiebel module do not.

Then I remembered that my installer had switched the installation from “comfort” mode to “programming” mode, I said to myself “ok it must be that”.
But unfortunately, after returning to comfort mode, performing the necessary restarts, it’s still the same.

So I do not understand why overnight, I am no longer able to read the data from the ISG SERVICE WELT.

If a good soul has an idea, I’m a taker. :slight_smile:

Hi Veaullus, I am sorry that I can’t help you. I just can follow you with the same problem on my site. What I find interesting is, that maybe not the HA → ISG connection is the problem, I have the same problem if I connect to my Servicewelt ISGweb website. All the values remain from the initial boot of the ISGweb no updates regarding current temperatures in the HK or outside.

So no updates about temperatures or consumption. But on the other hand I am still able to set values from HA site, like changing the target temperatures for heating or warm water.

I hope that somebody can help us :frowning:

Hi @grIngo49 , your intervention does not solve the problem but it confirms my feeling.
I already sent an email to my installer during the weekend, to find out what I risked doing a factory reset of the ISG.
But with your testimony, I lean more towards an update of these modules by the manufacturer, with either a specific change or a bug.
I will ask my installer to put me in touch with a Stiebel representative in my country (Belgium).

I’ll let you know.

Hi @grIngo49 ,
While I was getting ready to contact Stiebel Belgium, I still made a final check and I also wanted to take some screenshots.
And “oh surprise”, I see that some values have changed and that they are consistent. I search the history and I see that on April 24 in the morning, a reset was carried out (I know it because the temperature values all go down to an inconsistent value of -3276.8°C).
And since then everything has been going well.
I redeclared all my other sensors…and it seems to work.
I hope on your side too.

Have you tried to check your logs (Settings → System → Logs) for entries of “modbus” oder “stiebel”?

I know that the connections get´s lost if more than 1 device connects to the modbus of the ISG-web. So you could either use “modbus:” in configuration-yaml OR the “Stiebel Eltron ISG”-integration.

A solution to that will be “Modbus Proxy”. Modbus Proxy is a Home Assistant Add-On. It will connect to the modbus of the ISGweb and can accept multiple connections to it. You will just have to connect “modbus:” in configuration.yaml and the “Stiebel Eltron ISG”-integration to the IP-Adress of Modbus Proxy instead of the IP-Adress of the ISG-web.

I hope i understood your problem right and i´m not writing totally nonsens :slight_smile:

1 Like

Hi. Sorry for the late answer. Haven´t been here quite a few days.

So, now to your questions:

  1. How do I add the electricity consumption and heat production values of heating and hot water to a kwh total value?
    I´ve created a template sensor that sums up:
  • the MWH-Total-Value multiplied by 1.000 (so 1 MWH = 1000 kWh)
  • the kWh-Total Value
  • the kwh-Today Value

I did this for (1) energy consumption and (2) “heat output” for (a) heating, (b) warm water and (c) combinend. Here is the yaml code for the template sensors:

(i have added “last_reset” to make them “count” as long term statatistics sensors)

#1a - energy consumption heating
      - unique_id: wp_neubau_stromverbrauch_heizen_gesamt
        name: wp_neubau_stromverbrauch_heizen_gesamt
        state: "{{ states('sensor.wp_neubau_stromverbrauch_heizen_ges_mwh') | int(default=0) * 1000 + states('sensor.wp_neubau_stromverbrauch_heizen_ges_kwh') | int(default=0) + states('sensor.wp_neubau_stromverbrauch_heizen_tag') | int(default=0) }}"
        unit_of_measurement: kWh
        device_class: energy
        state_class: total_increasing
        attributes:
          last_reset: "{{ as_timestamp(states('input_datetime.warmepumpe_inbetriebnahme')) | timestamp_local }}"

#1b - energy consumption warm water
      - unique_id: wp_neubau_stromverbrauch_warmwasser_gesamt
        name: wp_neubau_stromverbrauch_warmwasser_gesamt
        state: "{{ states('sensor.wp_neubau_stromverbrauch_warmwasser_ges_mwh') | int(default=0) * 1000 + states('sensor.wp_neubau_stromverbrauch_warmwasser_ges_kwh') | int(default=0) + states('sensor.wp_neubau_stromverbrauch_warmwasser_tag') | int(default=0) }}"
        unit_of_measurement: kWh
        device_class: energy
        state_class: total_increasing
        attributes:
          last_reset: "{{ as_timestamp(states('input_datetime.warmepumpe_inbetriebnahme')) | timestamp_local }}"

#2a - produced heating for heating
      - unique_id: wp_neubau_waermemenge_heizen_gesamt
        name: wp_neubau_waermemenge_heizen_gesamt
        state: "{{ states('sensor.wp_neubau_waermemenge_heizen_ges_mwh') | int(default=0) * 1000 + states('sensor.wp_neubau_waermemenge_heizen_ges_kwh') | int(default=0) + states('sensor.wp_neubau_waermemenge_heizen_tag') | int(default=0) }}"
        unit_of_measurement: kWh  
        device_class: energy
        state_class: total_increasing

#2b - produced heating for warm water
      - unique_id: wp_neubau_waermemenge_warmwasser_gesamt
        name: wp_neubau_waermemenge_warmwasser_gesamt
        state: "{{ states('sensor.wp_neubau_waermemenge_warmwasser_ges_mwh') | int(default=0) * 1000 + states('sensor.wp_neubau_waermemenge_warmwasser_ges_kwh') | int(default=0) + states('sensor.wp_neubau_waermemenge_warmwasser_tag') | int(default=0) }}"
        unit_of_measurement: kWh  
        device_class: energy
        state_class: total_increasing

#1c - energy consumption for heating and warm water
      - unique_id: wp_neubau_stromverbrauch_heizen_und_warmwasser_gesamt
        name: wp_neubau_stromverbrauch_heizen_und_warmwasser_gesamt
        state: "{{ (states('sensor.wp_neubau_stromverbrauch_heizen_gesamt') | float(default=0) + states('sensor.wp_neubau_stromverbrauch_warmwasser_gesamt') | float(default=0) | float(default=0)) | round(0) }}"
        unit_of_measurement: kWh
        state_class: total_increasing
        device_class: energy
        attributes:
          last_reset: "{{ as_timestamp(states('input_datetime.warmepumpe_inbetriebnahme')) | timestamp_local }}"

#2c - produced heating for heating and warm water
# i did not create this sensor cause i did not need this
  1. How do I calculate the ratio of these values? JAZ per day, per month/year and total?
    I´ve created some more template sensors that divide the the divide the “produced heating” through the “used energy”.

Here is my yaml-code for that (copied most of it somewhere - don´t remeber where - so not mainly my work!):

      - unique_id: wp_neubau_scop_heizen_tag
        name: wp_neubau_scop_heizen_tag
        state: >
          {% set dividend = states('sensor.wp_neubau_waermemenge_heizen_tag') | float(default=0) %}
          {% set divisor = states('sensor.wp_neubau_stromverbrauch_heizen_tag') | float(default=0) %}
          {% if 0 not in [ dividend , divisor ] %}
            {{ dividend / divisor | float(default=0) }}
          {% else %}
            0
          {% endif %}
        device_class: power_factor
        state_class: measurement

      - unique_id: wp_neubau_scop_heizen_gesamt
        name: wp_neubau_scop_heizen_gesamt
        state: >
          {% set dividend = states('sensor.wp_neubau_waermemenge_heizen_gesamt') | float(default=0) %}
          {% set divisor = states('sensor.wp_neubau_stromverbrauch_heizen_gesamt') | float(default=0) %}
          {% if 0 not in [ dividend , divisor ] %}
            {{ dividend / divisor | float(default=0) }}
          {% else %}
            0
          {% endif %}
        device_class: power_factor
        state_class: measurement

      - unique_id: wp_neubau_scop_heizen_je_tag
        name: wp_neubau_scop_heizen_je_tag
        state: >
          {% set dividend = states('sensor.wp_neubau_waermemenge_heizen_je_tag') | float(default=0) %}
          {% set divisor = states('sensor.wp_neubau_stromverbrauch_heizen_je_tag') | float(default=0) %}
          {% if 0 not in [ dividend , divisor ] %}
            {{ dividend / divisor | float(default=0) }}
          {% else %}
            0
          {% endif %}
        device_class: power_factor
        state_class: measurement

      - unique_id: wp_neubau_scop_warmwasser_tag
        name: wp_neubau_scop_warmwasser_tag
        state: >
          {% set dividend = states('sensor.wp_neubau_waermemenge_warmwasser_tag') | float(default=0) %}
          {% set divisor = states('sensor.wp_neubau_stromverbrauch_warmwasser_tag') | float(default=0) %}
          {% if 0 not in [ dividend , divisor ] %}
            {{ dividend / divisor | float(default=0) }}
          {% else %}
            0
          {% endif %}
        device_class: power_factor
        state_class: measurement

      - unique_id: wp_neubau_scop_warmwasser_gesamt
        name: wp_neubau_scop_warmwasser_gesamt
        state: >
          {% set dividend = states('sensor.wp_neubau_waermemenge_warmwasser_gesamt') | float(default=0) %}
          {% set divisor = states('sensor.wp_neubau_stromverbrauch_warmwasser_gesamt') | float(default=0) %}
          {% if 0 not in [ dividend , divisor ] %}
            {{ dividend / divisor | float(default=0) }}
          {% else %}
            0
          {% endif %}
        device_class: power_factor
        state_class: measurement

      - unique_id: wp_neubau_scop_warmwasser_je_tag
        name: wp_neubau_scop_warmwasser_je_tag
        state: >
          {% set dividend = states('sensor.wp_neubau_waermemenge_warmwasser_je_tag') | float(default=0) %}
          {% set divisor = states('sensor.wp_neubau_stromverbrauch_warmwasser_je_tag') | float(default=0) %}
          {% if 0 not in [ dividend , divisor ] %}
            {{ dividend / divisor | float(default=0) }}
          {% else %}
            0
          {% endif %}
        device_class: power_factor
        state_class: measurement
  1. Is there a value that represents the energy consumption per hour?

Sadly: No. The “today” sensor only increasis if a whole kWh is used, not party of an kWh. So there is no use in and hourly sensor. If you want hourly energy consumption you will have to use a shelly em (or such kind of device) to measure the real energy consumption of your heat pump.

1 Like

Which Firmware do you have on your ISG? It could be aswell a problem with the firmware. The actual one is 12.2.2, I have the least one and without any problem. Ask your Stiebel Partner in Belgium to let update your ISG if not the actual version. You can see the ISG Firmware version on the starting page down, with “v” - v8.6.0, v10.2.0, v12.1.0, v12.2.2

Hello, and thanks for the great work it allows me to integrate with the heat pump very well.

I tried to use switches provided by @ingo.niehues to change my heat pump into solar mode but without success. The values change but the SG mode stays at 2 and the configured water temperature doesn’t change also.
Does anyone manage to do it?

Thanks

This also doen´t work well for me. Maybe you could try GitHub - pail23/stiebel_eltron_isg_component: Stiebel Eltron ISG integration for Home Assistant. There should be working switches for SG Ready.

I don´t need that. You could just use an automation that raises the set-tempertatur for hot water when you solar plants produces to much und lower the set-temperature, if there is no over-production.

1 Like

Hi everyone. What a fantastic, friendly and knowledgeable community. I have a Stiebel eltron WPL-25-ACS. I have used the Paul Frank implementation of modbus and all is working well. I would like to change the cooling flow temperature ( COOLING_FLOW_TEMPERATURE_TARGET_CC1) which is modbus register 1517 (1516 for write I think).
I have read the preceding 5 bytes and following 2 bytes, loading each byte as a number and displaying the values as a,b,c,etc. The value for register 1515 and 1518 are shown as unavailable. This agrees with the fact that on the modbus sheet they are unavailable for WPM systems.
However when I change the value in the WPM console, it does not change (even on a restart of HASS) on the entity. Also when I change the entity in HASS it appears to change, but does not update the WPM.
I have configured the entity the same as the "comfort temperature for heating circuit 1’"as far as I know, so the step size and data type are the same.
Any ideas would be gratefully received.
Thanks
GAR

I found a simpler way, the entity can be directly configured as a switch in the modbus yaml instead of first defining a sensor and then using templates. It ends up looking surprisingly simple. I tested it for me and it works.

@ingo.niehues thank you so much for your contributions, coming back here after a few months and I am able to upgrade all my dashboards thanks to you.

##########################################################
#####         WPM via Modbus      ####################

- name: WPM
  type: tcp
  host: 192.168.1.124
  port: 502
  retry_on_empty: true
# -- SG Ready Input1 Switch
  switches:
      # -- SG Ready Input 1
    - name:                WPM Switch - SG Ready Heat Boost
      slave:               1
      address:             4001
      verify:
1 Like