Hörmann Garage Door with Ing Budde KNX

Hey,

I started to use Home Assistant some time ago and most of the things work perfect. Unfortunately I am struggeling to perfectly integrate my garage door. It’s a Hoermann Garage door that is connected to my KNX installation with the “Ing-Budde” KNX Module (the official Hoermann module was not available at that time).

In KNX i have the following communication objects:

  1. Open / Close
  2. Stop
  3. Venting
  4. Light
  5. Drive Lock
  6. KNX Lock
  7. Status Open
  8. Status Venting
  9. Status Moving
  10. Status Moving Up
  11. Status Moving Down
  12. Status Light
  13. Status Error

I tried to integrate it as a KNX cover with move_long_address and stop_address. I can’t use the position_state_address as the module only has separate status addresses for open, closed, venting etc.
With this configuration I can open/close and stop the movement of the garage door with Home Assistant. Unfortunately Home Assistant does not recognize it if e.g. an error occured and the garage door did not close completely. Furthermore if another method (like remote control) was used Home Assistant is also not aware that the garage door is open. Thus you need to “open it again” in HA and can close it after that.

So i tried to look for other options. I integrated the Status addresses as a KNX binary into HA. With this I am able to create a card that shows the correct status of the door (moving up, moving down, open closed…).

What I am not able to achive is to integrate buttons (that are connected to the actual status) to control the garage door.

Can anyone give me a hint how I need to configure the “Open/Close”, “Stop” and “Venting” addresses into HA thus they are connected to the Status objects and I can close the garage door with HA even it it was opened with a remote control?

Hope everything is understandable :slight_smile:

Thanks for your support

Hi :wave:!
I have the same module. There may be cleaner ways to accomplish that, but this works fine for:

knx:
  expose:
    # Garagentor - Fake-status
    - entity_id: sensor.garagentor_fake_status
      type: percent
      address: "i-garagentor-position-state"
  binary_sensor:
    - name: "Garagentor offen"
      state_address: '3/3/7'
      device_class: 'garage_door'
    - name: "Garagentor zu"
      state_address: '3/3/8'
      device_class: 'garage_door'
  cover:
    - name: "Garagentor"
      move_long_address: '3/3/1'
      stop_address: '3/3/2'
      position_state_address: "i-garagentor-position-state"
      device_class: garage
      travelling_time_down: 20
      travelling_time_up: 14
template:
  - sensor:
      - name: "Garagentor Fake-Status"
        unique_id: "garagentor-fake-status"
        unit_of_measurement: "%"
        availability: >-
          {{ states('binary_sensor.garagentor_zu') == 'on' or
            states('binary_sensor.garagentor_offen') == 'on' }}
        state: >
          {% if states('binary_sensor.garagentor_zu') == "on" %}
            100
          {% elif states('binary_sensor.garagento_offenr') == "on" %}
            0
          {% else %}
            unavailable
          {% endif %}

Thanks for the quick feedback. I was able to create the “Fake Status” and it shows 100% when the garage door is closed.
Unfortunately the garage door itself has the status “unkown” although the Fake Position State is available.

This is my KNX Cover configuration:
- name: “Tor Garage”
device_class: garage
move_long_address: “20/0/0”
stop_address: “20/0/1”
position_state_address: “i-tor_garage-position_state_address”

KNX Expose:
- entity_id: sensor.tor_garage_fake_position_state_address
type: percent
address: “i-tor_garage-position_state_address”

Templates:

  • sensor:
    • name: “Tor Garage Fake Position State Address”
      unique_id: “tor_garage-fake_position_state_address”
      unit_of_measurement: “%”
      availability: >-
      {{ states(‘binary_sensor.tor_garage_closed’) == ‘on’ or
      states(‘binary_sensor.tor_garage_open’) == ‘on’ }}
      state: >
      {% if states(‘binary_sensor.tor_garage_closed’) == “on” %}
      100
      {% elif states(‘binary_sensor.tor_garage_open’) == “on” %}
      0
      {% else %}
      unavailable
      {% endif %}

Beside that this solution does not show when the garage door is moving up/down triggered from e.g. an remote or?

see https://community.home-assistant.io/t/how-to-help-us-help-you-or-how-to-ask-a-good-question/114371#oneone-format-it-properly-16 on how to format yaml here.

This has to be the entity_id of your template sensor “Tor Garage Fake Position State Address”. It may be different on your system.

Not sure tbh. Have a try. You may include 1. Status Moving somehow…

Yes this is my template sensor id:

  - sensor:
      - name: "Tor Garage Fake Position State Address"
        unique_id: "tor_garage-fake_position_state_address"

This is the KNX expose part:

    - entity_id: sensor.tor_garage-fake_position_state_address
      type: percent
      address: "i-tor_garage-position_state_address"

and this the KNX Cover:

    - name: "Tor Garage"
      device_class: garage
      move_long_address: "20/0/0"
      stop_address: "20/0/1"
      position_state_address: "i-tor_garage-position_state_address"

So Exposes entity_id references to the templates sensor and the KNX cover uses the expose address - or is there anything else that I am missing?

Yes Right. But the unique_id s not necessarily the entity_id. Check the template sensors state for the correct entity_id.

It is auto assigned from the name, so the “-” in “garage-fake” is probably a “_”.

Ah, yes it changed the name to “_”.

I know changed everything so it looks like this:

Templates:

  - sensor:
      - name: "Tor Garage Fake Position State Address"
        unique_id: "tor_garage_fake_position_state_address"

KNX Expose:

    - entity_id: sensor.tor_garage_fake_position_state_address
      type: percent
      address: "i-tor_garage_position_state_address"

KNX Cover:

    - name: "Tor Garage"
      device_class: garage
      move_long_address: "20/0/0"
      position_state_address: "i-tor_garage_position_state_address"

Unfortunately the garage door has still no status - anything else I am missing?

You should not have changed the unique_id. Now a new entity was created with a different entity_id.
The old entity_id is now orphaned.

Never change a unique_id.

No, I removed everything, deleted the entity ids and recreated it to get a clear status :slight_smile:
The screenshot above was taken after all of that - I only have one Entity-ID

Recreated everything again - now it’s working. Thanks a lot.

Anyone has a good idea how to integrate the binary sensors for the up/down movement? Thus they are also reflected when not triggered from the HA system.

Hi :sunglasses:

I solved this today via an automation

alias: KNX Garage Tor Fake Status
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.eg_garage_tor_oben
      - binary_sensor.eg_garage_tor_unten
  - platform: homeassistant
    event: start
condition: []
action:
  - if:
      - condition: state
        entity_id: binary_sensor.eg_garage_tor_oben
        state: "on"
    then:
      - service: knx.send
        metadata: {}
        data:
          type: percent
          address: i-garagentor-position-state
          payload: 0
  - if:
      - condition: state
        entity_id: binary_sensor.eg_garage_tor_unten
        state: "on"
    then:
      - service: knx.send
        metadata: {}
        data:
          type: percent
          address: i-garagentor-position-state
          payload: 100
mode: single

and a KNX cover entity:

cover:
- name: Garage Tor
  move_long_address: 'x/x/x'
  stop_address: 'x/x/x'
  device_class: garage
  position_state_address: 'i-garagentor-position-state'
  travelling_time_down: 20
  travelling_time_up: 14

EDIT: And a number entity:

number:
- name: "Garage Tor Position Status Fake"
  address: 'i-garagentor-position-state'
  type: percent
  respond_to_read: true

Best regards

The idea of the exposed template is that it answers to read requests. The original cover entity can instantiate correctly (if the loading order is right :slot_machine:) and request the state updater will not log a warning every hour :wink:

You could add a number entity with "respond_to_read: true` using the internal GA to achieve the same.

Get your point, thank you! Also unavailability handling is better with your solution.

Had already a template in the past, which I wanted to get rid of. But most likely not possible. Have to buy the new SupraMatic series one day :sweat_smile:

Where do you put this, in automation?

in which line do you put the “respond_to_read: true”?

If you go for my solution, create a automation, a knx number entity and a knx cover entity as shown in my code examples above ( I did an EDIT in order to have everything in one post).