-
Notifications
You must be signed in to change notification settings - Fork 0
eBUS Binding
Date | Description |
---|---|
16.05.2015 | Corrected logging id's |
30.03.2015 | Change internal event handling from Thread to ThreadPool, enhance java doc |
21.01.2015 | Add new vaillant configuration vaillant-bai00
|
The eBUS binding allows you to control your heating system. The eBus protocol is used by heating system vendors like Wolf, Vaillant, Kromschröder etc. You can read temperatures, pump performance, gas consumption etc.
┌────────┐ serial/usb (rs232) ┌──────┐
│ │ serial (eBUS) ┌───┐ or ethernet │ ──── │
│ │<--------------->│ X │<------------------>│ : │
│ ◊◊◊◊ │ └───┘ └──────┘
└────────┘
Heating Unit eBUS Adapter openHAB Server
To access your heating system you either need an eBus interface. You can buy a ready interface or solder your own circuit (examples: eBUS Wiki). A simple read-only interface can be build with an Arduino device.
For installation of the binding, please see Wiki page Bindings. You can download the latest binding from here: eBUS binding 1.7.0 SNAPSHOT
You can find the configuration section for the eBus binding in file configurations/openhab.cfg, section "eBUS Binding".
For your convenience you can see the relevant section as follows:
# 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
# >> vaillant-bai00 - Telegrams for Vaillant Controller (used by VSC 196 etc. ?)
# >> testing - All unknown or test telegrams
# >> custom - Use configuration defined by ebus:parserUrl
# default uses common and all vendor specified telegrams
#ebus:parsers=common,wolf,testing,custom
# Set the sender id of this binding, default is "FF"
#ebus:senderId=FF
A sample configuration could look like:
ebus:serialPort=COM2
ebus:parsers=common,wolf
In order to bind an item to a eBus value you need to provide configuration settings. The easiest way to do so is to add binding information in your 'item file' (in the folder configurations/items`). The syntax for the eBUS binding configuration string is explained here:
This binding allows you to combine a set of parameters to get/set or request values on your heating system.
If you only want to read a value, you just need to set the parameters id
and class
. You can find a list below.
Sometimes more than one bus participant will send telegrams with given id
and class
. To filter the telegrams you can use the properties dst
(destination address) and src
(source address).
ebus="id:<id>, class:<class>"
ebus="id:<id>, class:<class>, src:<src>"
Parameter | Description |
---|---|
id | Defined together with class to read a value from eBUS. The class is required to distinguish modules in your system. Sometimes you can access the same value with different id/class combinations with different precisions. |
class | Together with id it addresses a unique value from your system. |
dst | Filter telegrams for a specified destination eBUS address (hex string). |
src | Filter telegrams for a specified source eBUS address (hex string). |
There are two common types of writing to the bus. Broadcasts and Request/Answer commands.
To set or request values from your system, you have to set a cmd
(command) parameter to your item.
Normally you send a request and expects an answer from a bus participant. But this binding works asynchronous, hence you can get return values only indirectly by using the read parameters. By this way you can update one or more items with only one command because a telegram can contain multiple values.
You should look at the examples below to understand the different cases.
The binding tries to send a commando up to five times before it cancels a request. You only get a short warning in the log. So this is fire-and-forget.
ebus="id:<id>, class:<class>, cmd:<cmd>, dst:<dst>"
ebus="id:<id>, class:<class>, cmd:<cmd>, dst:<dst>, refresh:<refresh>"
On some systems it is required to request answers from bus participants regularly. In this case you can use the parameter refresh
to send the command or RAW data automatically every n seconds.
It is also possible to send a raw eBUS telegram directly without any programmatic help. You have to write the telegram as hex string like FF 08 50 22 03 CC 9A 01 00
. The last byte will be automatic replaced by a valid checksum if it not the sync byte FF
.
You should use this parameter only in special cases and prefere cmd
instead.
Parameter | Description |
---|---|
cmd | This allows you to send a command to the eBUS. This parameter also needs the class parameter to addresses a unique command. |
class | Together with cmd it addresses a unique value from your system. |
dst | Define the destination eBUS address as hex value for the telegram. |
src | Defines the source eBUS address as hex value for the telegram. Or default value FF would be used. You can overwrite this inf openhab.cfg . |
refresh | If you set a refresh interval (sec.) the command will be automatic send via eBUS. This is usually used to poll data from your system. |
data | Instead of the cmd parameter you can send a raw telegram as hex string. The last byte will be replaced by the calculated crc value if is not FF . |
data-{STATE} | Same as parameter data , but is only send on the specified state of the item. As example you can define a switch item with data-ON and data-OFF to send two different telegrams per state. |
ebus="id:no_of_firing, class:heating_kw, dst:08"
This item configuration receives the number of firings from the eBUS. This is defined by parameter id
and class
. But in this case we only want telegrams with the destination address 0x08. But keep in mind that this a read-only configuration. So we can only receive values that are submitted as broadcast or requested by a device.
Optionally you can also filter the source address with the parameter src
.
ebus="id:no_of_firing, class:heating_kw, cmd:no_of_firing, dst:08, src:FF, refresh:60"
This example is similar to the previous example, but here we active request this value every 60 seconds from the bus (Polling). If you can read multiple values with one command it's enough to send the command once. In this example the source address is explicit set to a hex string.
ebus="id:no_of_firing, class:heating_kw, data:FF 08 50 22 03 CC 1A 27 00"
In this example we send a raw telegram as hex string instead a already defined command. The last byte is replaced by the calculated crc value if it's not 0xFF (eBUS sync byte). But you should prefer the cmd
parameter.
ebus="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"
Similar to the last example, but we use different telegrams per item state. If you use a switch item you can send different telegram for the states ON
or OFF
.
This is a list based on the eBUS specification - Application Layer - OSI 7 V1.6.3 from 03/2007
ID | Class | Command | Item type | Description |
---|---|---|---|---|
vendor | common | - | Number | Vendor ID |
device | common | - | String | Device String |
software_version | common | - | Number | Software Version |
hardware_version | common | - | Number | Hardware Version |
status_auto_stroker | auto_stroker | - | Number | Status auto stroker |
state_ldw | auto_stroker | - | Switch | Status ldw? |
state_gdw | auto_stroker | - | Switch | Status gdw? |
state_ws | auto_stroker | - | Switch | Status ws? |
state_flame | auto_stroker | - | Switch | Status flame |
state_valve1 | auto_stroker | - | Switch | Status valve 1 |
state_valve2 | auto_stroker | - | Switch | Status valve 2 |
state_uwp | auto_stroker | - | Switch | Status circulation pump |
state_alarm | auto_stroker | - | Switch | Status alarm |
performance_burner | auto_stroker | - | Number | Performance burner |
temp_vessel | auto_stroker | - | Number | Vessel temperature |
temp_return | auto_stroker | - | Number | Return temperature |
temp_boiler | auto_stroker | - | Number | Boiler temperature |
temp_outdoor | auto_stroker | - | Number | Outdoor temperature |
status_warm_req1 | controller | - | Switch | Status warm request 1 |
status_warm_req2 | controller | - | Switch | Status warm request 1 |
temp_t_vessel | controller | - | Number | Target vessel temperature |
pressure_t_vessel | controller | - | Number | Target vessel pressure |
performance_burner | controller | - | Number | Performance burner |
temp_t_boiler | controller | - | Number | Target boiler temperature |
value_fuel | controller | - | Number | Fuel value |
date | common | - | String | Date value |
time | common | - | String | Time value |
temp_t_vessel | controller2 | - | Number | Target vessel temperature |
temp_outdoor | controller2 | - | Number | Outdoor temperature |
power_enforcement | controller2 | - | Number | Power entforcement |
status_bwr | controller2 | - | Switch | Status bwr? |
status_heat_circuit | controller2 | - | Switch | Status heat circuit |
temp_t_boiler | controller2 | - | Number | Target boiler temperature |
This is a list for a Wolf CSZ-2
systems, hopefully it is compatible to other Wolf systems.
Compatible with COB-20
for some values.
ID | Class | Command | Item type | Description |
---|---|---|---|---|
temp_exhaust | heating_kw | temp_exhaust | Number | Exhaust temperature |
temp_vessel | heating_kw | temp_vessel | Number | Boiler temperature |
temp_boiler | heating_kw | temp_boiler | Number | Hotwater temperature |
temp_return | heating_kw | temp_return | Number | Return temperature |
performance_burner | heating_kw | performance | Number | Current device output % |
performance_pump | heating_kw | performance_pump | Number | Current pump output % |
system_pressure | heating_kw | system_pressure | Number | System Pressure |
fw_version | heating_kw | fw_version | Number | Firmware Version Burner |
no_of_firing | heating_kw | no_of_firing | Number | No. of Firing |
ionisation | heating_kw | ionisation | Number | Ionisation |
no_of_power_on | heating_kw | no_of_power_on | Number | No. of Power-On |
op_hrs_heating_unit | heating_kw | op_hrs_heating_unit | Number | Operating hours burner |
op_hrs_supply | heating_kw | op_hrs_supply | Number | Operating hours online |
op_hrs_pump1 | heating_kw | op_hrs_pump1 | Number | Operating hours pump 1 |
e1 | solar_kw | e1 | Number | Solar return temperature |
solar_current | solar_kw | -BROADCAST- | Number | Current solar output |
yield_day | solar_kw | -BROADCAST- | Number | Solar day yield |
yield_sum | solar_kw | -BROADCAST- | Number | Solar sum yield |
solar_status | solar_kw | -BROADCAST- | Number | Solar status (bitmask) |
solar_pump | solar_kw | -BROADCAST- | Switch | Solar pump on |
temp_collector | solar_kw | -BROADCAST- | Number | Temperature collector |
temp_reservoir_1 | solar_kw | -BROADCAST- | Number | Temperature storage 1 |
Here a unsupported list for Vaillant devices. Here we need your support.
ID | Class | Command | Item type | Description |
---|---|---|---|---|
temp_ntc1 | water_v | temp_ntc1 | Number | NTC sensor 1 |
temp_ntc2 | water_v | temp_ntc2 | Number | NTC sensor 2 |
temp_ntc3 | water_v | temp_ntc3 | Number | NTC sensor 3 |
temp_vessel | heating_v | temp_vessel | Number | Boiler temperature |
temp_outdoor | control_v | temp_vessel | Number | Temperature outdoor |
temp_return | solar_v | temp_return | Number | Solar return temperature |
Here a unsupported list for Vaillant BIA 00 device. ID's, class and command names can be changed in further releases.
ID | Class | Command | Item type | Description |
---|---|---|---|---|
performance_burner-kw | bai00 | performance_burner-kw | Number | Burner performance kW |
performance_burner | bai00 | performance_burner | Number | Burner performance % |
temp_flow | bai00 | temp_flow | Number | Flow temperature °C |
status_flow | bai00 | Switch | Flow temperature status | |
temp_return | bai00 | temp_return | Number | Return temperature °C |
status_return | bai00 | Switch | Return temperature status |
Here is a longer example.
/** Heating **/
Group HeatingUnit "Heating" (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 "Hotwater temp.[%.1f °C]" <__temperature> (HeatingUnit,SOL_Chart1) { ebus="id:temp_boiler, class:heating_kw"}
Number HU_Temp_M_Warm_Wather "Hotwater min. temp.[%.1f °C]" <__temperature> (HeatingUnit) { ebus="id:temp_t_boiler, class:controller"}
Number HU_Temp_T_Warm_Wather "Hotwater temp(target)[%.1f °C]" <__temperature> (HeatingUnit) { ebus="id:temp_t_boiler, class:controller2, src:F1"}
Number HU_Temp_Heat_Vessel "Boiler temp. [%.1f °C]" <__temperature> (HeatingUnit,HU_Chart1) { ebus="id:temp_vessel, class:auto_stroker, src:03"}
Number HU_Temp_T_Heat_Vessel "Boiler temp. (target) [%.1f °C]" <__temperature> (HeatingUnit,HU_Chart1) { ebus="id:temp_t_vessel, class:controller"}
Number HU_Temp_Heat_Return "HU. Return [%.1f °C]" <__temperature> (HeatingUnit,HU_Chart1) { ebus="id:temp_return, class:heating_kw"}
Number HU_Temp_Heat_Exhaust "Exhaust temp. [%.1f °C]" <__temperature> (HeatingUnit) { ebus="id:temp_exhaust, class:heating_kw"}
Number HU_Temp_AvgOutdoor "Avg. temp. outdoor [%.1f °C]" <__temperature> (HeatingUnit) { ebus="id:temp_outdoor, class:controller2, src:F1"}
Number HU_Temp_Outdoor "Temp. outdoor [%.1f °C]" <__temperature> (HeatingUnit) { ebus="id:temp_outdoor, class:controller2, src:03"}
/** Heating - Solar **/
Switch SOL_Status_Pump "Solar pump" <switch> (Solar,SOL_Chart2) { ebus="id:solar_pump, class:solar_kw"}
Number SOL_Temp_Collector "Sol. collektor temp. [%.1f °C]" <__temperature> (Solar,SOL_Chart1) { ebus="id:temp_collector, class:solar_kw"}
Number SOL_Temp_Return "Sol. return temp. [%.1f °C]" <__temperature> (Solar,SOL_Chart1) { ebus="id:e1, class:solar_kw"}
Number SOL_Temp_Reservoir "Sol. store temp. [%.1f °C]" <__temperature> (Solar,SOL_Chart1) { ebus="id:temp_reservoir_1, class:solar_kw"}
Number SOL_Yield_Sum "Sol. sum yield [%.1f kW/h]" <__bar_chart> (Solar) { ebus="id:yield_sum, class:solar_kw"}
Number SOL_Yield_Day "Sol. day yield [%.2f kW/h]" <__bar_chart> (Solar) { ebus="id:yield_day, class:solar_kw"}
Number SOL_Yield_Current "Current output[%.2f kW]" <__bar_chart> (Solar,SOL_Chart2) { ebus="id:solar_current, class:solar_kw"}
/** Heating - Common Data **/
Number HU_Performance_Burner "Unit output [%s %%]" <__bar_chart> (HeatingUnit) { ebus="id:performance_burner, class:heating_kw"}
Number HU_Performance_Pump "Pump output[%s %%]" <__bar_chart> (HeatingUnit) { ebus="id:performance_pump, class:heating_kw"}
Number HU_No_Of_Firing "No. of Firing[%s]" <__bar_chart> (HeatingUnit) { ebus="id:no_of_firing, class:heating_kw"}
Number HU_Op_Hrs "Op. hours unit[%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 "HU. flame [MAP(de.map):%s]" <__gas2> (HeatingUnit,HU_Chart1) { ebus="id:state_flame, class:auto_stroker, src:03"}
Number HU_Status "HU. status [%s]" <settings> (HeatingUnit) { ebus="id:status_auto_stroker, class:auto_stroker, src:03"}
Number HU_Pressure_System "System pressue [%.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"}
Number HU_Status_Burner "Status burner [MAP(hu_CC5427_de.map):%s]" <__temperature> (HeatingUnit) { ebus="id:_w_unknown2, class:burnerw"}
Number HU_Status_OpMode "Op. mode [MAP(hu_CC7301_de.map):%s]" <__temperature> (HeatingUnit) { ebus="id:_w_unknown4, class:burnerw"}
Number HU_PollingExample1 "Polling Example 1 [%s]" (HeatingUnit) { ebus="id:fw_version2, data:FF 08 50 22 03 CC 9A 01 00, refresh:60"}
Number HU_PollingExample2 "Polling Example 2 [%s]" (HeatingUnit) { ebus="id:no_of_firing, class:heating_kw, cmd:no_of_firing, dst:08, refresh:10"}
Normally the binding is quiet and you can only see errors or important messages in your log files. But if you need more information then you can modify the logging file configuration/logback.xml
.
org.openhab.binding.ebus.parser.EBusTelegramParser
This is the standard logger for this binding
org.openhab.binding.ebus.internal.parser.Analyses
This is a special logger to show/analyse the received telegrams
org.openhab.binding.ebus.internal.parser.BruteForce
This is a special logger to show raw telegram data
You can add your own parser configuration by setting the property ebus:parserUrl
in your openhab.cfg
file.
More information here (german language, use translator)
###Linux / OS X
###Windows
- Cosm Persistence
- db4o Persistence
- Exec Persistence
- InfluxDB Persistence
- JDBC Persistence
- JPA Persistence
- Logging Persistence
- mapdb Persistence
- MongoDB Persistence
- MQTT Persistence
- my.openHAB Persistence
- MySQL Persistence
- rrd4j Persistence
- Sen.Se Persistence
- SiteWhere Persistence
- AlarmDecoder Binding
- Anel Binding
- Arduino SmartHome Souliss Binding
- Asterisk Binding
- Astro Binding
- Autelis Pool Control Binding
- BenQ Projector Binding
- Bluetooth Binding
- Bticino Binding
- CalDAV Binding
- Comfo Air Binding
- Config Admin Binding
- CUL Binding
- CUL Intertechno Binding
- CUPS Binding
- DAIKIN Binding
- Davis Binding
- Denon Binding
- digitalSTROM Binding
- DMX512 Binding
- DSC Alarm Binding
- DSMR Binding
- eBUS Binding
- Ecobee Binding
- EDS OWSever Binding
- eKey Binding
- Energenie Binding
- EnOcean Binding
- Enphase Energy Binding
- Epson Projector Binding
- Exec Binding
- Freebox Binding
- Freeswitch Binding
- Frontier Silicon Radio Binding
- Fritz AHA Binding
- Fritz!Box Binding
- FS20 Binding
- Global Cache IR Binding
- GPIO Binding
- HAI/Leviton OmniLink Binding
- HDAnywhere Binding
- Heatmiser Binding
- Homematic / Homegear Binding
- HTTP Binding
- IEC 62056-21 Binding
- IHC / ELKO Binding
- ImperiHome Binding
- Insteon Hub Binding
- Insteon PLM Binding
- IPX800 Binding
- IRtrans Binding
- jointSPACE-Binding
- KNX Binding
- Koubachi Binding
- LCN Binding
- LightwaveRF Binding
- Leviton/HAI Omnilink Binding
- Lg TV Binding
- Logitech Harmony Hub
- MailControl Binding
- MAX!Cube-Binding
- MAX! CUL Binding
- MiLight Binding
- MiOS Binding
- Modbus TCP Binding
- MPD Binding
- MQTT Binding
- MQTTitude binding
- Neohub Binding
- Nest Binding
- Netatmo Binding
- Network Health Binding
- Network UPS Tools Binding
- Nibe Heatpump Binding
- Nikobus Binding
- Novelan/Luxtronic Heatpump Binding
- NTP Binding
- One-Wire Binding
- Onkyo AV Receiver Binding
- Open Energy Monitor Binding
- OpenPaths presence detection binding
- OpenSprinkler Binding
- OSGi Configuration Admin Binding
- Panasonic TV Bindung
- panStamp Binding
- Philips Hue Binding
- Piface Binding
- pilight Binding
- Pioneer-AVR-Binding
- Plex Binding
- Plugwise Binding
- PLCBus Binding
- Primare Binding
- Pulseaudio Binding
- RFXCOM Binding
- RWE Smarthome Binding
- Sager WeatherCaster Binding
- Samsung AC Binding
- Samsung TV Binding
- Serial Binding
- Sallegra Binding
- Satel Alarm Binding
- Sinthesi Sapp Binding
- Snmp Binding
- Somfy URTSI II Binding
- Sonos Binding
- Squeezebox Binding
- Swegon ventilation Binding
- System Info Binding
- TA CMI Binding
- TCP/UDP Binding
- Tellstick Binding
- TinkerForge Binding
- Tivo Binding
- VDR Binding
- Velleman-K8055-Binding
- Wago Binding
- Wake-on-LAN Binding
- Waterkotte EcoTouch Heatpump Binding
- Weather Binding
- Wemo Binding
- Withings Binding
- XBMC Binding
- xPL Binding
- Yamahareceiver Binding
- Zibase Binding
- Z-Wave Binding
- Asterisk
- Google Calendar
- Linux Media Players
- ROS Robot Operating System
- Telldus Tellstick
- Zoneminder
- Wink Hub (rooted)
- Wink Monitoring
- Transformations
- XSLT
- JSON
- REST-API
- Security
- Service Discovery
- Voice Control
- BritishGasHive-Using-Ruby
- Dropbox Bundle
A good source of inspiration and tips from users gathered over the years. Be aware that things may have changed since they were written and some examples might not work correctly.
Please update the wiki if you do come across any out of date information.
- Comfo Air Binding
- Ecobee Examples
- Nest Examples
- Rollershutter Bindings
- Squeezebox
- WAC Binding
- WebSolarLog
- Alarm Clock
- Convert Farenheit to Celcius
- The mother of all lighting rules
- Reusable Rules via Functions
- Combining different Items
- Items, Rules and more Examples of a SmartHome
- Google Map
- Controlling openHAB with Android
- Usecase examples
- B-Control Manager
- Spell checking for foreign languages
- Flic via Tasker
- Chromecast via castnow