-
Notifications
You must be signed in to change notification settings - Fork 2
eBus Binding
Das Binding wird nun hier weitergeführt, um offizieller Bestandteil von openhab werdn zu können. Dieser Quelltext wird nicht weiter gepflegt. eBus binding
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.
- 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!)
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
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 | 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-ON und data-OFF zwei verschieden Telegramme je nach Zustand senden. |
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.
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.
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.
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.
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 |
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 |
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"}
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
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.