Anrufen Fernwartung WhatsApp
Smart Home · KWB · Modbus TCP · Kärnten

KWB Hackschnitzelheizung mit Home Assistant überwachen

Eine KWB Hackschnitzelheizung arbeitet still und zuverlässig im Heizraum – aber wie läuft der Kessel gerade wirklich? Mit Home Assistant und Modbus TCP bekommt man dauerhaften Überblick über alle Betriebsparameter – ohne Cloudanbindung, direkt über das lokale Netzwerk.

Hinweis: Die Register-Map wurde durch Wireshark-Mitschnitte und Korrelation mit den Display-Werten erarbeitet. Es gibt keine offizielle Dokumentation von KWB dazu. Die Adressen wurden für die KWB USV06 / Multifire verifiziert – bei anderen Modellen können sie abweichen.

Mag.a Carmen Hedenig MAS
Mai 2026
ca. 8 Min. Lesezeit
Praxis-Anleitung
Heizraum mit Rohren und Armaturen – KWB Hackschnitzelheizung Modbus TCP Integration, Kärnten

Foto: Immo Wegmann / Unsplash

Systemübersicht

Anlage KWB USV06 (Multifire)
Protokoll Modbus TCP
IP-Adresse 192.168.0.150
Port 502
Unit-ID / Slave 10
Datenskalierung ÷ 10 für Temperaturen (int16)
Max. Polling-Rate 5 Anfragen/Sekunde (250 ms Pause)

Die KWB-Anlage kommuniziert intern über eine SPS, die Modbus TCP als Slave bereitstellt. Alle Werte liegen ausschließlich als Holding Registers vor – ausgelesen über Funktionscode FC03.

Was lässt sich auslesen?

Kessel

  • Rauchgas-, Kessel- und Rücklauftemperatur
  • Sauerstoffgehalt im Abgas (%)
  • Unterdruck im Brennraum (mBar)
  • Kesselleistung (%)
  • Kesselpumpen-Status
  • Kessel-Status (Enum): Bereitschaft, Betrieb, Nachlauf, Ausbrennen, Anheizen Phase 1–6

Pufferspeicher

  • Temperatur oben und unten
  • Soll-Temperaturen
  • Anforderungsstatus
  • Wärmeleistung (kW) und Energiezähler (MWh, kumuliert)

Boiler (Warmwasser)

  • Ist- und Soll-Temperatur
  • Pumpen-Status
  • Betriebsprogramm, Min/Max-Temperaturen, Legionellenschutz

Heizkreise (HK3 + HK4)

  • Außentemperatur, Raumtemperatur Ist/Soll
  • Vorlauftemperatur Ist/Soll
  • Heizprogramm-Status (Aus / Heizprogramm 1 / Heizprogramm 2)
  • Heizkurven-Steigung
01

Modbus-Verbindung einrichten

In der Home Assistant Konfiguration (z. B. packages/kwb.yaml) wird zunächst die Verbindung definiert:

modbus:
  - name: "kwb"
    type: tcp
    host: 192.168.0.150
    port: 502
    timeout: 2
    delay: 1           # Pflicht: gibt KWB-SPS Zeit nach Verbindungsaufbau

Wichtig: delay: 1

Ohne diese Pause von 1 Sekunde nach dem Verbindungsaufbau können die ersten Modbus-Anfragen fehlschlagen. Die KWB-SPS braucht diese Anlaufzeit.

02

Sensoren definieren

Alle Werte liegen als Holding Registers vor. Temperaturen werden als int16 mit dem Faktor 0.1 übertragen – ein Registerwert von 234 entspricht 23.4 °C. Alle Sensoren starten mit scan_interval: 3600 (1 Stunde); der Live-Modus (Schritt 3) übernimmt die aktive Abfrage.

Kessel-Temperaturen

    sensors:
      - name: "KWB Kesseltemperatur"
        slave: 10
        address: 1402
        input_type: holding
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "°C"
        device_class: temperature
        state_class: measurement
        scan_interval: 3600

      - name: "KWB Rauchgastemperatur"
        slave: 10
        address: 1401
        input_type: holding
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "°C"
        device_class: temperature
        state_class: measurement
        scan_interval: 3600

Kessel-Status (Enum)

      - name: "KWB Kessel Status"
        slave: 10
        address: 1412
        input_type: holding
        data_type: uint16
        precision: 0
        unit_of_measurement: ""
        scan_interval: 3600

Enum-Werte des Kessel-Status:

Wert Bedeutung
0 Unbekannt
1 Bereitschaft
2 Betrieb
3 Nachlauf
100 Ausbrennen
101–106 Anheizen Phase 1–6

Pufferspeicher-Temperaturen

      - name: "KWB Puffer Oben"
        slave: 10
        address: 2089
        input_type: holding
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "°C"
        device_class: temperature
        state_class: measurement
        scan_interval: 3600

      - name: "KWB Puffer Unten"
        slave: 10
        address: 2102
        input_type: holding
        data_type: int16
        scale: 0.1
        precision: 1
        unit_of_measurement: "°C"
        device_class: temperature
        state_class: measurement
        scan_interval: 3600

Energiezähler (uint32, zwei Register)

      - name: "KWB Energiezaehler"
        slave: 10
        address: 3977
        input_type: holding
        data_type: uint32     # belegt Register 3977 + 3978
        scale: 0.001      # ÷ 1000 → MWh
        precision: 3
        unit_of_measurement: "MWh"
        device_class: energy
        state_class: total_increasing
        scan_interval: 3600

Mit state_class: total_increasing und device_class: energy wird dieser Wert automatisch im HA-Energie-Dashboard berücksichtigt.

03

Live-Modus für Diagnose

Das größte Problem bei der KWB-Integration: 5 Anfragen/Sekunde Maximum. Bei 29 operativen Sensoren und 250 ms Pause zwischen Anfragen ergibt sich ein Gesamtzyklus von ~7,25 Sekunden. Für den Normalbetrieb genügt scan_interval: 3600 – beim Anheizen oder für Diagnose gibt es einen zuschaltbaren Live-Modus.

Live-Modus Schalter

input_boolean:
  kwb_live_modus:
    name: "KWB Live-Modus"
    icon: mdi:update

Automation: Live-Modus Abfrageschleife

automation:
  - id: kwb_live_modus_loop
    alias: "KWB Live-Modus Abfrage"
    trigger:
      - platform: state
        entity_id: input_boolean.kwb_live_modus
        to: "on"
    action:
      - repeat:
          while:
            - condition: state
              entity_id: input_boolean.kwb_live_modus
              state: "on"
          sequence:
            - action: homeassistant.update_entity
              target:
                entity_id: sensor.kwb_kesseltemperatur
            - delay: milliseconds: 250
            - action: homeassistant.update_entity
              target:
                entity_id: sensor.kwb_rauchgastemperatur
            - delay: milliseconds: 250
                        # ... weitere Sensoren mit je 250 ms Pause
    mode: restart

  - id: kwb_live_modus_auto_off
    alias: "KWB Live-Modus Auto-Off nach 10 Min"
    trigger:
      - platform: state
        entity_id: input_boolean.kwb_live_modus
        to: "on"
        for:
          minutes: 10
    action:
      - action: input_boolean.turn_off
        target:
          entity_id: input_boolean.kwb_live_modus
    mode: single

Auto-Off nach 10 Minuten

Verhindert, dass der Live-Modus versehentlich dauerhaft läuft und die KWB-SPS überlastet.

04

Dashboard in Lovelace

Entities Card

Kessel-Status, Temperaturen, Pumpen auf einen Blick

History Graph

Temperaturverläufe Puffer oben/unten über 24 h

Gauge

Kesselleistung 0–100 % als Anzeige

Energy Dashboard

Kumulierter Energiezähler in MWh automatisch integriert

Template-Sensor: Kessel-Status in lesbaren Text

template:
  - sensor:
      - name: "KWB Kessel Status Text"
        state: >
          {% set v = states('sensor.kwb_kessel_status') | int %}
          {% if v == 1 %} Bereitschaft
          {% elif v == 2 %} Betrieb
          {% elif v == 3 %} Nachlauf
          {% elif v == 100 %} Ausbrennen
          {% elif v >= 101 and v <= 106 %} Anheizen Phase {{ v - 100 }}
          {% else %} Unbekannt
          {% endif %}
        icon: >
          {% set v = states('sensor.kwb_kessel_status') | int %}
          {% if v == 2 %} mdi:fire
          {% elif v == 3 %} mdi:timer-sand
          {% elif v >= 101 %} mdi:fire-circle
          {% else %} mdi:power-sleep
          {% endif %}

Bekannte Einschränkungen

Keine offizielle API

KWB dokumentiert die Modbus-Register nicht öffentlich. Die hier verwendeten Adressen wurden durch Wireshark-Mitschnitte ermittelt und mit den Display-Werten abgeglichen. Bei Firmware-Updates kann sich die Register-Map ändern.

Nur Lesezugriff

Alle Register sind schreibgeschützt. Sollwerte (z. B. Raumtemperatur) können ausgelesen, aber nicht über Modbus verändert werden – dafür bleibt die KWB-Regelung zuständig.

Polling-Limit 5 req/s

Die KWB-SPS verarbeitet maximal 5 Modbus-Anfragen pro Sekunde. Schnelleres Polling führt zu Verbindungsfehlern. Im Live-Modus werden 250 ms Pause zwischen Anfragen eingehalten.

Praxisbeispiel: Register-Korrelation an einer echten KWB Multifire 06

Wie die „Detektivarbeit" aus den Einschränkungen oben konkret abläuft, zeigt diese Auswertung von einer realen Anlage: Eine Bildschirmaufnahme der KWB Comfort Visio 5 Bedienoberfläche wurde parallel mit einem Wireshark-Mitschnitt des Modbus-Traffics aufgezeichnet. Über Zeit- und Wertabgleich lässt sich so jedem GUI-Feld ein Holding-Register zuordnen.

Anlage KWB Multifire 06 · Modbus/TCP · Unit 10 · 192.168.0.150:502
Video-Start 16:03:55 CEST
PCAP-Start 16:04:21,695 CEST
Offset video_t − 26,7 s
Genauigkeit ± 1 s
bestätigt wahrscheinlich offen – bestätigt = Wert exakt getroffen, wahrscheinlich = plausibler Kandidat, offen = in dieser Aufnahme nicht auflösbar

Kessel

Heizraum → Kessel

Statusseite des Kessels. Werte bei „Bereitschaft" (Standby, nicht feuernd) mitgeschnitten – Kesselleistung und Kesselpumpe standen deshalb durchgehend auf 0 %.

Feld GUI-Wert Register Skalierung Status Beleg
Rauchgastemperatur 52 °C 1401 ×10 °C bestätigt Rohwert 522
Kesseltemperatur Ist 54 °C 1402 ×10 °C bestätigt Rohwert 543
Rücklauftemperatur Ist 51 °C 1403 ×10 °C bestätigt Rohwert 509
Sauerstoff 31,4 % 1404 ×10 % bestätigt Rohwert 314, exakt
Unterdruck 0,23 mBar 1409 ×1000 mBar bestätigt Rohwert 230
Kesselleistung 0 % 1081? roh, % offen Rohwert blieb bei 100 – passt nicht zu 0 %, neu prüfen
Kesselpumpe 0 % offen kein wertstabiler Kandidat gefunden
Kessel Status Bereitschaft 797? Enum offen Register immer 0 in dieser Aufnahme, „Aus"-Zustand lag vor PCAP-Start

Der Enum-Sensor „KWB Kessel Status" aus Schritt 2 (Register 1412) stammt aus einer separaten Erhebung. In dieser Aufnahme blieb der Kessel durchgehend in Bereitschaft, weshalb sich ein Statuswechsel hier nicht zusätzlich verifizieren ließ.

Boiler

Boiler → 01 Boiler Haus

Warmwasserboiler-Detailseite inkl. Programmparameter.

Feld GUI-Wert Register Skalierung Status Beleg
Boilertemperatur Ist 58 °C 2003 ×10 °C bestätigt Rohwert 578
Boilertemperatur Soll 60 °C 2004 ×10 °C bestätigt Rohwert 600, exakt
Temperatur Maximum 60 °C 9515 ×10 °C bestätigt Rohwert 600, exakt
Temperatur Minimum 45 °C 9516 ×10 °C bestätigt Rohwert 450, exakt
Boilerprogramm Temperatur 9514 Enum wahrscheinlich Rohwert 256 = „Temperatur"
Urlaub Beginn / Ende / Legionellenschutz 1.8. / 1.9. / Montag 9520–9522 gepackt, Tag/Monat je Byte (unsicher) wahrscheinlich Rohwerte 264 / 769 / 2307
Schnellladung, Pumpe, Anforderung Aus offen kein eindeutiger Kandidat (Wert durchgehend „Aus")

Puffer

Puffer → 00 Puffer Heizraum · auch: Regelung-Übersicht

Pufferspeicher mit zwei Fühlern (oben/unten). Auf der Regelung-Übersichtsseite erscheint derselbe Oben-Wert zusätzlich unter Register 2061 – vermutlich ein gespiegelter/älterer Dashboard-Wert.

Feld GUI-Wert Register Skalierung Status Beleg
Temperatur 1 Ist (oben) 70 °C 2100 (auch 2061) ×10 °C bestätigt Rohwert 695
Temperatur 1 Soll 20 °C 2101 ×10 °C bestätigt Rohwert 200, exakt
Temperatur 2 Ist (unten) 58 °C 2102 ×10 °C bestätigt Rohwert 580, exakt
Temperatur 2 Soll 20 °C 2103 ×10 °C bestätigt Rohwert 200, exakt
Temperatur Maximum 60 °C 10504 ×10 °C bestätigt Rohwert 600, exakt
Temperatur Minimum 45 °C 10505 ×10 °C bestätigt Rohwert 450, exakt
Pufferprogramm Temperatur 10506 Enum wahrscheinlich Rohwert 1 = „Temperatur"
Gruppentemperatur 70 °C 3433 ×10 °C wahrscheinlich ein Kandidat, Rohwert 700
Temperatur 3 130 °C offen 5 gleichwertige Kandidaten (2000, 1319, 1406, 2105, 2107 = je 1300)

Die Adresse 2100 weicht von der in Schritt 2 gelisteten „Puffer Oben" (2089) ab – vermutlich zwei unterschiedliche Fühler-Register. Vor produktivem Einsatz beide Kandidaten gegen die Anzeige verifizieren.

Heizkreismodul

Heizkreismodule → 01 01

Übersicht Weiche/HK3/HK4/Boiler an einem Modul. HK3-Vorlauf konnte nicht zugeordnet werden – die dedizierte Unterseite „HK 3 – Heizkörper" wurde in der Aufnahme nicht besucht.

Feld GUI-Wert Register Skalierung Status Beleg
HK4 Vorlauftemperatur Ist (Fußbodenheizung) 29 °C 3165 ×10 °C bestätigt Rohwert 290, exakt
HK3 Vorlauftemperatur Ist (Heizkörper) 30 °C offen nicht in den mitgeschnittenen Blöcken enthalten
Boiler-Temperatur (Anzeige im Modul) 58 °C 2003 ×10 °C bestätigt identisch mit Boiler-Seite

Leistungsmessung

Leistungsmessung → 00 (Kessel) / 01

Zwei unabhängige Analogeingangs-Kanäle für externe Leistungsmessung. Kanal 00 war aktiv (390,40 kW), Kanal 01 stand auf „Funktion: Aus".

Feld GUI-Wert Register Skalierung Status Beleg
Messleistung, Kanal 00 390,40 kW 2601 ×10 kW bestätigt Rohwert 3904, exakt
Messleistung, Kanal 01 0,00 kW 2603 ×10 kW wahrscheinlich Rohwert 0 – schwacher Beleg, da 0 mehrdeutig
Leistung max, Kanal 01 150,0 kW offen kein Treffer (Reg. 2602 = 57620, unklare Kodierung)
Energie (MWh, beide Kanäle) 0,000 MWh 2600? unklar offen Rohwert 9385 passt nicht zu 0 – evtl. Zähler/anderer Bezug

Offene Punkte & nächste Aufnahme

Stabile Werte (durchgehend 0 % oder unverändert) lassen sich per Zeit-/Wertabgleich nicht sicher trennen. Für die nächste Aufnahme hilft aktives Ändern statt nur Betrachten:

HK3 – Heizkörper

Separate Unterseite „HK 3 – Heizkörper" kurz aufrufen (nicht nur die Modul-Übersicht) – löst vermutlich auch den Vorlauftemperatur-Register auf.

Kesselleistung / Kesselpumpe

Kessel kurz in Betrieb nehmen (Leistung > 0 %), damit sich Register mit Wertänderung von den umliegenden Nullen unterscheiden lassen. Bisheriger Kandidat 1081 passt nicht mehr sauber und sollte neu verifiziert werden.

Zeitprogramm-Schaltzeiten

Eine Schaltzeit testweise ändern (z. B. 06:00 → 07:00) und dabei mitschneiden – Change-Detection statt Wertabgleich. Zusatzblöcke (10,90) und (349,75) erscheinen exakt in den Zeitprogramm-Zeitfenstern, sind aber inhaltlich noch nicht dekodiert.

Temperatur 3 (Puffer) & Energie-Register

Mehrere gleichwertige oder unplausible Kandidaten – hier hilft nur eine gezielte Wertänderung oder ein zweiter Blick ins KWB-Handbuch/Parameterliste.

Quelle: Parallele Bildschirm- und Netzwerkaufnahme einer KWB Multifire 06, ausgewertet am 14. Juli 2026 durch Zeit- und Wertkorrelation der Register-Blöcke mit den angezeigten GUI-Werten.

Ergebnis: Was bringt die Integration?

Ist der Kessel gerade aktiv?

Kessel-Status + Kesseltemperatur

Wie voll ist der Puffer?

Puffer oben/unten Temperaturen

Warmwasser bereit?

Boiler Ist/Soll-Vergleich

Läuft die Heizung effizient?

Rauchgastemperatur, O₂-Gehalt, Kesselleistung

Wie viel Energie produziert?

Kumulierter Energiezähler in MWh

Dazu kommen Automationsmöglichkeiten: Benachrichtigung bei Störung (Status „Unbekannt"), Alarm wenn Puffer unter 40 °C fällt, oder Protokollierung der Energieerzeugung für die Heizkostenabrechnung.

Fazit

Die KWB-Integration in Home Assistant über Modbus TCP ist technisch möglich und im Alltagsbetrieb sehr nützlich – erfordert aber etwas Detektivarbeit, da KWB keine offizielle Dokumentation bereitstellt. Mit der hier beschriebenen Konfiguration (verifiziert an einer KWB USV06 / Multifire) lassen sich alle wesentlichen Betriebsparameter zuverlässig auslesen.

Der Live-Modus als Kompromiss:

  • Im Normalbetrieb: scan_interval: 3600 schont die KWB-SPS
  • Bei Diagnose: Live-Modus aktiv → sekundengenaue Einblicke
  • Auto-Off nach 10 Minuten → kein dauerhafter Polling-Stress
  • delay: 1 in der Verbindung → stabile Erstkommunikation

Dieser Beitrag basiert auf einer realen KWB USV06 Installation in Kärnten. Die Register-Map wurde durch Wireshark-Mitschnitte und Display-Korrelation erarbeitet – ohne Gewähr für andere Modelle oder Firmware-Versionen.

Kostenlose Erstberatung

Fragen zu KWB & Home Assistant?

Persönliche Beratung für Ihr Unternehmen in Kärnten – unverbindlich und kostenlos.

  • Antwort innerhalb 24 Stunden
  • Kein Callcenter – direkter Ansprechpartner
  • Erstberatung kostenlos & unverbindlich

Hilfe & Support

Nicht gefunden, wonach Sie suchen?

Falls die Angebote auf dieser Seite Ihre Frage nicht beantwortet haben, kontaktieren Sie uns direkt – wir helfen persönlich weiter.

Direkt erreichbar

Rückruf-Service

Wir rufen Sie zurück – teilen Sie uns Ihre Telefonnummer und die gewünschte Anrufzeit mit.

Rückruf anfordern

Erreichbar

Mo – Do:  08:00 – 18:00

Fr:         08:00 – 15:00