Ebus for "geoTHERM VWS 61/3 - 6,1 kW" with EBus Ethernet Adapter

Dear all,

I have an “Vaillant geoTHERM VWS 61/3 - 6,1 kW” heating system (Thermal heat pump, Wärmepumpe).

Reading the EBUS binding wiki, it seems that only “standard” heating systems are supported. Does any one have experience in using the binding with thermal heat pumps? There are a lot of parameters that do interest me:

normal heating related:

  • Temp heating water in/out
  • pressure heating water
  • Outside temp
  • On/Off times
  • setpoints

thermal heat pump related:

  • Temp heat source IN/OUT
  • pressure heat source
  • kompressor temps, pressures
  • energy harvested from heat source

Does anyone have experince with this? Is it possible to access this data?

I am planning to connect it to OPENHAB via the Ebus Ethernet Adapter. I am pretty sure it is compatible to the Ebus binding, but just to be on the safe side: can I easily use it for the binding?

Thanks,
Christian

Hello Christian,

as far as I know the telegrams of geoTherm systems are already known (ebusd configuration). So if it works we only need someone who translates the configuration from csv format to json format (not to complex).

I personally prefere the usb version, you have lower latency. That is important if you send telegrams to the bus. Vaillant needs polling, so you must write many telegrams to the bus.

Hey Csowada,

I am willing to contribute with the translation, afterall someone needs to do the work anyhow, right :smile:?

I was planning on using the ethernet type, since my cellar room consists of the server rack and all heating equipment. Going from one to the other, I have to cover roughly 10 meters, which seems a bit long for USB. It would be fairly easy to just route another network cable. Will the latency only result in lower polling frequency or will it also introduce higher OPENHAB server CPU load due to waiting? I could live with the first, but I would hate the second…

Thanks,
Christian

The main problem of latency if the collision detection. You have to write a byte and directly read the result, but the roundtrip could be to long, so another device starts to send a new telegram. So you need more tries to successfully send a telegram on higher bus traffic.

To your question, yes in theory this cause more CPU load, but not measurable. And maybe yes, you should not stress the the binding because of the retries. But I personally think both problems are more theoretical.

Btw: You can also send the eBUS signal over your ethernet cable to bring it closer to your hardware. The eBUS protocol allows longer distances. (See Chapter 10 in Protocol Specification 1.3.1) I do the same for a distance of 5m.

Hey csowada,

Good point. I could hook up the USB converter directly to the OPENHAB server and let the EBUS travel to the heater. less data speed, more data safety.

Thanks, I will buy the hardware and try my best :smile:

Christian

update: hardware is installed and wired. Data LED is blinking: so far so good.

I installed the EBUS addon and it could not recognize the commands. I went one step back and installed the ebusd, since it has “autoconfigfinding” and viola! there it found my heat pump and shows me a lot of traffic and sometimes usefull data.
So the next step is to translage the .csv files ebusd found to be fitting into EBUS addon JSON files. I am willing to translate the whole truckload of commands, but I would need a short boost. I found this link describing the needs for the openhab ebus addon json file and I have a csv file.
Which fields of the csv do I need to put where in the JSON file?
And is there any way of injecting this config file into OPENHAB without restarting the service?

Thanks,
Christian

Hi Christian,

i have the same hardware configuration and already spent some hours trying to understand the structure of ebusd csv files and json files of openhab binding. For the moment, i did not yet translate anything because still some issues remain, for example with data types and positions of values in json file. It was helpful to compare existing json translations of csv files, like the bai00. Besides of the 08.ehp csv file to whom you link, ebusd chose some more csv files for me: 15.uih.csv, 23.ehp.cc.csv, 25.ehp.hwc.csv and 50.ehp.mc.csv. But i’m not sure if some of these are related to hardware components that are not present in your system.

Matthias

hey Matthias,

yes, some more were choosen, I was not listing those, because if I learn how to translate one, I can translate all. Although some of the files may not apply for me, f.ex. I do not have a heat exchanger for warm water.

Were you able to get OPENHAb to understand basic information or are you also stuck at ebusd?

Christian

Hi Christian,

i did not use openhab yet, so no idea if there will be any further obstacles after translation.

Matthias

Hi Christian,

this could help you

Hey csowada,

it indeed helped me :slight_smile: So everything is connected, I have a simple JSON file that reads two parameters and puts them into items. So far so good.:+1:

My next step is to understand data types and position of the value in the command (the “pos” in JSON). I did not found a table of which datatype is how long and how some of the datatypes are translated. As soon as the template file states the ebusd datatype and translates it to the raw one “D2C” I can use your translation matrix but sometimes this does not work.

For example: The file 08.ehp.csv states that command “Sourcetempinput” has the data type “tempsensor”.
In the template.csv I do not find it. There is temp0, temp1, temp2, … mostly with different data types. So I am up to guessing the datatype and hope for the best.

Since its always a restart of OPENHAB to load the new JSON file, it is a bit frustrating. Don’t get me wrong here: I do not want to whine, its great that its working and at the end so easy to gather this data. But maybe there is some enlightenment that could easy the process for me a little bit…

Thanks,
Christian

Hi Christian,

a bit late, but if your problem still persists: temsensor is a composed datatype, that means 2 values - one of type temp and one of type sensor. temp is D2C (in the general templates.csv) and sensor is UCH (in the vaillant specific templates file). In some of theexisting json files, you see how to deal with composed data types.

PS: i still did not have time to create my own json and im a newbie with openhab.

Matthias

Hey Matthias,

so here is what I did so far:

create the file “ebus-config.json” in …runtime/configuration

contents:


[
{
“comment”: “HeatSource->Heater”,
“device”: “VWP”,

"id": "HeatSource",
"class": "controller",

"command": "B5 09",
"data": "(0D) 0F 00",

"values":   {
    "temp1": {"type": "data2c", "pos": 1, "label": "SourceTemperature"},
    "temp2": {"type": "data2c", "pos": 2, "label": "SourceTemperature"},
    "temp3": {"type": "data2c", "pos": 3, "label": "SourceTemperature"},
    "temp4": {"type": "data2c", "pos": 4, "label": "SourceTemperature"},
    "temp5": {"type": "data2c", "pos": 5, "label": "SourceTemperature"},
    "temp6": {"type": "data2c", "pos": 6, "label": "SourceTemperature"},
    "temp7": {"type": "data2c", "pos": 7, "label": "SourceTemperature"},
    "temp8": {"type": "data2c", "pos": 8, "label": "SourceTemperature"},
    "temp9": {"type": "data2c", "pos": 9, "label": "SourceTemperature"},
    "temp10": {"type": "data2c", "pos": 10, "label": "SourceTemperature"},
    "temp11": {"type": "data2c", "pos": 11, "label": "SourceTemperature"},
    "temp12": {"type": "data2c", "pos": 12, "label": "SourceTemperature"},
    "temp13": {"type": "data2c", "pos": 13, "label": "SourceTemperature"},
    "temp14": {"type": "data2c", "pos": 14, "label": "SourceTemperature"}        
            }
},
{
"comment": "OutsideTemperature",
"device": "VWP",

"id": "TempOut",
"class": "controller",

"command": "B5 09",
"data": "(0D) 06 00",

"values":   {
    "temp1": {"type": "data2c", "pos": 1, "label": "SourceTemperature"},
    "temp2": {"type": "data2c", "pos": 2, "label": "SourceTemperature"},
    "temp3": {"type": "data2c", "pos": 3, "label": "SourceTemperature"},
    "temp4": {"type": "data2c", "pos": 4, "label": "SourceTemperature"},
    "temp5": {"type": "data2c", "pos": 5, "label": "SourceTemperature"},
    "temp6": {"type": "data2c", "pos": 6, "label": "SourceTemperature"},
    "temp7": {"type": "data2c", "pos": 7, "label": "SourceTemperature"},
    "temp8": {"type": "data2c", "pos": 8, "label": "SourceTemperature"},
    "temp9": {"type": "data2c", "pos": 9, "label": "SourceTemperature"},
    "temp10": {"type": "data2c", "pos": 10, "label": "SourceTemperature"},
    "temp11": {"type": "data2c", "pos": 11, "label": "SourceTemperature"},
    "temp12": {"type": "data2c", "pos": 12, "label": "SourceTemperature"},
    "temp13": {"type": "data2c", "pos": 13, "label": "SourceTemperature"},
    "temp14": {"type": "data2c", "pos": 14, "label": "SourceTemperature"}        
            }
},      
{
"comment": "HeatSinkTemperatur",
"device": "VWP",

"id": "HeatSink",
"class": "controller",

"command": "B5 09",
"data": "(0D) 03 00",

"values":   {
    "temp1": {"type": "data2c", "pos": 1, "label": "SourceTemperature"},
    "temp2": {"type": "data2c", "pos": 2, "label": "SourceTemperature"},
    "temp3": {"type": "data2c", "pos": 3, "label": "SourceTemperature"},
    "temp4": {"type": "data2c", "pos": 4, "label": "SourceTemperature"},
    "temp5": {"type": "data2c", "pos": 5, "label": "SourceTemperature"},
    "temp6": {"type": "data2c", "pos": 6, "label": "SourceTemperature"},
    "temp7": {"type": "data2c", "pos": 7, "label": "SourceTemperature"},
    "temp8": {"type": "data2c", "pos": 8, "label": "SourceTemperature"},
    "temp9": {"type": "data2c", "pos": 9, "label": "SourceTemperature"},
    "temp10": {"type": "data2c", "pos": 10, "label": "SourceTemperature"},
    "temp11": {"type": "data2c", "pos": 11, "label": "SourceTemperature"},
    "temp12": {"type": "data2c", "pos": 12, "label": "SourceTemperature"},
    "temp13": {"type": "data2c", "pos": 13, "label": "SourceTemperature"},
    "temp14": {"type": "data2c", "pos": 14, "label": "SourceTemperature"}        
            }
}      

]


Create an Item file with the content:


Group HeatingUnit “EBUS Vaillant” <it_network> (Clients)

Number Quellentemperaturaa “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp1”}
Number Quellentemperaturaas “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp2”}
Number Quellentemperaturad “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp3”}
Number Quellentemperaturaf “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp4”}
Number Quellentemperatura “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp5”}
Number Quellentemperaturs “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp6”}
Number Quellentemperaturd “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp7”}
Number Quellentemperaturf “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp8”}
Number Quellentemperatugg “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp9”}
Number Quellentemperaturh “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp10”}
Number Quellentemperaturj “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp11”}
Number Quellentemperaturk “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp12”}
Number Quellentemperaturl “Quelle -> WP [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSource.temp13”}
Number Quellentemperaturq “Quelle -> WP [%.2f °C]” (HeatingUnit,WP_persistance) { ebus=“id:controller.HeatSource.temp14”}

Number Quellentemperaturay “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp1”}
Number Quellentemperaturax “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp2”}
Number Quellentemperaturac “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp3”}
Number Quellentemperaturav “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp4”}
Number Quellentemperatury “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp5”}
Number Quellentemperaturx “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp6”}
Number Quellentemperaturc “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp7”}
Number Quellentemperaturv “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp8”}
Number Quellentemperaturb “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp9”}
Number Quellentemperaturn “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp10”}
Number Quellentemperaturm “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp11”}
Number Quellentemperatur1 “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp12”}
Number Quellentemperatur2 “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp13”}
Number Quellentemperatur3 “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.TempOut.temp14”}

Number Quellentemperaturssy “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp5”}
Number Quellentemperaturssx “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp6”}
Number Quellentemperaturssc “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp7”}
Number Quellentemperaturssv “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp8”}
Number Quellentemperatursy “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp5”}
Number Quellentemperatursx “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp6”}
Number Quellentemperatursc “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp7”}
Number Quellentemperatursv “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp8”}
Number Quellentemperatursb “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp9”}
Number Quellentemperatursn “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp10”}
Number Quellentemperatursm “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp11”}
Number Quellentemperaturs1 “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp12”}
Number Quellentemperaturs2 “Temp Bodenheizung [%.2f °C]” (HeatingUnit) { ebus=“id:controller.HeatSink.temp13”}
Number Quellentemperaturs3 “Temp Bodenheizung [%.2f °C]” (HeatingUnit,WP_persistance) { ebus=“id:controller.HeatSink.temp14”}


Edit the openhab.cfg at the EBUS part:


ebus:serialPort=/dev/ttyUSB0
ebus:parserUrl=platform:/base/…/configurations/ebus-config.json
ebus:parsers=custom

With these settings, I can read the data from the heating unit. I did the redundant stuff to see which position corrosponds with the real data.

One extremly helpful tip is to install the EBUSd and run it to see which data can be read and how it should look like. Then the rest is a bit easier…

Disclaimer:

the above mentioned is obviously WIP and not complete. Once I have a shiny polished file set, I will share it …
HTH,
Christian

Hi Christian,
I am looking for doing the same with my geotherm vws 101/3 (same type as 61/3). I just wanted to know if you have achieved setting all up. Can you also control the heat pump (temperature., etc… ) ? I would appreciate if you would provide some advices.
thanks
Cheers
Xavier