An ebusd add-on

looks like the device config is wrong and ebusd can not connect to the adapter
“Device invalid, unable to open /dev/ttyAMA0”

try connecting to the usb adapter with a different machine first and if you get it to work try with the addon.

HI @pieterb26 looks like ebusd is connecting to the adapter ok, but the adapter is not coupled correctly with the bus?
try the john30/ebusd · Discussions · GitHub for debugging help

Anything on HA which allows for doing that via the Raspberry?

Or can I connect via USB from my laptop and use a terminal?

But how ? Can you explaine me more ?

I think I made it a bit further. I connected the adapter via USB to my laptop and double checksed the settings. Here they are:

That status page

Bus acquired is nice for a start but not connected. What do these to messages mean?

ebusd seems to start and reported some messages on the ebus. I didn’t grab the log screen at that time, though. Later I get the same error messages as before:

I think I set the ebusd to read-only to not mess with the ebus. Is this causing the error or is something else wrong?

Mosquitto reports a connection to ebusd:

Does that mean my basic setup works?

I just realized that it is "ebusd connected: no. That makes sense since I got that with the adapter connected via USB to my laptop. No ebusd running on HA, that the adapter could connect to, available.

Hey i try to set up my Brink Allure Heating system.

i have a connection but i think my Config isnt working. I didnt set up a manual config because i dont know how. This are the Massages in Log.

It’s working now.
I made a mistake with the jumpers on J12.

Is there a way to control the extra heater? “Aux. heater output” (off, Stage 1, Stage 2, Stage 3 Stage 3)?
I don’t see that?

Thanks in Advance:

climate:
      object_id: Vailant01
      name: Zierow
      max_temp: 26
      min_temp: 10
      precision: 0.1
      temp_step: 0.5

      action_topic: "ebusd/mc/Mode"
      action_template: "{{ (value_json['1'].value) }}"
      modes:
        - auto
        - heat
        - cool
        - "off"
        
      swing_modes:
        - "auto"
        - "on"
        - "off"
    
      swing_mode_state_template: >-
        {% set mode_values = { 'auto':'auto', 'on':'on', 'off':'off'} %}
        {{ mode_values[value_json.hwcmode.value] }}
      swing_mode_state_topic: "ebusd/hwc/OperatingMode"
      swing_mode_command_template: >-
        {% set values = { 'auto':'auto', 'on':'on', 'off':'off'} %}
        {{ values[value] | default('auto') }}
      swing_mode_command_topic: "ebusd/hwc/OperatingMode/set"
      
      mode_state_template: >-
        {% set mode_values = { 'eco':'auto', 'on':'heat', 'low':'cool', 'off':'off'} %}
        {{ mode_values[value_json.mcmode.value] | default('off') }}
      mode_state_topic: "ebusd/mc/OperatingMode"
      mode_command_template: >-
        {% set values = { 'auto':'eco', 'heat':'on', 'cool':'low', 'off':'off'} %}
        {{ values [value] | default('eco') }}
      mode_command_topic: "ebusd/mc/OperatingMode/set"
      
      value_template: "{{ value_json.temp1.value }}"
      #temperature_state_template: "{{ value_json.temp.value }}"
      #temperature_state_topic: "ebusd/ehp/OutsideTemp"
      temperature_low_state_topic: "ebusd/mc/TempDesiredLow"
      temperature_high_state_topic: "ebusd/mc/TempDesired"

      #temperature_command_template: "{{ value_json.temp1.value }}"
      temperature_low_command_topic: "ebusd/mc/TempDesiredLow/set"
      temperature_high_command_topic: "ebusd/mc/TempDesired/set"
      current_temperature_topic: "ebusd/ehp/OutsideTemp"
      current_temperature_template: "{{ value_json.temp.value }}"

Thanks for the reply. I don’t know, I just can’t handle it.

  climate:
    object_id: Vailant
    name: Test
    max_temp: 26
    min_temp: 10
    precision: 0.1
    temp_step: 0.5

    action_topic: "ebusd/bai/SetMode"
    action_template: "{{ (value_json['1'].value) }}"
    modes:
      - auto
      - heat
      - cool
      - "off"

    swing_modes:
      - "auto"
      - "on"
      - "off"

    swing_mode_state_template: >-
      {% set mode_values = { 'auto':'auto', 'on':'on', 'off':'off'} %}
      {{ mode_values[value_json.hwcmode.value] }}
    swing_mode_state_topic: "ebusd/720/OperatingMode"
    swing_mode_command_template: >-
      {% set values = { 'auto':'auto', 'on':'on', 'off':'off'} %}
      {{ values[value] | default('auto') }}
    swing_mode_command_topic: "ebusd/bai/SetMode/set"

    mode_state_template: >-
      {% set mode_values = { 'eco':'auto', 'on':'heat', 'low':'cool', 'off':'off'} %}
      {{ mode_values[value_json.mcmode.value] | default('off') }}
    mode_state_topic: "ebusd/bai/SetMode"
    mode_command_template: >-
      {% set values = { 'auto':'eco', 'heat':'on', 'cool':'low', 'off':'off'} %}
      {{ values [value] | default('eco') }}
    mode_command_topic: "ebusd/bai/SetMode/set"

    value_template: "{{ value_json.temp1.value }}"
    #temperature_state_template: "{{ value_json.temp.value }}"
    #temperature_state_topic: "ebusd/ehp/OutsideTemp"
    temperature_low_state_topic: "ebusd/720/TempDesiredLow"
    temperature_high_state_topic: "ebusd/720/TempDesired"

    #temperature_command_template: "{{ value_json.temp1.value }}"
    temperature_low_command_topic: "ebusd/720/TempDesiredLow/set"
    temperature_high_command_topic: "ebusd/720/TempDesired/set"
    current_temperature_topic: "ebusd/broadcast/outsidetemp"
    current_temperature_template: "{{ value_json.temp.value }}"

The whole time I have something like this:

These are the data I receive from ebusd:

ebusd
global
version = "ebusd 23.2.p20230716"
running = true
updatecheck = "revision 23.2 available"
scan = "finished"
signal = true
uptime = 253517
720
Hc1Status = { "0": {"name": "", "value": 1}}
Hc1SummerTempLimit = { "tempv": {"value": 21}}
Hc2ActualFlowTempDesired = { "tempv": {"value": 0.0}}
Hc2AutoOffMode = { "offmode": {"value": "eco"}}
Hc2ExcessTemp = { "calibrationv": {"value": 0.0}}
Hc2FlowTemp = { "tempv": {"value": null}}
Hc1PumpStatus = { "0": {"name": "", "value": 1}}
Hc2HeatCurve = { "0": {"name": "", "value": 1.2}}
z1OpMode = { "opmode": {"value": "day"}}
z1ActualRoomTempDesired = { "tempv": {"value": 20}}
Hc2HeatCurveAdaption = { "0": {"name": "", "value": 0.0}}
Hc2MaxFlowTempDesired = { "tempv": {"value": 90}}
Hc2MinFlowTempDesired = { "tempv": {"value": 15}}
Hc2PumpStatus = { "0": {"name": "", "value": 0}}
Hc2RoomTempSwitchOn = { "rcmode": {"value": "off"}}
Hc2SummerTempLimit = { "tempv": {"value": 21}}
Hc3ActualFlowTempDesired = { "tempv": {"value": 0.0}}
Hc3AutoOffMode = { "offmode": {"value": "eco"}}
Hc3ExcessTemp = { "calibrationv": {"value": 0.0}}
Hc3FlowTemp = { "tempv": {"value": null}}
Hc3HeatCurve = { "0": {"name": "", "value": 1.2}}
Hc3MaxFlowTempDesired = { "tempv": {"value": 90}}
Hc3MinFlowTempDesired = { "tempv": {"value": 15}}
Hc3RoomTempSwitchOn = { "rcmode": {"value": "off"}}
Hc3Status = { "0": {"name": "", "value": 0}}
Hc3SummerTempLimit = { "tempv": {"value": 21}}
HcStorageTempBottom = { "tempv": {"value": null}}
HcStorageTempTop = { "tempv": {"value": null}}
HwcOpMode = { "opmode": {"value": "day"}}
HwcTempDesired = { "tempv": {"value": 48}}
HwcStorageTemp = { "tempv": {"value": 47.5}}
Hc1FlowTemp = { "tempv": {"value": 25.5}}
z1RoomTemp = { "tempv": {"value": 24.225}}
WaterPressure = { "pressv": {"value": 1.5}}
SystemFlowTemp = { "tempv": {"value": null}}
DisplayedOutsideTemp = { "tempv": {"value": 14.75}}
HwcFlowTemp = { "tempv": {"value": 0.0}}
HwcMaxFlowTempDesired = { "tempv": {"value": 80}}
HwcSFMode = { "sfmode": {"value": "auto"}}
HwcStorageTempBottom = { "tempv": {"value": null}}
HwcStorageTempTop = { "tempv": {"value": null}}
OutsideTempAvg = { "tempv": {"value": 11}}
PrEnergySumHc = { "energy4": {"value": 323}}
PrEnergySumHcLastMonth = { "energy4": {"value": 2}}
PrEnergySumHcThisMonth = { "energy4": {"value": 11}}
PrEnergySumHwc = { "energy4": {"value": 63}}
PrEnergySumHwcLastMonth = { "energy4": {"value": 3}}
PrEnergySumHwcThisMonth = { "energy4": {"value": 5}}
SolarYieldTotal = { "energy4": {"value": 0}}
z1HolidayTemp = { "tempv": {"value": 15}}
z1NightTemp = { "tempv": {"value": 23.5}}
z1OpModeCooling = { "opmode": {"value": "auto"}}
z1QuickVetoTemp = { "tempv": {"value": 17}}
currenterror = { "0": {"name": "error", "value": null}, "1": {"name": "error", "value": null}, "2": {"name": "error", "value": null}, "3": {"name": "error", "value": null}, "4": {"name": "error", "value": null}}
z1SFMode = { "sfmode": {"value": "auto"}}
z2ActualRoomTempDesired = { "tempv": {"value": 0.0}}
z2CoolingTemp = { "tempv": {"value": 24}}
z2HolidayTemp = { "tempv": {"value": 15}}
z2NightTemp = { "tempv": {"value": 15}}
z2OpMode = { "opmode": {"value": "day"}}
z2OpModeCooling = { "opmode": {"value": "auto"}}
z2RoomTemp = { "tempv": {"value": null}}
z2SFMode = { "sfmode": {"value": "auto"}}
z2ValveStatus = { "0": {"name": "", "value": 0}}
z3ActualRoomTempDesired = { "tempv": {"value": 0.0}}
z3CoolingTemp = { "tempv": {"value": 24}}
z3HolidayTemp = { "tempv": {"value": 15}}
z3NightTemp = { "tempv": {"value": 15}}
z3OpMode = { "opmode": {"value": "auto"}}
z3OpModeCooling = { "opmode": {"value": "auto"}}
z3RoomTemp = { "tempv": {"value": null}}
z3SFMode = { "sfmode": {"value": "auto"}}
z3ValveStatus = { "0": {"name": "", "value": 0}}
AdaptHeatCurve = { "yesno": {"value": "yes"}}
Hc1ActualFlowTempDesired = { "tempv": {"value": 21}}
Hc1AutoOffMode = { "offmode": {"value": "eco"}}
Hc1ExcessTemp = { "calibrationv": {"value": 0.0}}
Hc1HeatCurve = { "0": {"name": "", "value": 1.2}}
Hc1HeatCurveAdaption = { "0": {"name": "", "value": 0.0}}
Hc1MaxFlowTempDesired = { "tempv": {"value": 30}}
Hc1MinFlowTempDesired = { "tempv": {"value": 15}}
Hc1RoomTempSwitchOn = { "rcmode": {"value": "modulating"}}
z3QuickVetoTemp = { "tempv": {"value": 21}}
Hc3HeatCurveAdaption = { "0": {"name": "", "value": 0.0}}
Hc3PumpStatus = { "0": {"name": "", "value": 0}}
z1CoolingTemp = { "tempv": {"value": 24}}
z1ValveStatus = { "0": {"name": "", "value": 1}}
YieldTotal = { "energy4": {"value": 0}}
z2QuickVetoTemp = { "tempv": {"value": 21}}
Hc2Status = { "0": {"name": "", "value": 0}}
bai
SetMode = { "hcmode": {"value": "auto"}, "flowtempdesired": {"value": 21.0}, "hwctempdesired": {"value": null}, "hwcflowtempdesired": {"value": null}, "disablehc": {"value": 0}, "disablehwctapping": {"value": 0}, "disablehwcload": {"value": 0}, "remoteControlHcPump": {"value": 0}, "releaseBackup": {"value": 0}, "releaseCooling": {"value": 0}}
Status01 = { "0": {"name": "temp1", "value": 25.5}, "1": {"name": "temp1", "value": 25.0}, "2": {"name": "temp2", "value": 14.750}, "3": {"name": "temp1", "value": null}, "4": {"name": "temp1", "value": 47.5}, "5": {"name": "pumpstate", "value": "off"}}
DateTime = { "dcfstate": {"value": "valid"}, "btime": {"value": "12:57:28"}, "bdate": {"value": "30.10.2023"}, "temp2": {"value": 14.750}}
Status02 = { "0": {"name": "hwcmode", "value": "auto"}, "1": {"name": "temp0", "value": 60}, "2": {"name": "temp1", "value": 40.0}, "3": {"name": "temp0", "value": 70}, "4": {"name": "temp1", "value": 60.0}}
StatusCirPump = { "0": {"name": "", "value": "on"}}
currenterror = { "0": {"name": "error", "value": null}, "1": {"name": "error", "value": null}, "2": {"name": "error", "value": null}, "3": {"name": "error", "value": null}, "4": {"name": "error", "value": null}}
CounterStartattempts1 = { "temp0": {"value": 12}}
CounterStartattempts2 = { "temp0": {"value": 7}}
CounterStartAttempts3 = { "temp0": {"value": 7}}
CounterStartAttempts4 = { "temp0": {"value": 7}}
DeactivationsTemplimiter = { "0": {"name": "", "value": 0}}
expertlevel_ReturnTemp = { "temp": {"value": -1.81}, "sensor": {"value": "cutoff"}}
FanHours = { "hoursum2": {"value": 3681}}
FanStarts = { "cntstarts2": {"value": 8797}}
FlowTemp = { "temp": {"value": 25.75}, "sensor": {"value": "ok"}}
FlowTempDesired = { "temp": {"value": 21.00}}
FlowTempMax = { "temp": {"value": 94.00}}
HcHours = { "hoursum2": {"value": 3071}}
HcPumpMode = { "0": {"name": "", "value": "post run"}}
HcPumpStarts = { "cntstarts2": {"value": 11801}}
HcStarts = { "0": {"name": "", "value": 2400}}
HcUnderHundredStarts = { "0": {"name": "", "value": 33}}
HoursTillService = { "hoursum2": {"value": 2}}
HwcHours = { "hoursum2": {"value": 548}}
HwcStarts = { "0": {"name": "", "value": 3100}}
HwcTemp = { "temp": {"value": 116.06}, "sensor": {"value": "circuit"}}
HwcTempDesired = { "temp": {"value": 0.00}}
HwcUnderHundredStarts = { "0": {"name": "", "value": 25}}
maintenancedata_HwcTempMax = { "temp": {"value": 116.06}}
ModulationTempDesired = { "0": {"name": "", "value": 0.0}}
OutdoorstempSensor = { "temp": {"value": 14.75}, "sensor": {"value": "ok"}}
OverflowCounter = { "yesno": {"value": "yes"}}
PumpHours = { "hoursum2": {"value": 4866}}
ReturnTemp = { "temp": {"value": 25.50}, "tempmirror": {"value": 65127}, "sensor": {"value": "ok"}}
ReturnTempMax = { "temp": {"value": 81.38}}
SecondPumpMode = { "0": {"name": "", "value": 0}}
SHEMaxFlowTemp = { "temp": {"value": 0.00}}
StorageLoadPumpHours = { "hoursum2": {"value": 718}}
StorageloadPumpStarts = { "cntstarts2": {"value": 4007}}
StorageTemp = { "temp": {"value": 47.75}, "sensor": {"value": "ok"}}
StorageTempDesired = { "temp": {"value": 48.00}}
StorageTempMax = { "temp": {"value": 71.25}}
TempDiffBlock = { "temp0": {"value": 0}}
TempDiffFailure = { "temp0": {"value": 0}}
TempGradientFailure = { "temp0": {"value": 0}}
Templimiter = { "0": {"name": "", "value": "off"}}
TemplimiterWithNTC = { "0": {"name": "", "value": "yes"}}
ValveMode = { "0": {"name": "", "value": 202}}
ValveStarts = { "cntstarts2": {"value": 4065}}
WaterpressureMeasureCounter = { "0": {"name": "", "value": 109}}
WPPostrunTime = { "minutes0": {"value": 1}}
HwcPostrunTime = { "0": {"name": "", "value": 1100}}
broadcast
vdatetime = { "time": {"value": "12:57:26"}, "date": {"value": "30.10.2023"}}
outsidetemp = { "temp2": {"value": 14.750}}
$SYS

my config of the reply from today is working with my vaillant:
image

the topic “bai” is not present on my side.
image

My question was to switch from present climate to the new climate:
https://www.home-assistant.io/blog/2023/09/06/release-20239/#new-climate-humidifier-and-water-heater-entity-dialogs

I made it a bit further. Had to sort the naming of the serial devices an HA. It was mentioned in the ebusd adapter documentation but I initially didn’t realize that this applies to HA installations.

Anyway, I now can see some devices on the ebus but not all. on plain Linux installations one can run

ebusctl info

and see what devices are discovered on the ebus. Is there a way of doing that or something similar on HA? Once I know all the devides are visible, I can work on getting a proper .csv set up. I have got a Vaillant arotherm plus heat pump installation with the following components:

Outdoor unit VWL 75/6
Hydraulic station VWZ MEH97/6 (probably visible as HMU)
Controller VR 71 (visible on ebusd)
Display/Controller VRC720
Internet gateway VRC921

Has anyone got the same configuration and can share the correct csv?
Many thanks!

1 Like

Some more progress: I copied and pasted a set of CSV files which seems to work. I ended up using various sources, forks and pull requests on GitHub.
At some point I will provide them.

During my experiments MQTT created a lot of entities, which are not relevant for my system.

How can I get rid of them and recreate only the entities in the current set of CSV files?

I have a problem with 720/ and boiler 20 CS eco tec, can not get to the result. Please make a screen for ebusd setting and configuration file

Please use the repository below to get it working.

Install the eBUSd Add-on in Hass and MQTT
With following config settings in eBUSd

Network adapter
enh:[your ip]:9999

Scan Config (default: on)
Config path
/config/ebusd-configuration/ebusd-2.1.x

Custom command line options:
–mqttvar=filter-direction=r|u|^w --mqttvar=filter-name=

Access level
*

and in your Hass config please use:

mqtt:
  climate:
    - name: V720
      max_temp: 25
      min_temp: 15
      temp_step: 0.5
      precision: 0.1
      initial: 18
# Mode control: expects auto, off, cool, heat, dry, fan_only    
# but VRC has 0=off;1=modulating;2=thermostat
      modes:
        - auto
        - heat
        - 'off'
# Map off->off, auto->thermostat, heat->modulating
      mode_state_topic: "ebusd/ctlv2/Hc1RoomTempCompensation"
      mode_state_template: >
        {% set values = { 'off':'off', 'thermostat':'auto', 'modulating':'heat' } %}
        {% set value = value_json['rcmode2']['value'] %}
        {{ values[value] if value in values.keys() else 'idle' }}
      mode_command_template: >-
        {% set values = { 'auto':'thermostat', 'heat':'modulating', 'off':'off'} %}
        {{ values[value] if value in values.keys() else 'auto' }}
      mode_command_topic: "ebusd/ctlv2/Hc1RoomTempCompensation/set"
# Current action/status: expects idle, cooling, heating, drying, or off.
      current_temperature_topic: "ebusd/ctlv2/z1RoomTemp"
      current_temperature_template: "{{value_json['tempv']['value']}}"      
      temperature_state_topic: "ebusd/ctlv2/z1ActualHeatingRoomTempDesired"
      temperature_state_template: "{{value_json['tempv']['value']}}"  
      temperature_command_topic: "ebusd/ctlv2/z1HeatingRoomTempDesiredManualControlled/set"

Make a automation:

alias: Ebusd-VRC-720
description: ""
trigger:
  - platform: time_pattern
    minutes: /1
condition: []
action:
  - service: mqtt.publish
    data:
      qos: 0
      retain: false
      topic: ebusd/ctlv2/z1ActualHeatingRoomTempDesired/get
      payload: "1"
  - service: mqtt.publish
    data:
      qos: 0
      retain: false
      topic: ebusd/ctlv2/z1RoomTemp/get
      payload: "1"
  - service: mqtt.publish
    data:
      qos: 0
      retain: false
      topic: ebusd/ctlv2/Hc1RoomTempCompensation/get
      payload: "1"
  - service: mqtt.publish
    data:
      qos: 0
      retain: false
      topic: ebusd/ctlv2/z1RoomHumidity/get
      payload: "1"
  - service: mqtt.publish
    data:
      qos: 0
      retain: false
      topic: ebusd/ctlv2/HwcStorageTemp/get
      payload: "1"
mode: single

1 Like

Hello Gavin. I am writing you from Oslo, Norway. I have spent some time looking into the ebusd integration here in the user forum. Your guide to Lupo is very much appreciated. I am trying . to help a friend with a Vaillant Ecotherm ground heat pump. We have installed the ebus wifi interfase from Daniel Kucera and Home Assistant. We have pinged it, and it works. Our next step is to install ebusd like you did. My command of yaml is very poor. Is there a chance that you would share your yaml files with me?
kind regards, Svein

Hi
I have a heat pump:
Vaillant_geoTHERM_plus VWS 62-2
VrnetDIALOG 860/2 (GPRS system)
Remote panel: VR 90

I have adapter ebusd 3, raspberry pi 4B with Home Assistant on SSD.

Which configuration files might be appropriate for my pump?
How and where to enter modifications to be able to modify e.g. room temperature, hot water temperature, etc.

The /config/… folder created in the “file browser” app is not visible in the “File editor” application.

After running the ebusd add-on, I don’t see the “mqtt-hassio.cfg” file anywhere.

Folders in setting:
/etc/ebusd/mqtt-hassio.cfg
/config/ebusd/ebusd-configuration

Thank you guys for this amazing thread, and all the hard work for the integrations. I got my ebusdv6 set up and running very good(learning curve is a bit difficult at first, but quite ok after getting the hang of it) on a Ariston Hs Premium boiler.

1 Like

Hi. I am trying to integrate Ariston Clas One with ebusdv6 like yours but I only get the boiler status. Can you share your CSV file and maibe the mqtt-hassio.cfg? I am interested to view the gas usage and radiator/water temperatures. Thank you!