Hack your garage door for $10

I’m not a super duper IoT guy. I try to make things with my only baggage as a software engineer, small knowledge of electricity… and a lot of curiosity.

WARNING: this article is (unfortunately) in close relation with the WAF (Wife Acceptance Factor), so take care.

Intro

I was always faced to my garage door, struggling by searching my remote lost in my bag (yes, it’s huge enough, but no way to have it in my pocket). After removing all the Mac/iPhone/headphones cables off my bag, kind of 4/5min under the rain (yeah, I’m living in Lille), to finally hearing my girlfriend saying: “Oops, I have it.” #rage.

Commuting to my job, I googled some words to find how the remote works: “433MHz”. For the non-advanced ones, it’s a frequency that most of the home automation tools use to communicate. You can buy antenna like RFXCom that can sniff on signals, and repeat them to simulate the device and automate them with a home automation box such as “Home Assistant” or “Domoticz” (there are many more).
The thing is, that kind of remote is quite secure (to prevent from guys like you, who want to hack a garage door), and sends rotative signals with the door receiver, that is quite hard to learn and simulate.

End of the story, start building things. Go to your co-ownership to buy a new remote and start.

First idea: simulate “for real” the button pressure

The morning I had my new remote control, I didn’t want to break anything on it. From first thoughts, I was thinking about simulating a pressure with a small engine linked to a raspberry: OVERKILL.

Actually, I looked throughout existing solutions and I discovered MicroBot Push, a $49.99 wireless robotic button pusher. Honestly, too expensive. Pretty sure it’s a great product, but, paying attention to the WAF, it’s unaffordable (yeah, price and probability that the remote goes out of the MicroBot, or that the button isn’t pressed enough… it’s up to you).

Main idea: simulate “from electricity” the button pressure

Breaking news: a button… is… only… a switch.
Breaking news 2: a switch… is… only… a little system that links two electrical circuits (e.g. cables) between them.

That is to say: if you weld two cables around a button (see figure below), and play by sticking them to each other, it will act as a button pressure: TADA. Isn’t it right?
Now, try to imagine that you could programmatically stick those two cables from a relay… it would work as much!

Here is the tool you need: NodeMCU (ESP8266), 1 of those relays, and some cables.
Solution: Thanks to the ESP, you’ll be able to connect to your WiFi network, to open an API and handle requests to open a GPIO pin to open/close the relay, which will be weld around your garage remote button. We can now say: TADA!

First step: weld 2 cables around the open button
Second step: link them to the relay (switch side)
Third, and last step: link the relay (controller side) to your ESP8266, from up to bottom, GND, 3.3V, D4 (GPIO 2)

You can find on my GitHub the Arduino project that opens an API on a WiFi network in a /open route.

Home Assistant integration

I think there can be many solutions to implement a virtual button to call our new ESP API. I personally don’t want to manage a state, as my door automatically closes after some seconds. So I only want to have an action on the “on” action, but nothing on the “off” action.
The problem with REST button or other kind of solutions is that you need to have a responding call (HTTP 200) in the “off” action.

Here is the Home Assistant button config:

switch:
- platform: command_line
switches:
garage:
command_on: "/usr/bin/curl -X GET http://ESP8266_IP/open"
command_off: "exit 0"
friendly_name: Garage

To handle the button initial state (e.g. “off”), I created an automation script that sets the new button to “off” after 5 seconds.

You can find the Home Assistant sources in the same repository on my GitHub.

Final words

Even if it’s a working solution — that, by the way, can be applied in many circumstances — I sometimes have pain to place the remote in a hidden place while keeping a good distance with the receiver.

By welding the cables, it allows you to keep your remote functional, without breaking anything. When leaving your flat, just unsolder them, and that’s it.

I also want to thanks my friend Aurélien for giving me IoT tips, otherwise this article title would have been “Hack your garage door for $50”.

I’m also listening for feedback, as, like I said, I’m still not a a super duper IoT guy.

Sources: GitHub.