Vaillant eBUS hardware adapter (ebusd software) Thread

See I know there are guides, but none are step by step for the setup I’m using. I’m not a computer programmer, I’m a gas/f-gas engineer, so its like a foreign language.

I can format and SD card with a clone of RPi OS or Homeassistant, I thing I could get ebus d dowloaded but I’d need a walk through of exactly what to do and what to set

Yes it’s all a bit tricky. I think having a script you can run that gets you 99% of the way would be best. This we we could also help all newcomers better sice we know all prerequisite steps are done the same way. I’ll look into putting something together.

1 Like

Glyn wrote a few simple bits here earlier in the thread

2 Likes

Well, that about covers it. :slight_smile:

To populate emonSD were i had BIG issues with auto populate a full Reboot or better still switch Off/On,

Has anyone done any ebus automations within Home Assistant?

I’m wondering if we could poke the WC curve depending on the outside temperature?

ie,

  • Less than 4C outside - set WC curve to 0.5
  • More than 4C outside - set WC curve to 0.4

Is it possible to poke values into the heat curve through Home Assistant?

ie
ebusctl write -c basv Hc1HeatCurve 0.5

Note: I don’t want to do this directly in mqtt. Just through Home Assistant.

I use Node-RED in the middle (running as HA addon) to modify DHW modes between Eco, Normal and Balance. Would that be acceptable?

Yes, to change the WC curve on my hydrid system when the Gaz boiler kicks in when TRIVAI decide Gaz is costing less, I have to do this becaus emy gaz boiler is an ecotec Pro and can’t modulate so low, 0.5 is a good compromise, only starts when under -5° or so , it helps to reduce the cycling of that boiler.

  • Heatpump : set to 0.25
  • Gaz Boiler : set to 0.5

Also have set automation to switch the Thermostat State from Inactive to Active when we have lot of sun, based on solar production , we have huge windows full south and inside temperature raise fast. and even to expanded when average inside temp is +2° desired temp.
Back to Active when dropping to +1° and/or inactive when solar is not producing , with timeout

1 Like

That sounds great @Ulric , are you able to post a screen grab of what one of the automations looks like please?

Or the YAML?

sure , I’m using a helper that I MQTT publish when it change of value


alias: "If TRIVAI set Heat Curve "
description: ""
triggers:
  - trigger: numeric_state
    entity_id:
      - sensor.flow_rate
    below: 650
    for:
      hours: 0
      minutes: 0
      seconds: 15
conditions:
  - condition: numeric_state
    entity_id: sensor.chaudiere_consommation_actuelle #gaz boiler consumption in W
    above: 75
actions:
  - action: input_number.set_value
    metadata: {}
    data:
      value: 0.5
    target:
      entity_id: input_number.set_heat_curve
  - action: input_boolean.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: input_boolean.trivai
mode: single
alias: "If TRIVAI OFF set Heat Curve "
description: ""
triggers:
  - trigger: numeric_state
    entity_id:
      - sensor.flow_rate
    above: 700
    for:
      hours: 0
      minutes: 0
      seconds: 30
  conditions:
  - condition: state
    entity_id: input_boolean.trivai
    state: "on"
actions:
  - action: input_number.set_value
    metadata: {}
    data:
      value: 0.25
    target:
      entity_id: input_number.set_heat_curve
  - action: input_boolean.turn_off
    metadata: {}
    data: {}
    target:
      entity_id: input_boolean.trivai
  - delay:
      hours: 0
      minutes: 1
      seconds: 0
  - action: automation.trigger
    metadata: {}
    data:
      skip_condition: true
    target:
      entity_id: automation.refresh_ebusd_v32_10_sec
mode: single
alias: Set New Heat Curve
description: ""
triggers:
  - trigger: state
    entity_id:
      - input_number.set_heat_curve
conditions: []
actions:
  - data:
      qos: "0"
      retain: false
      payload: "{{ states('input_number.set_heat_curve') | float}}"
      topic: ebusd/b7v/Hc1HeatCurve/set
    action: mqtt.publish
mode: single
3 Likes

Ok folks, getting somewhere, the adaptor is finally detecting eBUS. How do I get it to list what sensors it can see and querey them? I’ll be looking to monitor as much of the refrigerant temperature sensors, compressor speed etc that I can. Ideally indoor and outdoor temps as well.

I’ve pasted below what i can see so far.

john@HA1:~ $ ebusctl scan
done

john@HA1:~ $ ebusctl monitor
ERR: command not found

john@HA1:~ $ ebusctl scan result
08;Vaillant;HMU00;0902;5103
15;Vaillant;72000;0122;7703
76;Vaillant;VWZIO;0202;0103
f6;Vaillant;NETX3;0124;0404

john@HA1:~ $ ebusctl info
version: ebusd 24.1.24.1
update check: OK
device: /dev/ttyAMA0, serial high speed, enhanced
signal: acquired
symbol rate: 123
max symbol rate: 250
min arbitration micros: 1
max arbitration micros: 13
min symbol latency: 4
max symbol latency: 6
scan: finished
reconnects: 0
masters: 5
messages: 4
conditional: 0
poll: 0
update: 0
address 03: master #11
address 08: slave #11, scanned “MF=Vaillant;ID=HMU00;SW=0902;HW=5103”
address 10: master #2
address 15: slave #2, scanned “MF=Vaillant;ID=72000;SW=0122;HW=7703”
address 31: master #8, ebusd
address 36: slave #8, ebusd, scanning
address 71: master #9
address 76: slave #9, scanned “MF=Vaillant;ID=VWZIO;SW=0202;HW=0103”
address f1: master #10
address f6: slave #10, scanned “MF=Vaillant;ID=NETX3;SW=0124;HW=0404”

We really do need a FAQ for this!! :laughing:

ebusctl find

Shows all known values within the config files you are using (note: this is important to remember) as the default config files don’t always shows all the items we are interested in.

This is why many of us run the Jones config files, you will need to download them to a directory on your ebus machine.

Modify the main ebusd config file (/etc/default/ebusd) to point to jones files and enable home assistant (if required) and directing about to your MQTT server.

(snippet from config file)

#jones files read only

EBUSD_OPTS=“–scanconfig=full --configpath=/home/mick/jones/ebusd-configuration/ebusd-2.1.x/en -d ens:/dev/ttyAMA0 --latency=60 --loglevel=debug --mqtthost=carbone.lan --mqttport=1883 --mqttint=/etc/ebusd/mqtt-hassio.cfg --mqttjson --mqttvar=filter-direction=r”

Use grep to filter than big “info” list

mick@ebusd:~ $ ebusctl find | grep Cop

hmu CopCooling = no data stored
hmu CopCoolingMonth = no data stored
hmu CopHc = 3.8
hmu CopHcMonth = 3.8
hmu CopHwc = 3.7
hmu CopHwcMonth = 3.3

mick@ebusd:~ $

Read individual value

mick@ebusd: ~ $ ebusctl r -f CopHcMonth

Write back value

mick@ebusd:~ $ ebusctl write -c basv Hc1HeatCurve 0.475

If using Home Assistant you also have to ensure you’re allowing keywords to go across from mqtt to HA

The standard default “filter-name” setting doesn’t allow all the juicy stuff across into HA!

Home Assisstant Config File

/etc/ebusd/mqtt-hassio.cfg

These are the lines you need to ensure are us you want them. These are mine.

Filter-seen = 1

filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer|cop|compressor|through|pressure|integral

Whenever you make a change to the config file you need to restart ebusd

sudo systemctl restart ebusd.service

3 Likes

Hey Mick, Thanks very much, I’m so close to getting it going.

I can use the commands you gave to see the likes of compressor inlet temp etc, Its broadcasting via MQTT to my PI with HA on it, but its not broadcasting half the good info.

When I search the mqtt-hassio.cfg file I can see 3 instances of Filter-seen and set it to 1, it already had filter-name= all the things you said.

I’ve no idea what to do in the file though to get that to work?? I copied and pasted your exact stuff and inserted it into the end of the file as well but made no difference but I don’t know if thats where its meant to be!

Thanks again, its so close!!!

As an update, I’ve found the 08.HMU CSV and changed r to r1 infront of the components I want to see.

I’ve also changed the filter in the hassio.cfg file to .* so it shouldn’t filter anything.

When listening to the incoming stream on HA I’m occasionally seeing the sensors I was after and manually adding them to configuration.yaml as below

mqtt:
  sensor:
    - name: "V System Pressure"
      state_topic: "ebusd/hmu/State07"
      value_template: "{{ value_json.DisplaySystemPressure.value }}"
      unit_of_measurement: "bar"
      icon: "mdi:gauge"

    - name: "V Compressor Modulation"
      state_topic: "ebusd/hmu/State00"
      value_template: "{{ value_json.S00_CompressorModulation.value }}"
      unit_of_measurement: "%"
      icon: "mdi:gauge"

    - name: "V Outdoor Temperature"
      state_topic: "ebusd/broadcast/OutsideTemp"
      value_template: "{{ value_json.temp2.value }}"
      unit_of_measurement: "°C"
      icon: "mdi:gauge"

    - name: "V Flow Temperature"
      state_topic: "ebusd/hmu/State00"
      value_template: "{{ value_json.S00_SupplyTemp.value }}"
      unit_of_measurement: "°C"
      icon: "mdi:gauge"

    - name: "V Target Flow Temperature"
      state_topic: "ebusd/hmu/SetMode"
      value_template: "{{ value_json.flowtempdesired.value }}"
      unit_of_measurement: "°C"
      icon: "mdi:gauge"

    - name: "V Compressor Outlet Temperature"
      state_topic: "ebusd/hmu/CompressorOutletTemp"
      value_template: "{{ value_json.temps2.value }}"
      unit_of_measurement: "°C"
      icon: "mdi:gauge"

    - name: "V Air Inlet Temperature"
      state_topic: "ebusd/hmu/AirInletTemp"
      value_template: "{{ value_json.temps2.value }}"
      unit_of_measurement: "°C"
      icon: "mdi:gauge"

Looks like I’ll need to keep listening for a while so that I can find out the state topic and value template lines to keep adding to the yaml. But looks like its starting to work!!!

[Edited for presentation - Moderator (RW)

When posting code or output, please put 3 ‘backticks’ (normally found at the top left of the keyboard) on a line of their own before the code, and 3 more backticks also on a line of their own after the code:

```
code
```

If it is something like php you can add a language identifier after the first 3 backticks: ```php or even ```text if you don’t want any language markup applied.

Is there anyway to make ebusd force poll more regularly?

I’ve added r1 in front on the values I want on 08.HMU.CSV, considering adding # infront of the ones I don’t want essentially removing that line from the CSV file to make sure its not regularly polling for data I’m not interested in.

However some things seem to come through to my HA for logging at different rates, i.e outdoor temperature seems to be every minute, but current subcooling value is 3-5 minutes.

ideally I want to get maybe 10 things at 30s intervals and the rest once a minute, right now I’d take everything once a min!

The only reliable way I know is to post a /get to the topic via MQTT regularly. So if you want ebusd/hmu/EnergyIntegral, post to /ebusd/hmu/EnergyIntegral/get and the value will be refreshed

1 Like

Is that something i could set up a script to do? I don’t know programing but could use chatGPT to write something that automatically posts something like:

/ebusd/hmu/EnergyIntegral/get
/ebusd/hmu/CompressorInletTemp/get
/ebusd/hmu/EEVOutletTemp/get

and set it to repeat that command once a minute?

You could have an automation within home assistant that does this. ChatGPT will give you a good start on that. If it doesn’t work just post your attempts here so we can have a look. But generally ChatGPT has been excellent in writing simple automations for me.

1 Like

Easiest way if you don’t wanna delve into MQTT is to create a simple script and call that via cron ( the unix scheduler)

create a new shell script file using

nano pull_ebus_values.sh

Put the following into the script (or whatever values you want to pull)

#!/bin/bash

ebusctl r -f -c hmu EnergyIntegral
ebusctl r -f -c hmu CompressorSpeed
#ebusctl r -f -c hmu CompressorUtilization
ebusctl r -f -c basv z1roomtemp
ebusctl r -f -c basv z1ActualRoomTempDesired
ebusctl r -f -c hmu waterthroughput
ebusctl r -f -c hmu currentconsumedpower
ebusctl r -f -c hmu currentyieldpower
#ebusctl r -f -c hmu BuildingCircuitPumpPower
ebusctl r -f -c basv Hc1ActualFlowTempDesired
ebusctl r -f -c hmu FlowTemp
ebusctl r -f -c hmu ReturnTemp

Save that file (ctrl-X, then Y to save)

chmod +x pull_ebus_values.sh
to make it executable

Run the following to edit the system cron file for your user

crontab -e

Put the following line at the bottom of the file, then save the file (ctrl-x, y again, assuming you’re using nano editor)

* * * * * /home/mick/pull_ebus_values.sh

You can do crontab -l to ensure its saved
Obviously ensure you have the full unix path to your file (recommend putting the shell script in your home directory) - so change the filepath from /home/mick to wherever your file lives.

Once saved, cron will call that file and issue the ebusctl calls every minute

The stars can be used to specify various time frames (by using numbers), but all stars is every minute

1 Like

Isn’t there a chmod +x missing to make the file executable or doesn’t cron need that?

Can you do sub-minute resolution with cron?

2 Likes