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.
Great work sir. I am a student and I want to work it with servo.
Will the servo as a pancontroller work having motionPie OS? Please notice me. Thaanks.
Is it possible to have the filesystem read/write? I cannot change the files needed to get the proper timezone/times.
Works perfectly on rPi1. Good job! 🙂
IS 8GB memory card
enough for this project?
More than enough. Soft image has <100Mb. 8Gb translates in 8000Mb.
Has anyone had success getting sound to stream along with the video using an ALSA supported USB mic?
Hi, I never heard of this rasberry pi before, but i would to try.. my question is how about battery life?
It’s mains operated, 5v and draws little current, ~2A under load roughly. The Pi is powered by a phone charger.
I want to add hi-focus ip camera to raspberry pi 3…as a other network camera …but I’m facing difficult in URL .. how to add another ip camera to raspberry pi 3
Hi, I am installed raspbian. Now I want to install motion Pie. Please guide me whether the motionpie will be installed on my host computer or on Raspberry Pi??
Hi!
While booting Pi Zero for first time:
configuring wired network: no device
Ethernet: no network connection available, rebooting
On Zero Pi there is no RJ45 network connection.
I have TP-Link USB wi-fi dongle, when booting clean raspbian everything works fine Wi-Fi up and running. Maybe wrong motioneyeos version for my Zero? Which of these versions fit Zero?
motioneyeos-raspberrypi-20170329.img.gz
motioneyeos-raspberrypi2-20170329.img.gz
motioneyeos-raspberrypi3-20170329.img.gz
great tutorial, works perfectly to me. I want to ask 1 question, how I can record audio+video using this because there isn’t any sound in the video.
With a hope that someone will reply with a solution I’m asking to provide instructions on how to access my Raspberry Pi as a ROOT user?
This soft blocks me from using the device. All I’m trying to do is setup no-ip on the PI
Please help!
For a multiple camera setup is it better to add the multiple cameras to a beefier pi (Pi 3 or 2) or will it be ok adding all the cameras to a pi zero w?
Thank you for your superb app. However when I use the notification using Gmail I get an 5.7.14 error which I can overcome by making my account in Google less secure. I would prefer not to do this and as such is their another option within the app itself?
Thank you for sharing this great tutorial! Got it up and running in minutes. Great software that just works! Struggling with getting it working on external network on my Zyxel router, but sure I will get there eventually.
Hey
comes to me there is something wrong
everything works for 5 minutes then the pi in screen saver and the camera connection lose this only comes back after a restart
Who can help me
Hi, the name of the machine is “meye-73a2ef56” so what might be my login and password=
Per the instructions and unless they changed since I installed mine:
To login as the admin go to key symbol in the upper left corner.
The username is admin and the password is blank, this can be changed later.
Is it possible to see the motionpie GUI on the Raspberry Pi HDMI screen?
Hi Tony,
Yes you can, since the screen is connected through the hdmi cable.
Just type this on PI browser or even better on your computer browser:
http://192.168.xxx.xxx:8765
–> replace x with the numbers of Pi’s address on your network.You should see the motion web page.
You can find Pi’s ip address by hovering your mouse over the wifi connection icon on Pi or go to your router or if you have an Android phone download this app named: Fing.
It will list you all the devices on your local network.
Let me know if I can further help you.
Is it possible to use a usb keyboard directly into the Raspberry Pi when using motionpie?
Hi Tony,
I recommend that you install Raspbian.
Once installed go into the Raspbian menu, pick Administration menu option then click on Raspberry Pi Configuration icon.
Once you see the new window you will see a series of options you can enable.
Click on radio button on the side of: Enable VNC.
Then reboot.
After reboot you should see a VNC icon up to the menu bar.
Don’t do anything for the moment.
Go to your computer and download any VNC viewer.
Once installed, start the viewer and please type this:
login: pi
password: raspberry –> if you are using this only on your local network is fine to keep same password, but if you open your motionEye to the outside world then is strongly advised to change the Pi password. Don’t disregard this important matter. I have read some stuff over the internet of hackers taking control of these pi’s. Is kind of stupid since is nothing important there, but it may be an entry point for them to get into your own internal network and create havoc into your own laptops, etc.
You should see in a while the pi screen on your local computer.
Let me know if this worked for you.
Will any of the images on github work with a Pi Zero?
Hi Jerry,
If the images are compiled to run on 32 bit mode it should run on a old pi and pi zero.
But if it is compiled for 64 bit, new pi is 64 bit it will not work on older pi and pi zero.
Best thing it is to give it a try and install it.
Hi, I just set up my Rapsberry Pi 3 with camera and with the lastest version of motioneyeos on it.
Accessing it from my LAN works fine, but when I want to change some settings such as add a password, there is a problem. The only settings I can access are “Preferences”, no other settings are visible. I searched online but find no prior mention of this issue.
Also, I am trying to set-up portforwarding on my ASUS router but cannot figure out how to do it, as the only requests are: Service name, Port range, Local IP, Local Port and Protocol (TCP or UDP). I have checked on your guide and the ASUS guide but they only explain how to set-up a game server. Could you help me by shedding some light on what I might be doing wrong?
Best regards.