Ebus integration?

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