MotionPie : Video surveillance pour Raspberry

On parlait avec Nico de sa dernière acquisition : https://ring.com/ (200$)
La sonnette wifi qui vous prévient quand quelqu’un est devant chez vous (qu’il sonne ou non)
Ayant une raspberry et une webcam sous la main, je me suis demandé ce qu’on pouvait en faire avec la distribution motionpie.

1) MotionPie

Distribution linux optimisé pour le soft motion (logiciel de gestion de camera avec detection de mouvement)
-> https://github.com/ccrisan/motionPie
-> dernière versions : https://github.com/ccrisan/motionPie/releases

2) Notification avec PushBullet

-> s’inscrire sur https://www.pushbullet.com/ et l’installer aussi sur le téléphone.
-> Bien noté son Access Token (code perso)

3) Le script

J’ai modifié celui-dispo ici -> http://www.electronicsfaq.com/2015/10/a-security-cam-that-pushes-video-clips.html

Pour ne pas recevoir une video, mais simplement une image voici le script :

#!/bin/bash
## Your PushBullet Access Token
## Fetch yours from your « Account Settings » Page: https://www.pushbullet.com/#settings/account
## PushBullet API Documentation link: https://docs.pushbullet.com/#api-quick-start
ACCESSTOKEN= »mettre-ici-votre-access-token »
## Following bash script function taken from https://gist.github.com/cjus/1047794
## It extracts value for a corresponding key from a JSON response.
function jsonval {
temp=`echo $json | sed ‘s/\\\\\//\//g’ | sed ‘s/[{}]//g’ | awk -v k= »text » ‘{n=split($0,a, », »); for (i=1; i<=n; i++) print a[i]}’ | sed ‘s/\ »\:\ »/\|/g’ | sed ‘s/[\,]/ /g’ | sed ‘s/\ »//g$
echo ${temp##*|}
}

## Get the current date and time
DATESTAMP=$(date + »%Y-%m-%d »)
TIMESTAMP=$(date + »%H-%M-%S »)

## Get the name of the latest AVI clip shot and placed with a folder on your Raspberry Pi’s SD card
#LATESTAVI=$(ls -tr1 /home/ftp/sdcard/$DATESTAMP/*.avi | tail -1 | sed ‘s#.*/##’)
LATESTIMG=$(ls -tr1 /home/ftp/sdcard/$DATESTAMP/*.jpg | tail -1 | sed ‘s#.*/##’)

## The latest AVI might still be open and being written to.
## So if we try to upload the file rightaway, the file size will be reported to be greater than 25 MB
## and PushBullet will reject it. So we will wait for 30 seconds to allow the system to finish writing the file.
## Ideally we should use lsof utility to wait until the file is done writing, but lsof command is not available on Motion Pie.
#sleep 30

#Pushing a file is a 3 step process
## Step 1: Send a request for file upload.
## PushBullet will respond with a URL to which you can upload your file. (upload URL)
## PushBullet will also respond with a URL at which the file will be available after upload. (File URL)
## No push message is sent in this step.
## File is not uploaded in this step.
## Documentation: https://docs.pushbullet.com/#upload-request
##
## Step 2: Upload the file to the URL which was assigned to you in Step 1
## Documentation: https://docs.pushbullet.com/#upload
##
## Step 3: A push need to be sent for that file. This push can include a message as well as the File URL generated in Step 1.
## Documentation: https://docs.pushbullet.com/#push-a-file
## https://docs.pushbullet.com/#create-push

## Step 1: Request file upload
json= »$(curl \
–header ‘Access-Token: ‘$ACCESSTOKEN \
–header ‘Content-Type: application/json’ \
–data-binary ‘{« file_name »: »‘ »$LATESTIMG »‘ », »file_type »: »image/jpg »}’ \
–request POST \
https://api.pushbullet.com/v2/upload-request) »

## Extract the JSON fields: espesially the Upload URL and File URL
json_key=’upload_url’
UPLOAD_URL=`jsonval`
json_key=’file_url’
FILE_URL=`jsonval`
json_key=’file_name’
FILE_NAME=`jsonval`
json_key=’file_type’
FILE_TYPE=`jsonval`

## Step 2: Upload the file
echo « About to upload $LATESTIMG to $UPLOAD_URL »
curl -i -X POST $UPLOAD_URL -F file=@/home/ftp/sdcard/$DATESTAMP/$LATESTIMG
echo « Done uploading. File now available at $FILE_URL »

##Step 3: Send a push message including a link to the file.
## If the Push is received on a smart phone, the file will be automatically downloaded to it.
echo « Now pushing the file $LATESTIMG to Devices. »
curl \
–header ‘Access-Token: ‘$ACCESSTOKEN \
–header ‘Content-Type: application/json’ \
–data-binary ‘{« type »: »file », »body »: »Motion detected at ‘ »$DATESTAMP $TIMESTAMP »‘ », »file_name »: »‘ »$FILE_NAME »‘ », »file_type »: »‘ »$FILE_TYPE »‘ », »file_url »: »‘ »$FILE_URL »‘ »}’ \
–request POST \
https://api.pushbullet.com/v2/pushes

Ce qui donne une notif en quelque seconde sur le téléphone avec une image prise au mm moment.

P1080437 P1080438

Pas mal.

Point négatif : être dépendant du service pushbullet qui demande trop d’accès à nos données perso.
Désintallation suite à ce test.

A suivre…

One Comment