Working with the Raspberry Pi camera module
Automatic Upload to Dropbox
Another thing you might want to do (because your Raspberry Pi's SD card will quickly run out of space otherwise) is to automatically upload the images and videos created by Motion to Dropbox and then delete them from the Raspberry Pi. Fortunately, this upload process is made a lot simpler due to some parameters available in the configuration file. First, you need to download the DropboxUploader script (created by Andrea Fabrizi):
$ curl "https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh
Make the script executable using:
$ chmod +x dropbox_uploader.sh
Then, run the script:
$ ./dropbox_uploader.sh
and follow the instructions to set up the script with the Dropbox API. When setting up permissions on the Dropbox API, I recommend choosing the App Folder permissions for this implementation, instead of full permissions, so that there is no risk to any of the other files in your Dropbox account and you can easily restrict the uploads to just one folder. Now create a directory to house your scripts in:
$ mkdir DropboxSync
Then move the uploader script into that directory:
$ mv dropbox_uploader.sh /home/pi/DropboxSync
Change directory to the DropboxSync folder:
$ cd DropboxSync
Create a Python file to upload the files to Dropbox and delete them from the Raspberry Pi. Again, you need to use nano text editor to do this. Type:
$ nano dropboxsync.py
Then, enter the code in Listing 2 into the file. Save and exit the file, then make sure the file is executable using the command:
$ chmod +x dropboxsync.py
The next step is to set this script to run as soon as the video file being recorded is closed. Do this using the on_movie_end
parameter in the config file. The on_movie_end
parameter, which is near the bottom of the file, will be commented out with a semicolon by default. Find this line:
; on_movie_end value
And change it to:
on_movie_end /home/pi/DropboxSync/dropboxsync.py
Then, save and exit the file. The script will upload the video and all pictures to Dropbox. While you are in the configuration file, you might want to reduce the number of pictures saved to your Raspberry Pi and thus uploaded to Dropbox. You can do this by changing the output_pictures
parameter in the configuration file to:
output_pictures best
Instead of saving the video and all of the pictures, this setting will cause the system to save just the video and one picture in which the largest amount of motion happened.
Listing 2
Syncing with Dropbox
01 import os 02 path="/home/pi/motion-files/motion-output/" 03 def upload_files(): 04 if not os.path.exists(path): 05 return 06 dir_list = os.listdir(path) 07 for file_name in dir_list: 08 file_full_path = path + file_name 09 cmd = "/home/pi/DropboxSync/dropbox_uploader.sh upload " + file_full_path 10 os.system(cmd) 11 os.remove(file_full_path) 12 if __name__ == "__main__": 13 upload_files()
Receiving Motion Notification Emails
You can also set up the system to send you an email as soon as motion is detected. You could configure the Raspberry Pi as a mail server, so you can send emails directly from it; however, some mail providers (such as Gmail) will reject messages sent from a device set up as a mail server.
The best way to get around this problem is to use an SMTP connection from the Rasp Pi into a Gmail account. First, you need to install ssmtp with:
$ sudo apt-get install ssmtp
The installation takes a fair bit of time, but once it is complete, you can adjust the ssmtp configuration file using the following command:
$ sudo nano /etc/ssmtp/ssmtp.conf
This command will open the configuration file for editing. Your config file will look something like Listing 3 (although not exactly the same).
Listing 3
sSMTP Config File
01 # 02 # Config file for sSMTP sendmail 03 # 04 # The person who gets all mail for userids < 1000 05 # Make this empty to disable rewriting. 06 root=username@gmail.com 07 08 # The place where the mail goes. The actual machine name is required no 09 # MX records are consulted. Commonly mailhosts are named mail.domain.com 10 mailhub=smtp.gmail.com:465 11 12 # Where will the mail seem to come from? 13 #rewriteDomain=gmail.com 14 15 # The full hostname 16 hostname=raspberrypi 17 18 # Are users allowed to set their own From: address? 19 # YES - Allow the user to specify their own From: address 20 # NO - Use the system generated From: address 21 FromLineOverride=YES 22 23 AuthUser=username 24 AuthPass=password 25 UseTLS=YES
Edit the configuration file so that it matches Listing 3, adding in any lines that do not already exist. At the same time, you should replace the root parameter with your full email address and also update the username and password options at the bottom too (where username should be your email address without the @gmail.com part). Once finished, save and exit the file.
Next, create a script that will send you an email message when an event is triggered in Motion. Create a file in the /home/pi/motion-files
directory using the following command:
$ nano /home/pi/motion-files/emailme
Then enter the code shown in Listing 4.
Listing 4
Email Alert
01 #!/bin/sh 02 03 # Motion sample script to send an email at start of an event. 04 # Replaces the former 'mail' option. 05 # Just define this script as 'on_event_start'-script in motion.conf like that: 06 # on_event_start send_mail "%Y-%m-%d %T" 07 08 #change to suit your needs: 09 #location of 'mail' binary 10 MAIL="mail" 11 #Destination e-mail address 12 TO="root@localhost" 13 #Subject of the e-mail 14 SUBJECT="Motion detected" 15 16 #Don't change anything below this line 17 echo "This is an automated message generated by motion.\n\nMotion detected: $1\n\n" | $MAIL -s "$SUBJECT" $TO
You will need to adjust the destination email address and email subject to how you want them, but you should not need to change anything else. Once you have made all necessary changes, save and exit the file. Make sure the file is executable using the following command:
$ chmod +x /home/pi/motion-files/emailme
As before with the Dropbox uploader script, the next step is to set up this script to run from within the Motion configuration file. This time the script will send a notification at the start of the event. Find the following line in the Motion configuration file:
; on_event_start value
and change it to:
on_event_start /home/pi/motion-files/emailme
Save and exit. You should now receive an email as soon as Motion is detected at the camera.
Buy this article as PDF
Pages: 2
(incl. VAT)