Weishaupt Heatpump integration via modbus

@kakash my code was not for the heat pump output - I use Leistungsanforderung to calculate my electric power consumption.

PLS See attached it is quite aligned with the WPST_Strom_Tag

I did exactly what you are interested in - I can compare the power usage of my heat pump between PV power consumption and grid import.

This is good enough for me:

With this estimation I can then extract my total energy and grid energy portion …

… you can see that I did use 86 kWh Energy in October out of which only 33 kWh were Grid import … the rest was PV :slight_smile: not an exact science but I compared my data for 2 weeks and it looks reasonable close :wink:

@AndiE1234 - Hi Andi - great work ! will immediately reuse your code ! THANK YOU ! Also on my end the same currently with the 101 warnings. It is really the warm temperature – one thing I read is to further increase the room temperature setting so you do not hit the “outside norm” operating area these days.

I am new to the Weishaupt WBB - so for now I am watching this - it is really weather dependent -

1 Like

Hi , the “raumsoll” is not the problem. I would like to set the current room temperature (“Raumtemperatur”) like " WEM-RG1 2.1"

Hi @rafdev18 ,
nice dashboard.
Can you help me how do you get the sensor-card showing the min/max values as number and how do you got them in green?
Thanks
image

this is awesome, just can you enlighten me about the value_jitter_integration_fix? What exactly is that sensor?

I realized this for the HK like this:

template: 
  select:
  - name: Heizkreis Betriebsart
    unique_id: wpump_hk_mode
    state: "{{ states('sensor.wp_heizkreis_betriebsart_text') }}"
    options: "{{ ['Automatik', 'Komfort', 'Normal', 'Absenk', 'Standby']}}"
    select_option:
      service: modbus.write_register
      data:
        hub: wpump
        slave: 1
        address: 41103
        value: >
          {% if option == "Automatik" %}
            0
          {% elif option == "Komfort" %}
            1
          {% elif option == "Normal" %}
            2
          {% elif option == "Absenk" %}
            3
          {% elif option == "Standby" %}
            4
          {% endif %}
1 Like

I discovered that my LS 13-B not only stores the current statistics values, but also from the former days/months/years.
If you click the display, you see the historical graph, see below.

The problem seems to be, that the corresponding Modbus registers for the values (36101, 36103,36104) only show the values of the FIRST value of the graph, and NOT the CURRENT day/month/year:

  • read_input_registers: 36101 - value: [25]
  • read_input_registers: 36102 - value: [39]
  • read_input_registers: 36103 - value: [137] ← See picture below, this value does not contain the current value, but the first value of the statistics per month
  • read_input_registers: 36104 - value: [392]

Anyone an idea, if this is a bug on the WWP or if there is a special modbus trick to get the current or all values?

Hi @thrymr - as you need to integrate the software calculated WBB power in order to have your daily energy consumption you do need to use a Riemann Integration.

The Riemann Integration has the flaw it does not work well on non changing values. Meaning when the heat pump is not running the compressor and the power value is constant this will be not integrated into the value distorting the outcome of the energy sensor.

The easiest fix I was able to implement to add for 10 minutes 0.01 watts and then for 10 mins subtract 0.01 watts for 10 minutes. This way the value never stays static but the integration still shows the right energy result :wink: took me some days to find this workaround. PLS find the sensor code attached:

  • platform: template
    sensors:
    value_jitter_integration_fix:
    friendly_name: Value Integration Jitter Fix
    value_template: >
    {% set minutes = (now().hour * 60) + now().minute %}
    {% set is_positive = (minutes // 10) % 2 == 0 %}
    {% set value = 0.001 if is_positive else -0.001 %}
    {{ value }}
1 Like

Hi @rafdev18 , thanks for sharing your details on the jitter trick.
Reading through this I check back with your formula further up in the post on calculating the electrical power used.
I have the very same heat pump model as yours and would agree to 100% “Leistungsanforderung” pulling 2.750 W.
However, your formula does not appear to reflect that. INstead it calaculates values much lower:
{% set base_power = 0.017 + states(‘sensor.value_jitter_integration_fix’) | float(default=0) + states(‘sensor.wp_leistungsanforderung’) | float(default=0) * 0.0189 %}

Could you please explain why you choose those numbers?

Many thanks, Stefan

supplementary:

  - name: Systembetriebsart
    unique_id: wpump_mode
    state: "{{ states('sensor.wp_systembetriebsart_text') }}"
    options: "{{ ['Automatik', 'Heizen', 'Kühlen', 'Sommer', 'Standby', '2. WEZ']}}"
    select_option:
      service: modbus.write_register
      data:
        hub: wpump
        slave: 1
        address: 40001
        value: >
          {% if option == "Automatik" %} 0
          {% elif option == "Heizen" %} 1
          {% elif option == "Kühlen" %} 2
          {% elif option == "Sommer" %} 3
          {% elif option == "Standby" %} 4
          {% elif option == "2. WEZ" %} 5
          {% endif %}

Hi Stefan, thanks for challenging my math. I basically did measure over my energy meter the power consumption of the heat pump when I did WW and I saw the max Leistungsanforderung. This is how I calculated the needed adjustment factors.

So I did not come with a 100% = 2.75 kW math but measured what for example 67% Leistungsanforderung means for my power at this point in time.

The proof for me is that my integrated energy follows very close the energy counter in the WBB. I have minimal deviations at the end of the day — so I am happy. Maybe you can measure with your approach if you achieve better results and I am more then happy to learn.

Just some inspiration - you can build with picture element a nice schema with live values for your heat pump. Much better then checking values in a list :wink:

1 Like

Hi,
i have a WGB8 from weishaupt. Today weishaupt sent me the modbus tabel. But in this tabel are not the temps from Brine (Soletemperatur). Have anybody an idea what are the hiden registers for this value? Thx for Feedback.

1 Like

Hello everyone,

I have a Weishaupt WTC-GB 15-B. I already set a static ip but it seems like I can’t get the modbus connectivity to work. I always receive a “connection refused” on port 502. Do I need to active another setting or is modbus not supportged on this device?

You need to configure the IP address of the home assistant server on your heat pump to allow the access from this IP address. Detailed description further up in this discussion.


Unfortunately I only have this option in my network settings and I can’t set allowed ip lists. Also it seems like I can’t even activate modbus, or can I find it in another menu?

Try to login with password „11“ or „21“ (with 21 you can change a lot, so be carefull. Is normaly only for your technicen guy).

For me the password “11” works. However I can’t find any settings regarding modbus. My only network options is the one in the picture above. Is the modus functionality limited to certain models or versions?

With Jason Interface you can work with the REST API. HTTP requests like PUT and GET. The Adresses for the Values you have to ask at Weishaupt. If you get the Adresses from weishaupt, please share.

Maybe if you first actived the JASON Interface, you can see the Network settings.

REST API is much better then Modbus. Install NodeRed on an Raspii and try it.

Does anyone know which sensor is behind the Modbus TCP register 33111 at Weishaupt? The value is always very close to Vorlauftemperatur from the WEM portal, but accurate to 0.1°C.