CCTV Raspberry Pi Based System with Storage using MotionEyeOS

This project was written by Julian Silver and edited by Rui Santos and Sara Santos.

In this project Julian is going to show you how to build a complete Raspberry Pi based home surveillance system in which you can manage all your cameras from one single place using MotionEyeOS. The system built also allows you to save your frames from all your cameras in a 1TB SATA drive.

https://i2.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/CCTV-MotionEye-thumbnail.jpg?resize=300%2C169&ssl=1 300w, https://i2.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/CCTV-MotionEye-thumbnail.jpg?resize=768%2C432&ssl=1 768w, https://i2.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/CCTV-MotionEye-thumbnail.jpg?resize=1024%2C576&ssl=1 1024w" sizes="(max-width: 1000px) 100vw, 1000px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

For an introduction to the MotionEyeOS, you can read this introductory blog post.

Project Overview

The surveillance system built includes: one Raspberry Pi acting as a HUB with 1TB SATA, and 4 cameras (each one connected to a Raspberry Pi Zero W) that can be monitored through the HUB.

All devices are connected to your local network, and you can access all the cameras through the hub using a browser on your computer (or other device on the local network). The following figure shows a high-level overview of the project.

https://i1.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/Project-Overview.png?resize=300%2C214&ssl=1 300w, https://i1.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/Project-Overview.png?resize=768%2C547&ssl=1 768w, https://i1.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/Project-Overview.png?resize=1024%2C729&ssl=1 1024w" sizes="(max-width: 1000px) 100vw, 1000px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

Parts Required

Here are all the parts needed for this project.

Hub:

Cameras:

You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!

Hub Setup

The Raspberry Pi Hub setup consists of a Raspberry Pi 2 Model B (if you have a RPi 3, use that board instead) with a Sandisk Ultra 16GB class 10. There is a 1TB SATA drive connected to the Pi with a SATA-USB cable.

The Raspberry Pi is being powered with a 12VDC 1500mA wallwart connected to 2A DC-DC converter set to around 5.2V output.

Note: I have been doing some experimentation with powering RPi 2 and 3 and found that using a 12V 1500mA wallwart adapter and a 3 or 5A DC-DC converter with short leads seems more capable and often cheaper than a big 3A wallwart adapter, and gives you a 12V supply for other associated hardware.

Note: I have found that my SATA drive is capable of being powered by the RPi 2 USB without a powered USB hub. You may not be as lucky. A friend of mine has suggested putting a beefy cap in parallel with the RPi power input

Cameras Setup

The setup for the cameras consists of 4 Raspberry Pi Zero W with a Sandisk Ultra 16GB class 10. Each Raspberry Pi Zero W board is connected to a camera.

The Raspberry Pi boards are being powered with a 12V DC 1500mA wallwart connected to 5A DC-DC converter set to around 5.2V output (this is a temporary setup for testing, after testing that everything is working fine, each Raspberry Pi Zero W should have a separated power supply).

In this setup, the power leads yellow/black are soldered directly to the back of the Raspberry Pi Zero board.

https://i1.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/power-rpi-zero-motioneye.jpg?resize=300%2C131&ssl=1 300w" sizes="(max-width: 600px) 100vw, 600px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

1. Installing MotionEyeOS on the RPi Hub

You need to install MotionEyeOS on your Raspberry Pi, preferably a Raspberry Pi 2 or Raspberry Pi 3. This board will act as the hub.

Burning MotionEye image to the microSD card

Follow the next steps to install MotionEyeOS on the microSD card for your Pi.

  1. Format the microSD card. You can use the SD Card Formatter software.
  2. Choose and download the right image for your device: MotionEyeOS releases page. If you’re using the Raspberry Pi 3, choose motioneyeos-raspberrypi3-xxxxxxxx.img.gz.
  3. Extract the image from the .zip folder.
  4. Use Etcher or Win32 Disk Imager to write the image onto the SD card.

Booting MotionEye for the first time

Your microSD card is now ready. Follow these next steps to boot MotionEyeOS on your RPi 2 or 3:

  1. Insert the microSD in the Raspberry Pi
  2. Connect the SATA drive or any other drive you intend to use to store files
  3. Connect the RJ45 ethernet cable to your network.
  4. Temporarily connect a camera to the Raspberry Pi even if you don’t intend using one in the future. You can remove after all the configuration has been completed.
  5. Connect the power supply to power it up.
  6. Wait a couple of minutes while it configures itself.

Finding the Raspberry Pi IP Addess

To access MotionEyeOS from your browser, you need the find the Raspberry Pi IP address. To find your Raspberry Pi IP address, you can use FingAngryIPScanner or any other similar software. The IP you’re looking for is the one with “meye” on the name, as shown in the following figure.

https://i2.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/motioneye-finding-ip.png?resize=300%2C199&ssl=1 300w" sizes="(max-width: 707px) 100vw, 707px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

Alternatively, you can also look at your router DHCP table, or you can connect an HDMI monitor before startup.

2. Installing MotionEyeOS on the RPi Zero W boards

You need to do this procedure for each of your Raspberry Pi Zero W boards.

Burning MotionEye image to the microSD card

Follow the next steps to install MotionEyeOS on the microSD card for your Pi.

  1. Format the microSD card. You can use the SD Card Formatter software.
  2. Choose and download the right image for your device: MotionEyeOS releases page. If you’re using the Raspberry Pi Zero, choose motioneyeos-raspberrypi-xxxxxxxx.img.gz.
  3. Extract the image from the .zip folder.
  4. Use Etcher or Win32 Disk Imager to write the image onto the SD card.

Setting the Network Credentials

Important note: when burning the ISO to the SD card for the Raspberry Pi Zero W boards, do not eject the card before following the next procedure to set your WiFi credentials. If you do not do this now, the Pi Zero will not log onto your Wi-Fi network and constantly reboot annoyingly requiring you to re-image the SD card.

Follow the next procedure to set your network credentials for each of your Raspberry Pi Zero W boards.

  1. Open Notepad or a similar text editor, and create a new file called Wpa_supplicant.conf
  2. Copy the following lines to your file:
     
  3. Change the country code to your country, and use your SSID and password. Do include the quote marks.
  4. Save your file. Important: when you save the file ensure it is Wpa_supplicant.conf and not Wpa_supplicant.conf.txt as this will not work!
  5. Copy your Wpa_supplicant.conf file to the root of the SD card.

https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/wpa_supplicant-conf-file.png?resize=300%2C158&ssl=1 300w" sizes="(max-width: 400px) 100vw, 400px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

Setting Multiple Access Points (optional)

Thinking ahead, if you have multiple Access Points (AP) around your house and you want to move your Raspberry Pi Zero Cameras to one of those locations, it would be a good idea to include the SSID and Password for those APs at this point.

The main reason to do this now is I cannot find a way to edit the Wpa_supplicant.conf file after the Raspberry Pi Zero Cameras have configured itself, so it has to be done now. I have tested this and it does work although the change of AP credentials is not reflected in the Network section of the MotionEyeOS GUI. The point is that it does work.

Here is my example Wpa_supplicant.conf file for reference:

country=FR
update_config=1
ctrl_interface=/var/run/wpa_supplicant

network={
 ssid="extn2"
 psk="your-password"
 id_str="extn2"
}

network={
 ssid="external"
 psk="your-password"
 id_str="external"
}

network={
 ssid="SFR_DDF0"
 psk="your-password"
 id_str="SFR_Rtr"
}

network={
 ssid="new_loft"
 psk="your-password"
 id_str="new_loft"
}

Change the country code to your country code, and insert the right SSID and password for your multiple access points.

Booting MotionEye for the first time

After having the microSD card properly prepared follow the next steps to boot MotionEye on the Pi Zero for the first time:

1. Eject the SD card from your PC and insert it into your Raspberry Pi Zero.

2. Attach the camera. When using a Raspberry Pi camera with the Pi Zero, you need to use an adapter cable as shown in the following figure.

https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/adapter-cable-rpizero.jpg?resize=300%2C216&ssl=1 300w" sizes="(max-width: 600px) 100vw, 600px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

3. Apply power to the Raspberry Pi Zero board.

4. Wait a couple of minutes while it configures itself.

Finding the Raspberry Pi Zero W IP Address

Now, look for your Raspberry Pi Zero W IP address, as you did for the Raspberry Pi Hub. The IP you’re looking for is the one with “meye” on the name.

Alternatively, you can also look at your router DHCP table, or you can connect an HDMI monitor before startup using a micro HDMI adopter.

3. Configuring the RPi Boards on MotionEye

To access each of your Raspberry Pi boards, open your browser and type the Raspberry Pi IP address. You’ll be presented with the MotionEye Login Page. The username is admin, and there is no password, so leave the password field blank.

You should see a live image from the camera at this point. If not, check that you’ve properly connected the camera ribbon.

https://i2.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/camera-motion-eye-first.png?resize=300%2C282&ssl=1 300w" sizes="(max-width: 700px) 100vw, 700px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

You need to set the following configurations in all your boards (the Raspberry Pi Zero W, and the Raspberry Pi Hub).

Follow the next steps for all your Raspberry Pi boards.

1. Use the menu icon at the top left to expand all menus.

https://i2.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/open-menu.png?resize=300%2C35&ssl=1 300w" sizes="(max-width: 543px) 100vw, 543px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

2. For security reasons, in the “General Settings” change the password for the admin user.

3. Turn ON “Advanced Settings”.

4. Fix the IP address of your RPi boards to something outside the range of your DHCP server. Say 200 and above, for example.

5. Set the Time Zone and Hostname.

6. In case of the Raspberry Pi Zero, the wireless network and password were automatically picked up from the Wpa_supplicant.conf file.

7. Apply the settings, which will require a reboot and you will have to point your browser at the new IP you have just chosen.

8. Press “Check for a new software update” and it will download, install, and reboot if there is a software update. This will take approximately 5 minutes.

Note: If at any time you have trouble logging into your RPi, try clearing your cache or use your browser in ‘Incognito mode’.

4. RPi Zero W Specific Configuration

Follow the next steps for configuring each of your Raspberry Pi Zero W boards in MotionEye.

1. Give the camera a name.

2. Change the camera resolution to 800×600.

3. Rotate camera image if required.

4. Ensure Text overlay is on.

5. Video Streaming is off.

6. Still Images is on.

7. Set Capture Mode to manual.

8. Under motion settings set motion gap to 2 and minimum motion frames to 5.

The above will reduce the amount of data/frames initially whilst you configure and test the system.

Do not change any of the other settings for the time being. If you need to know the default Frame change threshold it was 3.5%.

Repeat this process for all your Raspberry Pi Zero W boards.

5. RPi Hub Specific Configuration

Access your Raspberry Pi Hub, and follow the next steps for configuration

1. Go to “Services” and turn all on. Apply the settings – this will reboot your Raspberry Pi.

2. Use FileZilla or equivalent from your PC to set up a directory structure on the SATA drive. Once logged in with FileZilla you should see something like the following figure.

3. The MotionEyeOS seems to automatically create 2 shares: sdcard and storage. Double click “storage” and create a directory structure to suit your camera needs. The following figure shows how I configured my structure.

4. Go back to your web browser connected to your Raspberry Pi Hub.

5. Go to “File Storage” and choose the “Mass Storage” device. See the figure below for my configuration. Yours may differ.

This configures the SATA drive for storage of the local camera whether you use it subsequently or not. This section may seem pointless but without a camera connected initially none of the local file storage options appear.

6. Configuring File Storage For the RPi Zero

Follow the next steps to configure file storage for each of your Raspberry Pi Zero W boards.

  1. Log on to each Raspberry Pi Zero.
  2. Configure the file storage as shown in the figure below.

https://i2.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/rpi-zero-storage-motioneye.png?resize=300%2C198&ssl=1 300w" sizes="(max-width: 549px) 100vw, 549px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

You will notice I have chosen network share in the drop down menu and entered the IP of the Raspberry Pi Hub which has the SATA drive attached.

The share name is vital and in that exact format. The last part of the share name is the specific file storage directory you set up with FileZilla above.

Enter username and password as normal, and root directory should be just /.
Use the test button to confirm the settings. This took me many hours to get right but the above configuration worked fine for me eventually.

Note: I think there is a bug in the system regarding the Disk usage indicator as this is incorrect, unless it just represents local storage.

Testing the Setup

That is all the complicated configuration done!

You can now go to each camera and click on the live image. It will then display an option to take a manual picture, browse saved pictures etc.

Once you are happy with the way the RPi Zero cameras are taking pictures, you can turn motion detection on and see the frames start to flood in. You can configure motion notification, and much more.

7. Add the Cameras to the RPi Hub

Finally you can log into the Raspberry Pi Hub and add the remote Raspberry Pi Zero cameras to allow viewing and administration through one point.

  1. At the top left corner, there is a drop down with the existing local camera, and an option to Add camera.
  2. Click “add camera”. In the new dialogue window that pops ups, drop down to choose “Remote motionEye Camera”.
  3. Enter the address of the Raspberry Pi Zero W camera you would like to add in the following format in the URL
     
  4. Enter the username and password and it will automatically see the camera attached to the Raspberry Pi Zero W, if the info is correct. Press OK. The following figure shows this configuration setup.

https://i1.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/add-remote-camera-1.png?resize=300%2C195&ssl=1 300w" sizes="(max-width: 416px) 100vw, 416px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

The remote camera can now be selected from the top drop down menu and viewed or administered from the Hub. Do this procedure for all your Raspberry Pi Zero W cameras.

Once you’ve done that, all cameras can be monitored through the Raspberry Pi Hub.

https://i1.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/add-remote-camera-2.png?resize=300%2C141&ssl=1 300w, https://i1.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/add-remote-camera-2.png?resize=768%2C361&ssl=1 768w, https://i1.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/add-remote-camera-2.png?resize=1024%2C482&ssl=1 1024w" sizes="(max-width: 1000px) 100vw, 1000px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

Enclosures and Power Supplies for Raspberry Pi Zero Cameras

After building your Raspberry Pi based CCTV system using MotionEyeOS you need to mount your cameras in an enclosure of some sort and power it with something – it is virtually guaranteed you will not have a plug socket near where you want to install your camera. In this project I powered my cameras from my existing PIR Floodlights.

Power

With a little research I found that the Raspberry Pi Zero with a ZeroCam or a ZeroCam Noir or a ZeroCam Fisheye draws a maximum of 280mA and an average of 215mA. So, I opted to use some 99p AC-DC power supplies from eBay. Rated at 3.5W.

https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/pi-zero-power-supply.jpg?resize=300%2C248&ssl=1 300w" sizes="(max-width: 307px) 100vw, 307px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

Specifications:

  • Input voltage: AC 85 ~ 265 v 50/60 hz or DC 100~ 370 v
  • Imput current: 0.0273A(AC110V) 0.014A(AC220V)
  • Input Inrush Current: 20A
  • Output voltage: DC 5V (+ / – 0.2 V)
  • Output current 700 mA
  • Power 3.5 W
  • Operating temperature -20~60℃
  • Relative humidity 40-90%RH
  • Output 5V, min current 0a, max current 700mA, peak current: 800mA, output range: 4.8~5.2v, ripple wave: 60mV
  • Output power:0-4W(DC current)
  • Output efficiency: 80%
  • Switch machine overshoot: MAX 10%
  • Output voltage rise time: MAX 100MS
  • Output over voltage: 4.8-5.2V, recovery:Lock, restart after recovery
  • Output over power protection:YES ,recovery:Lock, restart after recovery
  • Short-circuit protection: YES, automatic recovery after problem solved
  • Temperature protection: YES,recovery:Lock, restart after recovery
  • Overcurrent protection: YES,recovery:Lock, restart after recovery

So connecting this up with short DC leads and plugging it into a mains power monitor I got the following results:

  • 239V
  • 0.015A
  • 1.5W
  • 7VA
  • 49.9pF

So, to run the camera for a year will cost:

13.14kWh x 0.15 = 1.97€. (My electricity is 0.15€ per kWh) –> Won’t break the bank!

Enclosure Ideas

I had some dummy security enclosures and opening one up and with minimal modifications I managed to fit the Raspberry Pi Zero W with the camera and power supply inside with ease. It doesn’t seem to affect the picture that much. The dummy camera enclosure was £4 from eBay. And it looks very professional!

https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/false-security-camera.jpg?resize=150%2C150&ssl=1 150w, https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/false-security-camera.jpg?resize=300%2C298&ssl=1 300w, https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/false-security-camera.jpg?resize=80%2C80&ssl=1 80w, https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/false-security-camera.jpg?resize=220%2C220&ssl=1 220w" sizes="(max-width: 520px) 100vw, 520px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

Another approach is placing 2 cameras in one enclosure. So, I used a standard project box (75x100x40mm), one of the AC-DC power supplies shown above, and some hot glue and insect netting to cover the air holes, as shown in the figure below.

https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2018/01/enclosure-ideas-2.jpg?resize=300%2C133&ssl=1 300w" sizes="(max-width: 700px) 100vw, 700px" style="max-width: 100%; margin: 0.5em auto; display: block; height: auto;">

Taking It Further

There are many choices of cameras for the Raspberry Pi and Pi Zero, so Julian run some tests to compare of the Raspberry Pi cameras in his selection. You can learn more about that in the following post: What’s the Best Raspberry Pi Camera for your project?

Wrapping Up

In this post you’ve show you how you can build your own surveillance system using MotionEyeOS. The surveillance system built allows you to monitor 4 different cameras, each one connected to a RPi Zero, that can be monitored through one Raspberry Pi Hub. This system allows you to monitor all your cameras, as well as save frames on a storage device.

We hope you’ve found this project useful and that you can modify it to fulfill your needs.

About Julian Silver

This project was built by Julian Silver. Here you can learn more about Julian.

My name is Julian Silver (Jules) and I am a reasonably competent student in the art of electronics. I have been playing with Raspberry Pi for many years and Arduino and ESP8266 more recently. My first Pi camera project for rudimentary face recognition was nearly 5 years ago now and I made my first AM radio 45 years ago. I am semi-retired living in Southern France and have a keen interest in all things electronics.

This Pi Zero Cam project has been in the offing for nearly 2 years but it wasn’t until this Christmas I ordered the parts to create it. I decided on MotionEyeOS to run the project and that has been relatively painless although there were a few confusing moments. It took about 2 days in all to create which is why I decided to document the process to save you a lot of time if you wish to replicate the process – I estimate no more than 1 day.

I do not profess to be an expert by any means. This document is just what I did to create a simple but functional cctv system. Your system will almost certainly be different in many ways so this is just a document for thought process. With that in mind Do Not contact me for technical support. All the answers ARE out there on the WWW. You just have to search. I found most of the answers on the excellent https://github.com/ccrisan/motioneyeos/wiki and would recommend anyone thinking of using MotionEyeOS to start their journey there.
Good luck. Regards… Jules.