Introduction: Home 9000 - the ULTIMATE Doorbell

I just purchased a house in Las Vegas, and, being a long time tinkerer (and instructable maker / sharer), I decided that before I move in, and as long as I have the opportunity to break open walls and run any wire I wanted, I would geek out this house in a big way.

Of course that meant running network connections to all my rooms, as well as to the pool and the garage. I also wired my house for home automation and security.  But being that I live in two houses for the present (one in NYC and one in Las Vegas) until I make the move to Vegas officially towards the end of the year, I needed a way to "live" in the house, or better "occupy" the house virtually, while still working and living in NYC.

This is the result of that idea.

Check out the video on the next page!

Step 1:


Step 2: Home 9000 - the Video

This is a demonstration video of the unit working. I took some artistic license in its production.




Here is a link to a video that inspired my basic concept, however, this is vaporware.

http://www.youtube.com/watch?feature=player_embedded&v=ZJQeecOJUFs

Step 3: Creating the 'Monster'


Why I needed this:

Largely for security purposes, I needed a way to be able to answer my doorbell, no matter where I am (no, I am not that lazy. Well, yes I am ...) from anywhere in the world, but give the illusion that I am actually present in the house.

http://www.bandster.us/ferris.mov
[Sound clip from Ferris Buller's day off]

I decided that Ferris Bueller had the right idea, but I wanted to take that ingenuity a step farther. I needed a way to talk to the person ringing the doorbell, as well as supplying a canned message that I was not there right now and leave a message (In burglar talk that means "Go ahead break in!").  I considered that as long as I am conversing, I would like to see the person as well. This brought me to the idea of using my iPhone and Apple's Facetime.

Step 4: The Conception

Since I would be using FaceTime to do video chat (technically a one-way video chat; I am not providing video to the person at my front door), I first needed to get some hardware and set it up on my front door.

I needed a USB Camera that was USB CLASS (driverless) compatible with the Macintosh O/S (Snow Leopard) and FaceTime.

I needed a microphone and speaker that was waterproof and vandal proof, something that was also unobtrusive and did not stick out like a sore thumb advertising itself. I did not want the person at the door to realize that I am in a remote location which would defeat the whole purpose of my endeavor. I want them to think I am otherwise occupied inside the house and just unavailable ... and lazy. :)

I also wanted a camera that would mount in the peephole of the door and not look out of place. You hardware hackers out there can just take apart a regular peephole and mount a camera inside. I would have done this myself but my skillset is just not up to par, so I cheated and just bought a camera.



Step 5: The Camera, Microphone and Speaker

Presenting The  Agent V5. It is a full HD camera with dimensions of 79mm long x 30mm in diameter.
The circumference of the lens is 2cm. For you non geeks (all three of you) that's 3 1/2" long by just a little bit less than 1 3/16 in. wide.

I used a car mic for the microphone and a waterproof speaker mounted above the door. Note: the camera has its own microphone, but it is set back a few inches, and I did not want to tear the mic out to extend it.

I also used a Telex Audio to USB converter (GriffenTech makes one as well). This way I can take all my video and audio via USB back to the Mac Mini computer in my server room, funneling it away from the front door.

Oh another great product USB Extender over CAT5E or CAT6 Connection up to 150ft:
http://www.monoprice.com/products/product.asp?c_id=103&cp_id=10303&cs_id=1030313&p_id=6042&seq=1&format=2

I may upgrade to this, if the video is choppy:
http://www.monoprice.com/products/product.asp?c_id=103&cp_id=10303&cs_id=1030312&p_id=7644&seq=1&format=2



Step 6: Installing It in the Door

To make this work, I needed to hide the fact that there is a camera and a microphone built into the door, so I drilled a 1" hole in the door, and stopped 1/4" from the front, knocking out the piece. Then, using a sander dremel tool, I flattened the wood so there was still just the peephole size opening on the outside. Using the old peephole with the lens removed, I added a glass protective lens and then embedded the camera behind it, leaving just this appearance (see photo) in front.



I routed the cable thru the door and will post pictures of the finished product some time in the future.

Step 7: The Sequence

If I don't answer the phone, an email with a snapshot of who rang my doorbell is sent to me as well, and a 5 minute video is made of the front doorbell and stored on the hard drive of the local computer. The file name is time-stamped as well.

Note: I can log in to the computer and watch remotely if needed.

Below is the sequence of events (also shown in the video)

Step 8: The Software (Applescript) & More

I set up a separate Apple account with a unique name (account) for the doorbell to be used exclusively for FaceTime calls. I also added in the following command in Apple's Terminal application so my FaceTime would answer a specific caller ID phone number.

To allow a single mobile, open terminal and type:
defaults write com.apple.FaceTime AutoAcceptInvitesFrom -array-add +15205551212
(where the number on the end is your iPhone) It will activate facetime, even if its not open.


APPLESCRIPT CODE:

-- Starts Facetime Session
open location "facetime://15205551212"
delay 5
-- simulate pressing the Enter key
tell application "System Events"
keystroke return
-- Check to see if Facetime is active
tell application "System Events" to set theCount to the count of (processes whose name is "Facetime")
if theCount = 0 then
do shell script "sleep 1"
else
tell application "FaceTime" to activate
-- starts automator script to take picture and email it
tell application "Take Picture and E-mail" to launch
tell application "Take Picture and E-mail" to activate

delay 5
-- Starts Video capture
tell application "QuickTime Player 7"
try
activate
new movie recording
start first recording
do shell script "sleep 10"

set status to true

repeat until status = false
-- sets how long facetime will ring your phone (30 secs)
delay 45 -- if call is active wait 60 seconds before rechecking
--3600 is 1 hour, 1800 =1/2 hour, 60 =1 min, 300 =5 mins
--add 300 (5 mins) ahead/behind starting

-- Check to see if call is still active

tell application "FaceTime" to activate
tell application "System Events" to tell process "FaceTime"
if name of front window contains "not available" then
do shell script "sleep 1"
set status to false

else

-- Check to see if call is still active

tell application "FaceTime" to activate
tell application "System Events" to tell process "FaceTime"
if name of front window contains "with" then
set status to true
do shell script "sleep 5"

-- Check to see if call is still active

else
-- Quit Facetime / video recording if call is not active
tell application "System Events" to tell process "FaceTime"
if name of front window contains "facetime" then
set status to false
tell application "FaceTime" to quit
do shell script "sleep 1"
tell application "QuickTime Player 7"
stop first recording
tell application "QuickTime Player 7"
quit
end tell
end tell
end if
end tell
end if
end tell
end if
end tell
end repeat
end try
end tell
end if
end tell
end
end
end



-------------------------------------------------------------------
Please note This code:

-- starts automator script to take picture and email it
tell application "Take Picture and E-mail" to launch
tell application "Take Picture and E-mail" to activate


This activates a Apple AUTOMATOR script to take a photocapture of the video feed, and email it to me
and start a video capture or the doorbell camera / audio and save it as a .mov file (poor man's DVR)

Here is a great Tutorial how to do this by TUAW's Cory Bohon


Step 9: Snow Leopard and Lion Users Take Heed

I created this instructable initially using Mac’s Leopard O/S. Apple’s successive O/S’s, Snow Leopard and Lion, have made some changes that disabled some functionality. To reactivate these you need to go into your Preferences/Universal Access and click the checkbox at the bottom of the window for ‘Enable access for assistive devices’.

Step 10: The (Hard) Hardware

Now I am a hardware kinda guy, really that is where talent lies. If you look at any of my past 'structables you see I love to tinker. However, this was my first time using a Arduino, and, like a newbie, I ordered one, plugged it in, loaded the software and fainted. Well, not exactly fainted, but felt like I’d been thrown back in time to my first foray with a soldering iron when I worried I was about to burn myself, the project I was working on, followed by incinerating my house!

THIS helped me get started.

The basic logic of the program was this:

Someone pushes the doorbell, It activates a relay that rings the doorbell and activates the Arduino.

The Arduino then:

1) Ignores all activation commands for 4 mins (in case someone rings the doorbell again)
2) Starts a Applescript command on the host Mac computer
3) Activates a second relay (for future ideas)
4) Resets after 4 mins, and goes back to stand-by

Here is the code:

int ledPin = 13; // LED connected to digital pin 13
int potPin = 0; // white doorbell wire to analog pin 0
int val = 0;

long time = 0;

long debounce = 1000;

void setup() {
pinMode(ledPin, OUTPUT); // sets the digital pin as output
Serial.begin(9600); // open serial port at 9600 baud
digitalWrite(14 + potPin, HIGH); // set pullup on the analog pin
// (analog 0 = digital 14, a1 = d15, etc)
}

void loop() {
val = analogRead(potPin);
if (val < 100) { // if the circuit is completed
// (for me, it generally drops from 1023 to ~ 15 when 'ringing')
if (millis()-time > debounce) {
Serial.println("A");
delay(500);
Serial.println("A");
delay(500);
Serial.println("A");
digitalWrite(ledPin, HIGH); // sets the LED on
delay(120000); // ... 240000 = 4 mins
digitalWrite(ledPin, LOW); // and turns the LED off
time = millis();
}
}
}


NOTE: The Appleshare Proxy program was only accepting every third "A" from my Arduino, so I send three and the board now responds instantly without error (I am sure it's sloppy code, but HEY it works!) The 'delay' is where the board ignores all key presses, so the program does not restart if someone keeps ringing the doorbell.



Step 11: What Did It Cost?

I am sure I overspent, but, since this is a prototype, you wind up spending more.

$500   Intel Mac Mini
$100   FaceTime compatible camera
$69     Arduino Board
$50     80' USB Cable / USB to cat5e Adapter
$30     USB Hub
$30     USB Audio Converter
$10     Outdoor speaker
$  5    12V relay
  .99   FaceTime software
$  5    microphone

Aprox    $800.00

Being able to tell the UPS guy to leave the package in the garage, opening the garage door remotely, and watching him put the package in there, and then remotely closing the garage door when he leaves ....
From 2526 miles away ...

*** PRICELESS ***


Step 12: Testing From the Cloud.. Literally!!!



AFTERTHOUGHTS:

Remember that second relay trigger? - well I used it to activate a remote (wireless) doorbell in the back (by the hot tub)
so I can hear the doorbell from anywhere inside or outside the house, and speaking of hot tubs..
I updated the iPad (SpaPad) to a ipad 3 - so Now I can answer the door from the HOT TUB!!

This Instructable has been reliable about 75% of the time, The mac mini version of facetime seems to be a touch buggy
and crashes, and needs a re-boot every so often. The hardware has worked almost perfectly
A year later, I am still using this, and Await for someone to take this idea and make a REAL COMMERCIAL VERSION of this from Kickstarter.

Jonathan
ShopBot Challenge

Participated in the
ShopBot Challenge