Ebus integration?

But how i can use it with mqtt discovery on Home Assistant ?

I try it but it is impossible to change mode. Only temperature are possible to change.

I go back to old version. It works correct. WIth auto discovery i can not change and create climates.

I found that new version delete MQTT top level topic. So that was reason why it stop working. So I add “–mqtttopic=ebusd” into ebusd connfiguration.

Hi
Anybody tested version with auto discoery and works ok ? Anybody can describe it how configure it step by step and create example climate entity ?

This working for me

climate:
- platform: mqtt
  name: Vailant 700
  max_temp: 27
  min_temp: 15
  temp_step: 0.5
  modes:
   - auto
   - heat
   - cool
   - 'off'
  mode_state_template: >-
    {% set values = { 'auto':'auto', 'day':'heat',  'night':'cool', 'off':'off'} %}
    {% set state = value_json["opmode"].value %}
    {{ values[state] if state in values.keys() else 'off' }}
  mode_state_topic:  "ebus/700/z1OpMode"
  mode_command_template: >-
    {% set values = { 'auto':'auto', 'heat':'day',  'cool':'night', 'off':'off'} %}
    {{ values[value] if value in values.keys() else 'auto' }}
  mode_command_topic: "ebus/700/z1OpMode/set"
  current_temperature_topic: "ebus/700/z1ActualRoomTempDesired"
  current_temperature_template: '{{value_json["tempv"].value}}'
  temperature_state_topic: "ebus/700/z1ActualRoomTempDesired"
  temperature_state_template: '{{value_json["tempv"].value}}'
  temperature_low_state_topic: "ebus/700/z1NightTemp"
  temperature_low_state_template: '{{value_json["tempv"].value}}'
  temperature_high_state_topic: "ebus/700/z1DayTemp"
  temperature_high_state_template: '{{value_json["tempv"].value}}'
  temperature_low_command_topic: "ebus/700/z1NightTemp/set"

Hey, I am also trying to get value from these sensors. What is the “5434.0” value that you divide your values by?

After some reading I have been able to integrate my Exacontrol e7c thermostat and Bulex Themacondens heater (bai) using the MQTT climate entity. As it took some effort I thought to share it:

  climate:
    name: Centrale verwarming
    availability_topic: "ebusd/global/signal"
    payload_available: "true"
    payload_not_available: "false"

    max_temp: 30
    min_temp: 10
    temp_step: 0.5
    precision: 0.5
    
    # Current temperature
    current_temperature_topic: "ebusd/e7c/DisplayedRoomTemp"
    current_temperature_template: "{{value_json['temp'].value}}"

    # Set temperature
    temperature_state_topic: "ebusd/e7c/HeatingTemp1"
    temperature_state_template: "{{value_json['temp'].value}}"
    temperature_command_topic: "ebusd/e7c/DesiredTemperature"

    # action
    action_topic: "ebusd/bai/SetMode"
    action_template: >
       {%- if is_state('climate.centrale_verwarming', 'off') -%}
         {{ "off" }}
       {%- elif value_json['disablehc'].value == 0 -%}
         {{ "heating" }}
       {%- else -%}
         {{ "idle" }}
       {%- endif -%}
    
       
    # modes
    modes:
     - "heat"
     - "off"
    mode_state_topic:  "ebusd/e7c/HeatingEnable"
    mode_state_template: >-
      {% set values = { 'on':'heat', 'off':'off'} %}
      {% set state = value_json["onoff"].value %}
      {{ values[state] if state in values.keys() else 'off' }}
    
    mode_command_topic: "ebusd/e7c/HeatingEnable/set"
    mode_command_template: >-
      {% set values = { 'heat':'on', 'off':'off'} %}
      {{ values[value] if value in values.keys() else 'off' }}

    # presets
    preset_modes:
      - "programma"
      - "vakantie"
    preset_mode_command_topic: "ebusd/e7c/DesiredPreset"
    preset_mode_state_topic: "ebusd/e7c/DesiredPreset"

MQTT climate is not ideal as setting the temperature uses different MQTT topics. For a moment I though it would be easier to write a custom component for all the logic, but I solved it by using two automations that subscribe to DesiredPreset/DesiredTemperature, and do the necessary things.

I’m quite happy with how it works now. I also try not to bang the ebus too much, so I have not changed pollinterval. In fact, I don’t really rely on polling but let the automations fetch an update only when necessary (although I then do a /get ?1 to enable automatic polling for the future just in case). I also have a force update automation that runs when the climate entity turns on, or changes to unknown.

I only rely on polling when physically interacting with the device. As far as I understand, because of the default caching, it takes maximum 300 seconds for the HA climate to be updated, which I can live with.

Using the following hardware: EBUS to WiFi adapter by Daniel Kucera's store
I like it over the ‘official’ one as it does not need an external power suppy.

4 Likes

@ilmc888
Could you talk us through how you got the ebus to WiFi adapter from Daniel Kucera working?

I have tried to get it up and running with my Vaillant system but it completely messes up my system. It even seems to break the link between my thermostats and my heat pump (where they seem to be unable to communicate)

Hi, I’m also interested in the working process of the adapter from Daniel Kucera that i bought. How can I configure in HA? Thanks

Just using ebusd configuration that use auto discovery trough mqtt in home assistant.

Hi all. Can anybody tell me how create in HA sensor which is sum for sensor gas HC and HWC from my Vaillant gas boiler which i read by ebusd ?

ebusd/bai/PrEnergySumHc1 
value_template: '{{(value_json["0"].value )}}'

+

ebusd/bai/PrEnergySumHwc1 
value_template: '{{(value_json["0"].value )}}'

I had a mini project, designing a case + integrating a gas detector connected to the EBUSD. I have it printed, it works, incl. internal gas detector fitting. If you like you can have the STL’s for this…

Hi can you share STL or STEP file?

You have to create 2 sensors, and then template sensor summing values from them.

Ok but how write code for sum ? And can i also with sum write code for division ?

Anything. Here is an example from HA.

pck_power_metering:

 (...)

  template:
    - sensor:
      - name: "Total Electric Power"
        state: "{{ ((states('sensor.shelly_3em_phase_1_power')|float + states('sensor.shelly_3em_phase_2_power')|float + states('sensor.shelly_3em_phase_3_power')|float)) |round(2) }}"
        device_class: power
        unit_of_measurement: "W"

Conversion to float is needed to execute math operation since sensors return string.

Note it’s from the package, so you have to intend it properly depending on your case.

- platform: template
  sensors:
      total_gas:
          friendly_name: "Total Gas"
          state: "{{ ((states('sensor.ebusd_bai_prenergysumhc1')|float + states('sensor.ebusd_bai_prenergysumhwc1')|float)) |round(2) }}"
          device_class: gas
          unit_of_measurement: "m³"

but show me errors in check config:

Invalid config for [sensor.template]: [state] is an invalid option for [sensor.template]. Check: sensor.template->sensors->total_gas->state. (See ?, line ?).

Hi @andrej33, I am trying to connect an ebus adapter to the main board of a Geotherm as well, but when a power it on, the heatpump-menu goes into installation mode. When I disconnect, it works as normal. As it is Friday 4PM and mid-winter, this may not be the best time for me to experiment with the installation menu :slight_smile:

Do you recall if yours went into install mode as well, when you connected the eBus adapter?

No installation menu should be activated. At least in my case. And also, the main heatpump menu should not behave strange…

Did you check the pin on ebus adapter? What adapter do you use?

Yes, I found that surprising - I may try again.

I bought it from nodo shop pre-assembled, which should be just http://otgw.tclcode.com/

I connected the boiler side to the GeoTherm - I did find it odd the board on the heatpump has a + and - marked on the BUS connector. According to Google, this should not matter?