Weishaupt Heatpump integration via modbus

Did someone know if you can set the “Room Temp” by Modbus ?
My Software Version is 5.1

Or can someone share the register overview for 5.1

Very nice! Thanks for this working solution!

@thebiblock Yes you can set the room temperature for each “Heizkreis” pls look into the earlier published Modbus register list.

@kakash Studio Code Server shows me a lot of faults with your template.yaml

my template.yaml (Home Assistant 2023.10.5):

    - name: "WP Betrieb Text" #30006
      state: >-
        {% set value = states('sensor.wp_betrieb')|int() %}
        {% if value == 0 %}{% set modus = 'undefiniert' %}
        {% elif value ==  1 %}{% set modus = 'Relaistest' %}
        {% elif value == 2 %}{% set modus = 'Notaus' %}
        {% elif value == 3 %}{% set modus = 'Diagnose' %}
        {% elif value == 4 %}{% set modus = 'Handbetrieb' %}
        {% elif value == 5 %}{% set modus = 'Handbetrieb_Heizen' %}
        {% elif value == 6 %}{% set modus = 'Handbetrieb_Kühlen' %}
        {% elif value == 7 %}{% set modus = 'Manueller_Abtaubetrieb' %}
        {% elif value == 8 %}{% set modus = 'Abtauen' %}
        {% elif value == 9 %}{% set modus = 'WEZ2' %}
        {% elif value == 10 %}{% set modus = 'EVU_Sperre' %}
        {% elif value == 11 %}{% set modus = 'SG_tarif' %}
        {% elif value == 12 %}{% set modus = 'SG_maximal' %}
        {% elif value == 13 %}{% set modus = 'Tarifladung' %}
        {% elif value == 14 %}{% set modus = 'Erhöhterbetrieb' %}
        {% elif value == 15 %}{% set modus = 'Standzeit' %}
        {% elif value == 16 %}{% set modus = 'Standbybetrieb' %}
        {% elif value == 17 %}{% set modus = 'Spülbetrieb' %}
        {% elif value == 18 %}{% set modus = 'Frostschutz' %}
        {% elif value == 19 %}{% set modus = 'Heizbetrieb' %}
        {% elif value == 20 %}{% set modus = 'Warmwasserbetrieb' %}
        {% elif value == 21 %}{% set modus = 'Legionellenschutz' %}
        {% elif value == 22 %}{% set modus = 'Umschaltung_HZ_KU' %}
        {% elif value == 23 %}{% set modus = 'Kühlbetrieb' %}
        {% elif value == 24 %}{% set modus = 'Passive_Kühlung' %}
        {% elif value == 25 %}{% set modus = 'Sommerbetrieb' %}
        {% elif value == 26 %}{% set modus = 'Schwimmbad' %}
        {% elif value == 27 %}{% set modus = 'Urlaub' %}
        {% elif value == 28 %}{% set modus = 'Estrich' %}
        {% elif value == 29 %}{% set modus = 'Gesperrt' %}
        {% elif value == 31 %}{% set modus = 'Sperre_AT' %}
        {% elif value == 31 %}{% set modus = 'Sperre_Sommer' %}
        {% elif value == 32 %}{% set modus = 'Sperre_Winter' %}
        {% elif value == 33 %}{% set modus = 'Einsatzgrenze' %}
        {% elif value == 34 %}{% set modus = 'HK_Sperre' %}
        {% elif value == 35 %}{% set modus = 'Absenk' %}
        {% else %}{% set modus = 'undefiniert' %}
        {% endif %}
        {{ modus }}

    - name: "WP Heizkreis Betriebsart Text" #41103
      state: >-
        {% set value = states('sensor.WP_Heizkreis_Betriebsart')|int() %}
        {% if value == 0 %}{% set modus = 'Automatik' %}
        {% elif value ==  1 %}{% set modus = 'Komfort' %}
        {% elif value == 2 %}{% set modus = 'Normal' %}
        {% elif value == 3 %}{% set modus = 'Abesenkbetrieb' %}
        {% elif value == 4 %}{% set modus = 'Standby' %}
        {% else %}{% set modus = 'undefiniert' %}
        {% endif %}
        {{ modus }}

    - name: "WP Systembetriebsart Text" #40001
      state: >-
        {% set value = states('sensor.wp_systembetriebsart')|int() %}
        {% if value == 0 %}{% set modus = 'Automatik' %}
        {% elif value ==  1 %}{% set modus = 'Heizen' %}
        {% elif value == 2 %}{% set modus = 'Kühlen' %}
        {% elif value == 3 %}{% set modus = 'Sommer' %}
        {% elif value == 4 %}{% set modus = 'Standby' %}
        {% elif value == 5 %}{% set modus = '2. WEZ' %}
        {% else %}{% set modus = 'undefiniert' %}
        {% endif %}
        {{ modus }}

    - name: "WP Störung"
      state: >
        {% if is_state('sensor.wp_stoerungsfrei', '1') %}
          keine Störung
        {% elif is_state('sensor.wp_betrieb', '0') %}
          Störung
        {% else %}
          ERROR           
        {% endif %}

    - name: "WP JAZ Tag"
      state: >
        {{ (float(states('sensor.WPST_Gesamt_Tag')) / float(states('sensor.WPST_Elektrisch_Tag')))|round(2) }}

    - name: "WP JAZ Monat"
      state: >
        {{ (float(states('sensor.WPST_Gesamt_Monat')) / float(states('sensor.WPST_Elektrisch_Monat')))|round(2) }}

Currently my JAZ_Tag value is 24.67. But the Elektrisch_Tag machtes with my smartmeter.
What´s your JAZ_Tag value?

Edit:
{% elif value == 5 %}{% set modus = '2. WEZ' %}
the value was 4 instead of 5

1 Like

Thank you AndiE1234 for the feedback.
I’m new in HomeAssistant and in YAML… I’ll have a look at Visual Studio Code… I’ve never installed it yet.

As for the JAZ 24 is not possible…

You should have a look at the 2 values “electric consumption per day” and “thermic consumption per day” and divided it by hand…

BUT, my experience is that the value in the beginning of the day is completely wrong. My JAZ sometime get’s up to 12 and decrease other the day and landing around 6
→ The problem comes from the fact, that the WPST_Gesamt_Tag and WPST_Elektrisch_Tag are send without decimals values and i have the feeling that the send delay is also quite long.
→ I was thinking about 2 solutions for that

  1. create a day value based on only the last JAZ_Day. Therefore i would have a good overview
  2. alternative: use a web scrapper to get the information detailed consumption on the WEM Portal (or the WEM Local Portal)

Thanks all to this really nice thread. Helped me a lot to setup my new LS 13-B and it works.
Software-Version: 0202038212

Any one an idea why the following registers don’t work?
Mainly I am interested in the JAZ and so I think I require the hidden registers 3670x.

I only noticed that the following registers don’t work for me:

  • WP_E1_Status (34104)
  • WP_E2_Status (34105)
  • WP_E1_Stunden (34106)
  • WP_E2_Stunden (34107)

and the hidden registers:

  • WPST_Elektrisch_Tag (36701)
  • WPST_Elektrisch_Monat (36703)
  • WPST_Elektrisch_Jahr (36704)

I tried with a raw python client to retrieve the 3670x register, but there are also wrong messages returned:

Python-Code:

WWP = ModbusClient(host='192.168.1.93', port=502, debug=True, timeout=5.0)
result = WWP.read_input_registers(36701, slave=1)
print(result.registers)

Output:

DEBUG:pymodbus.logging:Connection to Modbus server established. Socket ('192.168.1.88', 61813)
DEBUG:pymodbus.logging:Current transaction state - IDLE
DEBUG:pymodbus.logging:Running transaction 1
DEBUG:pymodbus.logging:SEND: 0x0 0x1 0x0 0x0 0x0 0x6 0x1 0x4 0x8f 0x5d 0x0 0x1
DEBUG:pymodbus.logging:New Transaction state "SENDING"
DEBUG:pymodbus.logging:Changing transaction state from "SENDING" to "WAITING FOR REPLY"
DEBUG:pymodbus.logging:Changing transaction state from "WAITING FOR REPLY" to "PROCESSING REPLY"
DEBUG:pymodbus.logging:RECV: 0x0 0x1 0x0 0x0 0x0 0x5 0x1 0x84 0x2
DEBUG:pymodbus.logging:Processing: 0x0 0x1 0x0 0x0 0x0 0x5 0x1 0x84 0x2
DEBUG:pymodbus.logging:Frame check failed, ignoring!!
DEBUG:pymodbus.logging:Resetting frame - Current Frame in buffer - 0x0 0x1 0x0 0x0 0x0 0x5 0x1 0x84 0x2
DEBUG:pymodbus.logging:Getting transaction 1
DEBUG:pymodbus.logging:Changing transaction state from "PROCESSING REPLY" to "TRANSACTION_COMPLETE"
Traceback (most recent call last):
  File "D:\testmodbus.py", line 39, in <module>
    readInputAndPrint(36701)
  File "D:\testmodbus.py", line 19, in readInputAndPrint
    print(result.registers)
          ^^^^^^^^^^^^^^^^
AttributeError: 'ModbusIOException' object has no attribute 'registers'

Hi,

a heat pump is connected by modbus and I can read and set values. But I got a weird problem
with the heating circuits

The heat pump has two heating circuits:

  • HC 1 (Heizkreis 1)
  • HC 2 (Heizkreis 2)
  • (HC 3) not used

Both have different values. For example “Heating curve end point (HCEP)” with different addresses

  • HCEP 1: 5038
  • HCEP 2: 5084

This is my modbus configuration for the two values:

- name: "WP EHK Heizkurvenendpunkt"
    slave: 2
    address: 5038
    input_type: holding
    unit_of_measurement: °C
    state_class: measurement
    offset: 0
    precision: 1
    min_value: 20
    max_value: 70
    data_type: int16
    device_class: temperature
...
- name: "WP ZHK Heizkurvenendpunkt"
    slave: 2
    address: 5084
    input_type: holding
    unit_of_measurement: °C
    state_class: measurement
    offset: 0
    precision: 1
    min_value: 20
    max_value: 70
    data_type: int16
    device_class: temperature

Both values have 42°C.

  1. I open the webui of the heat pump and select HC1
  2. I change the HCEP 1 to e.g. 44°C
  3. My HA shows for BOTH (HCEP 1 and HCEP 2) the value 44°C !
  4. I select HC 2 in the webui of the heat pump
  5. In the webui of the heat pump HCEP 2 is still 42°C and now the value in HA for HCEP 2 changes to 42°C. HCEP 1 still remains on 44°C in HA
  6. I select HC 1 in the heat pump web ui and the value in HA changes back to 44°C for both HCEP

I am kinda confused.

The documentation of the heat pump mentions that you have to write a register if you want to control the values betwen HC 2 and HC 3. But there is no HC 3 in the system!. And the documentation does not
mention this for reading values of HC 1 or HC 2

Nevertheless I would try to send a “select command” by modbus before reading the values
of HC 2. Any idea how to do that?

Best regards
Goran

Does anybody know if the following two parameters, that er availble via the information menu on the WP itself are availble for modbus:

  1. Switch differential value
  2. Waterpump current flow or percentage

Hopefully someone can help :slight_smile:

@AndiE1234 you can not do a JAZ Tag calculation as the electricity from Modbus is only available in steps of 1 ! meaning your power consumption was 1.99 kW - and you still think you used 1kW for the thermal energy produced.

I only look at month and year JAZ for the day value I implemented myself a SW based WPST_Strom_Tag which gets the job done. You can not rely on the register of the WBB.

@kakash your graphs shows the issue with JAZ Tag … it is basically not usable as power consumption is rounded to the full kWh.

I did build myself a SW approximation for power during the day leveraging the Leistungsanforderung value. This works much better and avoid having high jumps like in your graph from 15 back towards 4.

  • platform: template
    sensors:
    heat_pump_electric_power:
    friendly_name: “Heat Pump Power”
    unit_of_measurement: “kW”
    device_class: power
    unique_id: “0412660815061367648539”
    value_template: >
    {% set base_power = 0.017 + states(‘sensor.value_jitter_integration_fix’) | float(default=0) + states(‘sensor.wp_leistungsanforderung’) | float(default=0) * 0.0189 %}
    {% set additional_power = 0 %}
    {% if states(‘sensor.wp_e1_status’) == ‘1’ %}
    {% set additional_power = additional_power + 3.5 %}
    {% endif %}
    {% if states(‘sensor.wp_e2_status’) == ‘1’ %}
    {% set additional_power = additional_power + 3.5 %}
    {% endif %}
    {{ base_power + additional_power }}
    attribute_templates:
    last_update: 1

The result in attached graph - from here you can integrate into Heat Pump Energy and use for a daily JAZ.

2 Likes

@ThijsPenn Yes for the water pump flow - you can read from register 43107 -

Thank you @rafdev18 for your input.
Unfortunately i think you’re calculation is wrong.

As far as i can see:

  • The wp_Leistungsanforderung has a direct correlation with the power output of the heat pump.

  • in my case my WBB12 can deliver up to 11kW of energy. This maximal energy output is also relative to the air temperature. So right now with 10°C air temperature, i can get around 10,5kW heat output.

  • When i read 40% Power, it means then 0,4*10,5=4,2kW → fits more or less the reading in WEM-Portal


Back to your calculations:

  1. you seems to multiply the “%” directly with your current reading consumption (100%=18,9kW). This may be correct, but only for a short period of time. As soon, as the temperature varies, it will be wrong.

Solution for JAZ Daily

  1. the best would be webscraper on the WEM Portal OR the local WEM local Portal. I’ve tried briefly without sucess
  2. the second best option, is for me, my actual calulation, but only take the last value of the day.
  • i could use this values to monitor a trend versus the monthly value

Solution for Actual Power Consumption in kW
3) i would also like to have a visualisation of the “actual power consumption in kW” so that i can map it on my energy graph with the photovoltaik.

  • On the “WEM Portal integration” the power output in kW is available. I could use this value and divide it with the monthly JAZ, to have a rough idea about the actual consumption. But this is also just a rough calculation

PS: You mentioned, that you can see the yearly JAZ ? how can you get it? the register 36104 and 36704 sends me only “0” as value

I think the Stat registers behave totally different depending on the kind of heatpump and software-version.
I will try to get a real spec from Weishaupt for my LS 13-B with SW-Version 0202038212.

In my case, the 3670x don’t work at all.
I get the real “Jahr” values (36x04) correctly like they are shown on the display
But somehow the heute/gestern/Monat values are not working correctly, they show totally different values than the display, and are not updated. The “Jahr” is updated correctly. Don’t know why.

I created a sensor with the errortext and the troubleshooting. maybe not the best yaml code, but it works.
offtopic: at the last 2 weeks my WBB12 got a lot of the error 101. One week ago a servicetechnician has optimized some parameters, but the faults happens again. Weishaupt told me that this is not a real error, the problem is the warm temperatures (Übergangszeit). They are waiting for a software update so solve the issue.

Template.yaml

    - name: "WP Fehler Text" # source: https://www.weishaupt.de/uploads/tx_weishaupt_documents/documents/83315301.pdf
      attributes:
        errornumber: "{{ states('sensor.wp_fehler') | int }}"
        errortext: >
          {% set value = states('sensor.wp_fehler')|int() %}
          {% if value == 65535 %}{% set errortext = 'kein Fehler' %}
          {% elif value == 1 %}{% set errortext = 'Kältemittelfühler Expansionsventil Eintritt (T1)' %}
          {% elif value == 2 %}{% set errortext = 'Luftansaugfühler (T2)' %}
          {% elif value == 3 %}{% set errortext = 'Wärmetauscherfühler AG Austritt (T3)' %}
          {% elif value == 4 %}{% set errortext = 'Verdichtersauggasfühler (T4)' %}
          {% elif value == 5 %}{% set errortext = 'EVI-Sauggasfühler (T5)' %}
          {% elif value == 6 %}{% set errortext = 'Kältemittelfühler IG Austritt (T6)' %}
          {% elif value == 7 %}{% set errortext = 'Ölsumpffühler (T7)' %}
          {% elif value == 8 %}{% set errortext = 'Expansionsventil EVI' %}
          {% elif value == 9 %}{% set errortext = 'Niederdrucksensor (P1)' %}
          {% elif value == 10 %}{% set errortext = 'Hochdrucksensor (P2)' %}
          {% elif value == 11 %}{% set errortext = 'Mitteldrucksensor (P3)' %}
          {% elif value == 12 %}{% set errortext = 'Expansionsventil Kühlen defekt' %}
          {% elif value == 13 %}{% set errortext = 'keine Kommunikation zum Inverter' %}
          {% elif value == 14 %}{% set errortext = 'keine Kommunikation zum Außengerät' %}
          {% elif value == 15 %}{% set errortext = 'Hochdruckschalter hat ausgelöst' %}
          {% elif value == 16 %}{% set errortext = 'Inverter gesperrt, da in den letzten 10 Stunden 10 Fehler aufgetreten sind' %}
          {% elif value == 17 %}{% set errortext = 'EEPROM Speicher-Fehler' %}
          {% elif value == 18 %}{% set errortext = 'keine Modbus-Kommunikation zwischen Regler EC und Steuerplatine Kältesatz' %}
          {% elif value == 19 %}{% set errortext = 'durch Inverter-Alarm Wärmepumpe abgeschaltet' %}
          {% elif value == 20 %}{% set errortext = 'Verdichter passt nicht zur Konfiguration' %}
          {% elif value == 21 %}{% set errortext = 'Niederdruck-Störung' %}
          {% elif value == 22 %}{% set errortext = 'zu geringe Überhitzung' %}
          {% elif value == 23 %}{% set errortext = 'zu hohe Überhitzung' %}
          {% elif value == 24 %}{% set errortext = 'EVI zu hohe Überhitzung' %}
          {% elif value == 25 %}{% set errortext = 'Kältemittelmenge zu niedrig' %}
          {% elif value == 26 %}{% set errortext = 'Hochdruck-Störung' %}
          {% elif value == 27 %}{% set errortext = 'Kondensationstemperatur zu niedrig' %}
          {% elif value == 28 %}{% set errortext = 'Kondensationstemperatur zu hoch' %}
          {% elif value == 29 %}{% set errortext = 'Verdampfungstemperatur zu niedrig' %}
          {% elif value == 30 %}{% set errortext = 'Verdampfungstemperatur zu hoch' %}
          {% elif value == 32 %}{% set errortext = 'Wärmepumpe nicht kompatibel' %}
          {% elif value == 33 %}{% set errortext = 'Regler EC hat keine Verbindung zum Erweiterungsmodul EM-HK' %}
          {% elif value == 40 %}{% set errortext = 'Volumenstrom zu gering' %}
          {% elif value == 41 %}{% set errortext = 'Spreizung LWT/Rücklauf negativ / Vierwegeventil schaltet nach dem Abtauen nicht zurück; nach 3 Warnungen verriegelt die Anlage)' %}
          {% elif value == 43 %}{% set errortext = 'Ventilator blockiert' %}
          {% elif value == 44 %}{% set errortext = 'Drehzahl Ventilator zu niedrig' %}
          {% elif value == 47 %}{% set errortext = 'Kommunikation Regler EC zu Steuerplatine Kältesatz fehlerhaft' %}
          {% elif value == 50 %}{% set errortext = 'Außenfühler (B1) unterbrochen' %}
          {% elif value == 51 %}{% set errortext = 'Außenfühler (B1) kurzgeschlossen' %}
          {% elif value == 52 %}{% set errortext = 'Weichenfühler (B2) unterbrochen' %}
          {% elif value == 53 %}{% set errortext = 'Weichenfühler (B2) kurzgeschlossen' %}
          {% elif value == 54 %}{% set errortext = 'Warmwasserfühler (B3) unterbrochen' %}
          {% elif value == 55 %}{% set errortext = 'Warmwasserfühler (B3) kurzgeschlossen' %}
          {% elif value == 56 %}{% set errortext = 'Vorlauffühler Verflüssiger (B4) unterbrochen' %}
          {% elif value == 57 %}{% set errortext = 'Vorlauffühler Verflüssiger (B4) kurzgeschlossen' %}
          {% elif value == 58 %}{% set errortext = 'Vorlauffühler (B7) unterbrochen' %}
          {% elif value == 59 %}{% set errortext = 'Vorlauffühler (B7) kurzgeschlossen' %}
          {% elif value == 60 %}{% set errortext = 'Rücklauffühler (B9) unterbrochen' %}
          {% elif value == 61 %}{% set errortext = 'Rücklauffühler (B9) kurzgeschlossen' %}
          {% elif value == 64 %}{% set errortext = 'Pufferfühler (B11) unterbrochen' %}
          {% elif value == 65 %}{% set errortext = 'Pufferfühler (B11) kurzgeschlossen' %}
          {% elif value == 66 %}{% set errortext = 'Mischerfühler regenerativ (B2.1) unterbrochen' %}
          {% elif value == 67 %}{% set errortext = 'Mischerfühler regenerativ (B2.1) kurzgeschlossen' %}
          {% elif value == 70 %}{% set errortext = 'Vorlauffühler Zweiter Heizkreis (B6.2) unterbrochen' %}
          {% elif value == 71 %}{% set errortext = 'Vorlauffühler Zweiter Heizkreis (B6.2) kurzgeschlossen' %}
          {% elif value == 72 %}{% set errortext = 'Fühler (T1.2) unterbrochen' %}
          {% elif value == 73 %}{% set errortext = 'Fühler (T1.2) kurzgeschlossen' %}
          {% elif value == 74 %}{% set errortext = 'Fühler (T2.2) unterbrochen' %}
          {% elif value == 75 %}{% set errortext = 'Fühler (T2.2) kurzgeschlossen' %}
          {% elif value == 90 %}{% set errortext = 'Analogeingang AE1 unterbrochen' %}
          {% elif value == 91 %}{% set errortext = 'Analogeingang AE1 kurzgeschlossen' %}
          {% elif value == 92 %}{% set errortext = 'Analogeingang AE2 unterbrochen' %}
          {% elif value == 93 %}{% set errortext = 'Analogeingang AE2 kurzgeschlossen' %}
          {% elif value == 94 %}{% set errortext = 'Analogeingang AE3 unterbrochen' %}
          {% elif value == 95 %}{% set errortext = 'Analogeingang AE3 kurzgeschlossen' %}
          {% elif value == 101 %}{% set errortext = 'Wärmepumpe wird außerhalb der Einsatzgrenzen betrieben' %}
          {% elif value == 102 %}{% set errortext = 'maximale Abtauzeit überschritten' %}
          {% elif value == 103 %}{% set errortext = 'Kommunikation Kältekreis fehlerhaft' %}
          {% elif value == 104 %}{% set errortext = 'Druckgastemperatur zu hoch' %}
          {% elif value == 105 %}{% set errortext = 'Stromaufnahme vom Inverter zu hoch' %}
          {% elif value == 106 %}{% set errortext = 'Stromaufnahme zu hoch' %}
          {% elif value == 107 %}{% set errortext = 'Gleichspannung am Inverter zu hoch' %}
          {% elif value == 108 %}{% set errortext = 'Gleichspannung am Inverter zu niedrig' %}
          {% elif value == 109 %}{% set errortext = 'Wärmepumpe wird außerhalb vom zulässigen Spannungsbereich betrieben' %}
          {% elif value == 110 %}{% set errortext = 'Wärmepumpe wird außerhalb vom zulässigen Spannungsbereich betrieben' %}
          {% elif value == 111 %}{% set errortext = 'Hochdruckschalter hat ausgelöst' %}
          {% elif value == 112 %}{% set errortext = 'Inverter ist überhitzt' %}
          {% elif value == 113 %}{% set errortext = 'Inverter ist überhitzt' %}
          {% elif value == 114 %}{% set errortext = 'Stellung vom Verdichtermotor kann nicht bestimmt werden' %}
          {% elif value == 117 %}{% set errortext = 'Gleichspannung am Inverter zu niedrig' %}
          {% elif value == 118 %}{% set errortext = 'Strom zwischen Inverter und Verdichter ist zu hoch' %}
          {% elif value == 119 %}{% set errortext = 'Stromaufnahme vom Verdichter zu hoch Zeitüberschreitung' %}
          {% elif value == 120 %}{% set errortext = 'Invertertemperatur zu hoch' %}
          {% elif value == 121 %}{% set errortext = 'Spannung am Inverter zu gering' %}
          {% elif value == 122 %}{% set errortext = 'Modbus-Konfigurationsfehler' %}
          {% elif value == 123 %}{% set errortext = 'keine Modbus-Verbindung' %}
          {% elif value == 124 %}{% set errortext = 'Druckgastemperatur zu hoch' %}
          {% elif value == 127 %}{% set errortext = 'Invertertemperatur zu hoch' %}
          {% elif value == 128 %}{% set errortext = 'Inverter ist überhitzt' %}
          {% elif value == 129 %}{% set errortext = 'Modbus-Kommunikation fehlerhaft' %}
          {% elif value == 130 %}{% set errortext = 'Modbus-Kommunikation fehlerhaft' %}
          {% elif value == 133 %}{% set errortext = 'Elektronikfehler' %}
          {% elif value == 135 %}{% set errortext = 'Hochdruckschalter defekt' %}
          {% elif value == 136 %}{% set errortext = 'Verdichter passt nicht zur Konfiguration' %}
          {% elif value == 137 %}{% set errortext = 'Hochdruckschalter passt nicht zur Konfiguration' %}
          {% elif value == 140 %}{% set errortext = 'Druckgastemperatur zu niedrig' %}
          {% elif value == 143 %}{% set errortext = 'Invertertemperatur zu niedrig' %}
          {% elif value == 144 %}{% set errortext = 'Drosselspulentemperatur zu niedrig' %}
          {% else %}{% set errortext = 'undefiniert' %}
          {% endif %}
          {{ errortext }}

        troubleshooting: >
          {% set value = states('sensor.wp_fehler')|int() %}
          {% if value == 65535 %}{% set troubleshooting = '' %}
          {% elif value == 1 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 2 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 3 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 4 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 5 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 6 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 7 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 8 %}{% set troubleshooting = 'Leitung prüfen, ggf. austauschen. Ggf. defektes Expansionsventil austauschen.' %}
          {% elif value == 9 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 10 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 11 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 12 %}{% set troubleshooting = 'Leitung prüfen, ggf. austauschen. Expansionsventil austauschen.' %}
          {% elif value == 13 %}{% set troubleshooting = 'Lastspannung am Verdichter und Inverter prüfen. & Verbindungsleitung Steuerplatine Kältesatz zu Inverter prüfen. & Ggf. defekte Steuerplatine Kältesatz austauschen.' %}
          {% elif value == 14 %}{% set troubleshooting = 'Verbindungsleitung zum Außengerät prüfen.' %}
          {% elif value == 15 %}{% set troubleshooting = 'Drücke im Kältekreis kontrollieren. Volumenstrom prüfen. & Verdrahtung prüfen. & Sicherstellen, dass die Einsatzgrenzen der Wärmepumpe eingehalten werden. & Kältekreis prüfen.' %}
          {% elif value == 16 %}{% set troubleshooting = 'Spannungsversorgung mindestens 10 Minuten unterbrechen. Bei wiederholtem Auftreten Weishaupt-Kundendienst benachrichtigen.' %}"
          {% elif value == 17 %}{% set troubleshooting = 'Spannungsversorgung mindestens 10 Minuten unterbrechen.' %}
          {% elif value == 18 %}{% set troubleshooting = 'Modbus-Verbindung prüfen.' %}
          {% elif value == 19 %}{% set troubleshooting = 'Bei wiederholtem Auftreten Weishaupt-Kundendienst benachrichtigen.' %}
          {% elif value == 20 %}{% set troubleshooting = 'Verdichtertyp prüfen. & Spannungsversorgung mindestens 10 Minuten unterbrechen.' %}
          {% elif value == 21 %}{% set troubleshooting = 'Verdampfer auf Eisfreiheit prüfen. Funktion Ventilator prüfen. & Niederdrucksensor (P1) prüfen. Kältekreis prüfen.' %}
          {% elif value == 22 %}{% set troubleshooting = 'Wenn der Fehler wiederholt auftritt: Überhitzung prüfen. & Verdichtersauggasfühler (T4) prüfen. Niederdrucksensor (P1) prüfen. & Antrieb Expansionsventil prüfen. Kältekreis prüfen.' %}
          {% elif value == 23 %}{% set troubleshooting = 'Wenn der Fehler wiederholt auftritt: Überhitzung prüfen. & Verdichtersauggasfühler (T4) prüfen. Niederdrucksensor (P1) prüfen. & Antrieb Expansionsventil prüfen. Kältekreis prüfen.' %}
          {% elif value == 24 %}{% set troubleshooting = 'Wenn der Fehler wiederholt auftritt: Kältekreis prüfen. & Lecksuche durchführen.' %}
          {% elif value == 25 %}{% set troubleshooting = 'Wenn der Fehler wiederholt auftritt: Kältekreis prüfen. & Lecksuche durchführen.' %}
          {% elif value == 26 %}{% set troubleshooting = 'Wärmeabnahme prüfen. & Hohe Warmwasser-Solltemperaturen vermeiden. & Sicherstellen, dass die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird. & Einstellung Überströmventil prüfen.' %}
          {% elif value == 27 %}{% set troubleshooting = 'Der erwartete Betriebszustand wird bei hoher Außentemperatur und geringer Vorlauftemperatur nicht erreichen. & Anlage mit 2. Wärmeerzeuger hochheizen.' %}
          {% elif value == 28 %}{% set troubleshooting = 'Wärmeabnahme prüfen. Einstellung Überströmventil prüfen. Heizwasser-Volumenstrom prüfen.' %}
          {% elif value == 29 %}{% set troubleshooting = 'Verdampfer auf Eisfreiheit prüfen. Funktion Ventilator prüfen. & Kältekreis prüfen.' %}
          {% elif value == 30 %}{% set troubleshooting = 'Die Einsatzgrenze der Wärmepumpe wurde überschritten. & Sicherstellen, dass die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird.' %}
          {% elif value == 32 %}{% set troubleshooting = 'Spannungsversorgung Verdichter prüfen. Spannungsversorgung von den Klemmen zum Kältesatz prüfen. & Weishaupt-Kundendienst benachrichtigen.' %}
          {% elif value == 33 %}{% set troubleshooting = 'Verbindungsleitung zwischen Regler und Erweiterungsmodul prüfen.' %}
          {% elif value == 40 %}{% set troubleshooting = 'Mindestvolumenstrom beachten [Kap. 3.4.6]. Volumenstrom prüfen, ggf. erhöhen. & Leitung Volumenstromsensor (B10) prüfen. Volumenstromsensor (B10) prüfen, ggf. austauschen.' %}
          {% elif value == 41 %}{% set troubleshooting = 'Volumenstrom anpassen. Pumpenleistung reduzieren. Vierwegeventil prüfen. & Ggf. Funktion deaktivieren.' %}
          {% elif value == 43 %}{% set troubleshooting = 'Verdampfer auf Eisfreiheit prüfen. Funktion Ventilator prüfen.' %}
          {% elif value == 44 %}{% set troubleshooting = 'Verdampfer auf Eisfreiheit prüfen. Funktion Ventilator prüfen.' %}
          {% elif value == 47 %}{% set troubleshooting = 'Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 50 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 51 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 52 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 53 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 54 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 55 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 56 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 57 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 58 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 59 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 60 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 61 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 64 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 65 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 66 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 67 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 70 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 71 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 72 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 73 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 74 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 75 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 90 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 91 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 92 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 93 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 94 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 95 %}{% set troubleshooting = 'Fühler und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 101 %}{% set troubleshooting = 'Sicherstellen, dass die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird, siehe W 26 bis W 30.' %}
          {% elif value == 102 %}{% set troubleshooting = 'Bei exponiertem Aufstellungsort kann starker Wind zu dieser Warnung führen. Nach der Abtauung Verdampfer auf Eisfreiheit prüfen.' %}
          {% elif value == 103 %}{% set troubleshooting = 'Spannungsversorgung mindestens 10 Minuten unterbrechen. Bei wiederholtem Auftreten Weishaupt-Kundendienst benachrichtigen.' %}
          {% elif value == 104 %}{% set troubleshooting = 'Wärmeabnahme prüfen. Kältekreis prüfen.' %}
          {% elif value == 105 %}{% set troubleshooting = 'Sicherstellen, dass die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird. & Verdichteranschluss am Inverter prüfen.' %}
          {% elif value == 106 %}{% set troubleshooting = 'Sicherstellen, dass die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird. & Spannungsversorgung prüfen (Netzspannung zu gering). & Drosselspulen in der 400 V Zuleitung zum Inverter prüfen.' %}
          {% elif value == 107 %}{% set troubleshooting = 'Sicherstellen, dass die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird. & Spannungsversorgung prüfen.' %}
          {% elif value == 108 %}{% set troubleshooting = 'Sicherstellen, dass die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird. & Spannungsversorgung prüfen.' %}
          {% elif value == 109 %}{% set troubleshooting = 'Spannungsversorgung prüfen.' %}
          {% elif value == 110 %}{% set troubleshooting = 'Spannungsversorgung prüfen.' %}
          {% elif value == 111 %}{% set troubleshooting = 'Wärmeabnahme prüfen. & Einstellung vom Überströmventil prüfen. Stellung der Kugelhähne am Innenund Außengerät prüfen. & Drücke im Kältekreis kontrollieren. Volumenstrom kontrollieren. & Verdrahtung prüfen. & Sicherstellen, dass die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird. & Kältekreis prüfen.' %}
          {% elif value == 112 %}{% set troubleshooting = 'Sicherstellen, dass: die Montagebedingungen für das Innengerät eingehalten werden & die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird & Weishaupt-Kundendienst benachrichtigen (Version der Steuerplatine Kältesatz RCC Modbus prüfen).' %}
          {% elif value == 113 %}{% set troubleshooting = 'Sicherstellen, dass: die Montagebedingungen für das Innengerät eingehalten werden & die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird & Weishaupt-Kundendienst benachrichtigen (Version der Steuerplatine Kältesatz RCC Modbus prüfen).' %}
          {% elif value == 114 %}{% set troubleshooting = 'Sicherstellen, dass die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird. & Verdichteranschluss am Inverter prüfen.' %}
          {% elif value == 117 %}{% set troubleshooting = 'Sicherstellen, dass die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird. & Spannungsversorgung prüfen.' %}
          {% elif value == 118 %}{% set troubleshooting = 'Sicherstellen, dass die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird. & Verdichteranschluss am Inverter prüfen. Verdichter-Wicklungswiderstände messen.' %}
          {% elif value == 119 %}{% set troubleshooting = 'Sicherstellen, dass die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird. & Verdichteranschluss am Inverter prüfen. Verdichter-Wicklungswiderstände messen.' %}
          {% elif value == 120 %}{% set troubleshooting = 'Sicherstellen, dass: die Montagebedingungen für das Innengerät eingehalten werden & die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird' %}
          {% elif value == 121 %}{% set troubleshooting = 'Spannung nach den Drosselspulen messen.' %}
          {% elif value == 122 %}{% set troubleshooting = 'Spannungsversorgung mindestens 10 Minuten unterbrechen.' %}
          {% elif value == 123 %}{% set troubleshooting = 'Modbus-Verbindung (Leitung und Stecker) zwischen Inverter und Steuerplatine Kältesatz prüfen. & Spannungsversorgung mindestens 10 Minuten unterbrechen.' %}
          {% elif value == 124 %}{% set troubleshooting = 'Wärmeabnahme prüfen. Kältekreis prüfen.' %}
          {% elif value == 127 %}{% set troubleshooting = 'Sicherstellen, dass: die Montagebedingungen für das Innengerät eingehalten werden & die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird' %}
          {% elif value == 128 %}{% set troubleshooting = 'Sicherstellen, dass: die Montagebedingungen für das Innengerät eingehalten werden & die Wärmepumpe innerhalb der Einsatzgrenzen betrieben wird & Weishaupt-Kundendienst benachrichtigen (Version der Steuerplatine Kältesatz RCC Modbus prüfen).' %}
          {% elif value == 129 %}{% set troubleshooting = 'Modbus-Verbindung zwischen Inverter und Steuerplatine Kältesatz prüfen (Leitung und Stecker). & Spannungsversorgung mindestens 10 Minuten unterbrechen.' %}
          {% elif value == 130 %}{% set troubleshooting = 'Modbus-Verbindung zwischen Inverter und Steuerplatine Kältesatz prüfen (Leitung und Stecker). & Spannungsversorgung mindestens 10 Minuten unterbrechen.' %}
          {% elif value == 133 %}{% set troubleshooting = 'Spannungsversorgung mindestens 10 Minuten unterbrechen.' %}
          {% elif value == 135 %}{% set troubleshooting = 'Hochdruckschalter-Anschluss prüfen.' %}
          {% elif value == 136 %}{% set troubleshooting = 'Verdichtertyp prüfen. & Spannungsversorgung mindestens 10 Minuten unterbrechen.' %}
          {% elif value == 137 %}{% set troubleshooting = 'Hochdruckschalter prüfen. Spannungsversorgung mindestens 10 Minuten unterbrechen.' %}
          {% elif value == 140 %}{% set troubleshooting = 'Druckgasfühler (DT) und Leitung prüfen, ggf. austauschen.' %}
          {% elif value == 143 %}{% set troubleshooting = 'Kühlung am Inverter prüfen. Gerät neu starten.' %}
          {% elif value == 144 %}{% set troubleshooting = 'Sicherstellen, dass die Montagebedingungen für das Innengerät eingehalten werden.' %}
          {% else %}{% set troubleshooting = 'undefiniert' %}
          {% endif %}
          {{ troubleshooting }}
      state: >
        {% set value = states('sensor.wp_fehler')|int() %}
        {% if value == 65535 %}
          {{ "Kein Fehler"}}
        {% else %}
          {{ states('sensor.wp_fehler')|int() }}: {{ state_attr('sensor.wp_fehler_text', 'errortext') }}
        {% endif %}

1 Like

@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