Is there any interest in a Stiebel Eltron climate platform?

Luckily it’s a simple change.

Thank you very much for that, Hannes!
I have to admitt that I had little hope to get an answer and tried it on my own after my last post here.

Maybe my solution is from intrest for someone else or maybe even for you as I additionally decode the status signal of the heatpump (LWZ404 BETRIEBSSTATUS). I did not integrate all signals for now, but with your work that is a quick deal now. Your solution with the “scale” command is certainly better than the postprocessing via sensor template.

> name: lwz404
>     close_comm_on_error: false
>     retry_on_empty: true
>     retries: 10
>     # lazy_error_count: 10
>     # unit: 1
>     type: tcp
>     host: 192.168.XXX.XXX 
>     port: 502
>     sensors:
>       - name: LWZ404 AUSSENTEMPERATUR RAW
>         slave: 1
>         count: 1
>         address: 6 # Aussentemperatur = Modbus Adresse 7 - Offset 1
>         input_type: input
>         data_type: int16
>         unit_of_measurement: °C
>         device_class: temperature
>       - name: LWZ404 ISTWERT HK1 RAW
>         slave: 1
>         count: 1
>         address: 7 # Istwert HK1 = Modbus Adresse 8 - Offset 1
>         input_type: input
>         data_type: int16
>         unit_of_measurement: °C
>         device_class: temperature
>       - name: LWZ404 SOLLWERT HK1 RAW
>         slave: 1
>         count: 1
>         address: 8 # Sollwert HK1 = Modbus Adresse 9 - Offset 1
>         input_type: input
>         data_type: int16
>         unit_of_measurement: °C
>         device_class: temperature
>       - name: LWZ404 ISTWERT HK2 RAW
>         slave: 1
>         count: 1
>         address: 9 # Istwert HK2 = Modbus Adresse 10 - Offset 1
>         input_type: input
>         data_type: int16
>         unit_of_measurement: °C
>         device_class: temperature
>       - name: LWZ404 SOLLWERT HK2 RAW
>         slave: 1
>         count: 1
>         address: 10 # Sollert HK2 = Modbus Adresse 11 - Offset 1
>         input_type: input
>         data_type: int16
>         unit_of_measurement: °C
>         device_class: temperature
>       - name: LWZ404 WW IST TEMPERATUR RAW
>         slave: 1
>         count: 1
>         address: 15 # WW-IST-TEMPERATUR = Modbus Adresse 16 - Offset 1
>         input_type: input
>         data_type: int16
>         unit_of_measurement: °C
>         device_class: temperature
>       - name: LWZ404 WW SOLL TEMPERATUR RAW
>         slave: 1
>         count: 1
>         address: 16 # WW-SOLL-TEMPERATUR = Modbus Adresse 17 - Offset 1
>         input_type: input
>         data_type: int16
>         unit_of_measurement: °C
>         device_class: temperature
>       - name: LWZ404 VORLAUFTEMP RAW
>         slave: 1
>         count: 1
>         address: 11 # Vorlauftemperatur = Modbus Adresse 12 - Offset 1
>         input_type: input
>         data_type: int16
>         unit_of_measurement: °C
>         device_class: temperature
>       - name: LWZ404 RUECKLAUFTEMP RAW
>         slave: 1
>         count: 1
>         address: 12 # Ruecklauftemperatur = Modbus Adresse 13 - Offset 1
>         input_type: input
>         data_type: int16
>         unit_of_measurement: °C
>         device_class: temperature
>       - name: LWZ404 HEISSGASTEMP RAW
>         slave: 1
>         count: 1
>         address: 27 # Heissgastemperatur = Modbus Adresse 28 - Offset 1
>         input_type: input
>         data_type: int16
>         unit_of_measurement: °C
>         device_class: temperature      
> 
>       - name: LWZ404 BETRIEBSSTATUS
>         address: 2000 # Betriebsstatus = Modbus Adresse 2001 - Offset 1
>         slave: 1
>         count: 1
>         input_type: input
>         data_type: uint16 



binary_sensor:
  - platform: template
      lwz404_schaltprogramm_aktiv:
        friendly_name: "LWZ404 Schaltprogramm aktiv"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(1) > 0 }}"
      lwz404_kompressor_aktiv:
        friendly_name: "LWZ404 Kompressor aktiv"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(2) > 0 }}"
      lwz404_heizbetrieb_aktiv:
        friendly_name: "LWZ404 Heizbetrieb aktiv"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(4) > 0 }}"      
      lwz404_warmwasserbereitung_aktiv:
        friendly_name: "LWZ404 WW Bereitung aktiv"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(16) > 0 }}"          
      lwz404_elektrische_nacherwaermung_aktiv:
        friendly_name: "LWZ404 elektrische Nacherwärmung aktiv"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(32) > 0 }}"  
      lwz404_service_aktiv:
        friendly_name: "LWZ404 Service aktiv"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(64) > 0 }}"  
      lwz404_evu_sperre:
        friendly_name: "LWZ404 EVU Sperre aktiv"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(128) > 0 }}"
      lwz404_filterwechsel:
        friendly_name: "LWZ404 Filterwechsel beide Filter"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(256) > 0 }}"      
      lwz404_lueftung_aktiv:
        friendly_name: "LWZ404 Lüftung aktiv"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(512) > 0 }}"       
      lwz404_heizkreispumpe:
        friendly_name: "LWZ404 Heizkreispumpe aktiv"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(1024) > 0 }}"
      lwz404_abtauen:
        friendly_name: "LWZ404 Abtauen aktiv"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(2048) > 0 }}"
      lwz404_filterwechsel_abluft:
        friendly_name: "LWZ404 Filterwechsel Abluft"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(4096) > 0 }}"
      lwz404_filterwechsel_zuluft:
        friendly_name: "LWZ404 Filterwechsel Zuluft"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(8192) > 0 }}"
      lwz404_aufheizprogramm_aktiv:
        friendly_name: "LWZ404 Aufheizprogramm aktiv"
        value_template: "{{ states('sensor.lwz404_betriebsstatus')|int|bitwise_and(16384) > 0 }}"
sensor:
  - platform: template
    sensors:
      lwz404_aussentemp:
        friendly_name: 'Aussentemperatur'
        unit_of_measurement: '°C'
        value_template: "{{ (states('sensor.LWZ404_AUSSENTEMPERATUR_RAW')|int / 10)|round(2,'floor') }}"
      lwz404_istwert_hk1:
        friendly_name: 'Istwert HK1'
        unit_of_measurement: '°C'
        value_template: "{{ (states('sensor.LWZ404_ISTWERT_HK1_RAW')|int / 10)|round(2,'floor') }}"
      lwz404_sollwert_hk1:
        friendly_name: 'Sollwert HK1'
        unit_of_measurement: '°C'
        value_template: "{{ (states('sensor.LWZ404_SOLLWERT_HK1_RAW')|int / 10)|round(2,'floor') }}"
      lwz404_istwert_hk2:
        friendly_name: 'Istwert HK2'
        unit_of_measurement: '°C'
        value_template: "{{ (states('sensor.LWZ404_ISTWERT_HK2_RAW')|int / 10)|round(2,'floor') }}"
      lwz404_sollwert_hk2:
        friendly_name: 'Sollwert HK2'
        unit_of_measurement: '°C'
        value_template: "{{ (states('sensor.LWZ404_SOLLWERT_HK2_RAW')|int / 10)|round(2,'floor') }}"     
      lwz404_istwert_ww:
        friendly_name: 'Istwert Warmwasser'
        unit_of_measurement: '°C'
        value_template: "{{ (states('sensor.LWZ404_WW_IST_TEMPERATUR_RAW')|int / 10)|round(2,'floor') }}"        
      lwz404_sollwert_ww:
        friendly_name: 'Sollwert Warmwasser'
        unit_of_measurement: '°C'
        value_template: "{{ (states('sensor.LWZ404_WW_SOLL_TEMPERATUR_RAW')|int / 10)|round(2,'floor') }}"       
      lwz404_vorlauftemperatur:
        friendly_name: 'LWZ 404 Vorlauftemperatur'
        unit_of_measurement: '°C'
        value_template: "{{ (states('sensor.LWZ404_VORLAUFTEMP_RAW')|int / 10)|round(2,'floor') }}"       
      lwz404_ruecklauftemperatur:
        friendly_name: 'LWZ 404 Rücklauftemperatur'
        unit_of_measurement: '°C'
        value_template: "{{ (states('sensor.LWZ404_RUECKLAUFTEMP_RAW')|int / 10)|round(2,'floor') }}"       
      lwz404_heissgastemperatur:
        friendly_name: 'LWZ 404 Heissgastemperatur'
        unit_of_measurement: '°C'
        value_template: "{{ (states('sensor.LWZ404_HEISSGASTEMP_RAW')|int / 10)|round(2,'floor') }}"
2 Likes

I have 3 wrong values…

Your’re welcome :slight_smile:

And thank you for decoding the BETRIEBSSTATUS - will definitely use that one!

1 Like

Greetings from Switzerland!

We do run a Stiebel WPL20AC here and i got it “somehow” to work by using the ISG modbus guide and check each number by comparing it with the ISG homepage.

# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:

# Text to speech
tts:
  - platform: google_translate

# Includes 
group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
# sensor: !include sensors.yaml

# Modbus activation 
modbus:
##########################################################      
# Stiebel ISG
  - name: isg
    type: tcp
    host: 192.168.10.101
    port: 502
    sensors:
##########################################################      
# Sensors Temperature
#
# Heizung
# Heizung - ISTTEMPERATUR HK 2
      - name:                isg_heizung_ist_temp_hk2
        slave:               1
        address:             510
        input_type:          input
        unit_of_measurement: °C
        device_class:        temperature
        scale:               0.1
        precision:           1
# Heizung - SOLLTEMPERATUR HK 2
      - name:                isg_heizung_soll_temp_hk2
        slave:               1
        address:             511
        input_type:          input
        unit_of_measurement: °C
        device_class:        temperature
        scale:               0.1
        precision:           1
#
# Wasser
# Wasser - IST Temperatur
      - name:                isg_wasser_ist_temp
        slave:               1
        address:             521
        input_type:          input
        unit_of_measurement: °C
        device_class:        temperature
        scale:               0.1
        precision:           1
# Wasser - SOLL Temperatur
      - name:                isg_wasser_soll_temp
        slave:               1
        address:             522
        input_type:          input
        unit_of_measurement: °C
        device_class:        temperature
        scale:               0.1
        precision:           1
#
# Wohnraum
# Raumtemparatur - ISTTEMPERATUR 2
      - name:                isg_raum_temp_ist
        slave:               1
        address:             587
        input_type:          input
        unit_of_measurement: °C
        device_class:        temperature
        scale:               0.1
        precision:           1
# Raumtemparatur - SOLLTEMPERATUR 2
      - name:                isg_raum_temp_soll
        slave:               1
        address:             588
        input_type:          input
        unit_of_measurement: °C
        device_class:        temperature
        scale:               0.1
        precision:           1
# Raumtemparature - RAUMFEUCHTE 2	
      - name:                isg_raum_feuchtigkeit
        slave:               1
        address:             589
        input_type:          input
        unit_of_measurement: "%"
        device_class:        humidity
        scale:               0.1
        precision:           1
#
# Aussen
# Aussentemperatur - AUSSENTEMPERATUR 2
      - name:                isg_aussen_temp
        slave:               1
        address:             506
        input_type:          input
        unit_of_measurement: °C
        device_class:        temperature
        scale:               0.1
        precision:           1
#
##########################################################      
# Sensors Produktion Energie
#
# Produktion - Wärmemenge
# Heizen Tag - VD HEIZEN TAG - Kilowatt
      - name:                isg_produktion_heizen_kilowatt_tag
        slave:               1
        address:             3500
        input_type:          input
        unit_of_measurement: kWh
        device_class:        power
        scale:               1
        precision:           1
# Heizen Summe - VD HEIZEN SUMME - Kilowatt
      - name:                isg_produktion_heizen_kilowatt_total
        slave:               1
        address:             3501
        input_type:          input
        unit_of_measurement: kWh
        device_class:        power
        scale:               1
        precision:           1
# Heizen Summe - VD HEIZEN SUMME - Megawatt
      - name:                isg_produktion_heizen_megawatt_total
        slave:               1
        address:             3502
        input_type:          input
        unit_of_measurement: MWh
        device_class:        power
        scale:               1
        precision:           1
# Warmwasser Tag - VD WARMWASSER TAG
      - name:                isg_produktion_wasser_kilowatt_tag
        slave:               1
        address:             3503
        input_type:          input
        unit_of_measurement: kWh
        device_class:        power
        scale:               1
        precision:           1
# Warmwasser Tag - VD WARMWASSER TAG
      - name:                isg_produktion_wasser_kilowatt_total
        slave:               1
        address:             3504
        input_type:          input
        unit_of_measurement: kWh
        device_class:        power
        scale:               1
        precision:           1
# Warmwasser Summe - VD WARMWASSER SUMME
      - name:                isg_produktion_wasser_megawatt_total
        slave:               1
        address:             3505
        input_type:          input
        unit_of_measurement: MWh
        device_class:        power
        scale:               1
        precision:           1
#
##########################################################      
# Sensors  Verbauch Energie
#
# Verbauch - Leistungsaufnahme
# Heizen Tag - VD HEIZEN TAG - Kilowatt
      - name:                isg_verbrauch_heizen_kilowatt_tag
        slave:               1
        address:             3510
        input_type:          input
        unit_of_measurement: kWh
        device_class:        power
        scale:               1
        precision:           1
# Heizen Summe - VD HEIZEN SUMME - Kilowatt
      - name:                isg_verbrauch_heizen_kilowatt_total
        slave:               1
        address:             3511
        input_type:          input
        unit_of_measurement: MWh
        device_class:        power
        scale:               0.001
        precision:           3
# Heizen Summe - VD HEIZEN SUMME - Megawatt
      - name:                isg_verbrauch_heizen_megawatt_total
        slave:               1
        address:             3512
        input_type:          input
        unit_of_measurement: MWh
        device_class:        power
        scale:               1
        precision:           1
# Warmwasser Tag - VD WARMWASSER TAG
      - name:                isg_verbrauch_wasser_tag
        slave:               1
        address:             3535
        input_type:          input
        unit_of_measurement: kWh
        device_class:        power
        scale:               1
        precision:           1
# Warmwasser Summe  - VD WARMWASSER SUMME
      - name:                isg_verbrauch_wasser_total
        slave:               1
        address:             3536
        input_type:          input
        unit_of_measurement: MWh
        device_class:        power
        scale:               0.001
        precision:           3
#
##########################################################      
#
# Laufzeit
# Laufzeit VD Heizen
      - name:                isg_laufzeit_heizen_total
        slave:               1
        address:             3643
        input_type:          input
        unit_of_measurement: H
        device_class:        date
# Laufzeit VD Warmwasser
      - name:                isg_laufzeit_wasser_total
        slave:               1
        address:             3644
        input_type:          input
        unit_of_measurement: H
        device_class:        date
#
##########################################################      
#
  
      - name:                3645
        slave:               1
        address:             3645
        input_type:          input
        precision:           3


      - name:                3646
        slave:               1
        address:             3646
        input_type:          input
        precision:           3


      - name:                3647
        slave:               1
        address:             3647
        input_type:          input
        precision:           3

      - name:                3648
        slave:               1
        address:             3648
        input_type:          input
        precision:           3

      - name:                3648
        slave:               1
        address:             3648
        input_type:          input
        precision:           3
        
      - name:                3509
        slave:               1
        address:             3509
        input_type:          input
        precision:           3
        
      - name:                3511
        slave:               1
        address:             3511
        input_type:          input
        precision:           3

      - name:                3512
        slave:               1
        address:             3512
        input_type:          input
        precision:           3

##########################################################      
# E3DC Power Reactor  
  - name: e3dc
    type: tcp
    host: 192.168.10.102
    port: 502   
##########################################################      
# Sensors Solar
#
# Solar

But as the config file is now growing i wanted to “outsource” stuff with the include commands.
And here my struggle begins.

I could manage the modbus.yaml

# Modbus activation 
# Stiebel ISG
  - name: isg
    type: tcp
    host: 192.168.10.101
    port: 502
# E3DC Power Reactor  
  - name: e3dc
    type: tcp
    host: 192.168.10.102
    port: 502

configuration file → modbus: !include modbus.yaml

BUT i am failing constantly with the sensors stuff…
created a sensors.yaml
configuration file → sensor: !include sensors.yaml
File looks like this:

#
  - platform: modbus
    registers:
      name:                            isg_heizung_ist_temp_hk2
      slave:                            1
      address:                        510
      input_type:                    input
      unit_of_measurement: °C
      device_class:               temperature
      scale:                           0.1
      precision:                     1
      hub:                              isg

So two things here:

  • i used two modbus hubs (hub: isg and later e3dc)
  • I fail with the formatting

Would you guys please enlighten me on what i am doing/formatting wrong here?

Details:
Asustor NAS, Docker HA Version core-2021.10.7

Any tip is much appreaciated!
thank you all!
Armin

1 Like

ok i think i found a solution to split the stuff.

# Include sensors (all in a seperate *.yaml)
sensor: !include_dir_merge_list sensor/

# Include modbus (all in a seperate *.yaml)
modbus: !include_dir_merge_list modbus/

created directories modbus and sensor.
in there seperated all the sensors and modbus configurations in to an extra files and merge them while load.
/sensor
— systemmonitor.yaml
— asustor.yaml

/modbus
– isg.yaml
– e3dc.yaml

Used ssh to create the files and folders to they kept the owner and permissions.

AND finally… it seems that with the update the modbus configuration has changed.

  • platform modbus does not seem to work anymore.
    So i had to put the modbus and sensor config into a file and load it with merge.
    modbus file → isg.yaml
# Modbus      
# Stiebel ISG
- name: isg
  type: tcp
  host: 192.168.10.101
  port: 502
  sensors: 
#
# Heizung
# -- ISTTEMPERATUR HK 2
    - name:                'ISG Temperatur Heizung HK2 IST'
      slave:               1
      address:             510
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1
# --Heizung - SOLLTEMPERATUR HK 2
    - name:                'ISG Temperatur Heizung HK2 SOLL'
      slave:               1
      address:             511
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1
#
# Wasser
# -- IST Temperatur
    - name:                'ISG Temperatur Wasser IST'
      slave:               1
      address:             521
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1
# -- SOLL Temperatur
    - name:                'ISG Temperatur Wasser IST'
      slave:               1
      address:             522
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1
#
# Temperatur
# -- ISTTEMPERATUR 2
    - name:                'ISG Temperatur Raum IST'
      slave:               1
      address:             587
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1
# -- SOLLTEMPERATUR 2
    - name:                'ISG Temperatur Raum SOLL'
      slave:               1
      address:             588
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1
# -- RAUMFEUCHTE 2 
    - name:                'ISG Temperatur Raum Feuchtigkeit'
      slave:               1
      address:             589
      input_type:          input
      unit_of_measurement: '%'
      device_class:        humidity
      scale:               0.1
      precision:           1
# -- AUSSENTEMPERATUR 2
    - name:                'ISG Temperatur Raum Aussentemperatur'
      slave:               1
      address:             506
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1      
#
# Produktion Wärmemenge
# -- VD HEIZEN TAG - Kilowatt
    - name:                'ISG Produktion Heizen Tag in kWh'
      slave:               1
      address:             3500
      input_type:          input
      unit_of_measurement: kWh
      device_class:        power
      scale:               1
      precision:           1
# -- VD HEIZEN SUMME - Kilowatt
    - name:                'ISG Produktion Heizen Total in kWh'
      slave:               1
      address:             3501
      input_type:          input
      unit_of_measurement: kWh
      device_class:        power
      scale:               1
      precision:           1
# -- VD HEIZEN SUMME - Megawatt
    - name:                'ISG Produktion Heizen Total in MWh'
      slave:               1
      address:             3502
      input_type:          input
      unit_of_measurement: MWh
      device_class:        power
      scale:               1
      precision:           1
# -- VD WARMWASSER TAG
    - name:                'ISG Produktion Wasser Tag in kWh'
      slave:               1
      address:             3503
      input_type:          input
      unit_of_measurement: kWh
      device_class:        power
      scale:               1
      precision:           1
# -- VD WARMWASSER SUMME
    - name:                'ISG Produktion Wasser Total in kWh'
      slave:               1
      address:             3504
      input_type:          input
      unit_of_measurement: kWh
      device_class:        power
      scale:               1
      precision:           1
# -- VD WARMWASSER SUMME
    - name:                'ISG Produktion Wasser Total in MWh'
      slave:               1
      address:             3505
      input_type:          input
      unit_of_measurement: MWh
      device_class:        power
      scale:               1
      precision:           1      
#
# Verbauch - Leistungsaufnahme
# -- VD HEIZEN TAG - Kilowatt
    - name:                'ISG Verbauch Heizen Tag in kWh'
      slave:               1
      address:             3510
      input_type:          input
      unit_of_measurement: kWh
      device_class:        power
      scale:               1
      precision:           1
# -- VD HEIZEN SUMME - Kilowatt
    - name:                'ISG Verbauch Heizen Total in kWh'
      slave:               1
      address:             3511
      input_type:          input
      unit_of_measurement: MWh
      device_class:        power
      scale:               0.001
      precision:           3
# -- VD HEIZEN SUMME - Megawatt
    - name:                'ISG Verbauch Heizen Total in MWh'
      slave:               1
      address:             3512
      input_type:          input
      unit_of_measurement: MWh
      device_class:        power
      scale:               1
      precision:           1
# -- VD WARMWASSER TAG
    - name:                'ISG Verbauch Wasser Tag in kWh'
      slave:               1
      address:             3535
      input_type:          input
      unit_of_measurement: kWh
      device_class:        power
      scale:               1
      precision:           1
# -- VD WARMWASSER SUMME
    - name:                'ISG Verbauch Wasser Total in MWh'
      slave:               1
      address:             3536
      input_type:          input
      unit_of_measurement: MWh
      device_class:        power
      scale:               0.001
      precision:           3
#
# Laufzeit
# -- VD Heizen
    - name:                'ISG Laufzeit Heizen Total in h'
      slave:               1
      address:             3643
      input_type:          input
      unit_of_measurement: H
      device_class:        date
# -- VD Warmwasser
    - name:                'ISG Laufzeit Wasser Total in h'
      slave:               1
      address:             3644
      input_type:          input
      unit_of_measurement: H
      device_class:        date
#
#####################################################################
# Test Sensoren
# -- NAME VOM SENSOR
    - name:                3645
      slave:               1
      address:             3645
      input_type:          input
      precision:           3


1 Like

I uploaded my config as well, I have to clean it up now: homeassistant-config/configuration.yaml at 10384e93fe7893c0c8ee182ea9d66fa41fd88813 · thorsten/homeassistant-config · GitHub

1 Like

Evening Gentlemen,

I started digging through the modbus of the ISG again but i am unable to find “the rest” of the values.
Please see embedded picture. I can find the the number before the comma appears but i am not able to find the values behind. Picture is in german but i think you can get what i mean.
Excample: heat production of the day Modbus 3500 or 3522 shows 38 kWh. But 3499 or 3521 does not exist and so i cannot find the missing 0.939 kWh.

Same for some other sensor values. I can find the kWh but not the 0.xxxx values behind.

Did anyone encounter the same and could solve it? I checked most of the modbus IDs but these values just did not appear.

On the picture you also find some values made from MWh and kWH: For them i used a template sensor which adds them together.

# Heating Total calculation
# ISG Consumption Heat Total Part1 Energy + ISG Consumption Heat Total Part2 Energy
# These two sensors are the total used energy for heating electricity consumption
- platform: template
  sensors:
# Production calculation
# Heat Total
    isg_production_heat_total_energy:
      friendly_name: ISG Production Heat Total Energy
      unit_of_measurement: kWh
      value_template: "{{ (states('sensor.isg_production_heat_total_part1_energy') | float) + (states('sensor.isg_production_heat_total_part2_energy') | float) }}"
...
Just make sure you set the MwH to scale 1000 so you get kWh. Then add them together. 



And one more thing. 
Could you help me to get a write register? i did find the room eco and comfort temperatures and they appear to be writeable.

Comfort

- name:                ISG Comfort Room Temperature
  slave:               1
  address:             1504
  input_type:          holding
  scale:               0.1
  precision:           1
  unit_of_measurement: °C
  device_class:        temperature

Eco

- name:                ISG Eco Room Temperature
  slave:               1
  address:             1505
  input_type:          holding
  scale:               0.1
  precision:           1
  unit_of_measurement: °C
  device_class:        temperature

Would be cool to have a dashboard card to be able to change it.

thank you very much!
cheers A
1 Like

Evening,
how did you implement the “Betriebsstatus” into the Lovelace?
Just an entity set?

thanks
armin

I wonder what all the steps are to get this working. We have a similar system, the WPL15AC+ISG-web

Hi Dennis,

to monitor your 15AC you would need to run the modbus integration.
With this and the registers you then get loads of details which you can later process in Home Assistant.

Install Modbus Integration
Use the modbus configuration on your configuration.yaml or an extra file.
Reload and you get sensors with the details. Use entiies or sensors in lovelace and you get them on your dashboard.

Its was a bit tricky for me at the beginning and a lot of trial and error. But i could manage to get pretty close to want i expected. see screenshot.

Our WPL20 uses the same registers you could start using the one i dropped here.
If you need more help let me know.
cheers A

PS: it is worth the work. The ISG web interface is “ugly as hell” :slight_smile:

About the set komfort and room temperature:

Create 2 helpers (input numbers) Eco and Comfort
Then 2 automations. One for set another one for sync.

Modbus Holdings are:

# Temperatur Sets Room Comfort and Eco -> these can be written as well.
# Comfort
    - name:                ISG Comfort Room Temperature
      slave:               1
      address:             1504
      input_type:          holding
      scale:               0.1
      precision:           2
      unit_of_measurement: °C
      device_class:        temperature
 # Eco
    - name:                ISG Eco Room Temperature
      slave:               1
      address:             1505
      input_type:          holding
      scale:               0.1
      precision:           2
      unit_of_measurement: °C
      device_class:        temperature

Set Temp automation:

alias: ISG Temperature Comfort Set
trigger:
  - platform: state
    entity_id: input_number.isg_comfort_temperature
action:
  - service: modbus.write_register
    data_template:
      hub: isg
      unit: 1
      address: 1504
      value: '{{ states.input_number.isg_comfort_temperature.state | float * 10 }}'

Sync Temp automation

alias: ISG Temperature Comfort Sync
trigger:
  - platform: time_pattern
    seconds: '59'
action:
  - service: input_number.set_value
    data_template:
      entity_id: input_number.isg_comfort_temperature
      value: '{{ states.input_number.isg_comfort_temperature.state | float / 10 }}'

Use Number Card from HACS and use them on the dashboard.

type: custom:numberbox-card
border: true
entity: input_number.isg_comfort_temperature
name: Temperatur Komfort

I guess there might be better ways but this one i found and it works fine.
Hope this helps.
cheers A

Wow, I love your Lovelace interface. got it partial working, the readout of power consumption, running hours is showing up.

some modbus adresses are not matching up with the former code you posted

Is it possible that you share the modbus ISG.yaml and Lovelace cards again.

Hi Denis,
Modbus ISG
This is was i used. Focus on WPM system colum.

I went through most of them one by one. The issue is the offset. You have to use -1 or sometimes -2 on the register numbers. What i did i created the modbus address in a range.
eg:
1500 i created 3 entries 1498, 1499, 1500 and compared the results against the ISG webpage.
with that i could get most of the details i wanted.
Its a shame that they use so many different variantions for each product as your 15 and our 20 are the same …

About my config. Here i created a seperate modbus folder and moved all the configs out of the master configuration file. On the config file i used the pointer to integrate the directory.

my structure looks as follow
config folder
→ configuration,yaml
→ modebus folder
------------> isg.yaml
→ sensor folder
------------> isg.yaml

Here is the code for configuration.yaml

# Include modbus (all in a seperate *.yaml)
modbus: !include_dir_merge_list modbus/

# Include sensors (all in a seperate *.yaml)
sensor: !include_dir_merge_list sensor/

Here the modbus

# Modbus      
# Stiebel ISG -> offset -1 or even -2
- name: isg
  type: tcp
  host: !secret isg
  port: !secret modbus
  sensors: 

# Heating
# --  Heating Circuit HC2 Actual Temperature
    - name:                ISG HC2 Actual Temperature
      slave:               1
      address:             510
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1
# -- THeating Circuit HC2 Set Temperature
    - name:                ISG HC2 Set Temperature
      slave:               1
      address:             511
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1

# Water
# -- Actual Temperatur
    - name:                ISG Water Actual Temperature
      slave:               1
      address:             521
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1
# -- Set Temperature
    - name:                ISG Water Set Temperature
      slave:               1
      address:             522
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1

# Temperature
# -- Room Actual Temperature
    - name:                ISG Room Actual Temperature
      slave:               1
      address:             587
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1
# -- Room Set Temperature
    - name:                ISG Room Set Temperature
      slave:               1
      address:             588
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1
# -- Room Humidity 
    - name:                ISG Room Humidity
      slave:               1
      address:             589
      input_type:          input
      unit_of_measurement: '%'
      device_class:        humidity
      scale:               0.1
      precision:           1
# -- Outside Temperature
    - name:                ISG Outside Temperature
      slave:               1
      address:             506
      input_type:          input
      unit_of_measurement: °C
      device_class:        temperature
      scale:               0.1
      precision:           1      

# Heat Production
# -- Heating Daily Energy kWh
    - name:                ISG Production Heat Daily Energy
      slave:               1
      address:             3500
      input_type:          input
      unit_of_measurement: kWh
      device_class:        energy
      scale:               1
      precision:           1
# -- Heating Total Energy kWh
    - name:                ISG Production Heat Total Part1 Energy
      slave:               1
      address:             3501
      input_type:          input
      unit_of_measurement: kWh
      device_class:        energy
      scale:               1
      precision:           1
# -- Heating Total Energy MWh
    - name:                ISG Production Heat Total Part2 Energy
      slave:               1
      address:             3502
      input_type:          input
      unit_of_measurement: kWh
      device_class:        energy
      scale:               1000
      precision:           1
# -- Water Daily Energy kWh
    - name:                ISG Production Water Daily Energy
      slave:               1
      address:             3503
      input_type:          input
      unit_of_measurement: kWh
      device_class:        energy
      scale:               1
      precision:           1
# -- Water Total Energy kWh
    - name:                ISG Production Water Total Part1 Energy
      slave:               1
      address:             3504
      input_type:          input
      unit_of_measurement: kWh
      device_class:        energy
      scale:               1
      precision:           1
# -- Water Total Energy MWh
    - name:                ISG Production Water Total Part2 Energy
      slave:               1
      address:             3505
      input_type:          input
      unit_of_measurement: kWh
      device_class:        energy
      scale:               1000
      precision:           1      

# Consumption - Electricity in kWh/MWh
# -- Heating Daily Energy kWh
    - name:                ISG Consumption Heat Daily Energy
      slave:               1
      address:             3510
      input_type:          input
      unit_of_measurement: kWh
      device_class:        energy
      scale:               1
      precision:           1
# -- Heating Total Energy kWh - will be summarized in a template
    - name:                ISG Consumption Heat Total Part1 Energy
      slave:               1
      address:             3511
      input_type:          input
      unit_of_measurement: kWh
      device_class:        energy
      scale:               1
      precision:           1
# -- Heating Total Energy kWh - will be summarized in a template
    - name:                ISG Consumption Heat Total Part2 Energy
      slave:               1
      address:             3512
      input_type:          input
      unit_of_measurement: kWh
      device_class:        energy
      scale:               1000
      precision:           1
# -- Water Daily Energy kWh
    - name:                ISG Consumption Water Daily Energy
      slave:               1
      address:             3535
      input_type:          input
      unit_of_measurement: kWh
      device_class:        energy
      scale:               1
      precision:           3
# -- Water Total Energy MWh
    - name:                ISG Consumption Water Total Energy
      slave:               1
      address:             3536
      input_type:          input
      unit_of_measurement: kWh
      device_class:        energy
      scale:               1
      precision:           1
#
# Runtime
# -- Heating Production
    - name:                ISG Runtime Heating Time
      slave:               1
      address:             3643
      input_type:          input
      unit_of_measurement: H
      device_class:        date
# -- Water Production
    - name:                ISG Runtime Water Time
      slave:               1
      address:             3644
      input_type:          input
      unit_of_measurement: H
      device_class:        date
#
# Operating Status
# -- Operating Status
    - name:                ISG Operating Status
      slave:               1
      count:               1
      address:             2500
      input_type:          input
      data_type:           uint16

# Temperatur Sets Room Comfort and Eco -> these can be written as well.
# Comfort
    - name:                ISG Comfort Room Temperature
      slave:               1
      address:             1504
      input_type:          holding
      scale:               0.1
      precision:           2
      unit_of_measurement: °C
      device_class:        temperature
 # Eco
    - name:                ISG Eco Room Temperature
      slave:               1
      address:             1505
      input_type:          holding
      scale:               0.1
      precision:           2
      unit_of_measurement: °C
      device_class:        temperature
#
#####################################################################
# Test Sensors
# -- NAME 
    - name:                3520
      slave:               1
      address:             3520
      input_type:          input
      precision:           3

    - name:                499
      slave:               1
      address:             499
      input_type:          input
      precision:           3

    - name:                501
      slave:               1
      address:             501
      input_type:          input
      precision:           3

    - name:                502
      slave:               1
      address:             502
      input_type:          input
      precision:           3

    - name:                1501
      slave:               1
      address:             1501
      input_type:          holding

    - name:                2502
      slave:               1
      count:               1
      address:             2502
      input_type:          input
      data_type:           uint16

    - name:                1500
      slave:               1
      count:               1
      address:             1500
      input_type:          input
      data_type:           uint16

For some sensors you might need/want a template creation.
So here i created another folder called sensor
In there i got the isg.yaml for sensors.

# Sensor
# Stiebel ISG Templates
- platform: template
  sensors:

# Operational State Template
# Converts the operational state of the WPL to true or false
    isg_state_active_hc1_pump:
      friendly_name: "ISG State HC1 Pump active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(1) > 0 }}"
    
    isg_state_active_hc2_pump:
      friendly_name: "ISG State HC2 Pump active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(2) > 0 }}"
    
    isg_state_preheating_active:
      friendly_name: "ISG State Pre Heating active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(4) > 0 }}"      
 
    isg_state_electrical_heating_active:
      friendly_name: "ISG State Electrical Heating active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(8) > 0 }}"          
 
    isg_state_heating_active:
      friendly_name: "ISG State Heating active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(16) > 0 }}"  
  
    isg_state_hot_water_production_active:
      friendly_name: "ISG State Hot Water Production active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(32) > 0 }}"  
  
    isg_state_compressor_active:
      friendly_name: "ISG State Compressor active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(64) > 0 }}"
  
    isg_state_summer_mode_active:
      friendly_name: "ISG State Summer Mode active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(128) > 0 }}"
  
    isg_state_cooling_active:
      friendly_name: "ISG State Cooling active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(256) > 0 }}"

    isg_state_defrost_active:
      friendly_name: "ISG State Defrost active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(512) > 0 }}"

    isg_state_silentmode1_active:
      friendly_name: "ISG State Silentmode1 active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(1024) > 0 }}"

    isg_state_silentmode2_active:
      friendly_name: "ISG State Silentmode2 active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(2048) > 0 }}"

# Heating Total calculation
# ISG Consumption Heat Total Part1 Energy + ISG Consumption Heat Total Part2 Energy
# These two sensors are the total used energy for heating electricity consumption

# Production calculation
# Heat Total
    isg_production_heat_total_energy:
      friendly_name: ISG Production Heat Total Energy
      unit_of_measurement: kWh
      value_template: "{{ (states('sensor.isg_production_heat_total_part1_energy') | float) + (states('sensor.isg_production_heat_total_part2_energy') | float) }}"

# Water Total
    isg_production_water_total_energy:
      friendly_name: ISG Production Water Total Energy
      unit_of_measurement: kWh
      value_template: "{{ (states('sensor.isg_production_water_total_part1_energy') | float) + (states('sensor.isg_production_water_total_part2_energy') | float) }}"

# Consumption Calculation
# Heat Total
    isg_consumption_heat_total_energy:
      friendly_name: ISG Consumption Heat Total Energy
      unit_of_measurement: kWh
      value_template: "{{ (states('sensor.isg_consumption_heat_total_part1_energy') | float) + (states('sensor.isg_consumption_heat_total_part2_energy') | float) }}"
    
# Sensor to caluclation the production ratio between consumed energy and produced heat.
    isg_produced_heat_vs_consumed_energy_ratio:
      friendly_name: ISG Produced Heat VS Consumed Energy Ratio
      unit_of_measurement: ""
      value_template: "{{ ((states('sensor.isg_production_heat_daily_energy') | float) / (states('sensor.isg_consumption_heat_daily_energy')| float)) | round(1) }}"

Here is a sceenshot of my folder and file structure:

Lovelace:
Most of them are entities or sensor cards.
The heat production/warm and ratio cads are buttons as they look nicer.
The set temperature is the number box card add on from HACS.

Maybe check the grid card as well. Here you can use grid / in / grid to sort better.
This is how my “Heizung & Temperatur” (heating and temperature) looks like

type: grid
title: Heizung & Temperatur
cards:
  - type: grid
    cards:
      - type: sensor
        entity: sensor.isg_outside_temperature
        graph: line
        name: Aussen
        detail: 1
      - type: sensor
        entity: sensor.isg_room_actual_temperature
        graph: line
        name: Innen
      - type: sensor
        entity: sensor.isg_room_humidity
        graph: line
        name: Feuchte
    columns: 3
    square: false
  - type: grid
    cards:
      - type: sensor
        entity: sensor.isg_hc2_actual_temperature
        graph: line
        name: 'Heizkreis 2 '
      - type: sensor
        entity: sensor.isg_water_actual_temperature
        graph: line
        name: Warmwasser
    columns: 2
    square: false
  - type: grid
    cards:
      - type: custom:numberbox-card
        border: true
        entity: input_number.isg_comfort_temperature
        name: Temperatur Komfort
      - type: custom:numberbox-card
        border: true
        entity: input_number.isg_eco_temperature
        name: Temperatur Eco
    columns: 1
    square: false
  - type: horizontal-stack
    cards:
      - type: grid
        cards:
          - type: button
            tap_action:
              action: none
            entity: sensor.isg_production_heat_daily_energy
            show_state: true
            icon: mdi:radiator
            name: Wärme Produziert
            hold_action:
              action: none
          - type: button
            tap_action:
              action: none
            entity: sensor.isg_consumption_heat_daily_energy
            name: Strom Benötigt
            show_state: true
            icon: mdi:flash
            show_icon: true
            hold_action:
              action: none
          - type: button
            tap_action:
              action: none
            entity: sensor.isg_produced_heat_vs_consumed_energy_ratio
            icon: mdi:format-vertical-align-center
            color: purple
            show_state: true
            name: Ratio Wärme/Strom
            hold_action:
              action: none
            show_name: true
        square: false
  - type: entity-filter
    entities:
      - sensor.isg_state_compressor_active
      - sensor.isg_state_cooling_active
      - sensor.isg_state_defrost_active
      - sensor.isg_kompressor_aktiv
      - sensor.isg_state_electrical_heating_active
      - sensor.isg_state_active_hc1_pump
      - sensor.isg_state_active_hc2_pump
      - sensor.isg_state_heating_active
      - sensor.isg_state_hot_water_production_active
      - sensor.isg_state_preheating_active
      - sensor.isg_state_silentmode1_active
      - sensor.isg_state_silentmode2_active
      - sensor.isg_state_summer_mode_active
    state_filter:
      - 'True'
    card:
      type: entities
      title: Aktueller Betrieb
columns: 1
square: false

Just give it a try. I made several dashboards before i ended up with the one i showed you.
cheers A

2 Likes

Hi armin,

Beautiful work! I’ve used most of your code with a few tweaks (i dont use HK2, but HK1 etc.).
But I can’t get the Aktueller Betrieb to work. I also dont get any data back when I check it manually with a Modbus reader;

image

Any ideas?

Afternoon,

HK1 - Heat circuit 1 from the pump to the “boiler”
HK2 - Heat Circuit 2 is the ground heating inside the house.

About “Aktueller Betrieb” its the operating status of the pump. Betriebsstatus called in German.

You can find it in the Sensor.yaml

# Operational State Template
# Converts the operational state of the WPL to true or false
    isg_state_active_hc1_pump:
      friendly_name: "ISG State HC1 Pump active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(1) > 0 }}"
    
    isg_state_active_hc2_pump:
      friendly_name: "ISG State HC2 Pump active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(2) > 0 }}"
    
    isg_state_preheating_active:
      friendly_name: "ISG State Pre Heating active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(4) > 0 }}"      
 
    isg_state_electrical_heating_active:
      friendly_name: "ISG State Electrical Heating active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(8) > 0 }}"          
 
    isg_state_heating_active:
      friendly_name: "ISG State Heating active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(16) > 0 }}"  
  
    isg_state_hot_water_production_active:
      friendly_name: "ISG State Hot Water Production active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(32) > 0 }}"  
  
    isg_state_compressor_active:
      friendly_name: "ISG State Compressor active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(64) > 0 }}"
  
    isg_state_summer_mode_active:
      friendly_name: "ISG State Summer Mode active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(128) > 0 }}"
  
    isg_state_cooling_active:
      friendly_name: "ISG State Cooling active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(256) > 0 }}"

    isg_state_defrost_active:
      friendly_name: "ISG State Defrost active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(512) > 0 }}"

    isg_state_silentmode1_active:
      friendly_name: "ISG State Silentmode1 active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(1024) > 0 }}"

    isg_state_silentmode2_active:
      friendly_name: "ISG State Silentmode2 active"
      value_template: "{{ states('sensor.isg_operating_status')|int|bitwise_and(2048) > 0 }}"

And you need the modbus entries:

# Operating Status
# -- Operating Status
    - name:                ISG Operating Status
      slave:               1
      count:               1
      address:             2500
      input_type:          input
      data_type:           uint16

The card i used the entity filter. it shows only running (set to true) events.

type: entity-filter
entities:
  - sensor.isg_state_compressor_active
  - sensor.isg_state_cooling_active
  - sensor.isg_state_defrost_active
  - sensor.isg_kompressor_aktiv
  - sensor.isg_state_electrical_heating_active
  - sensor.isg_state_active_hc1_pump
  - sensor.isg_state_active_hc2_pump
  - sensor.isg_state_heating_active
  - sensor.isg_state_hot_water_production_active
  - sensor.isg_state_preheating_active
  - sensor.isg_state_silentmode1_active
  - sensor.isg_state_silentmode2_active
  - sensor.isg_state_summer_mode_active
state_filter:
  - 'True'
card:
  type: entities
  title: Aktueller Betrieb

The whole Entitiy List is:

Hope this explains.

Maybe you have a different register depending on the type of pump.
I took it from here and focused on WPM system

cheers A

Thanks a lot! Got it working now, was polling the correct value but changed a bit too much.

Glad it worked out!

Excellent Ratio you have. Seems to be warmer in your Area.
We got loads of snow today in Switzerland :slight_smile:

Only thing i am missing is the second value of the summaries from the ISG.
If you scroll up on this topic you find a post. 11 days ago.

Maybe you stumble over these registers. Please let me know if you do so.
cheers A

Yeah I’ve had the same issue. I’ll try and contact our installation guys, maybe they have an idea.

I get the same issue:

I’m missing my 267