Last week I finally got around and bought my first Raspberry Pi. Getting it up and running with Raspbian via Noobs was a breeze and after playing around with the OS and Python for a while I decided to get some real use out of this little machine. My first experiment aimed at a home security camera. As I did not want to invest in additional hardware, I used what I could find in the household’s scrap heap – in this case a no-longer-in-active-use PS2 EyeToy camera.
My first intention was to use SimpleCV and Python to take regular snapshots and let a rudimentary WebAPI expose the latest image to the outside world. The code for this would be very simple and easy to extend with additional features. But, this experiment failed as I could not get a proper driver for the EyeToy working with SimpleCV.
My next test was to use an open-source tool for talking to the EyeToy. I tested Motion and it connected right away with the camera. Motion is a very powerful motion detection tool with tons of configuration options. The features that I was interested in were available:
- Take a photo at a regular interval
- Expose the photo via a web interface
- Security options for the web interface
Basically, to get it up and running for my purposes, these where the steps I used:
- Install motion
sudo apt-get install motion
- Change the default settings to suite my needs:
* Turn off storing of movies and photo sequences created after a motion is detected (it would eat up the small SD card on my Raspberry otherwise)
* Expose the live streaming web interface to a dedicated port
* Add a login for the web interface
- Get the motion service working (see section below)
- In my router, add a port-forwarding to my Raspberry Pi and the port used by motion
Motion can be started manually from the command line, but the installer adds an init.d-service so that motion is started as daemon process when the Raspberry Pi boots. I had to add r+w permissions on three files to make the service work though:
chmod u=rw,g=rw,o=rw /tmp/motion.log chmod u=rw,g=rw,o=rw /var/run/motion/motion.pid chmod u=rw,g=rw,o=rw /etc/motion/motion.conf
I also had to set start_motion_daemon=yes in this file
If you still have problems you can switch to the motion user (created by the motion installer) and start motion manually to view any errors.
sudo su -s /bin/bash motion motion
My motion configuration
motion.config has so many options that it can be hard to get started. Here are the settings that I use (the settings that are different from the default configuration), if anyone reading this wants to use the same setup that I have:
logfile /tmp/motion.log # log to this file output_pictures off # don't store images ffmpeg_output_movies off # don't store videos stream_localhost off # allow access outside localhost stream_auth_method 1 # use basic authentication for access stream_authentication USER:PWD
Where USER and PWD is the authentication that you want to use for accessing the image stream from a browser.
The EyeToy does not produce high-quality images and has a hard time in badly lit surroundings, but as a first IoT-experiment it is sufficient and now I can keep an “eye” (though not in HQ) on parts of our home from a web browser while being away. With the correct setup, motion provides streaming from USB cams in a simple way.