Weishaupt WWP L9 ID - modbus

Inspired by the very pupular topic Weishaupt Heatpump integration via modbus - Share your Projects! - Home Assistant Community (home-assistant.io), I have decided to share my Weishaupt Heatpump (WWP L9 ID) setup as well.

Hardware

  • Weishaupt LWPM 410, ~150€
  • RS485 Konverter Bus Adapter Seriell USB, ~3€

Config

  • heatpump config

    • Menu → Config → Network: Select modbus, baudrate 9600 and slave address 1 (if only device)
    • Optional for Smart Grid: Menü + Enter → Config → Anlage → Flexeingang → N1/J5-ID1+2 digital: Smart Grid
  • modbus config

    modbus:
    - name: weishaupt_wwp_l9
     type: serial
     baudrate: 9600
     bytesize: 8
     method: rtu
     parity: N
     port: /dev/ttyUSB0
     stopbits: 1
     retry_on_empty: true
     timeout: 14
     sensors:
     # Warmwasser
     - name: "WP Warmwasser Solltemperatur"
       unique_id: wp_warmwasser_solltemperatur
       slave: 1
       address: 58
       input_type: input
       unit_of_measurement: °C
       state_class: measurement
       scale: 0.1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Warmwasser Solltemperatur Maximal"
       unique_id: wp_warmwasser_solltemperatur_maximal
       slave: 1
       address: 175
       input_type: input
       unit_of_measurement: °C
       state_class: measurement
       scale: 1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Warmwasser Hysterese"
       unique_id: wp_warmwasser_hysterese
       slave: 1
       address: 172
       input_type: input
       unit_of_measurement: K
       state_class: measurement
       scale: 1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Warmwasser Temperatur"
       unique_id: wp_warmwasser_temperatur
       slave: 1
       address: 3
       input_type: input
       unit_of_measurement: °C
       state_class: measurement
       scale: 0.1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Warmwasser Thermische Desinfektion"
       unique_id: wp_warmwasser_thermische_desinfektion
       slave: 1
       address: 192
       input_type: input
       scale: 1
       offset: 0
       precision: 0
       data_type: int16
     # System
     - name: "WP Betriebsmodus ID"
       unique_id: wp_betriebsmodus_id
       slave: 1
       address: 142
       input_type: input
       scale: 1
       offset: 0
       precision: 0
       data_type: int16
     - name: "WP Display Status ID"
       unique_id: wp_display_status_id
       slave: 1
       address: 103
       input_type: input
       scale: 1
       offset: 0
       precision: 0
       data_type: int16
     - name: "WP Display Sperre ID"
       unique_id: wp_display_sperre_id
       slave: 1
       address: 104
       input_type: input
       scale: 1
       offset: 0
       precision: 0
       data_type: int16
     - name: "WP Display Störung ID"
       unique_id: wp_display_stoerung_id
       slave: 1
       address: 105
       input_type: input
       scale: 1
       offset: 0
       precision: 0
       data_type: int16
     - name: "WP Display Sensor ID"
       unique_id: wp_display_sensor_id
       slave: 1
       address: 106
       input_type: input
       scale: 1
       offset: 0
       precision: 0
       data_type: int16
     - name: "WP Außen Temperatur"
       unique_id: wp_aussen_temperatur
       slave: 1
       address: 1
       input_type: input
       unit_of_measurement: °C
       state_class: measurement
       scale: 0.1
       offset: 0
       precision: 1
       data_type: int16
     # Heizkreis
     - name: "WP Raum Solltemperatur"
       unique_id: wp_raum_solltemperatur
       slave: 1
       address: 46
       input_type: input
       unit_of_measurement: °C
       state_class: measurement
       scale: 0.1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Rücklauf Solltemperatur"
       unique_id: wp_ruecklauf_solltemperatur
       slave: 1
       address: 53
       input_type: input
       unit_of_measurement: °C
       state_class: measurement
       scale: 0.1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Vorlauf Temperatur"
       unique_id: wp_vorlauf_temperatur
       slave: 1
       address: 5
       input_type: input
       unit_of_measurement: °C
       state_class: measurement
       scale: 0.1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Rücklauf Temperatur"
       unique_id: wp_ruecklauf_temperatur
       slave: 1
       address: 2
       input_type: input
       unit_of_measurement: °C
       state_class: measurement
       scale: 0.1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Heizkurve"
       unique_id: wp_heizkurve
       slave: 1
       address: 163
       input_type: holding
       state_class: measurement
       scale: 0.01
       offset: 0
       precision: 2
       data_type: int16
     # WEZ
     - name: "WP Verdichter1 Stunden"
       unique_id: wp_verdichter1_stunden
       slave: 1
       address: 72
       input_type: input
       unit_of_measurement: h
       state_class: measurement
       scale: 1
       offset: 0
       precision: 0
       data_type: int16
     - name: "WP 2.Wärmeerzeuger Stunden"
       unique_id: wp_2waermeerzeuger_stunden
       slave: 1
       address: 75
       input_type: input
       unit_of_measurement: h
       state_class: measurement
       scale: 1
       offset: 0
       precision: 0
       data_type: int16
     # Energy
     - name: "WP Energy Heizen 1-4"
       unique_id: wp_energy_heizen_1_4
       slave: 1
       address: 223
       input_type: input
       unit_of_measurement: kWh
       device_class: energy
       state_class: total
       scale: 1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Energy Heizen 5-8"
       unique_id: wp_energy_heizen_5_8
       slave: 1
       address: 224
       input_type: input
       unit_of_measurement: kWh
       device_class: energy
       state_class: total
       scale: 1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Energy Heizen 9-12"
       unique_id: wp_energy_heizen_9_12
       slave: 1
       address: 225
       input_type: input
       unit_of_measurement: kWh
       device_class: energy
       state_class: total
       scale: 1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Energy Warmwasser 1-4"
       unique_id: wp_energy_warmwasser_1_4
       slave: 1
       address: 226
       input_type: input
       unit_of_measurement: kWh
       device_class: energy
       state_class: total
       scale: 1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Energy Warmwasser 5-8"
       unique_id: wp_energy_warmwasser_5_8
       slave: 1
       address: 227
       input_type: input
       unit_of_measurement: kWh
       device_class: energy
       state_class: total
       scale: 1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Energy Warmwasser 9-12"
       unique_id: wp_energy_warmwasser_9_12
       slave: 1
       address: 228
       input_type: input
       unit_of_measurement: kWh
       device_class: energy
       state_class: total
       scale: 1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Energy Umwelt 1-4"
       unique_id: wp_energy_umwelt_1_4
       slave: 1
       address: 254
       input_type: input
       unit_of_measurement: kWh
       device_class: energy
       state_class: total
       scale: 1
       offset: 0
       precision: 1
       data_type: int16
     - name: "WP Energy Umwelt 5-8"
       unique_id: wp_energy_umwelt_5_8
       slave: 1
       address: 255
       input_type: input
       unit_of_measurement: kWh
       device_class: energy
       state_class: total
       scale: 1
       offset: 0
       precision: 1
       data_type: int16
     #- name: "WP Energy Umwelt 9-12"
     #  unique_id: wp_energy_umwelt_9_12
     #  slave: 1
     #  address: 256
     #  input_type: input
     #  unit_of_measurement: kWh
     #  device_class: energy
     #  state_class: total
     #  scale: 1
     #  offset: 0
     #  precision: 1
     #  data_type: int16
     binary_sensors:
     # Smart Grid
     - name: "WP Smart Grid 1"
       unique_id: wp_smart_grid_1
       slave: 1
       address: 3
       input_type: coil
     - name: "WP Smart Grid 2"
       unique_id: wp_smart_grid_2
       slave: 1
       address: 4
       input_type: coil
    
  • template sensors

       # WP Energy
       - name: "WP Energy Heizen (Total)"
         unique_id: wp_energy_heizen_total
         unit_of_measurement: 'kWh'
         state_class: total_increasing
         device_class: energy
         state: >-
           {% if states('sensor.wp_energy_heizen_1_4') in ['unknown', 'unavailable']
              or states('sensor.wp_energy_heizen_5_8') in ['unknown', 'unavailable']
              or states('sensor.wp_energy_heizen_9_12') in ['unknown', 'unavailable']
           %}
              {{ states("sensor.wp_energy_heizen_total") }}
           {% else %}
              {{ states("sensor.wp_energy_heizen_9_12")|float(0) * 100000000
               + states("sensor.wp_energy_heizen_5_8")|float(0) * 10000
               + states("sensor.wp_energy_heizen_1_4")|float(0)
              }}
           {% endif %}
       - name: "WP Energy Warmwasser (Total)"
         unique_id: wp_energy_warmwasser_total
         unit_of_measurement: 'kWh'
         state_class: total_increasing
         device_class: energy
         state: >-
           {% if states('sensor.wp_energy_warmwasser_1_4') in ['unknown', 'unavailable']
              or states('sensor.wp_energy_warmwasser_5_8') in ['unknown', 'unavailable']
              or states('sensor.wp_energy_warmwasser_9_12') in ['unknown', 'unavailable']
           %}
              {{ states("sensor.wp_energy_warmwasser_total") }}
           {% else %}
              {{ states("sensor.wp_energy_warmwasser_9_12")|float(0) * 100000000
               + states("sensor.wp_energy_warmwasser_5_8")|float(0) * 10000
               + states("sensor.wp_energy_warmwasser_1_4")|float(0)
              }}
           {% endif %}
       - name: "WP Energy Umwelt (Total)"
         unique_id: wp_energy_umwelt_total
         unit_of_measurement: 'kWh'
         state_class: total_increasing
         device_class: energy
         state: >-
           {% if states('sensor.wp_energy_umwelt_1_4') in ['unknown', 'unavailable']
              or states('sensor.wp_energy_umwelt_5_8') in ['unknown', 'unavailable']
           %}
              {{ states("sensor.wp_energy_umwelt_total") }}
           {% else %}
              {{ states("sensor.wp_energy_umwelt_5_8")|float(0) * 10000
               + states("sensor.wp_energy_umwelt_1_4")|float(0)
              }}
           {% endif %}
       - name: "WP Energy Grid (Total)"
         unique_id: wp_energy_grid_total
         unit_of_measurement: 'kWh'
         state_class: total_increasing
         device_class: energy
         state: >-
              {{ states("sensor.wp_energy_heizen_total")|float(0)
               + states("sensor.wp_energy_warmwasser_total")|float(0)
               - states("sensor.wp_energy_umwelt_total")|float(0)
              }}
       # WP Modus
       - name: "WP Betriebsmodus"
         unique_id: wp_betriebsmodus
         state: >
           {% if is_state('sensor.wp_betriebsmodus_id', '0') %}
             Sommer
           {% elif is_state('sensor.wp_betriebsmodus_id', '1') %}
             Auto
           {% elif is_state('sensor.wp_betriebsmodus_id', '2') %}
             Urlaub
           {% elif is_state('sensor.wp_betriebsmodus_id', '3') %}
             Party
           {% elif is_state('sensor.wp_betriebsmodus_id', '4') %}
             2.Wärmeerzeuger
           {% else %}
             {{ states('sensor.wp_betriebsmodus') }}
           {% endif %}
       # WP Smart Grid
       - name: "WP Smart Grid"
         unique_id: wp_smart_grid
         state: >-
           {% if states('binary_sensor.wp_smart_grid_1') in ['unknown', 'unavailable']
              or states('binary_sensor.wp_smart_grid_2') in ['unknown', 'unavailable']
           %}
             {{ states('sensor.wp_smart_grid') }}
           {% else %}
             {% if is_state('binary_sensor.wp_smart_grid_1', 'off') and is_state('binary_sensor.wp_smart_grid_2', 'on') %}
               rot
             {% elif is_state('binary_sensor.wp_smart_grid_1', 'off') and is_state('binary_sensor.wp_smart_grid_2', 'off') %}
               gelb
             {% elif is_state('binary_sensor.wp_smart_grid_1', 'on') and is_state('binary_sensor.wp_smart_grid_2', 'off') %}
               grün
             {% elif is_state('binary_sensor.wp_smart_grid_1', 'on') and is_state('binary_sensor.wp_smart_grid_2', 'on') %}
               dunkelgrün
             {% endif %}
           {% endif %}
       # WP Betrieb
       - name: "WP Display Status"
         unique_id: wp_display_status
         state: >
           {% if is_state('sensor.wp_display_status_id', '0') %}
             Aus
           {% elif is_state('sensor.wp_display_status_id', '1') %}
             Aus
           {% elif is_state('sensor.wp_display_status_id', '2') %}
             Heizen
           {% elif is_state('sensor.wp_display_status_id', '4') %}
             Warmwasser
           {% elif is_state('sensor.wp_display_status_id', '11') %}
             Durchflussüberwachung
           {% elif is_state('sensor.wp_display_status_id', '30') %}
             Sperre
           {% else %}
             {{ states('sensor.wp_display_status') }}
           {% endif %}
       # WP Display Sperre
       - name: "WP Display Sperre"
         unique_id: wp_display_sperre
         state: >
           {% if is_state('sensor.wp_display_sperre_id', '0') %}
             keine
           {% elif is_state('sensor.wp_display_sperre_id', '2') %}
             Volumenstrom
           {% elif is_state('sensor.wp_display_sperre_id', '5') %}
             Funktionskontrolle
           {% elif is_state('sensor.wp_display_sperre_id', '6') %}
             Einsatzgrenze HT
           {% elif is_state('sensor.wp_display_sperre_id', '7') %}
             Systemkontrolle
           {% elif is_state('sensor.wp_display_sperre_id', '9') %}
             Pumpenvorlauf
           {% elif is_state('sensor.wp_display_sperre_id', '10') %}
             Mindeststandzeit
           {% elif is_state('sensor.wp_display_sperre_id', '11') %}
             Netzbelastung
           {% elif is_state('sensor.wp_display_sperre_id', '12') %}
             Schaltspielsperre
           {% elif is_state('sensor.wp_display_sperre_id', '13') %}
             Warmwasser Nacherwärmung
           {% elif is_state('sensor.wp_display_sperre_id', '14') %}
             Regenerativ
           {% elif is_state('sensor.wp_display_sperre_id', '15') %}
             EVU-Sperre
           {% elif is_state('sensor.wp_display_sperre_id', '16') %}
             Sanftanlasser
           {% elif is_state('sensor.wp_display_sperre_id', '17') %}
             Durchfluss
           {% elif is_state('sensor.wp_display_sperre_id', '18') %}
             Einsatzgrenze Wärmepumpe
           {% elif is_state('sensor.wp_display_sperre_id', '19') %}
             Hochdruck
           {% elif is_state('sensor.wp_display_sperre_id', '20') %}
             Niederdruck
           {% elif is_state('sensor.wp_display_sperre_id', '21') %}
             Einsatzgrenze Wärmequelle
           {% elif is_state('sensor.wp_display_sperre_id', '23') %}
             System Grenze
           {% elif is_state('sensor.wp_display_sperre_id', '24') %}
             Last Primärkreis
           {% elif is_state('sensor.wp_display_sperre_id', '25') %}
             Sperre Extern
           {% elif is_state('sensor.wp_display_sperre_id', '31') %}
             Aufwärmen
           {% elif is_state('sensor.wp_display_sperre_id', '33') %}
             EvD Initialisierung
           {% elif is_state('sensor.wp_display_sperre_id', '34') %}
             2.Wärmeerzeuger freigegeben
           {% elif is_state('sensor.wp_display_sperre_id', '35') %}
             Störung
           {% elif is_state('sensor.wp_display_sperre_id', '38') %}
             Kommunikation Wärmepumpe (Master)
           {% elif is_state('sensor.wp_display_sperre_id', '39') %}
             Störung Wärmepumpe (Master)
           {% else %}
             {{ states('sensor.wp_display_sperre') }}
           {% endif %}
       # WP Display Störung
       - name: "WP Display Störung"
         unique_id: wp_display_stoerung
         state: >
           {% if is_state('sensor.wp_display_stoerung_id', '0') %}
             keine
           {% elif is_state('sensor.wp_display_stoerung_id', '1') %}
             Fehler N17.1
           {% elif is_state('sensor.wp_display_stoerung_id', '2') %}
             Fehler N17.2
           {% elif is_state('sensor.wp_display_stoerung_id', '3') %}
             Fehler N17.3
           {% elif is_state('sensor.wp_display_stoerung_id', '4') %}
             Fehler N17.4
           {% elif is_state('sensor.wp_display_stoerung_id', '6') %}
             Elektronisches Ex.Ventil
           {% elif is_state('sensor.wp_display_stoerung_id', '10') %}
             WPIO
           {% elif is_state('sensor.wp_display_stoerung_id', '12') %}
             Inverter
           {% elif is_state('sensor.wp_display_stoerung_id', '13') %}
             WQIF
           {% elif is_state('sensor.wp_display_stoerung_id', '15') %}
             Sensorik
           {% elif is_state('sensor.wp_display_stoerung_id', '16') %}
             Niederdruck Sole
           {% elif is_state('sensor.wp_display_stoerung_id', '19') %}
             Primärkreis
           {% elif is_state('sensor.wp_display_stoerung_id', '20') %}
             Abtauen
           {% elif is_state('sensor.wp_display_stoerung_id', '21') %}
             Niederdruck Sole
           {% elif is_state('sensor.wp_display_stoerung_id', '22') %}
             Warmwasser
           {% elif is_state('sensor.wp_display_stoerung_id', '23') %}
             Last Verdichter
           {% elif is_state('sensor.wp_display_stoerung_id', '24') %}
             Codierung
           {% elif is_state('sensor.wp_display_stoerung_id', '25') %}
             Niederdruck
           {% elif is_state('sensor.wp_display_stoerung_id', '26') %}
             Frostschutz
           {% elif is_state('sensor.wp_display_stoerung_id', '28') %}
             Hochdruck
           {% elif is_state('sensor.wp_display_stoerung_id', '29') %}
             Temperatur Differenz
           {% elif is_state('sensor.wp_display_stoerung_id', '30') %}
             Heißgasthermostat
           {% elif is_state('sensor.wp_display_stoerung_id', '31') %}
             Durchfluss
           {% else %}
             {{ states('sensor.wp_display_stoerung') }}
           {% endif %}
       # WP Display Sensor
       - name: "WP Display Sensor"
         unique_id: wp_display_sensor
         state: >
           {% if is_state('sensor.wp_display_sensor_id', '0') %}
             kein
           {% elif is_state('sensor.wp_display_sensor_id', '1') %}
             Außenfühler (R1)
           {% elif is_state('sensor.wp_display_sensor_id', '2') %}
             Rücklauffühler (R2)
           {% elif is_state('sensor.wp_display_sensor_id', '3') %}
             Warmwasserfühler (R3)
           {% elif is_state('sensor.wp_display_sensor_id', '4') %}
             Codierung (R7)
           {% elif is_state('sensor.wp_display_sensor_id', '5') %}
             Vorlauffühler (R9)
           {% elif is_state('sensor.wp_display_sensor_id', '6') %}
             2.Heizkreisfühler (R5)
           {% elif is_state('sensor.wp_display_sensor_id', '7') %}
             3.Heizkreisfühler (R13)
           {% elif is_state('sensor.wp_display_sensor_id', '8') %}
             Regenerativfühler (R13)
           {% elif is_state('sensor.wp_display_sensor_id', '9') %}
             Raumfühler 1
           {% elif is_state('sensor.wp_display_sensor_id', '10') %}
             Raumfühler 2
           {% elif is_state('sensor.wp_display_sensor_id', '11') %}
             Fühler Wärmequellenaustritt (R6)
           {% elif is_state('sensor.wp_display_sensor_id', '12') %}
             Fühler Wärmequelleneintritt (R24)
           {% elif is_state('sensor.wp_display_sensor_id', '14') %}
             Kollektorfühler (R23)
           {% elif is_state('sensor.wp_display_sensor_id', '15') %}
             Niederdrucksensor (R25)
           {% elif is_state('sensor.wp_display_sensor_id', '16') %}
             Hochdrucksensor (R26)
           {% elif is_state('sensor.wp_display_sensor_id', '17') %}
             Raumfeuchte 1
           {% elif is_state('sensor.wp_display_sensor_id', '18') %}
             Raumfeuchte 2
           {% elif is_state('sensor.wp_display_sensor_id', '19') %}
             Fühler Frostschutz-Kälte
           {% elif is_state('sensor.wp_display_sensor_id', '20') %}
             Heisgas
           {% elif is_state('sensor.wp_display_sensor_id', '21') %}
             Rücklauffühler (R2.1)
           {% elif is_state('sensor.wp_display_sensor_id', '22') %}
             Schwimmbadfühler (R20)
           {% elif is_state('sensor.wp_display_sensor_id', '23') %}
             Vorlauffühler Kühlen Passiv (R11)
           {% elif is_state('sensor.wp_display_sensor_id', '24') %}
             Rücklauffühler Kühlen Passiv (R4)
           {% elif is_state('sensor.wp_display_sensor_id', '26') %}
             Fühler Solarspeicher (R22)
           {% elif is_state('sensor.wp_display_sensor_id', '28') %}
             Anforderungsfühler Heizen (R2.2)
           {% elif is_state('sensor.wp_display_sensor_id', '29') %}
             RTM Econ
           {% elif is_state('sensor.wp_display_sensor_id', '30') %}
             Anforderungsfühler Kühlen (R39)
           {% else %}
             {{ states('sensor.wp_display_sensor') }}
           {% endif %}
    

Based on this I can do pretty much everything :slight_smile: My main use cases are:

  • Smart Grid based on Solar energy produced / forecast (incl. thermal desinfection)
  • Change operation mode
  • Monitor energy consumption of heatpump
  • Calc JAZ
  • Monitor temperatures around the heatpump (watertemp, room temp, …)

Further Links

2 Likes

Hi, ich habe eine Dimplex WP hier stehen und lese ebenfalls die Werte via Modbus aus. Bei den Energiewerten bekomme ich aber nur Werte bei Warmwasser 1-4 und Wärmemenge 1-4. Die Werte 5-8 und 9-12 stehen seit einem Jahr auf 0,00 kWh.

Ist das bei dir auch so?

Hey, bei mir haben mittlerweile alle 5-8er Werte. Hängt von deinem Verbrauch ab … die 5-8er Werte haben ja den Faktor 10000 und zählen erst wenn 1-4 “voll” ist

1 Like