Skip to content

Instantly share code, notes, and snippets.

@ntompson
Created February 27, 2020 01:54
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ntompson/e9e71e41137fc30fda9eee58b3e3b35c to your computer and use it in GitHub Desktop.
Save ntompson/e9e71e41137fc30fda9eee58b3e3b35c to your computer and use it in GitHub Desktop.
Stiebel Elton configuration for WPM3
############################################################################
#
# Stiebel Eltron - ISG modbus control - implemented as scripts
#
# Reference: https://www.stiebel-eltron.com/content/dam/ste/cdbassets/current/bedienungs-_u_installationsanleitungen/ISG_Modbus__b89c1c53-6d34-4243-a630-b42cf0633361.pdf
#
############################################################################
# 1501 OPERATING MODE x 8 (x1)
# STANDBY MODE 1
# PROGRAMMED OPERATION 2
# COMFORT MODE 3
# ECO MODE 4
# DHW MODE 5
# EMERGENCY OPERATION 0
# 1502 COMFORT TEMPERATURE x 2 (x10)
# 1503 ECO TEMPERATURE x 2 (x10)
# 1504 HEATING CURVE RISE x 7 (x100)
# 1508 FIXED VALUE OPERATION x 2 (x10)
# 1509 DUAL MODE TEMP HZG x 2 (x10)
# 1510 COMFORT TEMPERATURE [DHW] x 2 (x10)
# 1511 ECO TEMPERATURE [DHW] x 2 (x10)
# 1513 DUAL MODE TEMP WW x 2 (x10)
#
# SUBTRACT 1 FROM ADDRESSES ABOVE BEFORE ISSUING SERVICE CALL
#
# NEGATIVE NUMBERS: 2^(REGISTER SIZE) - ABS(NUMBER x SCALAR)
# EG -19.5 = 65341
script:
## Heat pump mode control
hp_comfort_mode:
alias: Activate comfort mode
description: 'Activate comfort mode on the heat pump'
sequence:
service: modbus.write_register
data_template:
hub: modbus_hp
unit: 1
address: 1500 #1501
value: 3
hp_standby_mode:
alias: Activate standby mode
description: 'Activate standby mode on the heat pump'
sequence:
service: modbus.write_register
data_template:
hub: modbus_hp
unit: 1
address: 1500 #1501
value: 1
## Heating control
hp_set_comfort_temp_heating:
alias: Set comfort temperature heating
description: 'Set the comfort temperature set point for heating'
fields:
temperature:
description: 'The set point temperature in °C'
example: 22
sequence:
# Make sure fixed temp heating is deactivated - issue 0x9000 to deactivate
- service: modbus.write_register
data_template:
hub: modbus_hp
unit: 1
address: 1507 #1508
value: 36864
# Set the temp
- service: modbus.write_register
data_template:
hub: modbus_hp
unit: 1
address: 1501 #1502
value: >-
{% if temperature >= 5 %}
{{ (temperature * 10) |int }}
{% endif %}
hp_set_fixed_temp_heating:
alias: Set fixed temperature heating
description: 'Set the temperature set point for heating. Deactivate by calling hp_set_comfort_temp_heating, which issues 0x9000 to fixed temp register'
fields:
temperature:
description: 'The set point temperature in °C'
example: 50
sequence:
service: modbus.write_register
data_template:
hub: modbus_hp
unit: 1
address: 1507 #1508
value: >-
{% if temperature >= 20 %}
{{ (temperature * 10) |int }}
{% endif %}
hp_set_dual_mode_temp_heating:
alias: Set dual mode temperature heating
description: 'Set the heating dual mode temperature set point'
fields:
temperature:
description: 'The set point temperature in °C'
example: -19.5
sequence:
service: modbus.write_register
data_template:
hub: modbus_hp
unit: 1
address: 1508 #1509
value: >-
{% if temperature < 0 %}
{{ 2**16 - ((temperature * 10) |abs) |int }}
{% else %}
{{ (temperature * 10) |int }}
{% endif %}
## DHW control
hp_set_comfort_temp_dhw:
alias: Set comfort temperature DHW
description: 'Set the confort temperature set point for DHW'
fields:
temperature:
description: 'The set point temperature in °C'
example: 50
sequence:
service: modbus.write_register
data_template:
hub: modbus_hp
unit: 1
address: 1509 #1510
value: >-
{% if temperature >= 10 %}
{{ (temperature * 10) |int }}
{% endif %}
hp_set_dual_mode_temp_dhw:
alias: Set dual mode temperature DHW
description: 'Set the DHW dual mode temperature set point'
fields:
temperature:
description: 'The set point temperature in °C'
example: -19.5
sequence:
service: modbus.write_register
data_template:
hub: modbus_hp
unit: 1
address: 1512 #1513
value: >-
{% if temperature < 0 %}
{{ 2**16 - ((temperature * 10) |abs) |int }}
{% else %}
{{ (temperature * 10) |int }}
{% endif %}
############################################################################
#
# Stiebel Eltron - ISG modbus hub and sensors
#
# Reference: https://www.stiebel-eltron.com/content/dam/ste/cdbassets/current/bedienungs-_u_installationsanleitungen/ISG_Modbus__b89c1c53-6d34-4243-a630-b42cf0633361.pdf
#
############################################################################
modbus:
- type: tcp
host: << redacted IP address >>
port: 502
name: modbus_hp
sensor:
- platform: modbus
scan_interval: 10 # seconds
registers:
### Operating observations
- name: hp_outside_temperature
register: 506 #507
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_actual_temperature_hk_1
register: 507 #508
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_set_temperature_hk_1
register: 509 #510
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_actual_flow_temperature_nhz
register: 513 #514
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_actual_flow_temperature
register: 514 #515
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_actual_return_temperature
register: 515 #516
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_actual_buffer_temperature
register: 517 #518
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_set_buffer_temperature
register: 518 #519
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_heating_pressure
register: 519 #520
unit_of_measurement: bar
scale: 0.01
precision: 2
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_flow_rate
register: 520 #521
unit_of_measurement: l/min
scale: 0.01
precision: 2
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_actual_temperature_dhw
register: 521 #522
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_set_temperature_dhw
register: 522 #523
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_return_temperature
register: 541 #542
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_flow_temperature
register: 542 #543
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_hot_gas_temperature
register: 543 #544
unit_of_measurement: °C
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_low_pressure
register: 544 #545
unit_of_measurement: bar
scale: 0.01
precision: 2
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_mean_pressure
register: 545 #546
unit_of_measurement: bar
scale: 0.01
precision: 2
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_high_pressure
register: 546 #547
unit_of_measurement: bar
scale: 0.01
precision: 2
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_wp_water_flow_rate
register: 547 #548
unit_of_measurement: l/min
scale: 0.1
precision: 1
data_type: int
register_type: input
hub: modbus_hp
slave: 1
### Operating status
- name: hp_operating_status_1
register: 2500 #2501
unit_of_measurement: status
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_operating_status_2
register: 2502 #2503
unit_of_measurement: status
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_defrost_initiated
register: 2505 #2506
unit_of_measurement: status
data_type: int
register_type: input
hub: modbus_hp
slave: 1
### Power observations
- name: hp_vd_heating_day
register: 3500 #3501
unit_of_measurement: kWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_heating_total_kwh
register: 3501 #3502
unit_of_measurement: kWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_heating_total_mwh
register: 3502 #3503
unit_of_measurement: MWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_dhw_day
register: 3503 #3504
unit_of_measurement: kWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_dhw_total_kwh
register: 3504 #3505
unit_of_measurement: kWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_dhw_total_mwh
register: 3505 #3506
unit_of_measurement: MWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_nhz_heating_total_kwh
register: 3506 #3507
unit_of_measurement: kWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_nhz_heating_total_mwh
register: 3507 #3508
unit_of_measurement: MWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_nhz_dhw_total_kwh
register: 3508 #3509
unit_of_measurement: kWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_nhz_dhw_total_mwh
register: 3509 #3510
unit_of_measurement: MWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_heating_day_cons
register: 3510 #3511
unit_of_measurement: kWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_heating_total_cons_kwh
register: 3511 #3512
unit_of_measurement: kWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_heating_total_cons_mwh
register: 3512 #3513
unit_of_measurement: MWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_dhw_day_cons
register: 3513 #3514
unit_of_measurement: kWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_dhw_total_cons_kwh
register: 3514 #3515
unit_of_measurement: kWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_dhw_total_cons_mwh
register: 3515 #3516
unit_of_measurement: MWh
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_heating_runtime
register: 3538 #3539
unit_of_measurement: hour
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_vd_dhw_runtime
register: 3541 #3542
unit_of_measurement: hour
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_nhz_1_runtime
register: 3545 #3546
unit_of_measurement: hour
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_nhz_2_runtime
register: 3546 #3547
unit_of_measurement: hour
data_type: int
register_type: input
hub: modbus_hp
slave: 1
- name: hp_nhz_both_runtime
register: 3547 #3548
unit_of_measurement: hour
data_type: int
register_type: input
hub: modbus_hp
slave: 1
### Control sensors
- name: hp_ctl_operating_mode
register: 1500 #1501
data_type: int
register_type: holding
hub: modbus_hp
slave: 1
- name: hp_ctl_comfort_temperature_hc1
register: 1501 #1502
unit_of_measurement: °C
data_type: int
scale: 0.1
precision: 1
register_type: holding
hub: modbus_hp
slave: 1
- name: hp_ctl_eco_temperature_hc1
register: 1502 #1503
unit_of_measurement: °C
data_type: int
scale: 0.1
precision: 1
register_type: holding
hub: modbus_hp
slave: 1
- name: hp_ctl_heating_curve_rise_hc1
register: 1503 #1504
data_type: int
scale: 0.01
precision: 2
register_type: holding
hub: modbus_hp
slave: 1
- name: hp_ctl_fixed_value_operation
register: 1507 #1508
unit_of_measurement: °C
data_type: int
scale: 0.1
precision: 1
register_type: holding
hub: modbus_hp
slave: 1
- name: hp_ctl_dual_mode_temp_hzg
register: 1508 #1509
unit_of_measurement: °C
data_type: int
scale: 0.1
precision: 1
register_type: holding
hub: modbus_hp
slave: 1
- name: hp_ctl_comfort_temperature_dhw
register: 1509 #1510
unit_of_measurement: °C
data_type: int
scale: 0.1
precision: 1
register_type: holding
hub: modbus_hp
slave: 1
- name: hp_ctl_eco_temperature_dhw
register: 1510 #1511
unit_of_measurement: °C
data_type: int
scale: 0.1
precision: 1
register_type: holding
hub: modbus_hp
slave: 1
- name: hp_ctl_dual_mode_temp_ww
register: 1512 #1513
unit_of_measurement: °C
data_type: int
scale: 0.1
precision: 1
register_type: holding
hub: modbus_hp
slave: 1
############################################################################
#
# Stiebel Eltron - ISG modbus binary sensors (template sensors derived from
# modbus sensors)
#
# Reference: https://www.stiebel-eltron.com/content/dam/ste/cdbassets/current/bedienungs-_u_installationsanleitungen/ISG_Modbus__b89c1c53-6d34-4243-a630-b42cf0633361.pdf
#
############################################################################
binary_sensor:
- platform: template
sensors:
hp_hc1_pump:
value_template: >-
{{ states.sensor.hp_operating_status_1.state | int | bitwise_and(1) >0 }}
hp_nhz_stages_running:
value_template: >-
{{ states.sensor.hp_operating_status_1.state | int | bitwise_and(8) >0 }}
hp_in_heating_mode:
value_template: >-
{{ states.sensor.hp_operating_status_1.state | int | bitwise_and(16) >0 }}
hp_in_dhw_mode:
value_template: >-
{{ states.sensor.hp_operating_status_1.state | int | bitwise_and(32) >0 }}
hp_compressor_running:
value_template: >-
{{ states.sensor.hp_operating_status_1.state | int | bitwise_and(64) >0 }}
hp_summer_mode_active:
value_template: >-
{{ states.sensor.hp_operating_status_1.state | int | bitwise_and(128) >0 }}
hp_min_one_iws_in_defrost_mode:
value_template: >-
{{ states.sensor.hp_operating_status_1.state | int | bitwise_and(512) >0 }}
hp_silent_mode_1_active:
value_template: >-
{{ states.sensor.hp_operating_status_1.state | int | bitwise_and(1024) >0 }}
hp_silent_mode_2_active:
value_template: >-
{{ states.sensor.hp_operating_status_1.state | int | bitwise_and(2048) >0 }}
hp_compressor_1:
value_template: >-
{{ states.sensor.hp_operating_status_2.state | int | bitwise_and(1) >0 }}
hp_buffer_charging_pump_1:
value_template: >-
{{ states.sensor.hp_operating_status_2.state | int | bitwise_and(64) >0 }}
hp_nhz_1:
value_template: >-
{{ states.sensor.hp_operating_status_2.state | int | bitwise_and(4096) >0 }}
hp_nhz_2:
value_template: >-
{{ states.sensor.hp_operating_status_2.state | int | bitwise_and(8192) >0 }}
hp_nhz_both:
value_template: >-
{{ states.sensor.hp_operating_status_2.state | int | bitwise_and(16384) >0 }}
hp_defrost_initiated:
value_template: >-
{{ states.sensor.hp_defrost_initiated.state | int >0 }}
hp_active:
value_template: >-
{{ states.sensor.hp_ctl_operating_mode.state | int != 1 }}
@francoisfanuel
Copy link

That's amazing work. Thanks a lot!

@ntompson
Copy link
Author

Pleasure!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment