Weishaupt Heatpump integration via modbus

Hi @rafdev18,

unfortunately, not all registers are documented. I discoverd the following for power consumption:

36701: elektr. Energie heute
36702: elektr. Energie gestern
36703: elektr. Energie Monat
36704: elektr. Energie Jahr (always 0)

1 Like

@miza fantastic ! Thank you ! the register information is correct. Unfortunately it is only rounded to the full kWh.

Did you find by any chance the JAZ also in one register ?

When I do take now the generated heat and divide it by the used electricity I end up for the current month with a JAZ of 5.75 
 when I look in the Biblock the JAZ is currently at a 4.6 level. Can be the full kWh rounding 
 would be great to have the JAZ directly from the biblock.

THANKS for your help ! big step forward :slight_smile:

@miza - I do get the actual power consumption for the year from register 36704 ! I just had my biblock installed and might have a newer SW release which fixed the “always 0” return.

Liebes Forum,

momentan lese ich via MODBUS fĂŒr mich alle relevanten Daten aus meiner Weishaupt WĂ€rmepumpe aus. FĂŒr meinen flexiblen Stromtarif (Tibber) wĂŒrde ich gerne in Hochpreiszeiten eine (EVU-)Sperre an meiner WP aktivieren. Funktioniert das auch ĂŒber Modbus oder muss ich hier z.B. einen Shelly1 direkt
an die Steuerleitungen an der WĂ€rmepumpe anschließen. Modbus wĂ€re mir natĂŒrlich lieber.

Vielleicht kann mir ja hier jemand helfen. Besten Dank im Vorraus!

Gruß, Christoph

Dear Forum,

I am currently reading out all relevant data from my Weishaupt heat pump via MODBUS. For my flexible electricity tariff (Tibber) I would like to activate a (EVU) lock on my heat pump in high price times. Does this also work via Modbus or do I have to connect here e.g. a Shelly1 directly to the control lines on the heat pump. Modbus would be preferable to me of course.

Maybe someone can help me here. Many thanks in advance!

Greetings, Christoph

2 Likes

Hallo chriscom2020,
meines Wissens geht die EVU Sperre nur per Digitaleingang (also zB mit Shelly). Eine Alternative wĂ€re die Umstellung der Systembetriebsart, z.B. von Heizen auf Standby und dann wieder zurĂŒck. Das geht per Schreib/Lesebefehl auf Register 40001 (0=Auto, 1=Heizen, 2=KĂŒhlen, 3=Sommer, 4=Standby, 5=2.WEZ)
Meine Lösung baue ich eher mittels Absenkung der Solltemperatur damit mir die Bude nicht zu sehr auskĂŒhlt (unsere Estrichschicht ist nicht sehr dick daher speichert der Boden nicht so lange)

Hallo mezzo1161,

danke fĂŒr den Hinweis, das habe ich befĂŒrchtet
 wie setzt man den Schreib-Lesebefehl in der modbus.yaml um. Auch ĂŒber Sensors? Hast du da evtl. ein Beispiel?

Danke und Gruß,
Christoph

Hi all, I also would like to integrate our heat pump (WWP LS 8-B RE) into Home Assistant. Currently it is not connected to the Internet. Is there a way to capture this data from the WWW-CPU COM unit directly?

What additional hardware do I need?

Hi Tobias,

könntest du mir vielleicht nÀher erklÀren wie du die Template-Sensors erstellt hast?
Die YAML-Konfiguration hat bestens funktioniert aber ich wĂŒrde doch sehr gerne die BetriebszustĂ€nde in Klartext sehen und nicht nur “25”!
Wo genau kommt z.B. die wp_betrieb_txt hin?
Auch von mir noch vielen Dank fĂŒr deine bisherige tolle Arbeit!

Gruß,
Christoph

Hi Tobias,

could you explain to me how you created the template sensors? The YAML configuration worked fine but I would like to see the operation states in plain text and not only “25”! Where exactly does e.g. the wp_operation_txt go? Also from me many thanks for your great work so far!

Greetings, Christoph

sensors:
    #System
    - name: WP_Systembetriebsart
      slave: 1
      address: 40001
      input_type: holding
      data_type: int16
      unique_id: wpump.systembetriebsart

Ich sende ĂŒber eine Automatisierung (Trigger muss noch eingefĂŒgt werden) die neue Betriebsart:

alias: WP Systembetriebsart 2.WEZ
description: ""
trigger: []
condition: []
action:
  - service: modbus.write_register
    data:
      hub: wpump
      address: 40001
      slave: 1
      value: 5
mode: single

Wie kann man das Ganze textpassiert mit Dropdown realisieren? Und dass der Wert direkt geschrieben ohne Umwege ĂŒber die Automatisierung.
wie z.B.:

Based on the discussion here I was able to build my Biblock dash and I am pretty happy with the result.

I am now looking into optimising my hot water production and would like to control the circulation pump over modbus. Looks like this is not possible for the biblock. I am currently underwhelmed how little you really can control over an automation from the outside on Modbus.

What options do I have to control hot water production ? I would like to force hot water production towards noon as the temperature difference is then low and I need less energy to heat my water for the next 24h. I can easily keep the temperature for 24h with circulation switched off.

Would appreciate any tips 
 looks like I can not switch the hot water mode over modbus, can not switch the circulation pump 
 only the target temperature. So maybe I set to 40 C when I would like the heat pump to work and afterwards go back to 30 C 
 but it would be much nicer to toggle between Normal and Absenk temperature as the circulation pump is off in Absenk mode.

1 Like

Hi TobiM,
i’m really interessted to add your WP View. I’ve a Weishaupt WP too.
But i’m not able to add the view to my home assistent.
I’m also totally new to the topic.

Hope you can help me.
Thanks and Greets.

Can write also in german
no prob

Hi Ice2k23,
did you solve your problem until yet. I have the same problem. The pump is available in the network (webserver on the browser) and modbubuc tcp is activated in the network menu on the pump, but my HA and a network scanner say that there are no data.

I would appreciate your feedback. Thanks a lot in advance.

Kallixtus

Solved - anybody interested how you can control hot water production and circulation over Modbus pls reach out. Can now automate both over the Modbus interface - some tricky workarounds :wink:

Hi rafdev18,
sounds great - please share.
I did not manage yet to control circulation and water production.
Only the warm water push on 42102 was a functionality I managed to implement.

Thanks and regards,
Stefan

Hi rafdev18,

great, please share how you managed it!

Regards,

Christoph

Hi @stefkoch09 and @chriscom2020 - here is the trick I discovered. You can easily start the warm water push function over Modbus register load.

The problem is that Weishaupt does not allow you to handle circulation pump separately. My workaround is to do a 1 min long warm water push call which starts immediately the circulation but not the heat pump ! then I wait and do again a 1 min warm water push. After doing this 3 times my circulation loop is heated and I do have immediate hot water without the heat pump starting.

PLS find my code for just running the circulation here:

- alias: WP Warmwasser Push
    trigger:
      - platform: state
        entity_id: input_boolean.start_wp_ww_push
        to: 'on'
    action:
      - repeat:
          count: 3
          sequence:
            - service: modbus.write_register
              data:
                hub: wpump
                address: 42102
                slave: 1
                value: 1
                # value 1 = 1 min circulation without starting heat pump !
            - delay:
                seconds: 70
      - service: input_boolean.turn_off
        entity_id: input_boolean.start_wp_ww_push
    mode: single

Then for the warm water production I removed the schedule from the Weishaupt controller and do start a 1h warm water push over an automation at 2pm in the afternoon. This way I can produce my hot water when the temperature difference is lowest.

Here the automation for hot water production at 2pm:


  - alias: WP Warmwasser Load
    trigger:
    - platform: time
      at: '14:00:00'
    action:
    - service: modbus.write_register
      data:
        hub: wpump
        address: 42102
        slave: 1
        value: 60
    mode: single

With the button and the automation I reduced my energy consumption for hot water by 65% ! Enjoy reusing the code —

1 Like

Great, thank you very much!

really nice dashboard, would you share your complete configurations along with the dashboard yaml’s? I see some entities that are not included in the OP thread. Would be awesome. Thanks!

Hello everyone,

I’m new in the Home Assitant world and i’m already thrilled about the possibilities.
Thank you for the community and the nice work done here.

I also have a WBB12 (Version WWP-SG 5.0 / Version WWP-EC WBB v5.1) and i’ve added it through Modbus. The main code from @tobiasm worked like a charm, but i had a lot of problems with the templates.

Here is my visual proposition of what i’ve done and the code with it.
Maybe it can help some newbee as i am.

Glad to give back to the community

What i’m still missing
1a) energie stats for the year. Here the register sends “0”, as some of you have pointed
1b) therefore i cannot calculate the JAZ for the year.
2) The HeatCycles. My heatpump changes a lot its status from “Heating” to “Standby”. In the WEM Portal is counted each time as a Compressor switching cycles (“Schaltspiele Verdichter”). Not sure how to calculate it. I’ve seen your code @kirimeister, but i don’t know yet what to take for the binary Sensor.
I should actualy have a look at each change in “Betriebsmodus”. (or better, find a register for that)
3) i would like to scan the Modbus and compare the values with the heat pump and see if the JAZ is directly exposed. This stat is available on the display with the OEM Code “21”
4) the colors can be improved. But the standard Lovelace doesn’t allow me to change them
 I’ll have to search how to do it.

1) Config.yaml
→ here I’ve added thoses 2 lines to the config.yaml and created 2x Files with the “File Editor”
→ I’ve took the “count: 1”, as it is not supported anymore with the new Release HomeAssistant 202310. Otherwise i was getting Modbus Errors

- name: wpump
  type: tcp
  host: 192.168.178.62
  port: 502
  climates:
      - name: "WP_Warmwasser"
        address: 42103
        input_type: holding
        data_type: int16
        max_temp: 50
        min_temp: 15
        offset: 0
        precision: 1
        scale: 0.1
        target_temp_register: 42103
        temp_step: 1
        temperature_unit: C
  sensors:
#Warmwasser
    - name: WP_Warmwassersolltemperatur
      slave: 1
      address: 32101
      input_type: input
      unit_of_measurement: °C
      state_class: measurement
      scale: 0.1
      offset: 0
      precision: 1
      data_type: int16
      unique_id: wpump.wwsolltemp
    - name: WP_Warmwassertemperatur
      slave: 1
      address: 32102
      input_type: input
      unit_of_measurement: °C
      state_class: measurement
      scale: 0.1
      offset: 0
      precision: 1
      data_type: int16
      unique_id: wpump.wwtemp
    - name: "WP_WarmwasserPush"
      slave: 1
      address: 42102
      input_type: holding
      scale: 1
      offset: 0
      precision: 0
      data_type: int16
#System
    - name: WP_Betrieb
      slave: 1
      address: 30006
      input_type: input
      scale: 1
      offset: 0
      precision: 0
      data_type: int16
      unique_id: wpump.betrieb
    - name: WP_Stoerungsfrei
      slave: 1
      address: 30005
      input_type: input
      scale: 1
      offset: 0
      precision: 0
      data_type: int16
    - name: WP_Fehlercode
      slave: 1
      address: 30003
      input_type: input
      scale: 1
      offset: 0
      precision: 0
      data_type: int16
    - name: WP_warnungscode
      slave: 1
      address: 30004
      input_type: input
      scale: 1
      offset: 0
      precision: 0
      data_type: int16  
    - name: WP_Außentemperatur
      slave: 1
      address: 30001
      input_type: input
      unit_of_measurement: °C
      state_class: measurement
      scale: 0.1
      offset: 0
      precision: 1
      data_type: int16
#Waermepumpe
    - name: WP_Leistungsanforderung
      slave: 1
      address: 33103
      input_type: input
      unit_of_measurement: '%'
      state_class: measurement
      scale: 1
      offset: 0
      precision: 1
      data_type: int16
    - name: WP_Vorlauftemperatur
      slave: 1
      address: 33104
      input_type: input
      unit_of_measurement: °C
      state_class: measurement
      scale: 0.1
      offset: 0
      precision: 1
      data_type: int16
    - name: WP_RĂŒcklauftemperatur
      slave: 1
      address: 33105
      input_type: input
      unit_of_measurement: °C
      state_class: measurement
      scale: 0.1
      offset: 0
      precision: 1
      data_type: int16
#Heizkreis
    - name: WP_Raumsolltemperatur
      slave: 1
      address: 31101
      input_type: input
      unit_of_measurement: °C
      state_class: measurement
      scale: 0.1
      offset: 0
      precision: 1
      data_type: int16
    - name: WP_Vorlaufsolltemperatur
      slave: 1
      address: 31104
      input_type: input
      unit_of_measurement: °C
      state_class: measurement
      scale: 0.1
      offset: 0
      precision: 1
      data_type: int16
    - name: WP_Heizkurve
      slave: 1
      address: 41108
      input_type: holding
      state_class: measurement
      scale: 0.01
      offset: 0
      precision: 2
      data_type: int16
# 2. WEZ
    - name: WP_E1_Status
      slave: 1
      address: 34104
      input_type: input
      scale: 1
      offset: 0
      precision: 0
      data_type: int16
    - name: WP_E2_Status
      slave: 1
      address: 34105
      input_type: input
      scale: 1
      offset: 0
      precision: 0
      data_type: int16
    - name: WP_E1_Stunden
      slave: 1
      address: 34106
      input_type: input
      unit_of_measurement: h
      state_class: measurement
      scale: 1
      offset: 0
      precision: 0
      data_type: int16
    - name: WP_E2_Stunden
      slave: 1
      address: 34107
      input_type: input
      unit_of_measurement: h
      state_class: measurement
      scale: 1
      offset: 0
      precision: 0
      data_type: int16
#Stats
    - name: WPST_Gesamt_Tag
      slave: 1
      address: 36101
      input_type: input
      unit_of_measurement: kWh
      state_class: measurement
      device_class: energy
      scale: 1
      offset: 0
      precision: 1
      data_type: int16
    - name: WPST_Gesamt_Monat
      slave: 1
      address: 36103
      input_type: input
      unit_of_measurement: kWh
      state_class: measurement
      device_class: energy
      scale: 1
      offset: 0
      precision: 1
      data_type: int16
    - name: WPST_Heizen_Tag
      slave: 1
      address: 36201
      input_type: input
      unit_of_measurement: kWh
      state_class: measurement
      device_class: energy
      scale: 1
      offset: 0
      precision: 1
      data_type: int16
    - name: WPST_Heizen_Monat
      slave: 1
      address: 36203
      input_type: input
      unit_of_measurement: kWh
      state_class: measurement
      device_class: energy
      scale: 1
      offset: 0
      precision: 1
      data_type: int16
    - name: WPST_WW_Tag
      slave: 1
      address: 36301
      input_type: input
      unit_of_measurement: kWh
      state_class: measurement
      device_class: energy
      scale: 1
      offset: 0
      precision: 1
      data_type: int16
    - name: WPST_WW_Monat
      slave: 1
      address: 36303
      input_type: input
      unit_of_measurement: kWh
      state_class: measurement
      device_class: energy
      scale: 1
      offset: 0
      precision: 1
      data_type: int16
    - name: WPST_Kuehlen_Tag
      slave: 1
      address: 36401
      input_type: input
      unit_of_measurement: kWh
      state_class: measurement
      device_class: energy
      scale: 1
      offset: 0
      precision: 1
      data_type: int16
    - name: WPST_Kuehlen_Monat
      slave: 1
      address: 36403
      input_type: input
      unit_of_measurement: kWh
      state_class: measurement
      device_class: energy
      scale: 1
      offset: 0
      precision: 1
      data_type: int16
    - name: WPST_Elektrisch_Tag
      slave: 1
      address: 36701
      input_type: input
      unit_of_measurement: kWh
      state_class: measurement
      device_class: energy
      scale: 1
      offset: 0
      precision: 1
      data_type: int16
    - name: WPST_Elektrisch_Monat
      slave: 1
      address: 36703
      input_type: input
      unit_of_measurement: kWh
      state_class: measurement
      device_class: energy
      scale: 1
      offset: 0
      precision: 1
      data_type: int16

3) templates.yaml
create a file with FileEditor called templates.yaml
→ my file is located directly in the same folder as the config.yaml file

# configuration for Heatpump_Status
    sensors:
      wp_betrieb_txt:
        value_template: >
          {% if is_state('sensor.wp_betrieb', '19') %}
            Heizbetrieb
          {% elif is_state('sensor.wp_betrieb', '20') %}
            Warmwasserbetrieb
          {% elif is_state('sensor.wp_betrieb', '8') %}
            Abtauen
          {% elif is_state('sensor.wp_betrieb', '15') %}
            Standzeit
          {% elif is_state('sensor.wp_betrieb', '25') %}
            Sommer
          {% elif is_state('sensor.wp_betrieb', '23') %}
            Kuehlbetrieb
          {% else %}
            {{ states('sensor.wp_betrieb') }}       
          {% endif %}
        friendly_name: "WP Betrieb"
      wp_stoerung_txt:
        value_template: >
          {% if is_state('sensor.wp_stoerungsfrei', '1') %}
            keine Störung
          {% elif is_state('sensor.wp_betrieb', '0') %}
            Störung
          {% else %}
            ERROR           
          {% endif %}
        friendly_name: "WP Störung"
      wpst_jaz_tag:
        value_template: >
          {{ (float(states('sensor.WPST_Gesamt_Tag')) / float(states('sensor.WPST_Elektrisch_Tag')))|round(1) }}
        friendly_name: "WP JAZ Tag"
      wpst_jaz_monat:
        value_template: >
          {{ (float(states('sensor.WPST_Gesamt_Monat')) / float(states('sensor.WPST_Elektrisch_Monat')))|round(1) }}
        friendly_name: "WP JAZ Monat"

4) Visualisation
→ Here my code for the visualisation

title: Home
views:
  - title: WĂ€rmepumpe
    path: waermepumpe
    subview: false
    icon: mdi:heating-coil
    badges:
      - entity: sensor.wp_warmwassertemperatur
        name: WW
      - entity: sensor.wp_vorlauftemperatur
        name: Vorlauf
      - entity: sensor.wp_rucklauftemperatur
        name: RĂŒcklauf
      - entity: sensor.wp_betrieb_txt
        name: Modus
      - entity: sensor.wp_warnungscode
        name: Wcode
      - entity: sensor.wpst_jaz_tag
        name: JAZ Tag
      - entity: sensor.wpst_jaz_monat
        name: JAZ Monat
      - entity: sensor.wp_e1_stunden
        name: E1
      - entity: sensor.wp_e2_stunden
        name: E2
    cards:
      - type: vertical-stack
        cards:
          - type: conditional
            conditions:
              - entity: sensor.wp_stoerungsfrei
                state: '0'
            card:
              type: entity
              entity: sensor.wp_warnungscode
              name: Fehlercode
              icon: mdi:alarm-light
          - type: history-graph
            entities:
              - entity: sensor.wp_betrieb_txt
                name: ' '
            title: Betriebsmodus 24h
            hours_to_show: 24
          - type: history-graph
            entities:
              - entity: sensor.wp_betrieb_txt
                name: ' '
            title: Betriebsmodus 4h
            hours_to_show: 4
          - type: entities
            entities:
              - entity: sensor.wp_aussentemperatur
                name: Außentemperatur
              - entity: sensor.wp_vorlaufsolltemperatur
                name: Vorlauf SOLL
              - entity: sensor.wp_vorlauftemperatur
                name: Vorlauf IST
              - entity: sensor.wp_rucklauftemperatur
                name: RĂŒcklauf
              - entity: sensor.wp_warmwassersolltemperatur
                name: Warmwasser SOLL
              - entity: sensor.wp_warmwassertemperatur
                name: Warmwasser IST
              - entity: sensor.wp_warmwasserpush
                name: Warmwasserpush (min)
              - entity: sensor.wp_raumsolltemperatur
                name: Raum SOLL
            title: Temperatur
      - type: vertical-stack
        cards:
          - type: sensor
            entity: sensor.wp_aussentemperatur
            graph: line
          - graph: line
            type: sensor
            entity: sensor.wp_vorlaufsolltemperatur
            detail: 2
            hours_to_show: 24
            name: Vorlauf SOLL
          - graph: line
            type: sensor
            entity: sensor.wp_vorlauftemperatur
            detail: 2
            hours_to_show: 24
            name: Vorlauf IST
          - graph: line
            type: sensor
            entity: sensor.wp_rucklauftemperatur
            detail: 2
            hours_to_show: 24
            name: RĂŒcklauf
          - graph: line
            type: sensor
            entity: sensor.wp_warmwassersolltemperatur
            detail: 2
            hours_to_show: 24
            name: Warmwasser SOLL
          - graph: line
            type: sensor
            entity: sensor.wp_warmwassertemperatur
            detail: 2
            hours_to_show: 24
            name: Wasrmwasser IST
          - graph: line
            type: sensor
            entity: sensor.wpst_jaz_tag
            detail: 2
            hours_to_show: 24
            name: JAZ Tag
          - graph: line
            type: sensor
            entity: sensor.wpst_jaz_monat
            detail: 2
            hours_to_show: 24
            name: JAZ Monat
      - type: vertical-stack
        cards:
          - type: entities
            entities:
              - entity: sensor.wpst_elektrisch_tag
                name: elekt. Energie Tag
              - entity: sensor.wpst_gesamt_tag
                name: therm. Energie gesamt Tag
              - entity: sensor.wpst_heizen_tag
                name: therm. Energie Heizen Tag
              - entity: sensor.wpst_ww_tag
                name: therm. Energie WW Tag
              - entity: sensor.wpst_kuehlen_tag
                name: therm. Energie KĂŒhlen Tag
            state_color: false
            title: Energie (Tag)
          - type: entities
            entities:
              - entity: sensor.wpst_elektrisch_monat
                name: elekt. Energie Monat
              - entity: sensor.wpst_gesamt_monat
                name: therm. Energie gesamt Monat
              - entity: sensor.wpst_heizen_monat
                name: therm. Energie Heizen Monat
              - entity: sensor.wpst_ww_monat
                name: therm. Energie WW Monat
              - entity: sensor.wpst_kuehlen_monat
                name: therm. Energie KĂŒhlen Monat
            title: Energie (Monat)
          - type: entities
            entities:
              - entity: sensor.wp_e1_status
              - entity: sensor.wp_e1_stunden
              - entity: sensor.wp_e2_status
              - entity: sensor.wp_e2_stunden
            title: 2.WĂ€rme Erzeuger
3 Likes

Hi @rafdev18 , thanks for the hints on circulation. In the meantime I did try it out and it works nicely. Regards, Stefan

1 Like