Ebus integration?

yes, that gives me the result once per mqtt:
$ mosquitto_pub -m '?3' -t 'ebusd/350/Hc1NightTemp/get'

I get in mqtt:

ebusd/350/Hc1NightTemp/get ?3
ebusd/350/Hc1NightTemp 21.0

like that with /get?1:
mosquitto_pub -m '?3' -t 'ebusd/350/Hc1NightTemp/get?1'

I get nothing back…

So I’m afraid the only option is to run my dummy script:

 cat ebusdMqttRefresh.sh
#!/bin/bash
mosquitto_pub -n -t ebusd/350/Hc1OPMode/get
mosquitto_pub -n -t ebusd/350/Hc1DayTemp/get
mosquitto_pub -n -t ebusd/350/Hc1NightTemp/get
mosquitto_pub -n -t ebusd/350/DisplayedRoomTemp/get
mosquitto_pub -n -t ebusd/350/BMUB51101BoilerFlowTemp/get

mosquitto_pub -n -t ebusd/bai/Flame/get
1 Like

This should enable polling with priority 3, so you should see ebusd queries this parameters once in 3 * polling_interval seconds - please confirm you see this happening in ebusd logs

This is not correct, I didn’t read the documentation carefully, sorry. But this will set polling priority t 1*pollin_interval:
mosquitto_pub -m '?1' -t 'ebusd/350/Hc1NightTemp/get'
and you should see this happening in ebusd logs

I still believe we can avoid that

Was there ever a new batch of the boards made? I can’t quite work out the german on the forum, but I’d really like to get hold of one :slight_smile:

Here how I set up the polling:

################################################################################
# Setup ebusd messages to poll
################################################################################
- alias: 'ebusd setup VRC700f/4 polling priorities'
  trigger:
    platform: state
    entity_id: binary_sensor.ebusd_vrc700f_4_connected
    to: 'on'
  action:
    # Set priority to 1 polling interval: ebusd will add all the below
    # into its message queue and will query one of the parameters per
    # polling interval
    - service: mqtt.publish
      data_template:
        topic: ebusd/b7v/z1RoomTemp/get
        payload: '?1'
    # set priority to 2 polling intervals
    - service: mqtt.publish
      data_template:
        topic: ebusd/b7v/z1DayTemp/get
        payload: '?2'

Please pay attention on the trigger: this automation runs when my VRC700 has been scanned. To force scanning (as ebusd may have already scanned the devices before HA start):

- alias: 'ebusd force ebusd scanning'
  trigger:
    - platform: mqtt
      topic: "ebusd/global/signal"
      payload: 'true'
  action:
    - service: mqtt.publish
      data_template:
        topic: ebusd/scan.08/id/get
        payload: '?'
    - service: mqtt.publish
      data_template:
        topic: ebusd/scan.15/id/get
        payload: '?'

and

- platform: mqtt
  name: "ebusd BAI connected"
  device_class: connectivity
  state_topic: "ebusd/scan.08/id"
  availability_topic: "ebusd/global/signal"
  payload_available: "true"
  payload_not_available: "false"
  qos: 2
  value_template: >
    {% if "0010021961" in value %}
      ON
    {% else %}
      OFF
    {% endif %}

- platform: mqtt
  name: "ebusd VRC700f/4 connected"
  device_class: connectivity
  state_topic: "ebusd/scan.15/id"
  availability_topic: "ebusd/global/signal"
  payload_available: "true"
  payload_not_available: "false"
  qos: 2
  value_template: >
    {% if "0020197207" in value %}
      ON
    {% else %}
      OFF
    {% endif %}

I don’t like the hardcodes inside, but don’t know how those can be avoided, e.g. read from configuration or so

1 Like

First of all, I’m really sorry for the delayed answer, I was quite busy at home with other stuff …

Interesting approach, but for some of the config I do need some clarifications:
How did you came up with these values templates:

This is for the boiler (bai), right ?
Are those values valid for my boiler or I need to figure that out in some way ?

This is for the wall thermostat I guess.
But again are the values valid for me too or how should I get them ?

Just for my understanding: you are pulling the values via MQTT via an automation in HA, right?
How oft will this happen and in which conditions ? e.g. HA restart, value change in ebusd?

The values in the templates come from ebusctl scan result:

08;Vaillant;BAI00;0104;7803;21;18;23;0010021961;0001;005167;N4
15;Vaillant;B7V00;0422;5503;21;18;36;0020197207;0082;013759;N6

So, 0010021961 and 0020197207 are those numbers you have to replace in your setup to the corresponding values of your equipment. In my case I can also use BAI00 and B7V00 as unique identifiers as well: basically any value which allows you to uniquely identify the HW can be used here.

No, for that I have an automation which sets up ebusd to poll for me, e.g. for BAI:

    - service: mqtt.publish
      data_template:
        topic: ebusd/bai/FlowTemp/get
        payload: '?1'

This piece will run once we have scan result from ebusd meaning that ebusd can now send/receive commands to/from BAI. By this automation I instruct ebusd to set polling priority to 1 for BAI’s FlowTemp. Sending this before ebusd has scanned BAI will do nothing as bai/FlowTemp is not yet known to ebusd. This can happen when HA starts before ebusd or if ebusd restarts - for that reason we have to maintain ebusd connection/signal status changes at run time.

Well, we can have number of states here to define our state machine:

  1. ebusd started before HA and has scanned the equipment
  2. ebusd and HA started, but ebusd has not yet scanned the HW
  3. ebusd has restarted, but HA not
  4. etc.
    I have this trigger to start scanning:
- alias: 'ebusd force ebusd scanning'
  trigger:
    - platform: mqtt
      topic: "ebusd/global/signal"
      payload: 'true'
  action:
    - service: mqtt.publish
      data_template:
        topic: ebusd/scan.08/id/get
        payload: '?'
    - service: mqtt.publish
      data_template:
        topic: ebusd/scan.15/id/get
        payload: '?'

but it is not immediately correct as per my understanding ebusd/global/signal just shows that it has acquired the signal on the bus and it doesn’t mean it has scanned the equipment. So, the best is to have yet another trigger to start generic scanning, but for that there is no means at ebusd MQTT, e.g. you cannot request ebusd/scan/get or something. So, this is a trade off I took, but I do realize it leads to race conditions and might not work all the time…

WRT polling intervals. In my experiments I see that ebusd does poll the values for me: those with priority 1 are placed in the corresponding message queue and are polled in round-robin fashion one parameter at --pollinginterval seconds, e.g. if you have a single FlowTemp with priority 1 then every --pollinterval seconds, if you have 2 parameters with priority 1 then every param will be polled every 2 * (–pollinterval) seconds and so on.


  # Current action/status: expects idle, cooling, heating, drying, or off.
  action_topic: "ebusd/b7v/Hc1Status"
  action_template: >
    {% set values = { '0':'idle', '1':'heating' } %}
    {{ values[value] if value in values.keys() else 'idle' }}
  # Mode control: expects auto, off, cool, heat, dry, fan_only
  # but VRC has 0=off;1=modulating;2=thermostat
  # Map off->off, auto->modulating, heat->thermostat
  mode_state_topic: "ebusd/b7v/Hc1RoomTempSwitchOn"
  mode_state_template: >
    {% set values = { 'off':'off', 'modulating':'auto', 'thermostat':'heat' } %}
    {{ values[value] if value in values.keys() else 'idle' }}
  # FIXME: mode_command_topic has no value template, so climate control
  # will send mode as a string "modes[i]" to the MQTT topic, which
  # results in "auto" instead of "modulating" and "heat" instead of termostat
  # Work this around as described https://community.home-assistant.io/t/enhanced-version-of-mqtt-hvac-climate-platform-with-proper-history-chart/75304/31
  mode_command_topic: "quirk_ebusd_b7v_Hc1RoomTempSwitchOn_set"
  # FIXME: off requires quotes for some reason to be displayed in the card
  modes:
    - 'off'
    - auto
    - heat

Hello all

Where are we with this integration?

I’m about to jump on this ship with a Vaillant EcoTec Plus boiler, so I’m gonna need all the help in the world!

Hello!

Can someone provide the Gerber files and the components for that board?

I´ve been looking into it, but all the designs I´ve found are incomplete. I’m not sure if they are open source though…

For me MQTT based integration works for now, but it has number of flaws.
I would then recommend looking at the following promising work (WIP ATM):

https://github.com/c0fec0de/ebus

I do think this is what it should look like when we talk about ebusd integration into HA.
Let’s support @c0fec0de and his great work :wink:

@andr2000
@luci84tm
i try to figure how to configure ebus using your method.

automation:
################################################################################
# Setup ebusd messages to poll
################################################################################
  - alias: 'ebusd setup f47 polling priorities'
    trigger:
      platform: state
      entity_id: binary_sensor.ebusd_f47_connected
      to: 'on'
    action:
      # Set priority to 1 polling interval: ebusd will add all the below
      # into its message queue and will query one of the parameters per
      # polling interval
      - service: mqtt.publish
        data_template:
          topic: ebusd/f47/z1RoomTemp/get
          payload: '?1'
      # set priority to 2 polling intervals
      - service: mqtt.publish
        data_template:
          topic: ebusd/f47/z1DayTemp/get
          payload: '?2'

  - alias: 'ebusd force ebusd scanning'
    trigger:
      - platform: mqtt
        topic: "ebusd/global/signal"
        payload: 'true'
    action:
      - service: mqtt.publish
        data_template:
          topic: ebusd/scan.08/id/get
          payload: '?'
      - service: mqtt.publish
        data_template:
          topic: ebusd/scan.15/id/get
          payload: '?'

it must by in automation ?
how to know what value to fill in the field entity ?

i diden’t find the section where to put the following?

action_topic: "ebusd/b7v/Hc1Status"
  action_template: >
    {% set values = { '0':'idle', '1':'heating' } %}
    {{ values[value] if value in values.keys() else 'idle' }}
  # Mode control: expects auto, off, cool, heat, dry, fan_only
  # but VRC has 0=off;1=modulating;2=thermostat
  # Map off->off, auto->modulating, heat->thermostat
  mode_state_topic: "ebusd/b7v/Hc1RoomTempSwitchOn"
  mode_state_template: >
    {% set values = { 'off':'off', 'modulating':'auto', 'thermostat':'heat' } %}
    {{ values[value] if value in values.keys() else 'idle' }}
  # FIXME: mode_command_topic has no value template, so climate control
  # will send mode as a string "modes[i]" to the MQTT topic, which
  # results in "auto" instead of "modulating" and "heat" instead of termostat
  # Work this around as described https://community.home-assistant.io/t/enhanced-version-of-mqtt-hvac-climate-platform-with-proper-history-chart/75304/31
  mode_command_topic: "quirk_ebusd_b7v_Hc1RoomTempSwitchOn_set"
  # FIXME: off requires quotes for some reason to be displayed in the card
  modes:
    - 'off'
    - auto
    - heat
  - platform: mqtt
    name: "ebusd BAI connected"
    device_class: connectivity
    state_topic: "ebusd/scan.08/id"
    availability_topic: "ebusd/global/signal"
    payload_available: "true"
    payload_not_available: "false"
    qos: 2
    value_template: >
      {% if "0010003211" in value %}
        ON
      {% else %}
        OFF
      {% endif %}

  - platform: mqtt
    name: "ebusd f47 connected"
    device_class: connectivity
    state_topic: "ebusd/scan.15/id"
    availability_topic: "ebusd/global/signal"
    payload_available: "true"
    payload_not_available: "false"
    qos: 2
    value_template: >
      {% if "0020108135" in value %}
        ON
      {% else %}
        OFF
      {% endif %}

could you help?

You can see how it is implemented in my case here
Please read carefully all the above in this thread and pay attention to the way scan results are handled

Not sure what do you mean here. Could you please give an example?

I hope that my sample HA config answers the question what goes where, e.g. where and what the automations are etc.

thanks for your help i will check this tomorow

This seems very interesting project!


https://fromeijn.nl/connected-vaillant-to-home-assistant/

Here’s my ebus config (although im not using the integration), hopefully it will help someone (or get improved;)

sensor:
  - platform: mqtt
    name: Central Heating Pressure
    state_topic: "ebusd/bai/WaterPressure"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: Bar
  - platform: mqtt
    name: Central Heating Flow Temperature
    state_topic: "ebusd/bai/FlowTemp"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Desired Flow Temperature
    state_topic: "ebusd/bai/FlowTempDesired"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Return Temperature
    state_topic: "ebusd/bai/ReturnTemp"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Return Temperature difference
    state_topic: "ebusd/bai/ReturnTempExternal"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Return Cutoff
    state_topic: "ebusd/bai/ReturnTempExternal"
    value_template: "{{ value.split(';')[1] }}"
  - platform: mqtt
    name: Hot Water Temperature
    state_topic: "ebusd/bai/HwcTemp"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Hot Water Max Temperature
    state_topic: "ebusd/bai/HwcTempMax"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"    
  - platform: mqtt
    name: Hot Water Actual Temp Desired
    state_topic: "ebusd/f47/HwcActualTempDesired"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Hot Water Storage Temperature
    state_topic: "ebusd/bai/StorageTemp"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"  
  - platform: mqtt
    name: Hot Water maximum flow
    state_topic: "ebusd/bai/HwcWaterflowMax"
    value_template: "{{ value.split(';')[0] }}"
  - platform: mqtt
    name: Central Heating 3-Way Valve Position
    state_topic: "ebusd/bai/PositionValveSet"
    value_template: "{{ value.split(';')[0] }}"
  - platform: mqtt
    name: Central Heating Partial Load
    state_topic: "ebusd/bai/PartloadHcKW"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "kW"
  - platform: mqtt
    name: Central Heating Current Power
    state_topic: "ebusd/bai/ModulationTempDesired"
    unit_of_measurement: "%"
  - platform: mqtt
    name: Central Heating Pump Power
    state_topic: "ebusd/bai/PumpPower"
    unit_of_measurement: "W"
  - platform: mqtt
    name: Central Heating energy usage
    state_topic: "ebusd/bai/PrEnergyCountHc1"
  - platform: mqtt
    name: Hot Water energy usage
    state_topic: "ebusd/bai/PrEnergyCountHwc1"
  - platform: mqtt
    name: Central Heating Average Ignition time
    state_topic: "ebusd/bai/averageIgnitiontime"
    unit_of_measurement: "s"
  - platform: mqtt
    name: Central Heating Fan Speed
    state_topic: "ebusd/bai/FanSpeed" 
    unit_of_measurement: RPM
  - platform: mqtt
    name: Central Heating Target Fan Speed
    state_topic: "ebusd/bai/TargetFanSpeed" 
    unit_of_measurement: RPM
  - platform: mqtt
    name: Central Heating Target Fan Speed Output
    state_topic: "ebusd/bai/TargetFanSpeedOutput"
    unit_of_measurement: RPM
  - platform: mqtt
    name: Central Heating Current Error
    state_topic: "ebusd/bai/currenterror"
  - platform: mqtt
    name: Central Heating Current Room Temperature
    state_topic: "ebusd/f47/RoomTemp"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Outside Temperature
    state_topic: "ebusd/f47/OutsideTemp"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Actual Flow Temperature Desired
    state_topic: "ebusd/f47/Hc1ActualFlowTempDesired"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Actual Room Temperature Desired
    state_topic: "ebusd/f47/ActualRoomTempDesiredHc1"
    unit_of_measurement: "°C"

binary_sensor:
  - platform: mqtt
    name: "Central Heating Flame"
    state_topic: "ebusd/bai/Flame"
    payload_on: "on"
    payload_off: "off"
  - platform: mqtt
    name: "Central Heating Ignitor"
    state_topic: "ebusd/bai/Ignitor"
    payload_on: "on"
    payload_off: "off"
  - platform: mqtt
    name: "Central Heating Water pump state"
    state_topic: "ebusd/bai/WP"
    payload_on: "on"
    payload_off: "off"
  - platform: mqtt
    name: "Hot Water Demand"
    state_topic: "ebusd/bai/HwcDemand"
    payload_on: "yes"
    payload_off: "no"
  - platform: mqtt
    name: Central Heating Pre Cutoff active
    state_topic: "ebusd/f47/Hc1PreCutOffActive"
    payload_on: "yes"
    payload_off: "no"
  - platform: mqtt
    name: Central Heating Continuos Mode
    state_topic: "ebusd/f47/Hc1PreOrContinuosHeatingActive"
    payload_on: "yes"
    payload_off: "no"

switch:
  - platform: mqtt 
    name: 'Hot Water Switch'
    state_topic: 'ebusd/bai/HwcSwitch'
    command_topic: 'ebusd/bai/HwcSwitch/set'
    state_on: 'on'
    state_off: 'off'
    payload_on: 'on'
    payload_off: 'off'

  - platform: mqtt 
    name: 'Central Heating Switch'
    state_topic: 'ebusd/bai/HeatingSwitch'
    command_topic: 'ebusd/bai/HeatingSwitch/set'
    state_on: 'on'
    state_off: 'off'
    payload_on: 'on'
    payload_off: 'off'

input_select:
  central_heating_operation_mode:
    name: Central Heating Operation Mode
    options:
    - "Automatic"
    - "Night"
    - "Comfort"
    - "Summer"
  central_heating_temporary_mode:
    name: Central Heating Temporary Mode
    options:
    - "None"
    - "Party"
    - "Day in"
    - "Day away"

input_number:
  central_heating_heat_curve:
    name: Central Heating Heat Curve
    min: 0.20
    max: 4.00
    step: 0.05
    mode: box
  central_heating_set_day_temp:
    name: Central Heating Set Day Temperature
    min: 10
    max: 30
    step: 0.5
    unit_of_measurement: '°C'
  central_heating_set_night_temp:
    name: Central Heating Set Night Temperature
    min: 10
    max: 30
    step: 0.5
    unit_of_measurement: '°C'
  hot_water_temp_desired:
    name: Hot Water Temperature Desired
    min: 30
    max: 65
    step: 0.5
    mode: slider
    unit_of_measurement: '°C'

automation:
  - alias: ebusd_time_update
    initial_state: 'on'
    trigger:
      - platform: time
        at: '00:00:00'
    action:
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/Date/set'
          payload_template: "{{ now().strftime('%d.%m.%Y') }}"
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/Time/set'
          payload_template: "{{ now().strftime('%H:%M:%S') }}"

  - alias: Set Central Heating Operation Mode
    initial_state: 'on'
    trigger:
      - platform: state
        entity_id: input_select.central_heating_operation_mode
    action:
      service: mqtt.publish
      data_template:
        topic: 'ebusd/f47/Hc1OPMode/set'
        payload: >
          {% if is_state('input_select.central_heating_operation_mode','Automatic') %}
          auto
          {% elif is_state('input_select.central_heating_operation_mode','Night') %}
          night
          {% elif is_state('input_select.central_heating_operation_mode','Comfort') %}
          comfort
          {% elif is_state('input_select.central_heating_operation_mode','Summer') %}
          summer
          {% endif %}

  - alias: Get Central Heating Operation Mode
    initial_state: 'on'
    trigger:
      - platform: mqtt
        topic: 'ebusd/f47/Hc1OPMode'
    action:
      service: input_select.select_option
      data_template:
        entity_id: input_select.central_heating_operation_mode
        option: >
          {% set opmode = {
            'auto': 'Automatic',
            'night': 'Night',
            'comfort': 'Comfort',
            'summer': 'Summer' } %}
          {{ opmode.get('trigger.payload','Automatic') }}

  - alias: Set Central Heating Temporary Mode
    initial_state: 'on'
    trigger:
      - platform: state
        entity_id: input_select.central_heating_temporary_mode
    action:
      service: mqtt.publish
      data_template:
        topic: 'ebusd/f47/Hc1OPMode/set'
        payload: >
          {% if is_state('input_select.central_heating_temporary_mode','None') %}
          none
          {% elif is_state('input_select.central_heating_temporary_mode','Day away') %}
          onedayholiday
          {% elif is_state('input_select.central_heating_temporary_mode','Day in') %}
          onedaybankholiday
          {% elif is_state('input_select.central_heating_temporary_mode','Party') %}
          party
          {% endif %}

  - alias: Get Central Heating Temporary Mode
    initial_state: 'on'
    trigger:
      - platform: mqtt
        topic: 'ebusd/f47/Hc1OPMode'
    action:
      service: input_select.select_option
      data_template:
        entity_id: input_select.central_heating_temporary_mode
        option: >
          {% set opmode = {
            'none': 'None',
            'onedayholiday': 'Day away',
            'onedaybankholiday': 'Day in',
            'party': 'Party' } %}
          {{ opmode.get('trigger.payload','None') }}

  - alias: Set Central Heating Heat Curve
    initial_state: 'on'
    trigger:
      - platform: state
        entity_id: input_number.central_heating_heat_curve
    action: 
      service: mqtt.publish
      data_template:
        topic: 'ebusd/f47/Hc1HeatCurve/set'
        payload: '{{ states.input_number.central_heating_heat_curve.state | float }}'

  - alias: Get Central Heating Heat Curve
    initial_state: 'on'
    trigger:
      - platform: mqtt
        topic: 'ebusd/f47/Hc1HeatCurve'
    action:
      service: input_number.set_value
      data_template:
        entity_id: input_number.central_heating_heat_curve
        value: '{{ trigger.payload | float }}'

  - alias: Set Central Heating Set Day Temperature
    initial_state: 'on'
    trigger:
      - platform: state
        entity_id: input_number.central_heating_set_day_temp
    action: 
      service: mqtt.publish
      data_template:
        topic: 'ebusd/f47/Hc1DayTemp/set'
        payload: '{{ states.input_number.central_heating_set_day_temp.state | int }}'

  - alias: Get Central Heating Set Day Temperature
    initial_state: 'on'
    trigger:
      - platform: mqtt
        topic: 'ebusd/f47/Hc1DayTemp'
    action:
      service: input_number.set_value
      data_template:
        entity_id: input_number.central_heating_set_day_temp
        value: '{{ trigger.payload | int }}'

  - alias: Set Central Heating Set Night Temperature
    initial_state: 'on'
    trigger:
      - platform: state
        entity_id: input_number.central_heating_set_night_temp
    action: 
      service: mqtt.publish
      data_template:
        topic: 'ebusd/f47/Hc1NightTemp/set'
        payload: '{{ states.input_number.heating_set_night_temp.state | int }}'

  - alias: Get Central Heating Set Night Temperature
    initial_state: 'on'
    trigger:
      - platform: mqtt
        topic: 'ebusd/f47/Hc1DayTemp'
    action:
      service: input_number.set_value
      data_template:
        entity_id: input_number.heating_set_night_temp
        value: '{{ trigger.payload | int }}'

  - alias: Set Hot Water Temperature Desired
    initial_state: 'on'
    trigger:
      - platform: state
        entity_id: input_number.hot_water_temp_desired
    action: 
      service: mqtt.publish
      data_template:
        topic: 'ebusd/f47/HwcTempDesired/set'
        payload: '{{ states.input_number.hot_water_temp_desired.state | int }}'

  - alias: Get Hot Water Temperature Desired
    initial_state: 'on'
    trigger:
      - platform: mqtt
        topic: 'ebusd/f47/HwcTempDesired'
    action:
      service: input_number.set_value
      data_template:
        entity_id: input_number.hot_water_temp_desired
        value: '{{ trigger.payload | int }}'

  - alias: ebusd_mqtt_update
    initial_state: 'on'
    trigger:
      - platform: time_pattern
        minutes: '/2'
    action:
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/ReturnTemp/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/ReturnTempExternal/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/WaterPressure/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/FlowTemp/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/FlowTempDesired/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/HwcTemp/get'
          payload: '1' 
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/HwcTempMax/get'
          payload: '1' 
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/HwcWaterflowMax/get'
          payload: '1' 
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/HwcTempDesired/get'
          payload: '1' 
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/HwcActualTempDesired/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/HwcOPMode/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/StorageTemp/get'
          payload: '1' 
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/PositionValveSet/get'
          payload: '1'    
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/PartloadHcKW/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/ModulationTempDesired/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/PumpPower/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/PrEnergyCountHc1/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/PrEnergyCountHwc1/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/averageIgnitionTime/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/FanSpeed/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/TargetFanSpeed/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/TargetFanSpeedOutput/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/currenterror/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/HeatingSwitch/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/Flame/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/Ignitor/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/WP/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/HwcSwitch/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/HwcDemand/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/bai/HeatingSwitch/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/Hc1PreCutOffActive/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/Hc1OPMode/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/Hc1SFMode/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/Hc1DayTemp/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/Hc1NightTemp/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/Hc1HeatCurve/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/Hc1ActualFlowTempDesired/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/ActualRoomTempDesiredHc1/get'
          payload: '1'
      - service: mqtt.publish
        data:
          topic: 'ebusd/f47/Hc1PreOrContinuosHeatingActive/get'
          payload: '1'
3 Likes

Hi @dinth
I’d just used your ebusd-configuration and “everything” started working! Thank you for sharing your config.
Do you have made any improvements since posting? Are you willing to share your definitiion of your “climate” entity?
Thanks!

Welcome on the forum @GrumpyMeow
The main improvement on my todo list is updating ebusd to dev version. Im not sure if its possible or make sense to create a climate component out of it. Unfortunately with VRC470 (or other controller) the control over the boiler is very limited - just target temperatures, modes and heat curve.
It should be possible to control the boiler directly with VRC470 disconnected, but would require very complex logic.

ATM I can only add my lovelace config here:

entities:
  - entity: switch.central_heating_switch
  - entity: input_select.central_heating_operation_mode
  - entity: input_select.central_heating_temporary_mode
  - entity: input_number.central_heating_set_day_temp
  - entity: input_number.central_heating_set_night_temp
  - entity: input_number.central_heating_heat_curve
  - entity: binary_sensor.central_heating_ignitor
  - entity: binary_sensor.central_heating_flame
  - entity: sensor.central_heating_partial_load
  - entity: sensor.central_heating_current_power
  - entity: sensor.central_heating_3_way_valve_position
  - entity: sensor.central_heating_pressure
  - entity: binary_sensor.central_heating_water_pump_state
  - entity: sensor.central_heating_current_power
  - entity: sensor.central_heating_flow_temperature
  - entity: sensor.central_heating_desired_flow_temperature
  - entity: sensor.central_heating_actual_flow_temperature_desired
  - entity: sensor.central_heating_actual_room_temperature_desired
  - entity: sensor.central_heating_current_room_temperature
  - entity: sensor.central_heating_outside_temperature
  - entity: sensor.central_heating_return_temperature
  - entity: sensor.central_heating_return_temperature_difference
  - entity: sensor.central_heating_return_cutoff
  - entity: sensor.central_heating_pump_power
  - entity: sensor.central_heating_fan_speed
  - entity: sensor.central_heating_target_fan_speed
  - entity: sensor.central_heating_target_fan_speed_output
  - entity: sensor.central_heating_energy_usage
  - entity: sensor.central_heating_current_error
  - entity: sensor.central_heating_average_ignition_time
  - entity: binary_sensor.central_heating_continuos_mode
  - entity: binary_sensor.central_heating_pre_cutoff_active
  - entity: sensor.central_heating_average_ignition_time
show_header_toggle: false
type: entities

Aha. i see what you did there. Interesting.
For now i’ll stick to Climate as i can expose that entity to Google Home/Assistant.
Thanks again!

My previous code was severly bugged and lack important functionalities. Here’s a better version:

sensor:
  - platform: mqtt
    name: Central Heating Pressure
    unique_id: ebusd_central_heating_pressure
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/WaterPressure"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: Bar
  - platform: mqtt
    name: Central Heating Flow Temperature
    state_topic: "ebusd/bai/FlowTemp"
    unique_id: ebusd_central_heating_flow_temperature
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Desired Flow Temperature
    unique_id: ebusd_central_heating_desired_flow_temperature
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/FlowTempDesired"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Return Temperature
    unique_id: ebusd_central_return_temperature
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/ReturnTemp"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Return Temperature difference
    unique_id: ebusd_central_heating_return_temperature_difference
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/ReturnTempExternal"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Return Cutoff
    unique_id: ebusd_central_heating_return_cutoff
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/ReturnTempExternal"
    value_template: "{{ value.split(';')[1] }}"
  - platform: mqtt
    name: Hot Water Temperature
    unique_id: ebusd_hot_water_temperature
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/HwcTemp"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Hot Water Max Temperature
    unique_id: ebusd_hot_water_temperature
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/HwcTempMax"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Hot Water Actual Temp Desired
    unique_id: ebusd_hot_water_actual_temp_desired
    device:
      identifiers: "ebusd_f47"
      via_device: "ebusd"
    state_topic: "ebusd/f47/HwcActualTempDesired"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Hot Water Storage Temperature
    unique_id: ebusd_hot_water_storage_temperature
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/StorageTemp"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Hot Water maximum flow
    unique_id: ebusd_hot_water_maximum_flow
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/HwcWaterflowMax"
    value_template: "{{ value.split(';')[0] }}"
  - platform: mqtt
    name: Central Heating 3-Way Valve Position
    unique_id: ebusd_central_heating_3_way_valve_position
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/PositionValveSet"
    value_template: "{{ value.split(';')[0] }}"
  - platform: mqtt
    name: Central Heating Partial Load
    unique_id: ebusd_central_heating_partial_load
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/PartloadHcKW"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "kW"
  - platform: mqtt
    name: Central Heating Current Power
    unique_id: ebusd_central_current_power
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/ModulationTempDesired"
    unit_of_measurement: "%"
  - platform: mqtt
    name: Central Heating Pump Power
    unique_id: ebusd_central_heating_pump_power
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/PumpPower"
    unit_of_measurement: "W"
  - platform: mqtt
    name: Central Heating energy usage
    unique_id: ebusd_central_heating_energy_usage
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/PrEnergyCountHc1"
  - platform: mqtt
    name: Hot Water energy usage
    unique_id: ebusd_hot_water_energy_usage
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/PrEnergyCountHwc1"
  - platform: mqtt
    name: Central Heating Average Ignition time
    unique_id: ebusd_central_heating_average_ignition_time
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/averageIgnitiontime"
    unit_of_measurement: "s"
  - platform: mqtt
    name: Central Heating Fan Speed
    unique_id: ebusd_central_heating_fan_speed
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/FanSpeed"
    unit_of_measurement: RPM
  - platform: mqtt
    name: Central Heating Target Fan Speed
    unique_id: ebusd_central_heating_target_fan_speed
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/TargetFanSpeed"
    unit_of_measurement: RPM
  - platform: mqtt
    name: Central Heating Target Fan Speed Output
    unique_id: ebusd_central_heating_target_fan_speed_output
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/TargetFanSpeedOutput"
    unit_of_measurement: RPM
  - platform: mqtt
    name: Central Heating Current Error
    unique_id: ebusd_central_heating_current_error
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/currenterror"
  - platform: mqtt
    name: Central Heating Current Room Temperature
    unique_id: ebusd_central_heating_current_room_temperature
    device:
      identifiers: "ebusd_f47"
      via_device: "ebusd"
    state_topic: "ebusd/f47/RoomTemp"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Outside Temperature
    unique_id: ebusd_central_heating_outside_temperature
    device:
      identifiers: "ebusd_f47"
      via_device: "ebusd"
    state_topic: "ebusd/f47/OutsideTemp"
    value_template: "{{ value.split(';')[0] }}"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Actual Flow Temperature Desired
    unique_id: ebusd_central_heating_actual_flow_temperature_desired
    device:
      identifiers: "ebusd_f47"
      via_device: "ebusd"
    state_topic: "ebusd/f47/Hc1ActualFlowTempDesired"
    unit_of_measurement: "°C"
  - platform: mqtt
    name: Central Heating Actual Room Temperature Desired
    unique_id: ebusd_central_heating_actual_room_temperature_desired
    device:
      identifiers: "ebusd_f47"
      via_device: "ebusd"
    state_topic: "ebusd/f47/ActualRoomTempDesiredHc1"
    unit_of_measurement: "°C"

binary_sensor:
  - platform: mqtt
    name: "Central Heating Flame"
    unique_id: ebusd_central_heating_flame
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/Flame"
    payload_on: "on"
    payload_off: "off"
  - platform: mqtt
    name: "Central Heating Ignitor"
    unique_id: ebusd_central_heating_ignitor
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/Ignitor"
    payload_on: "on"
    payload_off: "off"
  - platform: mqtt
    name: "Central Heating Water pump state"
    unique_id: ebusd_central_heating_water_pump_state
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/WP"
    payload_on: "on"
    payload_off: "off"
  - platform: mqtt
    name: "Hot Water Demand"
    unique_id: ebusd_central_heating_hot_water_demand
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/HwcDemand"
    payload_on: "yes"
    payload_off: "no"
  - platform: mqtt
    name: Central Heating Pre Cutoff active
    unique_id: ebusd_central_heating_pre_cutoff_active
    device:
      identifiers: "ebusd_f47"
      via_device: "ebusd"
    state_topic: "ebusd/f47/Hc1PreCutOffActive"
    payload_on: "yes"
    payload_off: "no"
  - platform: mqtt
    name: Central Heating Continuos Mode
    unique_id: ebusd_central_heating_continuos_mode
    device:
      identifiers: "ebusd_f47"
      via_device: "ebusd"
    state_topic: "ebusd/f47/Hc1PreOrContinuosHeatingActive"
    payload_on: "yes"
    payload_off: "no"

switch:
  - platform: mqtt
    name: "Hot Water Switch"
    unique_id: ebusd_hot_water_switch
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/HwcSwitch"
    command_topic: "ebusd/bai/HwcSwitch/set"
    state_on: "on"
    state_off: "off"
    payload_on: "on"
    payload_off: "off"

  - platform: mqtt
    name: "Central Heating Switch"
    unique_id: ebusd_central_heating_switch
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    state_topic: "ebusd/bai/HeatingSwitch"
    command_topic: "ebusd/bai/HeatingSwitch/set"
    state_on: "on"
    state_off: "off"
    payload_on: "on"
    payload_off: "off"

input_select:
  central_heating_operation_mode:
    name: Central Heating Operation Mode
    options:
      - "Automatic"
      - "Night"
      - "Comfort"
      - "Summer"
  central_heating_temporary_mode:
    name: Central Heating Temporary Mode
    options:
      - "None"
      - "Party"
      - "Day in"
      - "Day away"

input_number:
  central_heating_heat_curve:
    name: Central Heating Heat Curve
    min: 0.20
    max: 4.00
    step: 0.05
    mode: box
  central_heating_actual_room_temp_desired:
    min: 5
    max: 30
    step: 0.5
    unit_of_measurement: "°C"
  central_heating_set_day_temp:
    name: Central Heating Set Day Temperature
    min: 5
    max: 30
    step: 0.5
    unit_of_measurement: "°C"
  central_heating_set_night_temp:
    name: Central Heating Set Night Temperature
    min: 5
    max: 30
    step: 0.5
    unit_of_measurement: "°C"
  hot_water_temp_desired:
    name: Hot Water Temperature Desired
    min: 30
    max: 65
    step: 0.5
    mode: slider
    unit_of_measurement: "°C"

automation:
  - alias: ebusd_time_update
    initial_state: on
    trigger:
      - platform: time
        at: "00:00:00"
    action:
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/Date/set"
          payload_template: "{{ now().strftime('%d.%m.%Y') }}"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/Time/set"
          payload_template: "{{ now().strftime('%H:%M:%S') }}"

  - id: ebus-error-notification-on
    alias: Ebus error notification on
    initial_state: on
    trigger:
      - platform: state
        entity_id: sensor.ebus_central_heating_current_error
        from: "-;-;-;-;-"
    action:
      - service: notify.notifier_kodi_living_room
        data:
          title: "Boiler ebus"
          message: 'Boiler error detected! Error code: {{ states("sensor.ebus_central_heating_current_error") }}'
      - service: notify.notifier_kodi_guest_bedroom
        data:
          title: "Boiler ebus"
          message: 'Boiler error detected! Error code: {{ states("sensor.ebus_central_heating_current_error") }}'
      - service: notify.notifier_telegram
        data:
          title: "Boiler ebus"
          message: 'Boiler error detected! Error code: {{ states("sensor.ebus_central_heating_current_error") }}'

  - id: ebus-error-notification-off
    alias: Ebus error notification off
    initial_state: on
    trigger:
      - platform: state
        entity_id: sensor.ebus_central_heating_current_error
        to: "-;-;-;-;-"
    action:
      - service: notify.notifier_telegram
        data:
          title: "Boiler ebus"
          message: "Boiler error cleared!"

  - alias: Set Central Heating Operation Mode
    initial_state: on
    trigger:
      - platform: state
        entity_id: input_select.central_heating_operation_mode
    action:
      - service: automation.turn_off
        entity_id: automation.get_central_heating_operation_mode
      - service: mqtt.publish
        data_template:
          topic: "ebusd/f47/Hc1OPMode/set"
          payload: >
            {% set opmode = {
              'Automatic': 'auto',
              'Night': 'night',
              'Comfort': 'on',
              'Summer': 'summer' } %}
            {{ opmode.get(trigger.to_state.state,'Automatic') }}
      - delay: 00:00:05
      - service: automation.turn_on
        entity_id: automation.get_central_heating_operation_mode

  - alias: Get Central Heating Operation Mode
    initial_state: on
    trigger:
      - platform: mqtt
        topic: "ebusd/f47/Hc1OPMode"
    action:
      service: input_select.select_option
      data_template:
        entity_id: input_select.central_heating_operation_mode
        option: >
          {% set opmode = {
            'auto': 'Automatic',
            'night': 'Night',
            'on': 'Comfort',
            'summer': 'Summer' } %}
          {{ opmode.get('trigger.payload','auto') }}

  - alias: Set Central Heating Temporary Mode
    initial_state: on
    trigger:
      - platform: state
        entity_id: input_select.central_heating_temporary_mode
    action:
      - service: automation.turn_off
        entity_id: automation.get_central_heating_temporary_mode
      - service: mqtt.publish
        data_template:
          topic: "ebusd/f47/Hc1SFMode/set"
          payload: >
            {% set tpmode = {
              'None': 'none',
              'Day away': 'onedayholiday',
              'Day in': 'onedaybankholiday',
              'Party': 'party' } %}
            {{ tpmode.get(trigger.to_state.state,'None') }}
      - delay: 00:00:05
      - service: automation.turn_on
        entity_id: automation.get_central_heating_temporary_mode

  - alias: Get Central Heating Temporary Mode
    initial_state: on
    trigger:
      - platform: mqtt
        topic: "ebusd/f47/Hc1SFMode"
    action:
      service: input_select.select_option
      data_template:
        entity_id: input_select.central_heating_temporary_mode
        option: >
          {% set tpmode = {
            'none': 'None',
            'onedayholiday': 'Day away',
            'onedaybankholiday': 'Day in',
            'party': 'Party' } %}
          {{ tpmode.get('trigger.payload','none') }}

  - alias: Set Central Heating Heat Curve
    initial_state: on
    trigger:
      - platform: state
        entity_id: input_number.central_heating_heat_curve
    action:
      service: mqtt.publish
      data_template:
        topic: "ebusd/f47/Hc1HeatCurve/set"
        payload: "{{ states.input_number.central_heating_heat_curve.state | float }}"

  - alias: Get Central Heating Heat Curve
    initial_state: on
    trigger:
      - platform: mqtt
        topic: "ebusd/f47/Hc1HeatCurve"
    action:
      service: input_number.set_value
      data_template:
        entity_id: input_number.central_heating_heat_curve
        value: "{{ trigger.payload | float }}"

  - alias: Set Central Heating Set Day Temperature
    initial_state: on
    trigger:
      - platform: state
        entity_id: input_number.central_heating_set_day_temp
    action:
      service: mqtt.publish
      data_template:
        topic: "ebusd/f47/Hc1DayTemp/set"
        payload: "{{ states.input_number.central_heating_set_day_temp.state | int }}"

  - alias: Get Central Heating Set Day Temperature
    initial_state: on
    trigger:
      - platform: mqtt
        topic: "ebusd/f47/Hc1DayTemp"
    action:
      service: input_number.set_value
      data_template:
        entity_id: input_number.central_heating_set_day_temp
        value: "{{ trigger.payload | int }}"

  - alias: Set Central Heating Actual Room Temp Desired
    initial_state: on
    trigger:
      - platform: state
        entity_id: input_number.central_heating_actual_room_temp_desired
    action:
      service: mqtt.publish
      data_template:
        topic: "ebusd/f47/ActualRoomTempDesiredHc1/set"
        payload: "{{ states.input_number.central_heating_actual_room_temp_desired | int }}"

  - alias: Get Central Heating Actual Room Temp Desired
    initial_state: on
    trigger:
      - platform: mqtt
        topic: "ebusd/f47/ActualRoomTempDesiredHc1"
    action:
      service: input_number.set_value
      data_template:
        entity_id: input_number.central_heating_actual_room_temp_desired
        value: "{{ trigger.payload | int }}"

  - alias: Set Central Heating Set Night Temperature
    initial_state: on
    trigger:
      - platform: state
        entity_id: input_number.central_heating_set_night_temp
    action:
      service: mqtt.publish
      data_template:
        topic: "ebusd/f47/Hc1NightTemp/set"
        payload: "{{ states.input_number.central_heating_set_night_temp.state | int }}"

  - alias: Get Central Heating Set Night Temperature
    initial_state: on
    trigger:
      - platform: mqtt
        topic: "ebusd/f47/Hc1NightTemp"
    action:
      service: input_number.set_value
      data_template:
        entity_id: input_number.central_heating_set_night_temp
        value: "{{ trigger.payload | int }}"

  - alias: Set Hot Water Temperature Desired
    initial_state: on
    trigger:
      - platform: state
        entity_id: input_number.hot_water_temp_desired
    action:
      service: mqtt.publish
      data_template:
        topic: "ebusd/f47/HwcTempDesired/set"
        payload: "{{ states.input_number.hot_water_temp_desired.state | int }}"

  - alias: Get Hot Water Temperature Desired
    initial_state: on
    trigger:
      - platform: mqtt
        topic: "ebusd/f47/HwcTempDesired"
    action:
      service: input_number.set_value
      data_template:
        entity_id: input_number.hot_water_temp_desired
        value: "{{ trigger.payload | int }}"

  - alias: ebusd_mqtt_update
    initial_state: on
    trigger:
      - platform: time_pattern
        minutes: "/2"
    action:
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/ReturnTemp/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/ReturnTempExternal/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/WaterPressure/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/FlowTemp/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/FlowTempDesired/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/HwcTemp/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/HwcTempMax/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/HwcWaterflowMax/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/HwcTempDesired/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/HwcActualTempDesired/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/HwcOPMode/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/StorageTemp/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/PositionValveSet/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/PartloadHcKW/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/ModulationTempDesired/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/PumpPower/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/PrEnergyCountHc1/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/PrEnergyCountHwc1/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/averageIgnitionTime/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/FanSpeed/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/TargetFanSpeed/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/TargetFanSpeedOutput/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/currenterror/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/HeatingSwitch/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/Flame/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/Ignitor/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/WP/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/HwcSwitch/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/HwcDemand/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/bai/HeatingSwitch/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/Hc1PreCutOffActive/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/Hc1OPMode/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/Hc1SFMode/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/Hc1DayTemp/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/Hc1NightTemp/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/Hc1HeatCurve/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/Hc1ActualFlowTempDesired/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/ActualRoomTempDesiredHc1/get"
          payload: "1"
      - service: mqtt.publish
        data:
          topic: "ebusd/f47/Hc1PreOrContinuosHeatingActive/get"
          payload: "1"
1 Like

Thanks @dinth! This helped me a lot to get started with ebusd and MQTT.
I would suggest using the regular status broadcasts for some of these values. From the file hcmode.inc contained in the ebusd-configuration: r,,Status01,Vorlauftemperatur/Rücklauftemperatur/Aussentemperatur/WW Temperatur/Speichertemperatur/Pumpenstatus,,,,01,,,temp1;temp1;temp2;temp1;temp1;pumpstate,,,

This would translate to r,,Status01,Flow Temperature/Return Flow Temperature/Outside Temperature/Warm Water Temperature/Warm Water Storage Temperature/Pump Status,,,,01,,,temp1;temp1;temp2;temp1;temp1;pumpstate,,,

Status01 seems to be broadcast approximately every 10s.

Also I am using --mqttjson which simplifies parsing:

sensor:
  - platform: mqtt
    name: Central Heating Actual Flow Temperature
    unique_id: bai_actual_flow_temperature
    state_topic: "ebusd/bai/Status01"
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    value_template: "{{ value_json['0']['value'] }}"
    unit_of_measurement: "°C"
  
  - platform: mqtt
    name: Central Heating Return Flow Temperature
    unique_id: bai_actual_return_flow_temperature
    state_topic: "ebusd/bai/Status01"
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    value_template: "{{ value_json['1']['value'] }}"
    unit_of_measurement: "°C"
  
  - platform: mqtt
    name: Central Heating Actual Warm Water Temperature
    unique_id: bai_actual_warm_water_temperature
    state_topic: "ebusd/bai/Status01"
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    value_template: "{{ value_json['3']['value'] }}"
    unit_of_measurement: "°C"
  
  - platform: mqtt
    name: Central Heating Actual Warm Water Storage Temperature
    unique_id: bai_actual_warm_water_storage_temperature
    state_topic: "ebusd/bai/Status01"
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    value_template: "{{ value_json['4']['value'] }}"
    unit_of_measurement: "°C"
  
binary_sensor:
  - platform: mqtt
    name: Central Heating Pump Status
    unique_id: bai_pump_status
    state_topic: "ebusd/bai/Status01"
    device:
      identifiers: "ebusd_bai"
      via_device: "ebusd"
    value_template: "{{ value_json['5']['value'] == 'on' }}"