Garage Genie - Parking & Remote Control





Introduction: Garage Genie - Parking & Remote Control

Glovebox Gadget Challenge

Second Prize in the
Glovebox Gadget Challenge

The Garage Genie is a car automation Arduino gadget. Click on the two images above to see the animated explanation. It aims to do a few things:

1. The “traffic lights” tells you when you’ve inched your car up close enough when parking. The lights are control by an Arduino using an ultrasonic distance sensor.

2. The ultrasonic distance sensor tells the system whether a car is parked in the stall or not. Using iPhone or Android app, you can check whether or not someone’s car is in the garage.

3. Non-invasive remote open/close operation of the garage door via smart phone app. I'm using a spare garage door remote so that you don't need to cut into existing wiring.

4. Webcam view of garage if you have a webcam in the garage.

5. Notification when car arrives, either via email or audible announcement

The Garage Genie is part of my series of Instructables for Arduino devices based on an awesome, open source home automation platform called OpenHAB.

Here is how the pieces of the Garage Genie fit together. Continue on for a step-by-step of how it's built.

Don't know if it'll amount to anything. But I'm in the Instructables Contest, if you want to vote. Thanks!

Step 1: Parts List and Initial Hardware Prep

Here's the parts list.

  1. Ultrasonic distance sensor (less than $4)
  2. Arduino Uno clone ($9)
  3. Arduino prototype shield ($4)
  4. Arduino ethernet shield ($8)
  5. Relay module ($6)
  6. Color LEDs
  7. Dupont cables
  8. 5V AC adapter (like from a smart phone / USB charger)

The initial hardware preparation involves putting the Arduino together and getting the garage door remote ready for wiring. I've combined these tasks into this step.

Once you have the parts, assemble the Arduino components (Arduino, ethernet shield, prototype shield) into a stack like this. Pretty simple.

Next, we'll be using the relay module to actuate the button on the spare garage door remote. To do this, we need to prepare the remote. First, remove the circuit board and solder wires to one of the buttons. This following series of pictures should give you a good idea of what to do.

Here's the circuit board removed from the remote housing.

Next, decide which button corresponds to the garage door open button. Use a multimeter to determine which two pads/legs on the button are shorted when the button is pressed. Solder a few inches of wire to these two legs. You should take the batteries out of the remote so you don't accidentally operate the garage door.

If you measure the continuity across the two wires, it should be an open circuit. Once the wires are installed, try to open garage by touching the two wires together. It won't work because the batteries aren't installed. Put in the battery and try again.

Ok, next!

Step 2: Software Setup

The data flow diagram above explains how the three pieces of software (Arduino, Mosquitto, and OpenHAB) work together to get the functionality we're after. This one diagram pretty much explains how all the communications work. Hopefully it makes sense.

Let's take care of the PC side by installing the two programs Mosquitto and OpenHAB.


Install the MQTT broker called Mosquitto. Once installed, Mosquitto can simply be ran by double clicking on the executable after installation. Make sure Mosquitto is running by navigating to the program folder and running this following command in the command prompt window ("dos prompt").

cd C:\"Program Files (x86)"\mosquitto
mosquitto_sub -h localhost -t #

This subscribes to all topics on the MQTT broker. When numbers come in from the Arduino's ultrasonic distance sensor in later steps, you'll see them appear here. And when you push the garage door open button, you'll also see that activity here. Use ctrl_c to cancel out of this.


OpenHAB is the main server. It can be installed on a PC, Mac, or Raspberry Pi (and other similar single board computer). The Raspberry Pi is ideal for this since it's very energy efficient, but for first time users, a Windows or Mac installation will be easiest.

Install OpenHAB according to the instructions on the OpenHAB wiki. Get familiar with some of the OpenHAB files like the sitemap, item, and rules file. The wiki does a good job explaining this, so I'll forgo the OpenHAB explanation myself.

Once installed, use the attached text file and add the appropriate sections to the configuration of the item, sitemap, and rules files. Here's the the graphics used for the "car present" indicator, but you're free to use your own if you're artistically incline. The images go in \webapps\images of the OpenHAB folder.

That should be it for OpenHAB. If you're using Windows, double click the "start.bat" file in the OpenHAB folder to start running it. Open a browser and go to "http://localhost:8080/" to view the interface.

For the mobile app, download it from the app store and enter the IP address of the PC hosting OpenHAB. You'll have to "port forward" and create a "dynamic DNS" in order to use the app outside of your home wifi network. I won't go over this detail, but google it and you shall find.

Step 3: Parking Lights Circuit

Next, assemble the circuit for the LED lights. The resistor values can be anything from 150 ohms to 220 ohms, depending on how hard you want to drive the LED's.

Step 4: Non-Invasive Remote Garage Door Control

Next, wire up the relay circuit as shown above. You should already have the circuit board for the remote garage door opener ready. The two wires from the remote control just needs to be wired into the first relay's normally open terminal.

I don't recommend powering the relay coils using the Arduino. You should use a separate power supply, like a 5V USB charger. I used a spare one I had laying around. They're so common you likely have one you're not using. Cut off the ends, solder dupont cables to them so you can simply connect them to the male JD-Vcc pin on the relay. Connect the common wire from the AC adapter to the GND on the Arduino, as shown in the wiring diagram.

Step 5: Upload the Arduino Code

At this point, you may want to take the battery out of the remote again so that you can test communications without needlessly operating the garage door.

Upload the following Arduino code. Check out the header comments to determine what edits are required. You'll need to change the IP address of the server. You may also want to edit the color ranges for the LED's. You can use the serial monitor to see whether or not the Arduino is connecting to the MQTT server, and what the distance sensor is seeing. There are lots of println statements in the code for troubleshooting.

Step 6: Webcam View

You can use any webcam that has a mjpeg stream and that you can access on LAN without password. Edit the OpenHAB sitemap file and change the IP to the IP address of your webcam.

Frame label="Camera" {
Video url="" encoding="mjpeg"
//Video url="" encoding="mjpeg"
}//end frame "camera"

I happen to be using a USB webcam connected to a small Linux computer, running a program called Motion. I won't prescribe what webcam to use, since there's so much variety. If you're running the server on a Pi, you can put this Pi in the garage and run Motion and a USB webcam off of it.

Step 7: Automation

Now, you might be asking - "what's the use of the car presence indicator if there is already a webcam view?"

Good question! First, I like making tutorials that can be used by people in different circumstances. And some people don't have a webcam in the garage. So they would be using the presence indicator.

But, the more interesting thing for having a digital bit represent "car present" status is that now you can do automation! A simple example is to set up OpenHAB to email you when someone's car arrives in the garage, and announce that person's arrival.

rule "send email when arrive"
		Item itm_garage_dist changed from CLOSED to OPEN
		say("Mom is home")
		sendMail("", "mom is home" , "just now")

The speaker on the computer will perform a text-to-voice action and announce "mom is home". Then it sends an email. If you have fancy Sonos speakers (which I don't), OpenHAB can control those speakers to start playing music when you come home.

If you want an idea of how the text-to-speech sounds like, take a look at this video for my laundry room automation.

Step 8: Remote Access, Security, and Tips

Since this is opening a garage door, you'll want to make sure you authenticate and encrypt the communication between the mobile app and your server. This is pretty easy to do with OpenHAB. First, create a user and password on the server. Under ~/OpenHAB/configurations/users.cfg, add a user and password like this:


Once that's done, you need to be able to access OpenHAB via the encrypted port 8443. Test this out first by going through your web browser and going to


If that works, you'll have to setup a port forward in your router to access the server at port 8443. To make it easier, setup up dynamic DNS so you don't have to remember your home IP address, which might change.

This project is purposely made to work with a hard ethernet connection so no wireless gateways are needed. If you don't have ethernet to your garage, it's pretty easy to make a wireless bridge using a cheap $20 "tomato" or "dd-wrt" compatible router.

Step 9: Conclusion & Video Demo

This video demo goes over all aspects of the Garage Genie.

OpenHAB has been around for a couple of years now, but it's mostly been used by people who are automating commercial products like Sonos speakers or Phillips Hue lights. There hasn't been a lot of information on how to use Arduino with OpenHAB. It's odd considering there's so much potential for Arduino users to integrate their custom Arduino gadgets to OpenHAB.

This Garage Genie project originally started out as a request from commenters on my other Uber Home Automation Instructable. The Uber project focused on wireless Arduino sensors, but a lot of people wanted a more simple wired setup. This project is a good complement because it shows how to use OpenHAB with a wired Arduino for inputs and outputs. The code is easily adaptable for whatever sensor and output you might need. For example, you can add a PIR sensor to the garage Arduino and have it act as a security device; turn on a light, play a loud audio file, and send an email notification if an intruder is detected.

Once you have the infrastructure in place, the possibilities are endless!



    • Paper Contest 2018

      Paper Contest 2018
    • Pocket-Sized Contest

      Pocket-Sized Contest
    • Science of Cooking

      Science of Cooking

    We have a be nice policy.
    Please be positive and constructive.




    So cool! I'm happy to see that you've responded to commenters from your other automation project. The fact that this project is so adaptable for other sensors and outputs makes it all the better.

    Hey, thanks. Yeah, this stuff is really exciting. The more people get into it, the more cool, creative stuff we'll get to see. Love internet of things.

    Hi electronichamsters,

    I have built this and the LED's change colour OK and the door button in openhab operates the relay but my icon does not change in openhab to show if the car is in the stall or not..

    I get this in the serial log from arduino when moving in front of the ultrasonic sensor ...

    starting MQTT send
    MQTT connected OK from MQTT Send
    finished MQTT send

    Have renamed the icons you uploaded to mycarstall-OFF and mycarstall-ON

    Only the mycarstall-OFF icon shows at all times.

    Please tell me where I have gone wrong

    great instructable, I wonder you can give me some hints on connecting tonmqqt broker when arduino is outside the LAN. I connect but no success with publish our subscribe.

    Hello, please I have the code for arduino for this particular project..thanks

    Hi, I am 69 years old trying this nice project. Now my mobile app to openhab link is OK and arduino serial port also shows the MQTT is connected, but no data exchange takes place. I am not sure about openhab.cgf file and mosquitto.conf file, can some one share these two configuration files, please.

    For anyone who may be going through the nightmare that I did trying to make this work with a different 5V Relay and no LED's or Ultrasonic Sensor here is what I did to make the program work.

    I attached an W5100 Ethernet Board generic to the Arduino Uno R3 and the 5V Relay I bought has Two Relays on it and is configured with an Optoisolator which caused me major problems in wiring up the relay based on the instructions here.

    What finally worked is supply 5v power and ground to VCC and GND on the 4 pin connections labeled VCC - IN1 - IN2 -GND

    LEAVE THE JUMPER ON the two VCC pins on the isolator

    Connect the Ethernet shield to the relay board at IN1 from Digital Pin 9

    Change Sketch to identify pin 9 as the garage button pin

    (Pin 4 is used by the ethernet board to control SD card slot)

    Once this was done everything worked out perfectly!

    Thank you very much for this instructable. I am looking forward to configuring it to work with a presence rule so that it will be trigger automatically on arrival and departure from home!


    When I run the command, i get an Error Message:

    mosquitto_sub.exe - Ordinal Not Found.
    The Ordinal 285 could not be located in the dynamic link library SSLEAY32.dll

    I installed OpenHab and mosquitto on My Win 7 PC.

    Any help is highly appreciated.


    Hi friend. First I have to say that I loved your projects. I woul like to know if its possible to use more than one Arduino to send/receive instructions in the network? Thank you.

    ​So I found the issue.. just dont know how to fix it. I ended up installing a java app called mqtt-spy

    I connected to my server them under topic i entered 4132 and pressed publish and the relay went off. So my issue is with OpenHab. I copied and pasted your coding right into so I am kind of confused.

    I am going to keep messing around with it. Any ideas would be nice.