Raspberry Pi DropCam Alternative

Published

Introduction: Raspberry Pi DropCam Alternative

I was looking for a way to check in on my house while away as well as have any motion captured and uploaded to the internet as a security camera. Doing a little research online and realizing that I had a raspberry pi and a usb webcam not being used for anything else, This is what I put together.

Please note, this is a brute force method and does not provide any type of security to the webcams stream but its my first time working on something like this.

Step 1: Resources

I have to start with credit to the websites that I used for my research:

http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome - The software I used was called Motion, it handles the streaming of the webcam to the web as well as detecting motion and saving the movie files.

https://github.com/andreafabrizi/Dropbox-Uploader - This software allow you to sync your files into a Dropbox Account

http://www.slblabs.com/2012/09/26/rpi-webcam-stream/ - This site explains a few different ways to setup the camera on the raspberry pi to set up a simple web stream of the image.

http://mogshade.wordpress.com/2012/12/23/simple-home-security-with-raspberry-pi-and-dropbox/ - This site is where i started with for implementing the upload of the movie files to a Dropbox account

https://www.instructables.com/id/Host-your-website-on-Raspberry-pi/ - This Instructable was used to set up a simple website to view your Web Stream from.

Step 2: Setting Up Your Raspberry Pi

First things first. The raspberry pi should be setup with a standard version of Raspbian. If any help on doing this is needed please refer to http://www.raspberrypi.org/ or http://learn.adafruit.com/adafruit-raspberry-pi-lesson-1-preparing-and-sd-card-for-your-raspberry-pi

We also need to setup a SSH connection to access the Raspberry Pi remotely. So do this refer to http://raspberrypi4dummies.wordpress.com/2013/03/17/connect-to-the-raspberry-pi-via-ssh-putty/

Now You should setup port forwarding for your raspberry pi for both port 80 and 8081
while you are in your router settings also write down your Raspberry Pi's Public IP address as it will be what we use in the next few steps.

Step 3: Installing the Motion Detection Software

Now lets install the Motion Software onto the Raspberry Pi.

1) Install Motion using the following commands:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install motion


2) Now lets setup the Motion Software, the following will open the configuration file:
sudo nano /etc/motion/motion.conf

a) In this file, you can adjust a whole bunch of things in the motion software but there are a few things that we need to change first
daemon - default is set to OFF, we need to set it to ON so that it will run in the background
webcam_localhost - Set to OFF so that you can access the stream from other computers
stream_port - Take note of the port as this is where you will point your browser to view the stream
control_localhost - Set to OFF as this will allow you to adjust some of the features remotely (I dont use this but it could be useful)
control_port - Take note of this port as it will be how you can change some parameters remotely in your web browser
framerate - I set this to 2 or 3 frames per second (over 5 will bog down your Pi)

b) We also need to change one last setting:
sudo nano /etc/default/motion
change "start_motion_daemon=no" to "start_motion_daemon=yes"

Now if you start the Motion software, in some browsers you will be able to view the stream. if you cannot yet, we will correct that in the next step.

Step 4: Setting Up the Web Server

Next thing to make the web stream visible from nearly all browsers we need to setup a small web server on the raspberry pi along with a simple HTML page.

We are going to install Apache, PHP5, and PHP5 mod for apache. Not all of them may be used in this project but they are good to have in case you want to make your website a bit more that we will setup here.

Now Install the applications with the following command:
sudo apt-get install apache2 php5 libapache2-mod-php5

Next allow overrides:
sudo nano /etc/apache2/sites-enabled/000-default

Change "AllowOverride None" to "AllowOverride ALL"

Now restart the server to to allow the overrides

sudo service apache2 restart


Now your Website is Up and running. If you type the IP address for your Raspberry Pi into a browser you should be able to see a simple website.

Step 5: Setting Up a Basic Webpage

Now that you have a basic website being hosted on your raspberry Pi as well as the motion capture software lets combine the two.

first lets change the permissions to the directory for the HTML file

sudo chmod 777 /var/www

If you type in the following command line it will bring you to the HTML file that is the front page of your website:

sudo nano /var/www/index.html

This file currently contains the HTML code for a very basic website. We are going to change it to the following in order to display the web streaming image.

<xmp>
<html>
<body>
<h1> Raspberry Pi DropBox Camera Stream </h1>
<img src="http://Raspberry pi's IP:8081">
</body>
<html>
</xmp>

Note: Remove the <xmp> & </xmp>, this was the only way I know to get HTML into an instructable

Save this file and then in a web browser type in the raspberry pi's IP address and check out your new website


Step 6: Linking Your Raspberry Pi to Your Dropbox Account

First be sure that you have a DropBox account (www.dropbox.com). If you do not then set one up before going on.

Then Download Dropbox Uploader
First Change to which ever directory that you would like to install this program into (I just did it to the Home Directory)

Now download the application using the following command:
curl "https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

Now change the permissions of the program
sudo chmod +x dropbox_uploader.sh

Finally run the script and follow the instructions it gives you.  This will guide you through setting up the OAuth connection to your dropbox account
./dropbox_uploader.sh

If you have any issues, try reading the README.txt in the files you downloaded or visible here
https://github.com/andreafabrizi/Dropbox-Uploader/blob/master/README.md

Step 7: Create Automatic Dropbox Uploads

Now we just need to create 2 Python Scripts. One to upload the Movie files and another to clear the temp directory from time to time.

First lets start with with creating the Python Script to Upload to Dropbox automatically.

Change the directory to which ever directory you would like (i did this in the home directory)
Then use the following command to create the script called Uploader

sudo nano uploader.py

Now you should be in the blank python script file. Insert the following code into the file.
Please Note that this script is assuming that Motion's files are being saved in the Temp Directory (the default)

import os
path="/tmp/motion/"
def upload_files():
if not os.path.exists(path):
return
os.stdir(path)
for files in os.listdir("."):
if files.endswith(".avi"):
cmd = "/home/pi/dropbox_uploader.sh upload " + path + files
os.system(cmd)
os.system("sudo rm /tmp/motion/" + files)
if _name_ == "_main_":
upload_files()


Save and close the file (CTRL + X)

Now lets create the second File that clears the Temp Directory (this will happen each time the raspbery pi is restarted but I wanted to have more control)

sudo nano cleartmp.py

In this new file place the following simple code

import os
os.system("sudo rm /tmp/motion/" + "*.jpg")


again Save and Close the file (CTRL + X)



Now One last time to make these two things run automatically

Type the following command to modify the crontab file

crontab -e

Add the following to lines to the bottom of this file

* * * * * python /home/pi/uploader.py # Sync webcam files dropbox to run each minute
@hourly python /home/pi/cleartmp/pr #Clear temp for motion each hour


Close and Save

Step 8: Finished

Now you are all set. I know that alot of this was a brute force method but it works. Also be careful as the website not very secure as it is just accessed via your IP address.

Finally, you can go through and play with the settings in motion to fine tune it as to what you would like.

Enjoy!

Share

Recommendations

  • Casting Contest

    Casting Contest
  • Clocks Contest

    Clocks Contest
  • Woodworking Contest

    Woodworking Contest
user

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

Tips

Questions

44 Comments

You can also use Kerberos.io, it's also open-source and a lot more user friendly to install and configure. You can find more information on the website.

1 reply

Thank you

can't find "webcam_localhost" in motion.conf file

1 reply

it's "stream_localhost" - I had trouble too. It must've changed recently.

can't find "webcam_localhost" in motion.conf file

Im pretty sure this is clear to some, but being new to DropCam, I'm a little confused. Will this allow me to setup and use my DropCam without having to pay for their monthly service?

Im searching for a way to sync DropCam to Dropbox, if at all possible.

1 reply

@jbennett38 - no, this is a DropCam *alternative* solution, it does not integrate with an existing DropCam camera. Here, you use a Camera designed to be connected to your Raspberry Pi. There's some pretty good ones out there with auto night-vision (WaveShare etc) for around $30.

Thank u so much guy!

For anyone having trouble getting the photos to upload to dropbox use this script:

import os
path="/tmp/motion/"
dest="/( REPLACE WITH NAME OF APP FOLDER ON DROPBOX..."
def upload_files():
if not os.path.exists(path):
return
dir_list = os.listdir(path)
for file_name in dir_list:
if "jpg" in file_name:
print"Upload Pending..."
cmd = "/home/pi/dropbox_uploader.sh upload " + path + file_name + " " + dest
os.system(cmd)
if __name__ == "__main__":
upload_files()

Pay attention to indenting which was hard to do on this comment...

Awesome article and very thorough.

Anyone have any advice on configuring passwords for web server?

1 reply

Hi,

I've tried using your script but I get an indent error on line 6.

Any chance you can upload to github or something as I'm not savvy enough with python to fix errors.

This is what I'm doing - I've edited it briefly for my own situation (ie path of uploder, and where the dropbox_uploader.sh script is located.

import os

path="/var/www/media/"

dest="/MBRPI"

def upload_files():

if not os.path.exists(path):

return

dir_list = os.listdir(path)

for file_name in dir_list:

if "jpg" in file_name:

print"Upload Pending..."

cmd = "/home/pi/Dropbox-Uploader/dropbox_uploader.sh upload " + path + file_name + " " + dest

os.system(cmd)

if __name__ == "__main__":

upload_files()

Screen shot 2015-04-06 at 19.18.27.png

Getting stuck on step 5. Do i have to set my router to forward port 8081 in order for the stream to be seen on the webpage? This is what the page looks like right now.

Screen Shot 2015-03-27 at 1.33.53 AM.png

curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

1 reply

Yeah_ this was the correction which was to be done,i suppose (this is what i checked).
I am sharing the screenshot i NOW get while running the .sh file.
The folder name corresponding to the app name i defined whil following the instructions given in screenshot has been successfully created but the pictures are still not being uploaded.
both the .py files are properly indented and i have used

cmd = "/home/pi/Dropbox-Uploader/dropbox_uploader.sh upload %s %s %s" %(path + file_name," ",path + file_name)

following a comment on this page (below).

any help is appreciated. :)

Screenshot 2015-02-25 23.46.00.png

Wonderfull! :-) I don't know if dropbox usage has changed or if I did not read something correctly but I had trouble with the shell wanting more info. I finally gave it the name of my dropbox app and it worked! .... because I had put in " myapp" it needed the " " then text...

cmd = "/home/pi/dropbox_uploader.sh upload " + path + files + " " + file_name

the first files are copy _from_ . the second are copy _to_.

I decided that a prefix of something raspberry flavored was actually a good thing :-)

best to you all

bob

hi

i just did every thing you said. but it doesn't work.

i have raspberry pi model a, a wifi dongle & MD80 mini camera, all connected to a usb hub. my uploader file contains :

import os
path="/tmp/motion/"
def upload_files():
if not os.path.exists(path):
return
os.stdir(path)
for files in os.listdir("."):
if files.endswith(".avi"):
cmd = "/home/pi/dropbox_uploader.sh upload " + path + files
os.system(cmd)
os.system("sudo rm /tmp/motion/" + files)

if _name_ == "_main_":
upload_files()

any Suggestions?

still not working on step 7 , please T_T

Gday,

I have just completed Step 5 and can get the camera to stream the video, however whenever there is movement detected the streaming of the video stops. I can get back onto the streaming eventually. Any ideas where this might be falling apart?

Thank you in advance!

Thanks for this useful article!

If it's not working with the RasPi Cam (no /dev/video0) try:
sudo modprobe bcm2835-v4l2

and /dev/video0 should be there; then restart motion.

My house got broken into last week so this got me to this tutorial.

I'm the owner of a pi but not that experienced in programming, all that i've done so far is running xbmc and stuff like that...

The tutorial seems pretty clear to me to construct but i have some questions before i run to the store for a new sd card&pi cam (replacing tv/laptop etc costs me enough already :( ).

1) does the script auto start when turning on the pi and if not how can i accomplish this?

2) when motion is detected is it possible to have a 60sec delay before posting to dropbox and further actions?

3) when motion is detected how can i let the pi play a mp3 sound over the audio jack in an attempt to scare the intruder?

4) when motion is detected can the pi contact me on my smartphone over facebook messenger/twitter/sms/mail/whatsapp and or others...?

1 reply

1) It should because of the file /etc/init.d/motion, but in case it doesn't...

Just edit rc.local file: sudo nano /etc/rc.local

And add these 2 lines before the exit statement:

# Start motion

motion

2) Modify the file uploader.py: sudo nano uploader.py

And add this line before "upload_files()": os.system(sleep 60)

3) First install a command line mp3 player: sudo apt-get -y install mpg321

Then add this to /etc/motion/motion.conf: On_picture_save mpg321 whatever.mp3

4) To create a script file that sends emails using Gmail, check this link: http://iqjar.com/jar/sending-emails-from-the-raspberry-pi/

Then add this to /etc/motion/motion.conf: On_picture_save send_email.sh

Hope it helps!