KWB Easyfire via Modbus

KWB Comfort Online 4

Wir haben 2022 unsere alte Ölheizung gegen eine moderne Pellet Heizung von KWB getauscht.

https://www.kwb.net/de-de/produkte/pelletheizungen/kwb-easyfire/

Die alte Fröhlich mit dem 35KW Brenner und 500L Pufferspeicher

image.jpeg  

Die neue KWB Easyfire am Tag 1 des Einbaus :-) Hinten steht noch unser Warmwasserboiler für die 14 Tage.

Wir hatten hier echtes Handwerker Glück, dass dem Monteur (SR-Energie) ein Termin abgesagt wurde. 

IMG_3953.jpeg

 

Die Alte habe ich als Spende ins Aartal gefahren

IMG_3927.jpeg

 

    


  

 

 

 

 

 



Comfort Online Einrichtung

Ressourcen

ibn_b_modbus_comfort_4_int.pdf

modbusinfo_v21.9.0.zip

Anbindung via WLAN

Ich verwende im ganzen Haus Fritz WLAN. Den Versuch auf OpenWRT hatte ich gestartet, das wurde mir dann aber für die Wartung hier privat zu komplex. Unify hatte ich im vorigen Haus, war zwar super, aber ausser, dass ich mehrere VLANS anlegen könnte um z.b. Smarthome von TV oder LAN/WLAN zu trennen, habe ich keine Vorteil. ...und dafür würde es mir zu teuer werden und auch wieder zu komplex.

Die Performance der Fritz Installation ist super und die Abdeckung durch den Einsatz von 8 Repeatern durchgängig.

Für die Anbindung der KWB Steuerung muss bei dem Einsatz einer WLAN Brücke über Fritz Repeatern die MESH Funktionalität unbedingt deaktiviert sein. Nicht komplett, nur auf dem Repeater an der Comfort Online.

Eine fixe IP in der Comfort Online zu setzen halte ich für besser als eine DHCP Reservierung.

image.jpeg

Ich musste das MESH noch deaktivieren, sonst wurde es nicht stabil. Seither aber alles top.

Testen

Zum Testen der Modus Funktionalität gibt es die App "oModbus Master" für unterschiedliche Betriebssysteme.

Leider ist es so, dass in der Tabelle von KWB die IDs meist um 1 zu niedrig sind. Am Besten alle gewünschten einmal ausprobieren und auf Plausibilität überprüfen.

Bildschirm­foto 2023-03-03 um 15.33.36.png

Der Wert "Kesseltemperatur" wird hier mit 622 auslesen. Die Spalte "Value" nennt 1/10. Ergibt also 62,2 Grad.

HomeAssistant

Modbus ist im Kern von HomeAssistant enthalten. Es ist nicht notwendig ein Aden zu laden.

https://www.home-assistant.io/integrations/modbus/

configuration.yaml

modbus: !include modbus.yaml

Ich habe in den Sensor Namen immer noch die modbus ID zugefügt.

Die Device Classes / State Classes sind so eingestellt, dass die Sensoren auch in Energie Dashboards nutzbar sind.

modbus.yaml

- name: heizung
  type: tcp
  port: 502
  host: 192.168.178.55
  sensors:
  # Blatt Heizkreise
    # Vorlauf Temperatur SOLL
    # ok mit cco
    - name: "KWB Heizkreis Vorlauf Soll (8328)"
      address: 8328
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      scale: 0.1
      precision: 1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement

    # Vorlauftemperatur IST
    # ok mit cco
    - name: "KWB Heizkreis Vorlauf IST (8260)"
      address: 8260
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      scale: 0.1
      precision: 1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement
   
    # Raumtemperatur
    # ok mit cco
    - name: "KWB Heizkreis Raumtemperatur (8538)"
      address: 8538
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      scale: 0.1
      precision: 1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement

    # Komforttemperatur   
    - name: "KWB Heizkreis Komforttemperatur (24624)"
      address: 24624
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: holding
      scale: 0.1
      precision: 1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement

    # Absenktemperatur 
    - name: "KWB Heizkreis Absenktemperatur (24659)"
      address: 24659
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: holding
      scale: 0.1
      precision: 1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement

    # hk_status_t
    # 0: Absenk 1: Komfort +7
    - name: "KWB Heizkreis Status (8573)"
      address: 8573
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input

  # Blatt KWB Easyfire
    # Kesselpumpe
    - name: "KWB Kessel Pumpe Status (8200)"
      address: 8200
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input

    # Kesselpumpe Leistung %
    - name: "KWB Kessel Pumpe Leistung % (8201)"
      address: 8201
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      scale: 0.1
      unit_of_measurement: "%"
  
    # Kesselleistung
    - name: "KWB Kessel Leistung % (8207)"
      address: 8207
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      scale: 0.1
      unit_of_measurement: "%"

    - name: "KWB Kessel Status (8208)"
      address: 8208
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input

    # Kesseltemperatur IST
    # ok nit cco
    - name: "KWB Kessel Temperatur IST (8197)"
      address: 8197
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      scale: 0.1
      precision: 1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement

    # Flammtemperatur
    # ok mit cco
    - name: "KWB Kessel Flammtemperatur (8215)"
      address: 8215
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      precision: 1
      scale: 0.1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement

    # Rücklauftemperatur ist 
    - name: "KWB Kessel Rücklauftemperatur (8202)"
      address: 8202
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      precision: 1
      scale: 0.1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement

    # Vollaststunden
    - name: "KWB Kessel Volllaststunden (8209)"
      address: 8209
      scan_interval: 30
      slave: 1
      data_type: uint32
      input_type: input
      scale: 0.0166667
      unit_of_measurement: h
 

    # Nächste Wartung in h
    # ok mit cco
    - name: "KWB Kessel Nächste Wartung in h (8224)"
      address: 8224
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      unit_of_measurement: h
  

    # Brennstoffverbrauch   
    - name: "KWB Kessel Brennstoffverbrauch (8233)"
      address: 8233
      scan_interval: 30
      slave: 1
      data_type: uint32
      input_type: input
      unit_of_measurement: kg

    # Füllstand Aschebehälter
    # ok mit cco
    - name: "KWB Kessel Füllstand Aschebehälter (9497)"
      address: 9497
      scan_interval: 30
      slave: 1
      data_type: uint16
      input_type: input
      scale: 0.1
      unit_of_measurement: "%"

    # Restmenge Brennstofflager
    - name: "KWB Brennstofflager Restmenge (24927)"
      address: 24927
      scan_interval: 30
      slave: 1
      data_type: uint32
      input_type: holding
      unit_of_measurement: kg
 
  # Blatt Pufferspeicher
    # Puffer Temp S1
    # ok mit cco
    - name: "KWB Pufferspeicher S1 (8710)"
      address: 8710
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      scale: 0.1
      precision: 1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement

    # Puffer Temp S3   
    - name: "KWB Pufferspeicher S3 (8778)"
      address: 8778
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      scale: 0.1
      precision: 1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement

    # Puffer Temp S4
    - name: "KWB Pufferspeicher S4 (8812)"
      address: 8812
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      scale: 0.1
      precision: 1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement

    # Puffer Temp S5
    - name: "KWB Pufferspeicher S5 (8846)"
      address: 8846
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      scale: 0.1
      precision: 1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement

  # Blatt Solar
    # Kollektortemperatur 
    # ok mit cco
    - name: "KWB Solar Kollektortemperatur (9080)"
      address: 9080
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      scale: 0.1
      precision: 1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement
     
    - name: "KWB Solar Temperatur Speicher 1 (9110)"
      address: 9110
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      scale: 0.1
      precision: 1
      unit_of_measurement: °C
      device_class: temperature
      state_class: measurement

    # solar_status_t
    # Solar status
    - name: "KWB Solar Status (9049)"
      address: 9049
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input

    - name: "KWB Solar Statusursache (9064)"
      address: 9064
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input

    # Wärmeleistung
    - name: "KWB Solar Wärmeleistung (9215)"
      address: 9215
      scan_interval: 30
      slave: 1
      data_type: uint32
      input_type: input
      scale: 0.001
      precision: 1
      unit_of_measurement: kW
      device_class: power
      state_class: measurement

    # Wärmeleistung Tag
    - name: "KWB Solar Wärmeleistung Tag (9245)"
      address: 9245
      scan_interval: 30
      slave: 1
      data_type: uint32
      input_type: input
      scale: 0.001
      precision: 1
      unit_of_measurement: kWh
      device_class: energy
      state_class: total

    # Wärmeleistung Gesamt
    - name: "KWB Solar Wärmeleistung Gesamt (9275)"
      address: 9275
      scan_interval: 30
      slave: 1
      data_type: uint32
      input_type: input
      scale: 0.001
      unit_of_measurement: kWh
      device_class: energy
      state_class: total_increasing
      
    - name: "KWB Solar Pumpe 1 Leistung % (9466)"
      address: 9466
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      unit_of_measurement: "%"
  
    - name: "KWB Solar Pumpe 2 Leistung % (9481)"
      address: 9481
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: input
      unit_of_measurement: "%"

  # Heizkreis Programm wählen (hk_programm_t)
    # 0-Automatik, 1-Frostschutz, 2-Aus, 3-Komfort, 4-Absenk
    - name: "KWB Heizkreis Programm wählen (24589)"
      address: 24589
      scan_interval: 30
      slave: 1
      data_type: int16
      input_type: holding

Ansicht

Für die Ansicht habe ich mir dann die wichtigsten Entites kompakt zusammengesetzt.

Bildschirm­foto 2023-03-03 um 15.42.29.png

Code Schnipsel

Die beiden Elemente sind Objekte in einem vertikalen Stapel. Hier die Code Schnipsel dafür.

type: entities
entities:
  - type: custom:multiple-entity-row
    entity: sensor.kwb_kessel_fullstand_aschebehalter_9497
    name: Heizung Aschebehälter
    secondary_info: last-changed
  - type: custom:multiple-entity-row
    entity: sensor.pellets_tag
    name: Pellets
    secondary_info: last-changed
    state_header: Tagesverbrauch
    entities:
      - entity: sensor.kwb_kessel_brennstoffverbrauch_8233
        name: Verbrauch
      - entity: sensor.kwb_brennstofflager_restmenge_24927
        name: Restmenge
      - entity: input_number.pellets_letzter_tag
        name: Gestern
  - type: section
  - type: custom:multiple-entity-row
    entity: sensor.kwb_heizkreis_vorlauf_ist_8260
    name: Heizkreis Vorlauf
    secondary_info: last-changed
    state_header: Ist
    entities:
      - entity: sensor.kwb_heizkreis_vorlauf_soll_8328
        name: Soll
  - type: custom:multiple-entity-row
    entity: sensor.kwb_pufferspeicher_s1_8710
    name: Pufferspeicher
    secondary_info: last-changed
    state_header: S1
    entities:
      - entity: sensor.kwb_pufferspeicher_s3_8778
        name: S3
      - entity: sensor.kwb_pufferspeicher_s4_8812
        name: S4
      - entity: sensor.kwb_pufferspeicher_s5_8846
        name: S5
  - type: section
  - type: custom:multiple-entity-row
    entity: sensor.kwb_solar_kollektortemperatur_9080
    name: Solar
    secondary_info: last-changed
    state_header: Kollektor
    entities:
      - entity: sensor.kwb_solar_temperatur_speicher_1_9110
        name: Speicher


type: custom:mini-graph-card
entities:
  - entity: sensor.kwb_pufferspeicher_s3_8778
  - entity: sensor.pellets_tag
  - entity: sensor.kwb_heizkreis_vorlauf_ist_8260
hours_to_show: 48
show_state: true
show_legend: true

Helfer

Um den Pellet Verbrauch besser im Überblick halten zu können, habe ich 2 zusätzliche Sensoren angelegt.

Entitäten

Nach Erstellung der Helfer sollen die Entitäten so benannt sein. Wenn nicht, entsprechend anpassen.

Bildschirm­foto 2023-03-08 um 10.10.13.png

Pellets / Tag

Der Pellets / Tag Sensor ist ein Helfer des Typs "Verbrauchszähler"

Unterstütze Tarife habe ich nicht konfiguriert.

Bildschirm­foto 2023-03-08 um 10.16.47.png


Pellets letzter Tag

Dieser Sensor ist ein Input Helper, der täglich mit einer Automatisierung gesetzt wird.

Bildschirm­foto 2023-03-08 um 10.05.33.png

Automatisierung für letzten Tag Sensor

alias: Pellets letzter Tag
description: ""
trigger:
  - platform: time
    at: "23:59:50"
condition: []
action:
  - service: input_number.set_value
    data:
      value: "{{ states('sensor.pellets_tag') }}"
      entity_id: input_number.pellets_letzter_tag
mode: single

Klarname Solarstatus

Übersetzung der Status Codes in Klarnamen

Bildschirm­foto 2023-03-26 um 12.48.37.png

include_sensors/solar_status.yaml

- platform: template
  sensors:
    kwb_solarstatus_klarname:
      friendly_name: "Solarstatus"
      value_template: >
        {% set status = int(states('sensor.kwb_solar_status_9094')) %}
        {% if status ==  0 -%}
          Aus
        {%- elif status ==  1 -%}
          Handbetrieb
        {%- elif status ==  2 -%}
          Laden Speicher 1
        {%- elif status ==  3 -%}
          Laden Speicher 2
        {%- elif status ==  4 -%}
          Störung
        {%- elif status ==  5 -%}
          Solarschutz
        {%- elif status ==  6 -%}
          Rückkühlung 1
        {%- elif status ==  7 -%}
          Rückkühlung 2
        {%- endif %}

# solar_status_t  0   Aus
# solar_status_t  1   Handbetrieb
# solar_status_t  2   Laden Speicher 1
# solar_status_t  3   Laden Speicher 2
# solar_status_t  4   Störung
# solar_status_t  5   Solarschutz
# solar_status_t  6   Rückkühlung 1
# solar_status_t  7   Rückkühlung 2

Klarname Kesselstatus

Übersetzung der Statuscodes in Klarnamen

Bildschirm­foto 2023-03-26 um 12.48.37.png

include_sensors/kesselstatus.yaml

- platform: template
  sensors:
    kwb_kesselstatus_klarname:
      friendly_name: "Kesselstatus"
      value_template: >
        {% set status = int(states('sensor.kwb_kessel_status_8208')) %}
        {% if status ==  0 -%}
          Aus
        {%- elif status ==  1 -%}
          Messbetrieb
        {%- elif status ==  2 -%}
          Betrieb (Reinigung)
        {%- elif status ==  4 -%}
          Betrieb
        {%- elif status ==  5 -%}
          Nachlauf
        {%- elif status ==  6 -%}
          Neustart
        {%- elif status ==  7 -%}
          Störung Nachlauf
        {%- elif status ==  8 -%}
          Störung Aus
        {%- elif status ==  9 -%}
          Wartung
        {%- elif status ==  10 -%}
          Bereit (-Zuendanf)
        {%- elif status ==  11 -%}
          Zünden Start Saugzug
        {%- elif status ==  12 -%}
          Zünden FS Füllen
        {%- elif status ==  13 -%}
          Zünden Einschieben 1
        {%- elif status ==  14 -%}
          Zünden Einschieben 3
        {%- elif status ==  15 -%}
          Zünden Heizen
        {%- elif status ==  16 -%}
          Heizen Durchzünden
        {%- elif status ==  17 -%}
          Zünden Einschieben 2
        {%- elif status ==  18 -%}
          Zünden Warten
        {%- elif status ==  19 -%}
          Durchzünden
        {%- elif status ==  20 -%}
          1. IB Betrieb
        {%- elif status ==  21 -%}
          Bereit (-Ext1)
        {%- elif status ==  22 -%}
          Bereit (-Zweitkessel)
        {%- elif status ==  23 -%}
          Bereit (-FS)
        {%- elif status ==  24 -%}
          Bereit (-Reinigung)
        {%- elif status ==  25 -%}
          Bereit (+Stop)
        {%- elif status ==  26 -%}
          Bereit (-Ext3)
        {%- elif status ==  27 -%}
          Bereit (-Lambdasonde)
        {%- elif status ==  28 -%}
          undefined
        {%- elif status ==  29 -%}
          undefined
        {%- elif status ==  30 -%}
          Bereit (-Anf)
        {%- elif status ==  31 -%}
          Bereit (+Wartezeit)
        {%- elif status ==  32 -%}
          Bereit (-Anf)
        {%- elif status ==  33 -%}
          undefined
        {%- elif status ==  34 -%}
          Bereit (+Wartezeit)
        {%- elif status ==  35 -%}
          Aus
        {%- elif status ==  36 -%}
          Anheizen
        {%- elif status ==  37 -%}
          Warten Zündanf.
        {%- elif status ==  38 -%}
          Warten Zündfreig.
        {%- elif status ==  39 -%}
          Start Zündung
        {%- elif status ==  40 -%}
          Zünden
        {%- elif status ==  41 -%}
          Heizen
        {%- elif status ==  42 -%}
          Feuerhaltung
        {%- elif status ==  43 -%}
          Feuer aus
        {%- elif status ==  44 -%}
          Störung Feuer aus
        {%- elif status ==  45 -%}
          Tür offen
        {%- elif status ==  46 -%}
          Überhitzung
        {%- elif status ==  47 -%}
          Störung Feuerhaltung
        {%- elif status ==  48 -%}
          undefined
        {%- elif status ==  49 -%}
          Sh aus, PM freigegeben
        {%- elif status ==  50 -%}
          Start Pelletmodul
        {%- elif status ==  51 -%}
          Pelletmodul Gesperrt
        {%- elif status ==  52 -%}
          Wartung
        {%- endif %}



####
# 0 Aus
# 1 Messbetrieb
# 2 Betrieb (Reinigung)
# 3 Einmessen
# 4 Betrieb
# 5 Nachlauf
# 6 Neustart
# 7 Störung Nachlauf
# 8 Störung Aus
# 9 Wartung
# 10  Bereit (-Zuendanf)
# 11  Zünden Start Saugzug
# 12  Zünden FS Füllen
# 13  Zünden Einschieben 1
# 14  Zünden Einschieben 3
# 15  Zünden Heizen
# 16  Heizen Durchzünden
# 17  Zünden Einschieben 2
# 18  Zünden Warten
# 19  Durchzünden
# 20  1. IB Betrieb
# 21  Bereit (-Ext1)
# 22  Bereit (-Zweitkessel)
# 23  Bereit (-FS)
# 24  Bereit (-Reinigung)
# 25  Bereit (+Stop)
# 26  Bereit (-Ext3)
# 27  Bereit (-Lambdasonde)
# 30  Bereit (-Anf)
# 31  Bereit (+Wartezeit)
# 32  Bereit (+Anf)
# 34  Bereit (+Wartezeit)
# 35  Aus
# 36  Anheizen
# 37  Warten Zündanf.
# 38  Warten Zündfreig.
# 39  Start Zündung
# 40  Zünden
# 41  Heizen
# 42  Feuerhaltung
# 43  Feuer aus
# 44  Störung Feuer aus
# 45  Tür offen
# 46  Überhitzung
# 47  Störung Feuerhaltung
# 49  Sh aus, PM freigegeben
# 50  Start Pelletmodul
# 51  Pelletmodul Gesperrt
# 52  Wartung
####

Klarname Heizkreisstatus

Übersetzung der Statuscodes in Klarnamen

Bildschirm­foto 2023-03-26 um 12.48.37.png

include_sensors/heizkreis_status.yaml

- platform: template
  sensors:
    kwb_heizkreis_klarname:
      friendly_name: "Heizkreisstatus"
      value_template: >
        {% set status = int(states('sensor.kwb_heizkreis_status_8573')) %}
        {% if status ==  0 -%}
          Absenk
        {%- elif status ==  1 -%}
          Komfort
        {%- elif status ==  2 -%}
          Frostschutz
        {%- elif status ==  3 -%}
          Urlaub
        {%- elif status ==  4 -%}
          Aus
        {%- elif status ==  5 -%}
          Estrich
        {%- elif status ==  6 -%}
          Max. Wärmeabnahme
        {%- elif status ==  7 -%}
          Max. Wärmeabnahme
        {%- elif status ==  8 -%}
          Modbus
        {%- endif %}


# hk_status_t 0   Absenk
# hk_status_t 1   Komfort
# hk_status_t 2   Frostschutz
# hk_status_t 3   Urlaub
# hk_status_t 4   Aus
# hk_status_t 5   Estrich
# hk_status_t 6   Max. Wärmeabnahme
# hk_status_t 7   Max. Wärmeabnahme
# hk_status_t 8   Modbus

Lovelace Ansicht

Bildschirm­foto 2023-03-27 um 16.46.07.png

HACS Frontend
Label "Pelletheizung"
type: custom:mushroom-title-card
title: Pelletheizung
Urlaubs Switch

Der Klick auf diesen Button soll die Heizung in Urlaubsmodus setzen. Ist aber noch nicht fertig :-(

type: tile
entity: input_boolean.urlaub
tap_action:
  action: toggle
  confirmation:
    text: Sicher umschalten?
Übersicht
type: entities
entities:
  - entity: sensor.kwb_heizkreis_klarname
  - entity: sensor.kwb_kesselstatus_klarname
  - entity: sensor.kwb_solarstatus_klarname
  - type: section
  - type: custom:multiple-entity-row
    entity: sensor.kwb_kessel_fullstand_aschebehalter_9497
    name: Heizung Aschebehälter
    secondary_info: last-changed
  - type: custom:multiple-entity-row
    entity: sensor.pellets_tag
    name: Pellets
    secondary_info: last-changed
    state_header: Tagesverbrauch
    entities:
      - entity: sensor.kwb_kessel_brennstoffverbrauch_8233
        name: Verbrauch
      - entity: sensor.kwb_brennstofflager_restmenge_24927
        name: Restmenge
      - entity: input_number.pellets_letzter_tag
        name: Gestern
  - type: section
  - type: custom:multiple-entity-row
    entity: sensor.kwb_heizkreis_vorlauf_ist_8260
    name: Heizkreis Vorlauf
    secondary_info: last-changed
    state_header: Ist
    entities:
      - entity: sensor.kwb_heizkreis_vorlauf_soll_8328
        name: Soll
  - type: custom:multiple-entity-row
    entity: sensor.kwb_pufferspeicher_s1_8710
    name: Pufferspeicher
    secondary_info: last-changed
    state_header: S1
    entities:
      - entity: sensor.kwb_pufferspeicher_s3_8778
        name: S3
      - entity: sensor.kwb_pufferspeicher_s4_8812
        name: S4
      - entity: sensor.kwb_pufferspeicher_s5_8846
        name: S5
  - type: section
  - type: custom:multiple-entity-row
    entity: sensor.kwb_solar_kollektortemperatur_9080
    name: Solar
    secondary_info: last-changed
    state_header: Kollektor
    entities:
      - entity: sensor.kwb_solar_temperatur_speicher_1_9110
        name: Speicher
Grafen
type: custom:mini-graph-card
entities:
  - entity: sensor.kwb_pufferspeicher_s3_8778
  - entity: sensor.pellets_tag
  - entity: sensor.kwb_heizkreis_vorlauf_ist_8260
hours_to_show: 48
show_state: true
show_legend: true