Raspberry Pi Security Camera Network using motionEye

In this project, I will set up a Raspberry Pi security camera network using the motionEye software. You can use the standard Pi camera, such as the one I used in the time-lapse tutorial.

Raspberry Pi Security Camera

This project is a cost-effective way of getting a security camera network up and running. You can view the cameras over the network and have them record based on motion.

Remember, the Raspberry Pi isn’t a powerhouse, so performance will degrade if you try to do too much, such as adding too many high-definition cameras.

This tutorial previously used MotionEye OS, but as it is no longer maintained, we have updated it to use the underlying MotionEye software on the default Raspberry Pi OS.

If you want to use the Raspberry Pi camera, follow our webcam guide before starting this tutorial. The process is relatively simple but does require a bit of tweaking.

Other security camera software that is compatible with the Raspberry Pi and worth looking at is Frigate or ZoneMinder,

With all that said, motionEye still an excellent way of building an affordable camera network. So, let’s get to it.

Equipment

You will need the following equipment to complete this Raspberry Pi security camera project.

Optional

  • Raspberry Pi Case ( Amazon )

This tutorial was last tested on the Raspberry Pi 5, running the latest version of Raspberry Pi OS Bookworm.

Installing MotionEye on the Raspberry Pi

For this tutorial, we will be installing motionEye on Raspberry Pi OS. I settled on using MotionEye as it is an all-in-one solution that fits my requirements, and it also didn’t involve as much fiddling around to get it to work.

It is best to install this software on a clean version of the Raspberry Pi OS. If you are installing on an existing operating system, you may run into conflicts with other software.

1. First, update the packages on the Raspberry Pi to the latest version by running the following commands.

sudo apt update
sudo apt upgrade

2. First, we must install the required packages for the motionEye software to work. Enter the following command to install the packages.

sudo apt --no-install-recommends install ca-certificates curl python3 python3-dev libcurl4-openssl-dev gcc libssl-dev

3. The Python package manager pip software should already be installed. You can check if pip is installed by entering the following command.

pip --version

If pip is installed, you should get a response like the one below.

pi@gusdevpi:~ $ pip --version
pip 23.0.1 from /usr/lib/python3/dist-packages/pip (python 3.11)

If pip is not installed, you will see an error message. To install pip, run the command below.

sudo apt install python3-pip -y

4. Due to the requirements of MotionEye, you will need to update the settings to allow Python packages to be installed outside a virtual environment when using pip. You can read more about the pip external environment changes.

The command below will allow these packages to be installed without encountering the “Externally Managed Environment” error. Also, the command below will make the change systemwide as motionEye requires it.

sudo python3 -m pip config set global.break-system-packages true

5. Prepare MotionEye for installation by running the following Python command.

sudo python3 -m pip install --pre motioneye

You will see warnings about not using a virtual environment. You can safely ignore these warnings. If you see an error about mismatching hashes, run sudo apt update and sudo apt upgrade and try running the command again.

6. The installation process will take a while.

Once done, enter the following command to install and start MotionEye.

sudo motioneye_init

7. You can now check to see if motionEye successfully started by running the following command.

systemctl status motioneye

You should see some output indicating the service is active and running without errors.

8. Now get the IP of the Raspberry Pi so you can access the web interface of motionEye. To do this, use the hostname command.

hostname -I

Configuring MotionEye on the Raspberry Pi

Now we are ready to configure the software and connect to our cameras. We will need to communicate to the Raspberry Pi over the network rather than directly as I have done in most of the previous tutorials.

Logging into motionEye

1. First, we will need the IP of the Raspberry Pi. Once you have the IP, enter it into your favorite web browser. You will need to use the port 8765.

For example, I access my instance using the following IP.

http://192.168.0.16:8765/

2. You should be greeted with a login page. The username is admin, and the password is blank. The password should be updated once you have logged into the admin.

motionEye Login Page

3. Once logged in, you can access all the settings for the camera streams. If you want to alter these settings, keep reading, and I will explain them as much as possible below. Now, we should have a working security hub that we can configure.

How to Set Up Multiple Network Security Cameras

In this section, we go through how to set up multiple cameras within motionEye. You can view all the camera feeds within a single web interface.

You can even add a stream that has been set up using the Raspberry Pi Webcam server tutorial.

1. First, click on the three vertical lines in the upper left-hand corner.

2. Under the general settings tab, you can update the password to something more secure. Once you update the password, you will need to log in again with the new details.

Update Password in motionEye

3. Click the three lines in the top left-hand corner of the screen to open the settings.

Next, in the top left-hand corner, click the drop-down box and select “add camera“.

Add Camera to motionEye

4. In the pop-up, you have five settings to configure.

  • Camera Type: This allows you to select the camera type you wish to connect.
  • URL: This is the URL to the other network camera. E.g. http://othercamera:8080
  • Username: This is the username of the camera device. If no username/password is required, then leave the fields blank.
  • Password: This is the password for the username chosen above.
  • Camera: Select the camera you wish to add.

Below is an example of adding a Reolink network camera with RTSP enabled.

motionEye Add Camera Settings pop-up

In the example below, camera1 (Pi Camera) and camera2 (USB WebCam) are connected to the Raspberry Pi running MotionEye. At the same time, camera3 comes from a different Raspberry Pi set up using our webcam server tutorial.

This method is great for setting up a strong Raspberry Pi security camera network.

Raspberry Pi Multiple Cameras

Configuring the Settings in MotionEye

You can configure a vast range of settings within MotionEye. I will briefly go through them in this section.

Raspberry Pi motionEye Interface

General Settings

You can set the administrator username and password in the general settings tab. This account will have access to all the settings you see at the moment.

A surveillance username and password can be set in here. This can be used to access the camera interface.

Video Device

Under this menu, you are able to set certain settings regarding the cameras.

  • Camera Name: Set this to whatever you want the camera to be named. For example, the name kitchen would work well for a camera in a kitchen.
  • Camera Device: You’re unable to edit this one, but this is the device name of the camera.
  • Automatic Brightness: This will enable automatic software brightness, which means the software will adjust for the brightness. You do not need to activate this if your camera already handles it. In here, you change the brightness, contrast, and saturation of the camera’s video.
  • Video Resolution: Here, you can set the camera’s video resolution. The higher the resolution, the more room it will take up and the more bandwidth it will need to use to stream the footage. I set mine to 1280×800, and that seems to work perfectly fine.
  • Video Rotation: You can rotate your video if it faces the wrong way.
  • Frame Rate: This sets the number of frames that will be sent every second. The higher this is, the smoother the video, but again, this will increase the storage and bandwidth used.
Video Device Settings

File Storage

Under this menu, you can specify where you would like the files stored for the Raspberry Pi security camera network.

This location can be a custom path on the Pi, the predetermined path, or the network path.

File Storage Settings

Text Overlay

Within the text overlay tab, you can set the text overlay on the camera’s output.

By default, the left text displays the camera name, and the right text displays the time stamp (Today’s date and current time).

Text Overlay

Video Streaming

In this menu, you can set the video streaming options. This is the video stream you see in the browser.

  • Streaming Frame Rate: This is the same as mentioned above under video device.
  • Streaming Quality: This setting is good to reduce if you need to access the camera on a low bandwidth device often.
  • Streaming Image Resizing: Enable this if you want MotionEye to resize the images before sending them to a browser.
  • Streaming Port: This is the port that the device will listen to for connections looking to view the stream. Eg. http://192.168.0.16:8081
  • Authentication mode
  • Motion Optimization: This will reduce the frame rate whenever no motion is detected. This setting will save you bandwidth.

You can also see three URLs that can be used to access different footage.

These URLs are very important if you have multiple cameras per Pi as each camera will have a unique port that you listen to the stream.

Video Streaming Settings

Still Images

In this tab, you can set the Raspberry Pi security camera network to take still images whenever motion is triggered, during specific intervals, or all the time.

Still Images Settings

Movies

Within this section, you can set the software to record movies whenever motion is detected. There are several settings you can change, such as the movie quality, file name, and more.

Movie Settings

Motion Detection

In here, you can activate the security camera motion detection that is included in the software.

You can make adjustments to the settings here to get better motion detection.

Motion Detection Settings

Motion Notifications

You can set up email notifications, webhook notifications, or even run a command whenever motion is detected.

This option will notify you whenever activity is detected on the cameras, perfect if they are monitoring areas with low traffic.

Motion Notification Settings

Working Schedule

Here, you can set the days and the hours of operation you would like the system to be monitoring (If you leave this off, then it is 24/7).

This option is perfect if you only need it running during specific hours.

Working Schedule Settings

Connecting to the Surveillance Outside Your Network

Now that you have your Raspberry Pi security cameras set up it might be worth considering allowing access to the central Pi so you can monitor your cameras elsewhere.

To do this, head over to our guide on how to set up port forwarding and dynamic DNS. You can find the guide at Raspberry Pi Dynamic DNS & Port Forwarding.

You will need some important information to set up the port forwarding.

  • The IP of your Raspberry Pi. For example, mine is 192.168.0.16
  • The internal port is 8765.

Ensure you also have set up passwords on both the admin and the surveillance user to help avoid unwanted visitors.

Once set up, you should now be able to connect using your external IP address such as XXX.XXX.XXX.XXX:8765.

Summary

The Raspberry Pi security camera system is a great way to have multiple cameras hooked up locally and over a network.

All the extra settings MotionEye provides allow you to have a strong functioning security hub for your home, office, or wherever you are setting this up.

I hope this tutorial has helped you in creating a fantastic Raspberry Pi security camera network.

If you have had any problems, want to provide feedback, or have a great setup you would like to share, please feel free to comment below.

If you’re after more great Raspberry Pi projects, check out many other great tutorials.

Leave a Reply

Your email address will not be published. Required fields are marked *

184 Comments

  1. Avatar for Chris J
    Chris J on

    Very cool. I am going to work on this for around my home to view the pets. Can the PiZero be used for this?

    1. Avatar for Gus
      Gus on
      Editor

      The PiZero can be used but the resource limitation might make it a bit slow.

  2. Avatar for Gaster
    Gaster on

    What to plug the ethernet cord into

    1. Avatar for Gus
      Gus on
      Editor

      Hey Gaster,

      You only need the ethernet cable if you intend on using a wired network connection. If you are using a wired network connection you need this plugged into a router.
      A wifi connection is most likely easier to deal with in most cases then a wired network connection.

      Cheers

  3. Avatar for Juris
    Juris on

    Hello!

    Will this work on Pi Zero?

    1. Avatar for Gus
      Gus on
      Editor

      Hey Juris,

      We haven’t tested this ourselves, but its likely not to perform well due to the single core processor that is featured on the Raspberry Pi Zero.
      Your welcome to try the tutorial out for yourself, we would look forward to hearing how it performs.

      Cheers

  4. Avatar for Aaron
    Aaron on

    trying to run this on a Pi Zero. i need to however be able to add a WLAN out of the gate because it has no RJ45 jack. Is this possible? if so any help is greatly appreciated.