Dear Weishaupt Users,
today i would like to share with you how i have integrated my Weishaupt Biblock Heat pump via modbus in Homeassistant.
I was in touch with some Weishaupt employees and happy that they have shared a List of Datapoints for modbus connectivity. Other ways of integrating were not 100% stable & i have now tested modbus through the last months & it works really great! It is even possible to set e.g. Operating mode or Target warmwater temperature.
Here is how it currently looks like:
Here are the steps to follow:
- Configure Modbus with static IP on your Weishaupt Device (not possible in WEMPortal - you need to configure it on the device)
- Configure modbus connectivity - here is my sample yaml:
Modbus YAML config
- name: wpump
type: tcp
host: 192.168.X.X
port: 502
climates:
- name: "WP_Warmwasser"
address: 42103
input_type: holding
count: 1
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
count: 1
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
count: 1
scale: 0.1
offset: 0
precision: 1
data_type: int16
unique_id: wpump.wwtemp
#System
- name: WP_Betrieb
slave: 1
address: 30006
input_type: input
count: 1
scale: 1
offset: 0
precision: 0
data_type: int16
unique_id: wpump.betrieb
- name: WP_Stoerungsfrei
slave: 1
address: 30005
input_type: input
count: 1
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
count: 1
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
count: 1
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
count: 1
scale: 0.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
count: 1
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
count: 1
scale: 0.1
offset: 0
precision: 1
data_type: int16
- name: WP_Leistungsanforderung
slave: 1
address: 33103
input_type: input
unit_of_measurement: '%'
state_class: measurement
count: 1
scale: 1
offset: 0
precision: 1
data_type: int16
- name: WP_Heizkurve
slave: 1
address: 41108
input_type: holding
state_class: measurement
count: 1
scale: 0.01
offset: 0
precision: 2
data_type: int16
# 2. WEZ
- name: WP_E1_Status
slave: 1
address: 34104
input_type: input
count: 1
scale: 1
offset: 0
precision: 0
data_type: int16
- name: WP_E2_Status
slave: 1
address: 34105
input_type: input
count: 1
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
count: 1
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
count: 1
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
count: 1
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
count: 1
scale: 1
offset: 0
precision: 1
data_type: int16
- name: WPST_Gesamt_Jahr
slave: 1
address: 36104
input_type: input
unit_of_measurement: kWh
state_class: measurement
device_class: energy
count: 1
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
count: 1
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
count: 1
scale: 1
offset: 0
precision: 1
data_type: int16
- name: WPST_Heizen_Jahr
slave: 1
address: 36204
input_type: input
unit_of_measurement: kWh
state_class: measurement
device_class: energy
count: 1
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
count: 1
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
count: 1
scale: 1
offset: 0
precision: 1
data_type: int16
- name: WPST_WW_Jahr
slave: 1
address: 36304
input_type: input
unit_of_measurement: kWh
state_class: measurement
device_class: energy
count: 1
scale: 1
offset: 0
precision: 1
data_type: int16
- To make Status & Errormessage more readable, i have additionally added two template sensors in my config.yaml:
Template Sensors
- platform: template
sensors:
wp_betrieb_txt:
value_template: >
{% if is_state('sensor.betrieb', '19') %}
Heizbetrieb
{% elif is_state('sensor.betrieb', '20') %}
Warmwasserbetrieb
{% elif is_state('sensor.betrieb', '8') %}
Abtauen
{% elif is_state('sensor.betrieb', '15') %}
Standzeit
{% elif is_state('sensor.betrieb', '25') %}
Sommer
{% else %}
{{ states('sensor.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.betrieb', '0') %}
Störung
{% else %}
ERROR
{% endif %}
friendly_name: "WP Störung"
If there are questions, i am happy to share more details.
Hope this helps:)
BR,
Tobias