Hey,
just wanted to share how I managed to control my vaillant heating.
All I was knowing is, that my roomthermostat communicates via a bus called “ebus” with the main heating system.
After some research I found this shop with ready2use adapters. (75- 140€).
If it should be cheaper, this post in a german forum is the right point to start with building a adapter by yourself. There is a complete parts list (reichelt) and a lot helpfully infos.
The costs amount for all parts with hosing is less than 20€
On the software side I use ebusd by john30
https://github.com/john30
wiki with infos how to insall and how to use
https://github.com/john30/ebusd/wiki
Now I am able to see what is going on inside the heating and also to send commands by pimatic.
- 1 is a ShellPresenceSensor to show ebusd service presence. When pimatic restarts the ebusd doesn`t work any more. I use some rules to kill and start it again.
{
"id": "ebusd_presence",
"name": "ebusd",
"class": "ShellPresenceSensor",
"interval": 10000,
"command": "pgrep ebusd >/dev/null && echo 1 || echo 0"
}
rules:
if pimatic is starting then execute \"sudo service ebusd stop\" and after 5 seconds execute \"sudo killall ebusd\" and after 7 seconds execute \"sudo killall ebusctl\"
if ebusd_presence is absent for 10 seconds then execute \"sudo ebusd -c /etc/ebusd -d /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AI03U6OL-if00-port0\"
- 2 is a ShellPresenceSensor to show flame presence
{
"id": "vaillant_flame_presence",
"name": "Flamme",
"class": "ShellPresenceSensor",
"interval": 10000,
"command": "ebusctl read sdflame | head -1 | sed 's/on/1/g' | sed 's/off/0/g'"
},
- 3 and **4 **are VariablesDevices. 1-3x in the week the “ebusctl read” gets wrong values for the roomtemperature ( over 1000°C or -150°C) and the graph looks very ugly. To prevent that I use the pimatic-filter-plugin, which does a great job.
{
"id": "vaillant_info",
"name": "Info",
"class": "VariablesDevice",
"variables": [
{
"name": "Wohnzimmer_soll",
"expression": "$vaillant-heating.temperatureSetpoint",
"type": "number",
"unit": "°C",
"label": "Wohnzimmer-Soll",
"acronym": "WZsoll"
},
{
"name": "Wohnzimmer_ist",
"expression": "$filter2-raum.temperature",
"type": "number",
"unit": "°C",
"label": "Wohnzimmer-Ist",
"acronym": "WZist"
},
{
"name": "WW Solltemperatur",
"expression": "$vaillant-warmwasser.temperatureSetpoint",
"type": "number",
"unit": "°C",
"label": "WW-Soll",
"acronym": "WWsoll"
},
{
"name": "WW Speicher",
"expression": "$filter2-speicher.temperature",
"type": "number",
"unit": "°C",
"label": "Speicher-Ist",
"acronym": "WWist"
}
]
},
{
"id": "vaillant_raum_temp",
"name": "Wohnzimmer Raumtemperatur",
"xBoostLabel": "Off",
"class": "ShellSensor",
"attributeName": "vaillant_room_temp",
"attributeType": "number",
"attributeUnit": "°C",
"interval": 300000,
"command": "ebusctl read DisplayedRoomTemp"
},
{
"class": "SimpleTruncatedMeanFilter",
"id": "filter2-raum",
"name": "Raum-f2",
"size": 5,
"output": {
"name": "temperature",
"label": "Raum",
"expression": "$vaillant_raum_temp.vaillant_room_temp",
"acronym": "T",
"type": "number",
"unit": "°C"
}
},
- 5 and 6 are Shellswitches for turn on/off heating and warm water
{
"id": "vaillant_heizung",
"name": "Vaillant Heizung",
"class": "ShellSwitch",
"onCommand": "ebusctl write -c 430 Hc1OPMode manual >/dev/null 2>&1",
"offCommand": "ebusctl write -c 430 Hc1OPMode off >/dev/null 2>&1"
},
{
"id": "vaillant_warmwasser",
"name": "Vaillant Warmwasser",
"class": "ShellSwitch",
"onCommand": "ebusctl write -c 430 HwcOPMode manual >/dev/null 2>&1",
"offCommand": "ebusctl write -c 430 HwcOPMode off >/dev/null 2>&1"
},
- 7 and 8 are DummyHeatingThermostats for changing the mode and the SetPoint temperature.
{
"class": "DummyHeatingThermostat",
"id": "vaillant-heating",
"name": "Heizkreislauf",
"comfyTemp": 21,
"ecoTemp": 17,
"guiShowModeControl": true,
"guiShowPresetControl": true
},
{
"class": "DummyHeatingThermostat",
"id": "vaillant-warmwasser",
"name": "Warmwasser",
"comfyTemp": 55,
"ecoTemp": 45,
"guiShowModeControl": true,
"guiShowPresetControl": true,
"guiShowTemperatueInput": true
},
rules:
if $start = 1 and $vaillant-heating.temperatureSetpoint changes then execute \"ebusctl write -c 430 Hc1ManualOPRoomTempDesired\t$vaillant-heating.temperatureSetpoint\"
if $start = 1 and $vaillant-heating.mode changes and $vaillant-heating.mode = \"auto\" then execute \"ebusctl write -c 430 Hc1OPMode auto\"
if $start = 1 and $vaillant-heating.mode changes and $vaillant-heating.mode = \"manu\" then execute \"ebusctl write -c 430 Hc1OPMode manual\"
- 9 are ButtonDevices to turn on warm water for 30 minutes and set the temperture to 45°C or 55°C.
{
"id": "vaillant-buttons",
"name": "Vaillant",
"class": "ButtonsDevice",
"buttons": [
{
"id": "vaillant-baden",
"text": "Baden 55°"
},
{
"id": "vaillant-duschen",
"text": "Duschen 45°"
}
]
},
rules:
if its 6:15 then press vaillant-duschen
if $start = 1 and vaillant-duschen is pressed then execute \"ebusctl write -c 430 HwcManualOPTempDesired 45\" and turn vaillant_warmwasser on for 30 minutes and set $vaillant_warmwasser_soll = 45
if $start = 1 and vaillant-baden is pressed then execute \"ebusctl write -c 430 HwcManualOPTempDesired 55\" and turn vaillant_warmwasser on for 30 minutes and set $vaillant_warmwasser_soll = 55 and after 31 minutes execute \"ebusctl write -c 430 HwcManualOPTempDesired 45\" and after 30 minutes set $vaillant_warmwasser_soll = 45
Have fun
magic-tune