Ich habe mich intensiv mit der Integration meiner NIBE S40 Wärmepumpe in mein Smart Home beschäftigt, weil ich den Energieverbrauch und die Betriebszustände der Anlage möglichst genau und unabhängig von Cloud-Diensten erfassen wollte. Mein Ziel war es, die Leistungsdaten, Energieverbräuche und Betriebsmodi direkt aus der Wärmepumpe auszulesen und diese Werte übersichtlich im Home Assistant darzustellen. Besonders interessiert hat mich, wie ich die Rohdaten über Modbus-TCP abrufen und daraus aussagekräftige Sensoren für mein Energie-Dashboard erstellen kann. Aus meiner Sicht ist diese direkte Integration nicht nur für die Optimierung der Heizkosten relevant, sondern auch für eine transparente und nachvollziehbare Steuerung der gesamten Heizungsanlage.
Warum ich Modbus für die NIBE Wärmepumpe nutze
Die Standard-Integration von NIBE in Home Assistant bietet zwar eine Vielzahl von Entitäten, aber viele davon sind entweder nicht aussagekräftig oder liefern keine Echtzeitdaten. Mir war wichtig, die tatsächlichen Leistungswerte und Energieverbräuche meiner Wärmepumpe präzise zu erfassen. Mit Modbus steht mir dafür eine direkte Schnittstelle zur Verfügung, die ohne Cloud-Anbindung auskommt und den Zugriff auf die Rohdaten der Anlage ermöglicht.
Durch die Nutzung von Modbus kann ich nicht nur aktuelle Leistungswerte abrufen, sondern auch detaillierte Informationen wie Betriebsstunden, Status der Zusatzheizung und den Energieverbrauch für Heizung und Warmwasser getrennt erfassen. Das ist für mich die Grundlage, um die Wärmepumpe effizient zu überwachen und zu steuern.
Gerade im Hinblick auf steigende Energiekosten und die Optimierung meines Smart Homes ist diese Transparenz für mich unverzichtbar geworden.
Technischer Aufbau: Modbus-TCP Verbindung zur NIBE S40
Die NIBE S40 Wärmepumpe verfügt ab Werk über eine Modbus-Schnittstelle, die ich per Modbus-TCP direkt in mein Netzwerk eingebunden habe. Für die Integration in Home Assistant nutze ich die Modbus-Komponente, mit der ich gezielt auf die Register der Wärmepumpe zugreife.
Wichtig war mir, die relevanten Register zu identifizieren. Dazu gehören unter anderem die aktuelle Leistungsaufnahme, der Betriebsmodus, die Energieverbräuche für verschiedene Zeiträume und der Status des Heizstabs. Die Registeradressen und deren Bedeutung habe ich anhand der technischen Dokumentation der Wärmepumpe recherchiert.
Mit dieser Konfiguration kann ich die gewünschten Werte in Echtzeit abfragen und als Sensoren in Home Assistant abbilden. Das ermöglicht mir eine flexible Weiterverarbeitung und Visualisierung der Daten.
Umsetzung in Home Assistant: Sensoren und Dashboards
Nachdem die Modbus-Verbindung stand, habe ich in Home Assistant individuelle Sensoren angelegt, die die Werte aus den jeweiligen Modbus-Registern auslesen. So erhalte ich beispielsweise die aktuelle Leistungsaufnahme in Watt, den Betriebsmodus als Statuscode und die aufsummierten Energieverbräuche für Tag, Monat und Jahr.
Diese Sensoren habe ich in mein Energie-Dashboard eingebunden, um den Verbrauch der Wärmepumpe im Kontext des gesamten Haushalts darzustellen. Besonders hilfreich finde ich die Möglichkeit, die Kostenentwicklung direkt zu verfolgen und die Betriebszeiten von Verdichter und Heizstab getrennt zu analysieren.
Die Konfiguration der Sensoren und die Zuordnung zu den passenden Dashboards erfordert etwas Einarbeitung, bietet aber im Ergebnis eine sehr transparente Übersicht über die Heizungsanlage.
Komplette YAML zum Kopieren
Wer nicht jedes Snippet einzeln zusammenklauben möchte: Hier ist meine ganze NIBE-Modbus-Konfiguration in einem Block — genau so, wie sie bei mir im /config/packages/-Verzeichnis liegt. Kopier dir das in eine Datei wie nibe-s40-modbus.yaml, pass die IP-Adresse (und ggf. den Strompreis-Sensor weiter unten) an, einmal Home Assistant neu laden — fertig.
1modbus:
2 - name: "nibeS40"
3 type: tcp
4 host: 10.10.78.88
5 port: 502
6 sensors:
7 - name: "WP Gesamt-Leistung"
8 address: 2166
9 input_type: input
10 data_type: uint32
11 scale: 0.1
12 precision: 1
13 unit_of_measurement: "W"
14 device_class: power
15 state_class: measurement
16 slave: 1
17
18 - name: "Nibe Zusatzheizung aktiv"
19 address: 1029
20 input_type: input
21 data_type: uint16
22 unit_of_measurement: ""
23 slave: 1
24
25 - name: "Nibe Betriebsmodus"
26 address: 1028
27 input_type: input
28 data_type: uint16
29 slave: 1
30
31 - name: "Nibe Abtau Status"
32 address: 1805
33 input_type: input
34 data_type: uint16
35 slave: 1
36
37 - name: "Nibe Verdichter aktiv"
38 address: 1100
39 input_type: input
40 data_type: uint16
41 slave: 1
42
43 - name: "Nibe Verdichter Betriebsstunden"
44 address: 1491
45 input_type: input
46 data_type: uint32
47 scale: 0.1
48 unit_of_measurement: "h"
49
50 - name: "Nibe Zusatzheizung Betriebsstunden"
51 address: 1025
52 input_type: input
53 data_type: uint32
54 scale: 0.1
55 unit_of_measurement: "h"
56
57 - name: "Nibe Stromverbrauch Heizung (letzte Stunde)"
58 unique_id: nibe_strom_heizung_stunde
59 data_type: int16
60 address: 2291
61 input_type: input
62 unit_of_measurement: "kWh"
63 state_class: measurement
64 scale: 0.01
65 precision: 2
66 slave: 1
67 scan_interval: 150
68
69 - name: "Nibe Stromverbrauch Warmwasser (letzte Stunde)"
70 unique_id: nibe_strom_warmwasser_stunde
71 data_type: int16
72 address: 2293
73 input_type: input
74 unit_of_measurement: "kWh"
75 state_class: measurement
76 scale: 0.01
77 precision: 2
78 slave: 1
79 scan_interval: 150
80
81 - name: "Nibe Zusatzstrom Warmwasser (letzte Stunde)"
82 unique_id: nibe_zusatzstrom_warmwasser_stunde
83 data_type: int16
84 address: 2301
85 input_type: input
86 unit_of_measurement: "kWh"
87 state_class: measurement
88 scale: 0.01
89 precision: 2
90 slave: 1
91 scan_interval: 150
92
93 - name: "Nibe Zusatzstrom Heizung (letzte Stunde)"
94 unique_id: nibe_zusatzstrom_heizung_stunde
95 data_type: int16
96 address: 2299
97 input_type: input
98 unit_of_measurement: "kWh"
99 state_class: measurement
100 scale: 0.01
101 precision: 2
102 slave: 1
103 scan_interval: 150
104
105 - name: "Nibe aktuelle Leistungsaufnahme"
106 unique_id: nibe_aktuelle_leistung
107 data_type: int16
108 address: 2305
109 input_type: input
110 unit_of_measurement: "kW"
111 device_class: power
112 state_class: measurement
113 scale: 0.01
114 precision: 2
115 slave: 1
116 scan_interval: 60
117
118template:
119 - sensor:
120 - name: "Nibe WP Leistung (W)"
121 unique_id: nibe_wp_leistung_w
122 unit_of_measurement: "W"
123 device_class: power
124 state_class: measurement
125 state: >
126 {{ states('sensor.nibe_aktuelle_leistungsaufnahme') | float(0) * 1000 }}
127
128 - name: "Nibe Wärmepumpe yearly cost"
129 unique_id: nibe_gesamtenergie_yearly_cost
130 unit_of_measurement: "€"
131 state: >
132 {{
133 (
134 states('sensor.nibe_gesamtenergie_yearly') | float(0)
135 * states('sensor.strompreis_o_jahr') | float(0)
136 ) | round(2)
137 }}
138
139sensor:
140 - platform: integration
141 source: sensor.nibe_wp_leistung_w
142 name: nibe_gesamtenergie
143 unit_prefix: k
144 round: 3
145
146utility_meter:
147 nibe_gesamtenergie_tag:
148 source: sensor.nibe_gesamtenergie
149 cycle: daily
150
151 nibe_gesamtenergie_monthly:
152 source: sensor.nibe_gesamtenergie
153 cycle: monthly
154
155 nibe_gesamtenergie_yearly:
156 source: sensor.nibe_gesamtenergie
157 cycle: yearlyModbus-Konfiguration für die Nibe S40
Wer lieber Stück für Stück nachvollzieht, was passiert, findet die einzelnen Bausteine hier nochmal mit Erklärung. Alle Sensoren liegen bei mir gesammelt im /packages-Verzeichnis und werden automatisch geladen.
1modbus:
2 - name: "nibeS40"
3 type: tcp
4 host: 10.10.78.88
5 port: 502
6 sensors:
7 - name: "WP Gesamt-Leistung"
8 address: 2166
9 input_type: input
10 data_type: uint32
11 scale: 0.1
12 precision: 1
13 unit_of_measurement: "W"
14 device_class: power
15 state_class: measurement
16 slave: 1Erklärung
- type: tcp – Die Verbindung läuft direkt über Modbus TCP.
- host / port – IP-Adresse und Modbus-Port der Wärmepumpe.
- address – Das Modbus-Register aus der Nibe-Dokumentation.
- scale & precision – Rohwert wird korrekt skaliert und gerundet.
- device_class & state_class – Wichtig für Energie-Dashboards und Statistiken.
Status- und Betriebsdaten der Nibe
Diese Sensoren liefern Informationen darüber, was die Wärmepumpe gerade macht: Betriebsmodus, Abtauung, Verdichterstatus und Heizstab.
1 - name: "Nibe Zusatzheizung aktiv"
2 address: 1029
3 input_type: input
4 data_type: uint16
5 slave: 1
6
7 - name: "Nibe Betriebsmodus"
8 address: 1028
9 input_type: input
10 data_type: uint16
11 slave: 1
12
13 - name: "Nibe Abtau Status"
14 address: 1805
15 input_type: input
16 data_type: uint16
17 slave: 1
18
19 - name: "Nibe Verdichter aktiv"
20 address: 1100
21 input_type: input
22 data_type: uint16
23 slave: 1Erklärung
Die meisten dieser Register liefern numerische Werte (z. B. 0 oder 1).
Diese werden später über Template-Sensoren in lesbare Zustände übersetzt – dazu gleich mehr.
Betriebsstunden & stündlicher Stromverbrauch
Hier erfasse ich sowohl die Betriebsstunden als auch den Stromverbrauch der letzten Stunde – getrennt nach Heizung, Warmwasser und Zusatzheizung.
1 - name: "Nibe Stromverbrauch Heizung (letzte Stunde)"
2 unique_id: nibe_strom_heizung_stunde
3 data_type: int16
4 address: 2291
5 input_type: input
6 unit_of_measurement: "kWh"
7 state_class: measurement
8 scale: 0.01
9 precision: 2
10 slave: 1
11 scan_interval: 150Erklärung
- state_class: measurement – Wert gilt nur für den aktuellen Zeitraum.
- scan_interval – Schonend für Bus & Wärmepumpe.
- Ideal als Grundlage für Utility Meter oder eigene Statistiken.
Aktuelle Leistungsaufnahme in Watt
Die Nibe liefert die aktuelle Leistung in kW. Für Energie-Berechnungen wird sie hier sauber in Watt umgerechnet.
1template:
2 - sensor:
3 - name: "Nibe WP Leistung (W)"
4 unique_id: nibe_wp_leistung_w
5 unit_of_measurement: "W"
6 device_class: power
7 state_class: measurement
8 state: >
9 {{ states('sensor.nibe_aktuelle_leistungsaufnahme') | float(0) * 1000 }}Warum das wichtig ist
Die Integration-Plattform in Home Assistant erwartet einen Leistungswert in Watt. Ohne diese Umrechnung sind spätere Energie-Sensoren schlicht falsch.
Gesamtenergie aus Leistung berechnen
Mit der Integration-Plattform wird aus der momentanen Leistung automatisch verbrauchte Energie berechnet.
1sensor:
2 - platform: integration
3 source: sensor.nibe_wp_leistung_w
4 name: nibe_gesamtenergie
5 unit_prefix: k
6 round: 3Erklärung
- Berechnet kWh aus Watt über die Zeit
- Saubere Basis für Tages-, Monats- und Jahreswerte
- Funktioniert komplett lokal
Energieverbrauch aufsplitten (Utility Meter)
Damit die Verbrauchsdaten übersichtlich bleiben, splitte ich sie mit utility_meter in verschiedene Zeiträume.
1utility_meter:
2 nibe_gesamtenergie_tag:
3 source: sensor.nibe_gesamtenergie
4 cycle: daily
5
6 nibe_gesamtenergie_monthly:
7 source: sensor.nibe_gesamtenergie
8 cycle: monthly
9
10 nibe_gesamtenergie_yearly:
11 source: sensor.nibe_gesamtenergie
12 cycle: yearlyErgebnis
Du bekommst automatisch Sensoren für:
- Tagesverbrauch
- Monatsverbrauch
- Jahresverbrauch
Perfekt für Dashboards, Kostenberechnung oder Automationen.
So berechne ich aktuell die jährlichen Kosten für meine Wärmepumpe. Ob man hier einen statischen Durchschnittspreis oder einen dynamischen Wert nimmt, sollte jeder für sich selbst entscheiden.
1- name: "Nibe Wärmepumpe yearly cost"
2 unique_id: nibe_gesamtenergie_yearly_cost
3 unit_of_measurement: "€"
4 state: >
5 {{
6 (
7 states('sensor.nibe_gesamtenergie_yearly') | float(0)
8 * states('sensor.strompreis_o_jahr') | float(0)
9 ) | round(2)
10 }}Dateistruktur
Alle gezeigten YAML-Dateien liegen bei mir im Verzeichnis:
/config/packages/
Dadurch bleibt die Konfiguration sauber getrennt und deutlich übersichtlicher als eine riesige configuration.yaml.
Voraussetzungen, Grenzen und Besonderheiten
Für die Modbus-Integration ist es notwendig, dass die Wärmepumpe im lokalen Netzwerk erreichbar ist und die Modbus-Schnittstelle korrekt konfiguriert wurde. Je nach Modell und Firmware der NIBE S40 können die verfügbaren Register und deren Adressen variieren. Ich habe die relevanten Informationen der technischen Dokumentation entnommen und auf meine Anlage angepasst.
Eine Besonderheit ist, dass Home Assistant zwar viele Entitäten aus der NIBE-Integration bereitstellt, diese aber oft nicht die gewünschten Detaildaten liefern. Erst durch die gezielte Auswahl und Konfiguration der Modbus-Register konnte ich die für mich wichtigen Werte extrahieren.
Grenzen sehe ich vor allem bei der Komplexität der Einrichtung: Ohne Grundkenntnisse in Modbus und Home Assistant kann der Einstieg herausfordernd sein. Die Vorteile in puncto Unabhängigkeit und Datenqualität überwiegen für mich jedoch deutlich.
Erweiterungen und Ausblick
Mit der aktuellen Integration habe ich die wichtigsten Verbrauchs- und Statusdaten meiner Wärmepumpe im Blick. Perspektivisch plane ich, die gewonnenen Daten für weitere Automatisierungen zu nutzen, beispielsweise zur Optimierung der Laufzeiten in Abhängigkeit von Stromtarifen oder PV-Erträgen.
Auch eine Auswertung der Langzeitdaten und die Einbindung weiterer Sensoren aus dem Heizsystem sind denkbar. Die Modbus-Schnittstelle bietet hier einen flexiblen Zugang zu nahezu allen Betriebsdaten der Anlage.
Aus meiner Sicht ist die direkte Modbus-Anbindung ein wichtiger Schritt zu einem wirklich transparenten und effizienten Smart Home Heizsystem.
