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.
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.
Recommended
- Raspberry Pi ( Amazon )
- Raspberry Pi Camera ( Amazon ) or USB WebCam ( Amazon )
- Power Supply ( Amazon )
- Micro SD Card ( Amazon )
- Ethernet Cable ( Amazon ) (Recommended) or Wi-Fi ( Amazon )
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.
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.
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“.
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.
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.
Configuring the Settings in MotionEye
You can configure a vast range of settings within MotionEye. I will briefly go through them in this section.
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.
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.
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).
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.
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.
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.
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 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.
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.
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.
Hi,
If you wish to install montioneye software on Raspbian please follow the tutorial made by the maintainer of the software here:
– https://github.com/ccrisan/motioneye/wiki/Install-On-Raspbian
Don’t forget to add “sudo” to the Pip commands and some of the copy commands.
Especially Pip since it will compile while installing some of the dependencies and it needs super user rights.
How much up to add camera in the web server, can I add more 10 camera?
Thank
Hi Nata,
First of all realistically you could run max 2-3 pi cameras on one pi with a decent frame rate.
Don’t forget getting image from a camera it is very intensive computing task and requires memory.
I recommend to buy several Pi’s and attach to each of them max 2 cameras.
You can do that by buying a pi camera adapter from the ebay.
Suggest me, how to connect through wifi. There is no option of Searching for Available wifi network..
The WiFi point you wish to connect to should have an SSID/network name (You would usually click to on the name to join it), enter this for the name. Then enter the required password.
This OS and PI camera software is nearly perfect.
I have a request.
Simple FTP uploading.
Is this something that can be added in the next update?
Hi,
Thanks very much for the tutorial. I did install MotionEyeOS on the RPi 3 and it’s working great.
My problem is that I use Blue Iris for my security software and I can’t figure out how to configure it to see the stream.
I also have Pogoplug Arch Linux cams (running motion) and they are visible in Blue Iris.
Can you help?
Thanks,
Sierra
Hi, Ive just got a Pie3 starter kit and bought the Pie camera to set up a home CCTV. The 8GB micro-SD card is all pre-configured and set up, but when I try and do the Win32DiskImager thingy it only shows as having a few MB of available space. Ive tried just downloading the image file to a memory stick and moving straight to the file directory but that doesn’t work. Does anyone know what I should try next (other than learn some basic computer skills!!)?
Whenever I extract the IMG file and use
sudo dd if=/Users/*MyUserName*/Downloads/motioneyeos-bananapi-20161212.img of=/dev/rdisk2 bs=8m
the files copy to the SD card fine, it’s just that the Pi doesn’t want to boot after inserting the SD card and plugging in power. The red led stays solid. Please Help!
In your command I notice you’re trying to use the bananapi version of motioneyeos, this will not work/boot on the Raspberry Pi. (I am assuming you’re using a Raspberry Pi) If you’re using the Pi you will need to redownload the correct image over at their github.
So I am trying to use the motion detect feature but am getting afternoon shadows setting off the motion. I have the Light Switch Detection set to 0 – what else can I tweak to fix this issue?
Hi Gus,
I’m stuck in this part..
Welcome to meye-41d31c50!
meye-41d31c50 login:admin
Password:
root@meye-41d31c50~]#
What’s next after this??
Please do reply. I appreaciate it
Hi JP,
I currently have the same problem. I’m using a Raspberry Pi 3. Did you solve it? Any help would be great.
Thanks.
This is a great guide and very cool OS/Software. Works flawlessly and turns my otherwise useless/trash webcam into a useful gadget in about 10 minutes. Thank you for this!!!!
how do I add more camera for the surveillance system? or I can’t?
just in case anyone is trying this with reolink camera i found that the adress is something like this:
rtsp://192.168.1.112/h264Preview_01_main
only problem is that no image came from cameraExcellent project, and I have it working without any problems, thank you.
Just a couple of questions:
Once in operation, is there any way of powering off the Rpi cleanly, rather than just removing power?
Is there any way of reviewing any captured stills or video on a USB memory stick installed locally on the Rpi, or does the stick need to be removed and viewed offline?
Oh, Just found the answer to my own first question, a shutdown option within the general settings…sorry.
Hi,
Great project. I am trying to set up multiple pi’s with cameras en one central one that will stream all cameras to the outside world. For that I need to install hostapd and dnsmasq on one of the pi’s. But I can not figure out how to do so. All standard install tools seem to be removed. Please advice.
Best regards, Peter
Jon, I am looking to build one of those for my front door. Would you tell me how much it cost and what I need for the whole project?
Thank you very much,
Tony
Has anyone used PiNoIR Camera with IR LED using MotionPi? Any tutorials out there on using external IR source?
Pankaj, you actually can build or purchase a set that already built online. The IRs are the external source that you don’t really need to hook it with the camera circuit (it’s an independent circuit). Except, you just need to make sure the camera needs the IR filter lens to be removed.
I can’t seem to make this load for me. When I try to extract the .img file using Wind32DiskImager, it doesn’t matter what size of SD card I use, it changes it to 19.9mb (from 16gb) and only installs a couple of files totalling 8.69mb in size. When I insert this into my Pi2, it never boots up. Only stays on the rainbow splash screen. (yes, I’m using the Pi2 Image)
What am I doing wrong?
Hi, not sure if you still have this problem, but I had similar issues and found I had to first remove all partitions from the SDcard, then recreate just one partition ocupying the whole card, then formatting that to FAT32. I used a free utility “EaseUS Partition Manager” that did the job. After that, burn the image with the DiskImager.
Please can you guys tell me how to set up more than one camera to the same PI2 in a wireless configuration?
Hi guys,
I would love to see you create this tutorial or similar for the Pi Zero and let us know your opinion about it (regarding stability, etc.).
Looking forward to it!
Thanks in advance,
Hi!
What a nice Raspberry Pi project. I want to try this project this week when my camera is received. I have one question. Is it possible to save the image on my online FTP Webserver?