Skip to content
This repository has been archived by the owner on Dec 30, 2018. It is now read-only.

eBus Binding

csowada edited this page Jan 18, 2015 · 13 revisions

ACHTUNG

Das Binding wird nun hier weitergeführt, um offizieller Bestandteil von openhab werdn zu können. Dieser Quelltext wird nicht weiter gepflegt. eBus binding

Einleitung

Das eBus Binding kann durch einen eBus-Adapter Daten aus einer Heizungsanlage lesen und schreiben. Die Hersteller Wolf, Kromschröder, Vaillant usw. verwenden eBus als Kommunikationsprotokoll zwischen den Komponenten der Heizung.

Vorraussetzung

  • openHAB 1.5 (Ältere Versionen sollten aber laufen)
  • Oracle Java 1.7 oder höher (JavaScript Engine wird verwendet! Link)
  • eBus Adapter (Beispiele - Seite langsam!)

Binding Konfiguration in openhab.cfg

Das Binding wird in der globalen ${openhab_home}/configurations/openhab.cfg Konfiguration eingerichtet. Hier können Sie alle möglichen Einstellungen sehen.

# Serial port of eBus interface
# Valid values are e.g. COM1 for Windows and /dev/ttyS0 or /dev/ttyUSB0 for Linux
ebus:serialPort=COM2

# TCP Hostname and Port
# Warning: Only use ebus.hostname or ebus.serialPort
#ebus:hostname=myhostname
#ebus:port=5000

# Custom parser configuration file
# This example tries to load a configuration ${openhab_home}/configurations/ebus-config.json
#ebus:parserUrl=platform:/base/../configurations/ebus-config.json

# Load different parser, currently supported
# >> common - All telegrams defined by eBus interest group
# >> wolf - All telegrams specified by Wolf/Kromschröder
# >> vaillant - All telegrams specified by Vaillant
# >> testing -  All unknown or test telegrams
# >> custom - Use configuration defined by ebus:parserUrl
# default uses common and all vendor specified telegrams
#ebus:parser=common,wolf,testing,custom

# Set the sender id of this binding, default is "FF"
#ebus:senderId=FF

Items konfigurieren

Das eBus Protokoll wird direkt durch das Binding ausgelesen und ausgewertet, so das die gelesenen Werte direkt per ID zur Verfügung stehen. Die IDs und Klassem können Sie immer aktuell in den Dateien finden.

Parameter

Parameter Beschreibung
id Die ID gibt zusammen mit der Klasse class die zu lesenden Werte an. Dies ist nötig, da es auf dem Bus bestimmte Werte mehrfach mit unterscheidlicher Genauigkeit geben kann.
class Zusammen mit id und/oder cmd lassen sich ähnliche Werte unterscheiden.
cmd Der Befehl der verschickt werden soll. Dieser wird durch den Paramter class genauer unterschieden.
dst Gibt das Ziel des Telegramms an. Bei einem Befehl wird sonst der Standard Wert FF oder der aus der openhab.cfg verwendet.
src Gibt die Quelle des Telegramms an.
refresh Hiermit wird der Befehl alle n Sekunden automatisch an den eBus übetragen (Polling)
data Anstatt eines Befehls kann auch ein reines Daten-Telegramm verschickt werden. Das letzte Byte wird durch den CRC Wert ersetzt, wenn es sich nicht um 0xFF SYN Byte handelt. Daher kann das letzte Byte in diesem Fall jeder beliebige Wert sein.
data-{STATE} Hier gilt daas gleiche wie für data nur das dies bei einem bestimmten Zustand gesendet wird. Als Beispiel kann ein Schalter mit data-ONund data-OFF zwei verschieden Telegramme je nach Zustand senden.

Beispiele

Werte vom eBus empfangen

id:no_of_firing, class:heating_kw, dst:08

Gibt den Wert no_of_firing (Anzahl der Zündungen) in der Klasse heating_kw (Heizung Wolf) zurück, wenn es an die eBus Adresse 08 geht. Diese werden nicht selbst abgerufen, sondern müssen von einem Teilnehmer übertragen werden. Optional kann auch der Paramter src angeben werden um auch die eBus Quelladresse einzuschränken.

Regelmässig Werte vom eBus abrufen (Polling)

id:no_of_firing, class:heating_kw, cmd:no_of_firing, dst:08, src:FF, refresh:60

Hier gilt das gleiche wie im vorherigen Beispiel, nur das hier der Befehl no_of_firing aus der Klasse heating alle 60 Sekunden über den eBus gesendet wird (Polling). Wenn mit einem Befehl mehrere Werte eingelesen werden können, muss der Befehl nur einmal versendet werden.

Telegramme direkt senden, gleichzeitig Werte abrufen

id:no_of_firing, class:heating_kw, data:FF 08 50 22 03 CC 1A 27 00

In diesem Beispiel wird ein Datenpaket über den eBus gesendet und ggfls. durch einen Empfänger beantwortet. Das letzte Byte wird durch den CRC Wert ersetzt, wenn es sich nicht um 0xFF SYN Byte handelt. Daher kann das letzte Byte in diesem Fall jeder beliebige Wert sein. Es wird aber empfohlen die cmd Paramter zu verwenden.

Telegramme anhand von Item-Status senden, gleichzeitig Werte abrufen

id:no_of_firing, class:heating_kw, data-ON:FF 08 50 22 03 CC 1A 27 00, data-OFF:FF 08 50 22 03 CC 0E 00 00

Schreibt ein Telegramm nach Status des Items, daher kann für ein Schalter ein Telegramm für OFF und ein Telegramm für ON usw. festgelegt werden. Das letzte Byte wird durch den CRC Wert ersetzt, wenn es sich nicht um 0xFF SYN Byte handelt. Daher kann das letzte Byte in diesem Fall jeder beliebige Wert sein.

Liste einiger IDs und Befehle

Kromschröder/Wolf

Diese Liste ist für Wolf Geräte und wurde aus meiner Heizung CSZ-2 ausgelesen.

ID Class Command Hersteller Beschreibung
temp_exhaust heating_kw temp_exhaust Kromsch./Wolf Abgas Temperatur
temp_vessel heating_kw temp_vessel Kromsch./Wolf Kessel Temperatur
temp_boiler heating_kw temp_boiler Kromsch./Wolf Warmwasser Temperatur
temp_return heating_kw temp_return Kromsch./Wolf Rücklauf Temperatur
performance_burner heating_kw performance Kromsch./Wolf Aktuelle Geräteleistung %
performance_pump heating_kw performance_pump Kromsch./Wolf Aktuelle Pumpenleistung %
system_pressure heating_kw system_pressure Kromsch./Wolf Anlagedruck
fw_version heating_kw fw_version Kromsch./Wolf Firmware Version Brenner
no_of_firing heating_kw no_of_firing Kromsch./Wolf Anz. Zündungen
ionisation heating_kw ionisation Kromsch./Wolf Ionisation
no_of_power_on heating_kw no_of_power_on Kromsch./Wolf Anz. Netz-Ein
op_hrs_heating_unit heating_kw op_hrs_heating_unit Kromsch./Wolf Betriebsstunden Brenner
op_hrs_supply heating_kw op_hrs_supply Kromsch./Wolf Betriebsstunden am Netz
op_hrs_pump1 heating_kw op_hrs_pump1 Kromsch./Wolf Betriebsstunden Pumpe 1
e1 solar_kw e1 Kromsch./Wolf Solar Rücklauf Temperatur
solar_current solar_kw -BROADCAST- Kromsch./Wolf Aktuelle Solarleistung
yield_day -BROADCAST- Kromsch./Wolf Solar Tagesertrag
yield_sum -BROADCAST- Kromsch./Wolf Solar Gesamtertrag
solar_status solar_kw -BROADCAST- Kromsch./Wolf Solarstatus (Bitmaske)
solar_pump -BROADCAST- Kromsch./Wolf Solarpumpe an
temp_collector -BROADCAST- Kromsch./Wolf Temperatur Kollektor
temp_reservoir_1 -BROADCAST- Kromsch./Wolf Temperatur Speicher 1

Vaillant

Hier eine unvollständige Liste für Vaillant Geräte. Hier benötige ich Hilfe von Vaillant Besitzern.

ID Class Command Hersteller Beschreibung
temp_ntc1 water_v temp_ntc1 Vaillant NTC Sensor 1
temp_ntc2 water_v temp_ntc2 Vaillant NTC Sensor 2
temp_ntc3 water_v temp_ntc3 Vaillant NTC Sensor 3
temp_vessel heating_v temp_vessel Vaillant Kessel Temperatur
temp_outdoor control_v temp_vessel Vaillant Aussentemperatur
temp_return solar_v temp_return Vaillant Solar Rücklauf Temperatur

Beispiele Item Konfiguration

Hier ein Beispiel um wichtige Heizungsdaten anzuzeigen.

/** Heizung **/
Group HeatingUnit					"Heizung"												(All)
Group Solar							"Solar"													(All)

Group SOL_Chart1																			(HeatingUnit)
Group SOL_Chart2																			(HeatingUnit)
Group HU_Chart1																				(HeatingUnit)
Group HU_Chart2																				(HeatingUnit)
Number HU_Temp_Warm_Wather			"Warmwasser Temp[%.1f °C]"			<__temperature>		(HeatingUnit,SOL_Chart1)	{ ebus="id:temp_boiler, class:heating_kw"}
Number HU_Temp_M_Warm_Wather		"Warmwassermin. Temp[%.1f °C]"		<__temperature>		(HeatingUnit)				{ ebus="id:temp_t_boiler, class:controller"}
Number HU_Temp_T_Warm_Wather		"Warmwasser Temp(Soll)[%.1f °C]"	<__temperature>		(HeatingUnit)				{ ebus="id:temp_t_boiler, class:controller2, src:F1"}

Number HU_Temp_Heat_Vessel			"Kesseltemperatur [%.1f °C]"		<__temperature>		(HeatingUnit,HU_Chart1)		{ ebus="id:temp_vessel, class:auto_stroker, src:03"}
Number HU_Temp_T_Heat_Vessel		"Kesseltemperatur (Soll) [%.1f °C]"	<__temperature>		(HeatingUnit,HU_Chart1)		{ ebus="id:temp_t_vessel, class:controller"}
Number HU_Temp_Heat_Return			"Hz. Rücklauf [%.1f °C]"			<__temperature>		(HeatingUnit,HU_Chart1)		{ ebus="id:temp_return, class:heating_kw"}
Number HU_Temp_Heat_Exhaust			"Abgastempertatur [%.1f °C]"		<__temperature>		(HeatingUnit)				{ ebus="id:temp_exhaust, class:heating_kw"}
Number HU_Temp_AvgOutdoor			"Gem. Aussentemp. [%.1f °C]"		<__temperature>		(HeatingUnit)				{ ebus="id:temp_outdoor, class:controller2, src:F1"}
Number HU_Temp_Outdoor				"Aussentemp. [%.1f °C]"				<__temperature>		(HeatingUnit)				{ ebus="id:temp_outdoor, class:controller2, src:03"}

/** Heizung - Solar **/
Switch SOL_Status_Pump				"Solar Pumpe"						<switch>			(Solar,SOL_Chart2)			{ ebus="id:solar_pump, class:solar_kw"}
Number SOL_Temp_Collector			"Sol. Kollektor Temp. [%.1f °C]"	<__temperature>		(Solar,SOL_Chart1)			{ ebus="id:temp_collector, class:solar_kw"}
Number SOL_Temp_Return				"Sol. Rücklauf Temp. [%.1f °C]"		<__temperature>		(Solar,SOL_Chart1)			{ ebus="id:e1, class:solar_kw"}
Number SOL_Temp_Reservoir			"Sol. Speicher Temp. [%.1f °C]"		<__temperature>		(Solar,SOL_Chart1)			{ ebus="id:temp_reservoir_1, class:solar_kw"}
Number SOL_Yield_Sum				"Sol. Gesamtertrag [%.1f kW/h]"		<__bar_chart>		(Solar)						{ ebus="id:yield_sum, class:solar_kw"}
Number SOL_Yield_Day				"Sol. Tagesertrag [%.2f kW/h]"		<__bar_chart>		(Solar)						{ ebus="id:yield_day, class:solar_kw"}
Number SOL_Yield_Current			"Aktueller Ertrag[%.2f kW]"			<__bar_chart>		(Solar,SOL_Chart2)			{ ebus="id:solar_current, class:solar_kw"}

/** Heizung - Allg. Daten **/
Number HU_Performance_Burner		"Geräteleistung [%s %%]"			<__bar_chart>		(HeatingUnit)				{ ebus="id:performance_burner, class:heating_kw"}
Number HU_Performance_Pump			"Pumpe Leistung[%s %%]"				<__bar_chart>		(HeatingUnit)				{ ebus="id:performance_pump, class:heating_kw"}
Number HU_No_Of_Firing				"Feuerungen[%s]"					<__bar_chart>		(HeatingUnit)				{ ebus="id:no_of_firing, class:heating_kw"}
Number HU_Op_Hrs					"Betriebsstunden[%s h]"				<__bar_chart>		(HeatingUnit)				{ ebus="id:op_hrs_heating_unit, class:heating_kw"}
Switch HU_Status_Alarm				"Alarm [MAP(yesno_de.map):%s]"		<siren>				(HeatingUnit)				{ ebus="id:state_alarm, class:auto_stroker, src:03"}
Switch HU_Status_Fire				"Hz. Flamme [MAP(de.map):%s]"		<__gas2>			(HeatingUnit,HU_Chart1)		{ ebus="id:state_flame, class:auto_stroker, src:03"}
Number HU_Status					"Hz. Status [%s]"					<settings>			(HeatingUnit)				{ ebus="id:status_auto_stroker, class:auto_stroker, src:03"}
Number HU_Pressure_System			"Anlagendruck [%.2f bar]"			<__temperature>		(HeatingUnit)				{ ebus="id:system_pressure, class:heating_kw"}
Number HU_FW_Version				"Version[%.2f]"						<__bar_chart>		(HeatingUnit)				{ ebus="id:fw_version, class:heating_kw"}

/** Heizung Tests **/
Number HU_StatusReq1	"Statusanforderung 1 [MAP(hu_status_request1_de.map):%s]"	<__temperature>	(HeatingUnit)		{ ebus="id:status_warm_req1, class:controller"}
Number HU_StatusReq2	"Statusanforderung 2 [MAP(hu_status_request2_de.map):%s]"	<__temperature>	(HeatingUnit)		{ ebus="id:status_warm_req2, class:controller"}

Number HU_Status_Burner		"Brennerstatus [MAP(hu_CC5427_de.map):%s]"	<__temperature>		(HeatingUnit)				{ ebus="id:_w_unknown2, class:burnerw"}
Number HU_Status_OpMode		"Betriebsart [MAP(hu_CC7301_de.map):%s]"	<__temperature>		(HeatingUnit)				{ ebus="id:_w_unknown4, class:burnerw"}


Number HU_Performance_Burner2		"Geräteleistung [%s %%]"			<__bar_chart>		(HeatingUnit,HU_Chart1)
Number HU_Performance_Pump2			"Pumpe Leistung[%s %%]"				<__bar_chart>		(HeatingUnit,HU_Chart1)

Number HU_PollingTest1				"Pollingtest1x [%s]"									(HeatingUnit)				{ ebus="id:fw_version2, data:FF 08 50 22 03 CC 9A 01 00, refresh:60"}
Number HU_PollingTest2				"Pollingtest2 [%s]"										(HeatingUnit)				{ ebus="id:no_of_firing, class:heating_kw, cmd:no_of_firing, dst:08, refresh:10"}

Logging

Da es bei dem eBus Binding noch viel zu erforschen gibt, wurde eine mehrstufiges Logging implementiert um die Menge an Daten auswerten zu können. Hierzu gibt es speziell beim Parser mehrere Logger.

org.openhab.binding.ebus.parser.EBusTelegramParser 

org.openhab.binding.ebus.parser.Analyses
INFO  - Gibt empfangene/gültige Telegramme als Hex-String aus
DEBUG - Zeigt alle Konfigurationseintrage mit dem Kommentar an
TRACE - Zeigt jeden einzelne ID mit Wert an

org.openhab.binding.ebus.parser.BruteForce
TRACE  - Schaltet die Brutforce Ausgabe für unbekannte Telegramme ein

Parser anpassen

Der Parser kann durch das setzen der Konfiguration ebus:parserUrl in der openhab.cfg Datei eine andere Parser-Konfiguration verwenden. Dies ist geeignet um unbekannte Telegramme des eBus Protokolls zu implementieren. Der Aufbau der Datei kann in der Datei ebus-configuration.json nachgesehen werden. Eine Beschreibung des Formats finden Sie unter eBus Parser Konfiguration.

Resultate nehme ich gerne direkt in das Binding auf.