DIY Smart Doorbell with a Raspberry Pi

DIY Smart Doorbell with a Raspberry Pi

raspberry pi smart steampunk doorbell

A DIY smart doorbell with a built-in camera, microphone, and speaker. This steampunk-themed design integrates with home assistant and our multi-room audio system to communicate with the rest of our DIY smart home.

Rather than buying a Ring Doorbell (or Nest, or one of the other competitors) I built our own smart doorbell with a Raspberry Pi. The whole project cost about $150 (USD), which is about average for a smart doorbell, but it is much more full-featured than anything else you’ll find on the market. For example, it integrates with the rest of the home security system — using machine learning to identify humans, cars, animals, and more:

DIY smart doorbell detects a guest visitor with AI computer vision
The smart doorbell uses TensorFlow to detect people, cars, animals, and more.

But I’m getting ahead of myself.

Designing the Smart Doorbell

Doorbells live outside.

Okay, that’s obvious. But it was my first electronic project that needed to survive the elements. To that end, I decided to use a junction box to house the electronics themselves.

The next requirement was also obvious: a button. However, the concern with such a unique design is that visitors need to intuitively understand what the device is. I decided upon a durable metal button that also lights up. The intention is for the light of the ring to make the button obvious.

Finally, the camera & speakers. This is arguably the most important security camera in the entire house, and I didn’t have a lot of space in the junction box, so I splurged on a night-vision IR camera with a microphone built-in. Throw in a tiny USB speaker, and we have bi-directional audio.

The complete part list:

Building the Doorbell

I had some spare copper and brass parts lying around from prior steampunk projects. This came in handy when not all of the electronics could easily fit in the junction box.

I began by laying out the parts. Three holes were drilled in the sides of the junction box for the power cable, USB cables, and button wires. Plus, one larger hole in the cover to accommodate the camera:

assembling the raspberry pi parts to create a smart doorbell
The raspberry pi inside the junction box, with holes drilled in the sides for cables.

Before sealing the parts, though, it was time to prototype the doorbell itself.

Ringing the Doorbell

The first order of business was to make the doorbell actually ring.

With the doorbell wire attached to GPIO18 (pin 12) on the Raspberry Pi, I then used the Serial Port input in Node RED to detect button-presses. To actually trigger a doorbell alert, as well as handle bi-directional (microphone/intercom) audio, see this post:

Motion Sensor Doorbell Camera

There’s also the topic of motion detection and video.

In this regard, the doorbell is just another CCTV camera. It uses the exact same setup described in the following series of posts. The motion detection and object recognition is what generates the images like the one at the top of this post.

With the coding done, it was time to put all the parts together…

Smart Lock Integration

With the basics covered, it was time to assemble and mount everything:

steampunk themed raspberry pi doorbell assembled
Adding some random copper and brass parts to create a steampunk theme.

I used hot glue on the openings of the junction box to seal it, where possible. The copper ring seen above also has a lip, protecting the camera from water. Plus, the whole thing is installed underneath a balcony, so not much water even has the chance to hit the doorbell.

The final pieces was to integrate the doorbell with a smart lock. Thankfully, Home Assistant makes this easy. We have this Yale Assure lock:

It communicates with Home Assistant via Z-Wave. What I like about this lock is that it can be programmed remotely to support different user codes (useful as an Airbnb host, or when you need to let a friend in). It also can detect which user pin code was used to open the door (and when) — great peace of mind when giving cleaners a code to the house.

home assistant motioneye camera
Home Assistant connects to MotionEye to show the camera, motion alerts, and other detections.

But, most importantly, it can be locked/unlocked with a tap in Home Assistant.

Source Code: Recap

I wish I could give you copy-and-paste code for this project, but a lot of it will depend on your exact hardware, speakers, cameras, etc. Instead, I’ll recap each piece involved and link to the articles/code where I explain how to implement them:

Home Automation Ideas

Thanks for reading this post. You might be interested in this list of 100+ home automation ideas.

Or, drop your email in the form below and you'll receive links to the individual build-guides and projects on this site, as well as updates with the newest projects.

... but this site has no paywalls. If you do choose to sign up for this mailing list I promise I'll keep the content worth your time.

Written by
(zane) / Technically Wizardry
Join the discussion

6 comments
  • Is there somewhere you have the complete doorbell guide in one article? I’m great with hardware but not so much coding… I wouldn’t know how to adapt the instructions from the other articles to apply to the doorbell.

    • Hey Alex — if you want to do the sort of multi-room setup I have plus facial recognition and live CCTV, I’m afraid it’s far too complicated for a single article. It took about three articles to explain the multi-room sound-system, for example, which is how I play the audio alerts. That article includes the exact source code in Node RED that plays the doorbell alert. That’s the only software controlling the doorbell at all, so I think that article is pretty much all you need in terms of code. It just uses the Node Red gpiod node to trigger the flow. If you only want to play through one speaker, you may not need the other articles in the series. There’s also the person recognition with MotionEye, which you need to train and configure yourself (I can’t just give you my config, it wouldn’t help). But let me know if you get stuck on anything, and feel free to contact me.