Weishaupt WWP18 Modbus Dashboard

Moin in die Runde,

Angelehnt an die vielen Posts im Netz über Dimplex und Weishaupt Wärmepumpen, die aber leider nie mit meinem Modell kompatibel waren und die Register deshalb immer auf Kriegsfuss mit mir gestanden sind, dachte ich, das geht auch besser :slight_smile:

Ich bin erst seit 2 Wochen im Thema mit HA, entschuldigt bitte deshalb, falls es noch nicht so prinkelnd aussieht oder ich nicht alles abbilden konnte, was Modbus von Weishaupt hergibt.

Wichtig für mich waren anfangs nur die Statistiken, da die wirklich mies vom Werk aus sind und nur megaumständlich über csv Dateien ausgelesen werden können. Als das vollbracht war, sind dann auch ein paar relevante Einstellungen gefolgt.

Was findet ihr nun hier?

Drei Dateien unter /Packages

modbus_sensor.yaml

sensor:
  - platform: modbus
    name: "modbus_temp_0"
    hub: weishaupt_wwp18
    slave: 1
    register: 0
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_1"
    hub: weishaupt_wwp18
    slave: 1
    register: 1
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_2"
    hub: weishaupt_wwp18
    slave: 1
    register: 2
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_3"
    hub: weishaupt_wwp18
    slave: 1
    register: 3
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_4"
    hub: weishaupt_wwp18
    slave: 1
    register: 4
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_5"
    hub: weishaupt_wwp18
    slave: 1
    register: 5
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_6"
    hub: weishaupt_wwp18
    slave: 1
    register: 6
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_7"
    hub: weishaupt_wwp18
    slave: 1
    register: 7
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_8"
    hub: weishaupt_wwp18
    slave: 1
    register: 8
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_9"
    hub: weishaupt_wwp18
    slave: 1
    register: 9
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_10"
    hub: weishaupt_wwp18
    slave: 1
    register: 10
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_11"
    hub: weishaupt_wwp18
    slave: 1
    register: 11
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_12"
    hub: weishaupt_wwp18
    slave: 1
    register: 12
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_13"
    hub: weishaupt_wwp18
    slave: 1
    register: 13
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_14"
    hub: weishaupt_wwp18
    slave: 1
    register: 14
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_15"
    hub: weishaupt_wwp18
    slave: 1
    register: 15
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_16"
    hub: weishaupt_wwp18
    slave: 1
    register: 16
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_17"
    hub: weishaupt_wwp18
    slave: 1
    register: 17
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_18"
    hub: weishaupt_wwp18
    slave: 1
    register: 18
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_19"
    hub: weishaupt_wwp18
    slave: 1
    register: 19
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_20"
    hub: weishaupt_wwp18
    slave: 1
    register: 20
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_21"
    hub: weishaupt_wwp18
    slave: 1
    register: 21
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_22"
    hub: weishaupt_wwp18
    slave: 1
    register: 22
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_23"
    hub: weishaupt_wwp18
    slave: 1
    register: 23
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_24"
    hub: weishaupt_wwp18
    slave: 1
    register: 24
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_25"
    hub: weishaupt_wwp18
    slave: 1
    register: 25
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_26"
    hub: weishaupt_wwp18
    slave: 1
    register: 26
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_27"
    hub: weishaupt_wwp18
    slave: 1
    register: 27
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_28"
    hub: weishaupt_wwp18
    slave: 1
    register: 28
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_29"
    hub: weishaupt_wwp18
    slave: 1
    register: 29
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_30"
    hub: weishaupt_wwp18
    slave: 1
    register: 30
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_31"
    hub: weishaupt_wwp18
    slave: 1
    register: 31
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_32"
    hub: weishaupt_wwp18
    slave: 1
    register: 32
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_33"
    hub: weishaupt_wwp18
    slave: 1
    register: 33
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_34"
    hub: weishaupt_wwp18
    slave: 1
    register: 34
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_35"
    hub: weishaupt_wwp18
    slave: 1
    register: 35
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_36"
    hub: weishaupt_wwp18
    slave: 1
    register: 36
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_37"
    hub: weishaupt_wwp18
    slave: 1
    register: 37
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"
    
  - platform: modbus
    name: "modbus_temp_38"
    hub: weishaupt_wwp18
    slave: 1
    register: 38
    register_type: holding
    data_type: int16
    scale: 1
    precision: 0
    unit_of_measurement: "°C"

modbus_slider.yaml

input_number:
  register_offset_slider:
    name: Temperatur-Offset
    min: -19
    max: 19
    step: 1
    mode: slider
    unit_of_measurement: "°C"
    icon: mdi:thermometer-lines

template:
  - sensor:
      - name: "Aktive Modbus-Adresse (aus Offset)"
        state: >
          {% set offset = states('input_number.register_offset_slider') | int %}
          {{ 19 + offset }}
      - name: "Wert aus gewähltem Offset-Register"
        unit_of_measurement: "°C"
        state: >
          {% set offset = states('input_number.register_offset_slider') | int %}
          {% set addr = 19 + offset %}
          {% set sensor_name = 'modbus.sensor_temp_' ~ addr %}
          {% if states(sensor_name) not in ['unknown', 'unavailable'] %}
            {{ states(sensor_name) }}
          {% else %}
            'n/v'
          {% endif %}

modbus.yaml

modbus:
  - name: weishaupt_wwp18
    type: tcp
    host: 192.168.x.x
    port: 502
    #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: 5048
      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: 5045
      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
    # System
    - name: "WP Betriebsmodus ID"
      unique_id: wp_betriebsmodus_id
      slave: 1
      address: 5015
      input_type: input
      scan_interval: 15
      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 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: "Wärmequellenaustritt"
      unique_id: wp_waermequellenaustritt_temperatur
      slave: 1
      address: 7
      input_type: input
      unit_of_measurement: °C
      state_class: measurement
      scale: 0.1
      offset: 0
      precision: 1
      data_type: int16
    - name: "WP Heizen Hysterese"
      unique_id: wp_heizen_hysterese
      slave: 1
      address: 47
      input_type: input
      unit_of_measurement: K
      state_class: measurement
      scale: 0.1
      offset: 0
      precision: 1
      data_type: int16
    # WEZ
    - name: "WP Verdichter Stunden"
      unique_id: wp_verdichter_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: "Primärpumpe"
      unique_id: wp_primaerpumpe_stunden
      slave: 1
      address: 74
      input_type: input
      unit_of_measurement: h
      state_class: measurement
      scale: 1
      offset: 0
      precision: 0
      data_type: int16
    - name: "Heizungspumpe"
      unique_id: wp_heizungspumpe_stunden
      slave: 1
      address: 76
      input_type: input
      unit_of_measurement: h
      state_class: measurement
      scale: 1
      offset: 0
      precision: 0
      data_type: int16
    - name: "Warmwasserpumpe"
      unique_id: wp_warmwasserpumpe_stunden
      slave: 1
      address: 77
      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: 5096
      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: 5097
      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: 5098
      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: 5099
      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: 5100
      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: 5101
      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
    # Pumpen
    - name: "WP Verdichter"
      unique_id: wp_verdichter
      slave: 1
      address: 41
      input_type: coil
    - name: "Primärpumpe"
      unique_id: wp_primaerpumpe
      slave: 1
      address: 43
      input_type: coil
    - name: "Heizungspumpe"
      unique_id: wp_heizungspumpe
      slave: 1
      address: 45
      input_type: coil
    - name: "Warmwasserpumpe"
      unique_id: wp_warmwasserpumpe
      slave: 1
      address: 46
      input_type: coil

configuration.yaml

template:
  - sensor:
      # 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 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)
          }}
      # 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 Sperre
          {% 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 Störung 
          {% 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') %}
            nicht aktiv
          {% 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 %}

automation.yaml

- id: "1753627793571"
  alias: Urlaub
  description: ""
  triggers:
    - trigger: state
      entity_id:
        - input_number.urlaub
  conditions: []
  actions:
    - action: modbus.write_register
      data:
        address: 5017
        hub: weishaupt_wwp18
        slave: 1
        value: "{{ states('input_number.urlaub') | float }} \n"
  mode: single
- id: "1753633592469"
  alias: "Party "
  description: ""
  triggers:
    - trigger: state
      entity_id:
        - input_number.party
  conditions: []
  actions:
    - action: modbus.write_register
      data:
        address: 5016
        hub: weishaupt_wwp18
        value: "{{ states('input_number.party') | float }} \n"
  mode: single
- id: modbus_offset_write_on_slider
  alias: Schreibe Modbus-Offset bei Slider-Änderung
  triggers:
    - trigger: state
      entity_id:
        - input_number.register_offset_slider
  conditions: []
  actions:
    - delay: "00:00:10"
    - action: modbus.write_register
      data:
        address: 5036
        hub: weishaupt_wwp18
        unit: 1
        value: >
          {{ 19 + (states('input_number.register_offset_slider') | int) }}
  mode: single

Die Parallelverschiebung war wohl das aufwendigste, für mich zumindest. Hier musste ich Helfer erstellen für die Offsetwerte, da die Register von Weishaupt nicht identisch mit den Grad-Zahlen sind. Dafür sind dann die modbus-sensor und modbus_slider Dateien. Die Automation pusht den Wert in die Heizung.

Viel Spaß beim umsetzen! Mich hat es in 2 Wochen einige graue Harre gekostet. Für euch Profis wäre das wahrscheinlicher glimpflicher abgelaufen für die Haarpracht :joy:

1 „Gefällt mir“

Wurde noch ein wenig erweitert. Dazukommen sind Warmwasser Sperrzeiten und die Zustände habe ich zusammengefasst.

1 „Gefällt mir“

Hi @cimoto kurze Frage :slight_smile: Mit was hast du deine Temperaturen so cool hinbekommen? Also die erste Grafik von dir? Grüße

Das sind die Standard Karten in HA

1 „Gefällt mir“

Hallo cimoto,

habe eine ähnliche WP von Weishaupt. würdest Du deine aktuellen Dateien zur Verfügung stellen? Inkl. der Dashboards?

grüße

Ist doch im ersten Post alles drin oder was meinst du?

ich dachte die sind vielleicht nicht mehr aktuell.

habe alle Dateien in den packages Ordner gepackt und mal eine Standardkarte erstellt. Funktioniert soweit auch.

nur der Sensor Störung funktioniert bei mir nicht. An was könnte das liegen? Als Stoerung_ID zeigt er 0 an

im LOG ist eine Fehlermledung: Setup of package ‘automations’ at packages/lwp/automations.yaml, line 1 failed: Invalid package definition ‘automations’: expected a dictionary. Package will not be initialized

Schau mal in die configuration.yaml dort stehen die Zuordnungen zu den Nummern. 0 ist normal “keine Störung”

Bei Fehlermeldungen frag die KI. Die hat mir auch gut geholfen.

Kommt die configuration.yaml in den ordner packages ?

Nein.

Ich muss hier noch blablablablab schreiben, da “nein” zu kurz ist :see_no_evil_monkey:

Das muss ich mir mal genauer anschauen, wir bekommen im April eine Wab14.