CarPlay garage door cloud control without a Homekit Gateway using a shelly 2.5 as broker

I want to share my solution for this scenario—maybe I’m not the only one facing it.

I have an electric garage door that is Wi-Fi enabled and integrated into Home Assistant via MQTT as a cover. Unfortunately, it doesn’t support cloud integration. I wanted an Apple CarPlay integration that allows me to open the door conveniently when coming home from more than 100 meters away.

The requirements were:

  • Cloud-enabled, so I don’t need to be on my home network or use a VPN.
  • No Apple HomeKit, since I don’t have a HomeKit gateway, which is required for cloud functionality.

I found that Shelly Cloud is free and CarPlay-enabled :blush:. Here’s what I did: I used a Shelly 2.5 (or any device with two relays) and integrated it into Home Assistant. It doesn’t need to be wired to anything—it acts solely as a broker for the free Shelly Cloud.

The first relay is for the opening/closing the door as a button to be tapped in carplay, the second relay is an indicator weather the garage door is opened or closed.

I created two automations:

  1. Garage Door Toggle: This automation toggles the garage door using the cover service when pressed. It also updates the second relay according to the door state. Simple as that—I now have a button to open or close the door and an indicator showing the current door status in CarPlay.
  2. Relay Status Correction: This automation handles the second relay, correcting the status if it’s accidentally switched manually.

Any suggestions for alternative solutions or feedback are welcome!

alias: garage door broker 2.5
description: ""
triggers:
  - trigger: state
    entity_id:
      - cover.garage_door_garage_door
    to:
      - open
    id: open
  - trigger: state
    entity_id:
      - cover.garage_door_garage_door
    to:
      - closed
    id: closed
  - trigger: state
    entity_id:
      - switch.shellyswitch25_4c7525335e56_channel_1
    to:
      - "on"
    id: toggled
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - toggled
        sequence:
          - action: cover.toggle
            metadata: {}
            data: {}
            target:
              entity_id: cover.garage_door_garage_door
      - conditions:
          - condition: trigger
            id:
              - open
        sequence:
          - action: switch.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: switch.shellyswitch25_4c7525335e56_channel_2
      - conditions:
          - condition: trigger
            id:
              - closed
        sequence:
          - action: switch.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: switch.shellyswitch25_4c7525335e56_channel_2
mode: single

Door status indicator:

alias: Garagentor Broker 2.5 helper
description: ""
triggers:
  - trigger: state
    entity_id:
      - switch.shellyswitch25_4c7525335e56_channel_2
    to:
      - "on"
    id: "on"
  - trigger: state
    entity_id:
      - switch.shellyswitch25_4c7525335e56_channel_2
    to:
      - "off"
    id: "off"
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - "on"
        sequence:
          - delay:
              hours: 0
              minutes: 0
              seconds: 0
              milliseconds: 500
          - if:
              - condition: state
                entity_id: cover.garage_door_garage_door
                state:
                  - closed
            then:
              - action: switch.turn_off
                metadata: {}
                data: {}
                target:
                  entity_id: switch.shellyswitch25_4c7525335e56_channel_2
      - conditions:
          - condition: trigger
            id:
              - "off"
        sequence:
          - delay:
              hours: 0
              minutes: 0
              seconds: 0
              milliseconds: 500
          - if:
              - condition: state
                entity_id: cover.garage_door_garage_door
                state:
                  - open
            then:
              - action: switch.turn_on
                metadata: {}
                data: {}
                target:
                  entity_id: switch.shellyswitch25_4c7525335e56_channel_2
mode: single


1 Like