Comfort Online Einrichtung
Ressourcen
ibn_b_modbus_comfort_4_int.pdf
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.
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.
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
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
count: 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
count: 1
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
count: 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
count: 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
count: 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
count: 1
# Blatt KWB Easyfire
# Kesselpumpe
- name: "KWB Kessel Pumpe Status (8200)"
address: 8200
scan_interval: 30
slave: 1
data_type: int16
input_type: input
count: 1
# Kesselpumpe Leistung %
- name: "KWB Kessel Pumpe Leistung % (8201)"
address: 8201
scan_interval: 30
slave: 1
data_type: int16
input_type: input
count: 1
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
count: 1
scale: 0.1
unit_of_measurement: "%"
# Kesseltemperatur IST
# ok nit cco
- name: "KWB Kessel Temperatur IST (8198)"
address: 8198
scan_interval: 30
slave: 1
data_type: int16
input_type: input
count: 1
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
count: 1
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
count: 1
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
count: 2
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
count: 1
unit_of_measurement: h
# Brennstoffverbrauch
- name: "KWB Kessel Brennstoffverbrauch (8233)"
address: 8233
scan_interval: 30
slave: 1
data_type: uint32
input_type: input
count: 2
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
count: 1
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
count: 2
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
count: 1
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
count: 1
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
count: 1
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
count: 1
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
count: 1
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
count: 1
scale: 0.1
precision: 1
unit_of_measurement: °C
device_class: temperature
state_class: measurement
# solar_status_t
# Solar status
- name: "KWB Solar Status (9094)"
address: 9094
scan_interval: 30
slave: 1
data_type: int16
input_type: input
count: 1
# Wärmeleistung
- name: "KWB Solar Wärmeleistung (9215)"
address: 9215
scan_interval: 30
slave: 1
data_type: uint32
input_type: input
count: 2
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
count: 2
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
count: 2
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
count: 1
unit_of_measurement: "%"
- name: "KWB Solar Pumpe 2 Leistung % (9481)"
address: 9481
scan_interval: 30
slave: 1
data_type: int16
input_type: input
count: 1
unit_of_measurement: "%"
Ansicht
Für die Ansicht habe ich mir dann die wichtigsten Entites kompakt zusammengesetzt.
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