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:
in /etc/motion/motion.config:
* 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 service
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
/etc/default/motion
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.
Conclusions
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.