Ebus binding

Yes, I’m using only custom json on Openhab2.

Default dir for a custom JSON is hidden very deep and it’s very inconvenient for editing. So I placed my custom JSON in Openhab2 config folder (/etc/openhab2) and in ebus.cfg my custom path looks ugly:

# Serial port of eBUS interface
# Valid values are e.g. COM1 for Windows and /dev/ttyS0 or /dev/ttyUSB0 for Linux

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

# default uses common and all vendor specified telegrams

It will be very useful, if @csowada can make a change for using simple path definition: parserUrl=/etc/openhab2/bai.json. Maybe we already can use this, but I don’t know how.

@ morchee

Thank you now i can create my own custom :slight_smile:


I see that in ebusd csv files thay are using two levels of writing
1 - W - standard writing
2 - Wi - writing with installation privileges

is this second option supported by binding?

This no Problem for the binding. You can see the two different bytes per type on top of the file.
@all I hope have time this evening to check the issues.
Maybe the Version 2 of this binding is interesting for you, I am working in it since Winter.

@csowada, yes i’m interesting in version 2 could you please share?

I’d like to test it too if possible. many thanks in advance

this should normally work on Linux. Windows is a bit different.


More details on file URI syntax here:

1 Like


for your information, the version two alpha is out.

Hello eBUS users,

I need some tester to get feedback for the complete rewritten version for openHAB 2.0. You can now configure the binding from Paper UI, later it should work with Auto-Discovery. But this currently not my focus at the moment.
Currently I need feedback for stability and the basic communication on the bus like get, set polling etc.

1 Like

Hi Paul,
I do have a Weishaupt WTC as well and am interested in retrieving at leastsome basic information from it. I bought an Ebus coupler last year and tried to figure out the meaning of the telegrams but gave up after a couple of days.
I recently started with openhab an saw that there is a binding for the ebus. So I would now like to give it a new try.
First of all I tried some simple items with the common parser. my items file looks like this:

Number WTC_Status <temperature> {ebus="auto_stroker.status_auto_stroker, refresh:60"}
Number WTC_Temp_Kessel <temperature> {ebus="id:auto_stroker.temp_boiler, src:03, refresh:60"}

In my logfile I can see some entries related to the ebus, i.e.:

2017-11-01 15:07:44.189 [DEBUG] [inding.ebus.internal.parser.Analyses] - F1 FE 50 0A 0D 01 00 07 02 00 34 68 FF 00 80 00 00 08 5C AA
2017-11-01 15:07:44.190 [DEBUG] [inding.ebus.internal.parser.Analyses] -   >>> Unknown ----------------------------------------

Unfortunately I don’t get any values in my HABPanel.
Maybe you or somebody else here might give me a hint on how to start.

Best regards



before going back to testing your last Alpha, I made a setup based on the eBUS 1.x Binding (Testing) Binding.

So after all it seems that my boiler and VRC470 can both communicate with the ethernet coupler.

Here is my setup:



/* eBus VRC470 */
Number Controller_status_global_system_off     "Activation of operation mode system off - {0=Off, 1=On} [%.1f]"   <switch>    { ebus="id:controller.status_global_system_off, dst:15, refresh:300" }
Number Controller_temp_d_room_disp     "HC1 Currently displayed room desired temperature [%.1f °C]"   <temperature>    { ebus="id:controller.temp_d_room_disp, dst:15, refresh:300" }
Number Controller_temp_outside_status     "Outside temperature status - {0=Ok, 85=Circuit, 170=Cutoff} [%.1f]"   <switch>    { ebus="id:controller.temp_outside.status, dst:15, refresh:300" }
Number Controller_temp_outside_temp_outside     "Outside temperature [%.1f °C]"   <temperature>     { ebus="id:controller.temp_outside.temp_outside, dst:15, refresh:300" }
Number Controller_temp_room_status     "Room temperature status - {0=Ok, 85=Circuit, 170=Cutoff} [%.1f]"   <switch>    { ebus="id:controller.temp_room.status, dst:15, refresh:300" }
Number Controller_temp_room_temp_room     "Room temperature [%.1f °C]"   <temperature>     { ebus="id:controller.temp_room.temp_room, dst:15, refresh:300" }
Number Controller_temp_room_disp     "Room temperature Disp [%.1f °C]"   <temperature>     { ebus="id:controller.temp_room_disp, dst:15, refresh:300" }
Number Controller_dhw_program_dhw_circuit     "DHW Operation mode - {0=Off, 1=On, 2=Auto, 3=Auto Sunday, 4=Party, 6=LoadDHW, 7=Holiday} [%.1f]"   <switch>    { ebus="id:dhw.program_dhw_circuit, dst:15, refresh:300" }
Number Controller_dhw_temp_d_actual_dhw     "DHW actual desired temperature [%.1f °C]"   <temperature>     { ebus="id:dhw.temp_d_actual_dhw, dst:15, refresh:300" }
Number Controller_dhw_temp_d_dhw     "DHW setpoint [%.1f °C]"   <temperature>     { ebus="id:dhw.temp_d_dhw, dst:15, refresh:300" }
Number Controller_heating_program_heating_circuit             "HC1 Operation mode - {0=Off, 1=Manual, 2=Auto, 3=Day, 4=Night, 5=Summer} [%.1f]"   <switch>    { ebus="id:heating.program_heating_circuit, dst:15, refresh:300" }
Number Controller_heating_program_heating_circuit_special     "HC1 special Operation mode - {0=Nothing, 1=Party, 2=OneDayHome, 3=OneDayNotHome, 4=Holiday, 5=Home, 6=QuickVeto, 7=OneTimeVentilation, 8=WhisperMode, 9=LoadDHW} [%.1f]"   <switch>    { ebus="id:heating.program_heating_circuit_special, dst:15, refresh:300" }
Number Controller_heating_temp_d_day               "HC1 Day setpoint [%.1f °C]"              <temperature>     { ebus="id:heating.temp_d_day, dst:15, refresh:300" }
Number Controller_heating_temp_d_night             "HC1 Night setpoint [%.1f °C]"            <temperature>     { ebus="id:heating.temp_d_night, dst:15, refresh:300" }
Number Controller_heating_temp_d_room_override     "HC1 Manual override setpoint [%.1f °C]"  <temperature>     { ebus="id:heating.temp_d_room_override, dst:15, refresh:300" }
Number Controller_heating_temp_hcurve              "HC1 Heating curve [%.1f]"                                  { ebus="id:heating.temp_hcurve, dst:15, refresh:300" }
Number Controller_heating_temp_vf1_status       "VF1 temperature status - {0=Ok, 85=Circuit, 170=Cutoff} [%.1f]"   <switch>          { ebus="id:heating.temp_vf1.status, dst:15, refresh:300" }
Number Controller_heating_temp_vf1_temp_vf1     "VF1 temperature [%.1f °C]"                                        <temperature>     { ebus="id:heating.temp_vf1.temp_vf1, dst:15, refresh:300" }
/* eBus ecocompact */
Number Boiler_Blocktime_Boiler              "Boiler Max. burner anti-cycling time heating at 20 °C  [%.1f min]"  <time>       { ebus="id:boiler.blocktime_boiler, dst:08, refresh:300" }
Number Boiler_level_part_load               "Boiler Heating partial load [%.1f kW]"                              <energy>     { ebus="id:boiler.level_part_load, dst:08, refresh:300" }
Number Boiler_mode_summer_winter_switch     "Summer/winter operating mode - {0=off, 1=on} [%.1f]"                <switch>     { ebus="id:boiler.mode_summer_winter_switch, dst:08, refresh:300" }
Number Boiler_modulation_pump               "Actual pump speed [%.1f rpm]"                                       <speed>      { ebus="id:boiler.modulation_pump, dst:08, refresh:300" }
Number Boiler_postrun_pump                  "Overrun time of internal pump for heating mode  [%.1f min]"         <time>       { ebus="id:boiler.postrun_pump, dst:08, refresh:300" }
Number Boiler_Pressure_status               "Status system pressure - {0=Ok, 85=Circuit, 170=Cutoff} [%.1f]"     <switch>     { ebus="id:boiler.pressure.status, dst:08, refresh:300" }
Number Boiler_Pressure                      "Boiler Pressure [%.2f bar]"                                         <pressure>   { ebus="id:boiler.pressure.pressure, dst:08, refresh:300" }
Number Boiler_speed_d_fan                   "Fan speed target value [%.2f rpm]"                                  <speed>      { ebus="id:boiler.speed_d_fan, dst:08, refresh:300" }
Number Boiler_speed_fan                     "Fan speed [%.2f rpm]"                                               <speed>      { ebus="id:boiler.speed_fan, dst:08, refresh:300" }
Number Boiler_state_diverter_valve         "Position of the diverter valve - {0=heating, 40=parallel, 100=dhw} [%.1f]"    <switch>     { ebus="id:boiler.state_diverter_valve, dst:08, refresh:300" }
Number Boiler_state_gas_valve              "Gas valve status - {240=off, 15=on}  [%.1f]"                                  <switch>     { ebus="id:boiler.state_gas_valve, dst:08, refresh:300" }
Number Boiler_state_pump                  "Status of internal pump - {0=off, 1=on} [%.1f]"                                <switch>     { ebus="id:boiler.state_pump, dst:08, refresh:300" }
Number Boiler_state_pump_ext              "Status of external heating pump - {0=off, 1=on} [%.2f]"                        <switch>     { ebus="id:boiler.state_pump_ext, dst:08, refresh:300" }
Number Boiler_state_return_regulation     "Heating flow/return regulation changeover - {0=flow, 1=return} [%.1f]"         <switch>     { ebus="id:boiler.state_return_regulation, dst:08, refresh:300" }
Number DHW_Temperature_Cylinder_Top     "DHW Temperature Cylinder Top [%.1f °C]" <temperature>     { ebus="id:dhw.temp_cylinder.temp_cylinder, dst:08, refresh:300" }
Number Boiler_Temperature_Target_Supply "Boiler Temperature Target Supply [%.1f °C]"  <temperature>  { ebus="id:boiler.temp_d_flow, dst:08, refresh:300" }
Number Boiler_Temperature_Supply   "Boiler Temperature Supply [%.1f °C]" <temperature>    { ebus="id:boiler.temp_flow.temp_flow, dst:08, refresh:300" }
Number Boiler_Temperature_Return   "Boiler Temperature Return [%.1f °C]" <temperature>    { ebus="id:boiler.temp_return.temp_return, dst:08, refresh:300" }
Number Boiler_dhw_temp_cylinder_temp_cylinder   "Measured value of hot water sensor [%.1f °C]" <temperature>    { ebus="id:dhw.temp_cylinder.temp_cylinder, dst:08, refresh:300" }
Number Boiler_dhw_temp_d_cylinder   "Cylinder temperature target value [%.1f °C]" <temperature>    { ebus="id:dhw.temp_d_cylinder, dst:08, refresh:300" }
Number Boiler_dhw_temp_d_dhw   "Hot water temperature target value [%.1f °C]" <temperature>    { ebus="id:dhw.temp_d_dhw, dst:08, refresh:300" }
Number Boiler_heating_runtime   "Operating hours, heating [%.1f h]"                            { ebus="id:heating.runtime, dst:08, refresh:300" }
Number Boiler_heating_starts   "Burner start-ups in heating mode (x100) [%.1f]"                { ebus="id:heating.starts, dst:08, refresh:300" }

This config have still some work to sort out unusefull data, but at least I have a baseline to work on and gets data from the boiler and from the VRC470.
I get the ebus-all,debug,unknown.csv file after some days, and used a pivot table in Excel to get some stat on the error telegrams. Sorting with Type, SRC, DST, CMD and Comment, I get apparently only unknown messages:

How should I interpret the fact that only messages from the VRC to broadcast or to the boiler are marked here ? Did I miss an option in the “record” parameter, or is it that just these telegram are missing definition and that others are properly identified ?

Hi Thomas,

I’ve not managed to decode much from the communication, Below the items
I’m using wish there was more documentation on the Weishaupt protocol.
Too bad they do not disclose anything.

I have following items configured: ( these remained after I had items
configured for about anything this binding could deliver and then picked
out the ones that returned some data. I did not dig further into the
meaning of the status flags, but I think they have to do with what is
set on the thermostat (day/night summer/vacation or so)

Number HU_Temp_T_Warm_Wather “Hotwater (target) temp. [%.1f °C]”
(HeatingUnit,Temperature) {
Number HU_Temp_T_Heat_Vessel “Boiler (target) temp. [%.1f °C]”
(HeatingUnit,HU_Chart1,Temperature) {
Number HU_Temp_OutdoorC “Outdoor temp. [%.1f °C]”
(HeatingUnit,Temperature) {
String HU_Time “Thermostat time
(HeatingUnit) { ebus=“id:common.time”}
Number HU_StatusReq1 “Status Request 1 [%s]”
{ ebus=“id:controller.status_heat_req1”}
Number HU_StatusReq2 “Status Request 2 [%s]”
{ ebus=“id:controller.status_heat_req2”}

in the openhab.cfg file I have following relating to the eBus (I’m
running 1.8.3 version of OH still)


Write all/debug/unknown telegrams to a CSV file in folder


logfile is at /var/lib/openhab/persistence/ebus/ebus-all,debug,unknown.csv


I hope this may help you.

I have thrown all my E-bus and Weishaupts WTC related notes I gathered
when looking into the matter into a document. Hope it can help anyone
forward. A few WTC related details are from the WTC manual in Dutch.
You should however be able to find the same info in your own language or
use google translate.


My plan was to use the ebus to somehow be able to send a command to the
system to turn On/Off the central heating depending on someone being in
the house or coming home. But it looks that sending info to the WTC is
not going to happen. So my backup plan is to use a relay to tell the
WTC that the condensate pump reservoir is full which will make the
system go into a STOP condition ( using H2 input on the WTC) . (not
ideal, but should do the trick but don’t like the, fact to come with
live 220V power near my rPi since the switch on the WTC is not galvanic
isolated) This is why you see also some documentation on the internal
settings of the WTC so I can use one of the contacts to put the system
in error mode. (my heating installer had not bothered to connect that
condensate overflow fault line and so I had some small flooding when it
failed… this is now taken care off)


In order to simplify things creation from the definition available from the json documentation (https://github.com/openhab/openhab1-addons/blob/1.8/bundles/binding/org.openhab.binding.ebus/docs/json-files/common.md)

I made an Excel spreadsheet generator.

Things definition are created from id, type and comment from the json documentation, as well as prefix name, type, data format, destination address that can easily manipulated within the spreadsheet. These things definition can then just be copy and paste in items file.

The spreadsheet calculate too sitmap text object definition that just have to be copy & paste to.


Using just “all” instead of “all,debug,unknown” for record let me have all of the messages, strange.

However, now I start to fix the unknown messages, starting with the “B5 16” which are broacast messages for time and outside temperature. Should I create specific json messages or did I missed existing ones ?

You can see all included configuration files in github

Feel free to contribute new or enhance existing files. But keep in mind, that I as author of this binding move over to the openhab 2.0 binding. So this binding will only get reduced support in future.

Sure I would love to help and to contribute by providing what I did to remove the unknown messages I fixed !

I have a test openHab2 to explore the ebus world, and I’m switching during my test between your binding 2.0 Alpha realease, the 2 versions embedded in OpenHab2 and your test version “1.9.0-FIX-001”.

I am not sure what repository the version “eBUS 1.x Binding (Testing)” rely on. However, I presume the “ebus binding v1.10” rely on this one ?

What json files should I use as template ? If I’m not mistaken, the json files for Alpha version should be these one ?

If I want to modify directly those installed by the binding, where should I get these json files directly on the openHab2 installation ?

Additionnal question: I’m looking for the vrDialog810.mdb file included in the last vrDialog (should be the version but the only version I manage to get right now is the version advertised as 2.6 from Vaillant nl website (which is only a 2.5 version once installed !). Do you know where I could find the last version ? I hope it may help to identify some additionnal unkown messages.

Hi Paul,

thanks for your comprehensive answer.
I did set my items file as well as the config file according to what you’ve posted. Unfortunately, I don’t get any values on my HabPanel.
In the OpenHab logfile I find the error message "Unable to load file wolf-configuration.json …"
Did you set the “senderId” to a certain value?

By the way, the sources of information that you quote in your note sheet are pretty much the same that I came across, when I was looking for solutions on the internet.
Is there a way to send private messages in this forum. I do have some documentation on Weishaupt ebus controls that I don’t want to share publicly.

Best regards


The repository csowada/ebus is the new core library for the oh 2.x binding. You find the oh 1.x files in the openhab/openhab1-addons

Thanks for the clarification. So it would be more pertinent to base my json modification on the ah 2.x binding then ?

Actually I tried to code these broadcast messages:

2017-11-06 22:00:34;"01";"10";"FE";B5 16;"08";00 34 00 22 06 11 01 17;"CE";;;;;<unknown>
2017-11-06 22:00:54;"01";"10";"FE";B5 16;"03";01 90 06;"E3";;;;;<unknown>

Based on http://ebus-wiki.org/doku.php/ebus/serviceb516, for now my json looks like:

    "id":           "vrc430",
    "vendor":       "Vaillant",
    "label":        "Vaillant VRC 430(f)/470(f)",
    "description":  "Programming unit Vaillant VRC 430, 430f, 470 and 470f",
            "label":    "Outside temperature",
            "id":       "controller.broadcast.temp_outside",
            "command":  "B5 16",
            "broadcast": {
                "master": [
                    {"type": "static", "default": "01"},
                    {"name":"temp_outside", "type": "data2b", "label": "Outside Temperature", "min": -50, "max": 50, "format":"%.1f°C"}
            "label":    "Outside temperature",
            "id":       "controller.broadcast.time",
            "command":  "B5 16",
            "broadcast": {
                "master": [
                    {"type": "static", "default": "00"},
                    {"name":"seconds", "type": "bcd", "label": "seconds", "min": 0, "max": 59, "format":"%.1f°C"},
                    {"name":"minutes", "type": "bcd", "label": "minutes", "min": 0, "max": 59, "format":"%.1f°C"},
                    {"name":"hours", "type": "bcd", "label": "hours", "min": 0, "max": 59, "format":"%.1f°C"},
                    {"name":"day", "type": "bcd", "day": "second", "min": 1, "max": 31, "format":"%.1f°C"},
                    {"name":"month", "type": "bcd", "month": "second", "min": 1, "max": 12, "format":"%.1f°C"},
                    {"name":"weekday", "type": "bcd", "weekday": "second", "min": 1, "max": 7, "format":"%.1f°C"},
                    {"name":"year", "type": "bcd", "label": "year", "min": 0, "max": 99, "format":"%.1f°C"}

But I have some issue adding it to the binding :confused:

I’ve put my test.json file in /home/openhabian folder, and used in the configuration file:


But the log shows then:
2017-11-06 22:57:47.003 [ERROR] [org.apache.felix.configadmin ] - [org.osgi.service.cm.ManagedService, org.osgi.service.event.EventHandler, id=304, bundle=203/https://drive.google.com/uc?export=download&id=0B5Vjy5Qe0CabSUhSQm5iSjc1TFE]: Updating property general of configuration org.openhab.ebus caused a problem: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token

You mixed up binding 2.x and 1.x. Your configuration in 2.x format, but you use the 1.x binding. And you should use a different id than the reserved/build-in vrc430.

Mmmmh, I wasn’t aware the syntax being different for both version. thanks will post my specific issue with oh 2;x alpha binding on the other thread then.

1 Like