{"id":313,"date":"2013-01-06T16:37:48","date_gmt":"2013-01-06T14:37:48","guid":{"rendered":"http:\/\/crudelis.fr\/sblog\/?p=313"},"modified":"2016-04-16T15:24:04","modified_gmt":"2016-04-16T13:24:04","slug":"installer-une-videosurveillance-avec-motion-et-une-simple-webcam","status":"publish","type":"post","link":"https:\/\/crudelis.fr\/site\/sblog\/2013\/01\/installer-une-videosurveillance-avec-motion-et-une-simple-webcam\/","title":{"rendered":"Installer une vid\u00e9osurveillance avec motion et une simple webcam"},"content":{"rendered":"<p><strong>Mise \u00e0 jour le 16\/04\/2016<\/strong><\/p>\n<p>Les f\u00eates de fin d'ann\u00e9es sont pass\u00e9es, avec les nombreuses absences, les cambriolages sont fr\u00e9quents. Sans emp\u00eacher les probl\u00e8mes, une surveillance vid\u00e9o en notre absence permet au moins de savoir ce qui s'y passe. C'est \u00e9galement un bon moyen de garder des traces de tous les mouvements d\u00e9tect\u00e9s.<\/p>\n<p>Nous utiliserons ici le logiciel motion, qui enregistre des images \u00e0 intervalle r\u00e9gulier lorsqu'un mouvement est d\u00e9tect\u00e9 et permet une diffusion du flux vid\u00e9o via un mini serveur http.<\/p>\n<p>Cet article pr\u00e9sentera comment exploiter motion pour recevoir par mail les images de tout mouvement rep\u00e9r\u00e9 dans la zone de surveillance tout en ayant la possibilit\u00e9 de consulter le flux de la webcam via un acc\u00e8s s\u00e9curis\u00e9.<br \/>\n<!--more--><\/p>\n<p>&nbsp;<\/p>\n<p>L'installation d'une vid\u00e9osurveillance implique quelques pr\u00e9requis:<\/p>\n<ul>\n<li>Une webcam tra\u00eenant au fond d'un tiroir.<\/li>\n<li>L'installation du paquet 'motion'.<\/li>\n<li>C'est tout pour un fonctionnement de base.<\/li>\n<\/ul>\n<p>Pour obtenir toutes les images par mail \u00e0 chaque d\u00e9tection de mouvement, il faut ajouter les \u00e9l\u00e9ments suivant:<\/p>\n<ul>\n<li>Une boite mail pour la r\u00e9ception des images.<\/li>\n<li>Le paquet p7zip-full pour la compression des archives, si on souhaite leur adjoindre un mot de passe.<\/li>\n<li>Un espace de stockage pour les archives trop volumineuses pour \u00eatre jointes par mail.<\/li>\n<\/ul>\n<p>Enfin, pour profiter de la diffusion s\u00e9curis\u00e9e du flux de la webcam, il nous faudra ceci:<\/p>\n<ul>\n<li>Un serveur apache fonctionnel. <a href=\"http:\/\/www.lafermeduweb.net\/billet\/tutorial-creer-un-serveur-web-complet-sous-debian-1-apache-160.html#InstApache2\" target=\"_blank\">Tutoriel apache.<\/a><\/li>\n<li>Ou tout autre serveur capable de g\u00e9rer un reverse proxy.<\/li>\n<li>Un certificat SSL \u00e0 jour. <a href=\"http:\/\/doc.ubuntu-fr.org\/tutoriel\/comment_creer_un_certificat_ssl\" target=\"_blank\">Tutoriel SSL.<\/a><\/li>\n<\/ul>\n<p>Nous supposerons donc que tout ces \u00e9l\u00e9ments sont pr\u00e9sents et fonctionnels.<\/p>\n<h2>Installation et configuration de motion<\/h2>\n<p>Pour commencer, installer les paquets motion et p7zip-full.<\/p>\n<pre>sudo apt-get install motion p7zip-full<\/pre>\n<p>Avant de configurer motion, il est n\u00e9cessaire de localiser la webcam. Elle doit se trouver dans \/dev\/videoX.<br \/>\nUn ls \/dev\/video* permettra d'afficher les diff\u00e9rents p\u00e9riph\u00e9riques connect\u00e9 sous ce nom.<br \/>\nSi aucun autre p\u00e9riph\u00e9rique vid\u00e9o n'est install\u00e9, la webcam se trouvera en \/dev\/video0.<\/p>\n<p>La configuration de motion se fait par le fichier \/etc\/motion\/motion.conf, que nous modifierons comme suit:<\/p>\n<pre>\r\n[...]\r\nvideodevice \/dev\/video0\r\n[...]\r\nwidth 1024\r\n[...]\r\nheight 768\r\n[...]\r\nframerate 3\r\n[...]\r\n# The quality (in percent) to be used by the jpeg compression (default: 75)\r\nquality 90\r\n[...]\r\nffmpeg_cap_new off\r\n[...]\r\nlocate on\r\n[...]\r\ntarget_dir \/DIR\/DOSSIER_POUR_MOTION\r\n[...]\r\n<\/pre>\n<p>En d\u00e9tail:<br \/>\n<strong><em>videodevice \/dev\/video0<\/em><\/strong><br \/>\nLe chemin de la webcam \u00e0 utiliser.<\/p>\n<p><strong><em>width 1024<br \/>\nheight 768<\/em><\/strong><br \/>\nLa r\u00e9solution de l'image souhait\u00e9e.<br \/>\n\u00c0 d\u00e9finir en fonction des capacit\u00e9s de la webcam utilis\u00e9e et du volume des images produites. Il ne faut pas oublier en effet que les images seront ensuite envoy\u00e9es par mail et doivent donc \u00eatre peu volumineuses.<\/p>\n<blockquote><p>Motion accepte uniquement les r\u00e9solutions multiple de 16, ce qui exclue d'office le simple 800*600.<br \/>\nPour conna\u00eetre les r\u00e9solutions accept\u00e9es par la webcam, installez le paquet v4l-utils.<\/p>\n<pre>sudo apt-get install v4l-utils\r\nsudo v4l2-ctl --list-formats-ext<\/pre>\n<\/blockquote>\n<p><strong><em>framerate 3<\/em><\/strong><br \/>\nLe nombre d'images cr\u00e9\u00e9es par secondes.<br \/>\n3 images par seconde reste un bon choix pour garder une vision claire des mouvements tout en pr\u00e9servant le volume d'images produites.<\/p>\n<p><strong><em># The quality (in percent) to be used by the jpeg compression (default: 75)<br \/>\nquality 90<\/em><\/strong><br \/>\nLa compression jpeg des images produites. L\u00e0 encore il est bon de v\u00e9rifier la taille des images. Pour ma part les fichiers font environ 20ko. (Ce qui produit des fichiers joint de 7 \u00e0 9mo maximum par mail)<\/p>\n<p><strong><em>ffmpeg_cap_new off<\/em><\/strong><br \/>\nInterdit la cr\u00e9ation d'une vid\u00e9o de l'\u00e9v\u00e9nement, ce qui alourdirait inutilement l'archive \u00e0 envoyer par mail.<\/p>\n<p><strong><em>locate on<\/em><\/strong><br \/>\nPermet de mettre en \u00e9vidence sur chaque image les mouvements d\u00e9tect\u00e9s en les encadrant.<\/p>\n<p><strong><em>target_dir \/DIR\/DOSSIER_POUR_MOTION<\/em><\/strong><br \/>\nLe dossier de destination des images enregistr\u00e9es par motion.<br \/>\nLes images n'\u00e9tant pas supprim\u00e9es automatiquement, il bon de garder un acc\u00e8s \u00e0 ce dossier pour le vider manuellement.<\/p>\n<p>Motion dispose d'un multitude d'autres options int\u00e9ressantes. Elles sont toutes d\u00e9crites \u00e0 cette page du <a href=\"http:\/\/www.lavrsen.dk\/foswiki\/bin\/view\/Motion\/MotionGuideAlphabeticalOptionReferenceManual\" target=\"_blank\">wiki de motion<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<p>A pr\u00e9sent que motion est install\u00e9 et configur\u00e9, nous allons pouvoir tester son bon fonctionnement en le d\u00e9marrant dans le terminal.<\/p>\n<pre>sudo motion<\/pre>\n<blockquote><p>Si vous obtenez une erreur du type:<br \/>\n[1] Unable to find a compatible palette format.<br \/>\n[1] ioctl (VIDIOCGCAP): Invalid argument<\/p>\n<p>C'est sans doute que votre webcam n\u00e9cessite v4l1 au lieu de v4l2 utilis\u00e9 par<br \/>\nd\u00e9faut par motion.<br \/>\nIl est donc n\u00e9cessaire de forcer l'usage de v4l1 par motion.<br \/>\nTout d'abord nous allons installer 'libv4l-0'.<\/p>\n<pre>sudo apt-get install libv4l-0<\/pre>\n<p>Puis relancer motion en utilisant v4l1.<\/p>\n<pre>sudo LD_PRELOAD=\/usr\/lib\/i386-linux-gnu\/libv4l\/v4l1compat.so motion<\/pre>\n<\/blockquote>\n<p>Motion \u00e9tant d\u00e9marr\u00e9 et fonctionnel avec notre webcam, on peut \u00e0 pr\u00e9sent affiner les r\u00e9glages de motion et constater les images enregistr\u00e9es par celui-ci.<br \/>\nIl sera bien \u00e9videmment n\u00e9cessaire de red\u00e9marrer motion apr\u00e8s chaque modification de son fichier de configuration.<\/p>\n<p>A pr\u00e9sent que motion est configur\u00e9 correctement, nous allons lui demander de d\u00e9marrer en tant que daemon afin qu'il soit lanc\u00e9 au d\u00e9marrage de la machine.<br \/>\nPour cela il faut \u00e9diter les fichiers \/etc\/motion\/motion.conf ET \/etc\/default\/motion<br \/>\nDans \/etc\/motion\/motion.conf<\/p>\n<pre>daemon on<\/pre>\n<p>Et dans \/etc\/default\/motion<\/p>\n<pre>start_motion_daemon=yes<\/pre>\n<blockquote><p>Si la webcam n\u00e9cessite v4l1<br \/>\nau lieu de v4l2, il faudra que motion le charge au d\u00e9marrage. Pour cela, il faut modifier le fichier \/etc\/init.d\/motion.<\/p>\n<p>Apr\u00e8s avoir rep\u00e9r\u00e9 le paragraphe,<\/p>\n<pre>case \"$1\" in\r\n  start)\r\n    if check_daemon_enabled ; then<\/pre>\n<p>Ajouter la ligne suivante juste apr\u00e8s 'start)'<\/p>\n<pre>export LD_PRELOAD=\/usr\/lib\/i386-linux-gnu\/libv4l\/v4l1compat.so<\/pre>\n<\/blockquote>\n<p>A ce stade, motion va donc enregistrer 3 images par secondes d\u00e9s lors qu'un mouvement est d\u00e9tect\u00e9 dans le champs de la webcam.<\/p>\n<blockquote><p>Attention toutefois \u00e0 bien v\u00e9rifier les droits d'\u00e9criture de l'user 'motion' dans le dossier d'images. En effet, motion a la mauvaise habitude de s'arr\u00eater de lui m\u00eame d\u00e9s lors qu'il est confront\u00e9 \u00e0 une erreur d'acc\u00e8s au dossier...<br \/>\nOn peut v\u00e9rifier ce comportement en v\u00e9rifiant le log de motion dans \/var\/log\/syslog\n<\/p><\/blockquote>\n<h3>Filtrage du log de motion<\/h3>\n<p>Dans la configuration pr\u00e9sente, tout va bien tant qu'on ne d\u00e9branche pas la webcam.<br \/>\nEn effet, d\u00e9s lors que la webcam est d\u00e9branch\u00e9e, motion va tenter de la d\u00e9tecter \u00e0 nouveau. Ce comportement est en soi une bonne chose car il nous permettra de simplement brancher la webcam pour retrouver les services de motion.<br \/>\nMais dans le m\u00eame temps, motion inscrit 2 lignes dans le fichier de log \/var\/log\/syslog toutes les 10 secondes tant qu'il ne retrouve pas la webcam! Cr\u00e9ant ainsi un log de plusieurs mo chaque jour, totalement illisible...<\/p>\n<p>Nous allons donc filtrer ce log afin d'\u00e9viter ces 2 entr\u00e9es qui nous sont totalement inutiles.<br \/>\nOn va commencer par cr\u00e9er un nouveau fichier de conf pour rsyslogd:<\/p>\n<pre>sudo nano \/etc\/rsyslog.d\/40-motion.conf<\/pre>\n<p>Et le remplir ainsi:<\/p>\n<pre>#Filtrage du log de motion.\r\n#On filtre les entr\u00e9es de log contenant les 2 chaines suivantes.\r\n:msg, contains, \"Retrying until successful connection with camera\" ~\r\n:msg, regex, \"Failed to open video device \/dev\/video([0-9]): No such file or directory\" ~\r\n#Ainsi on \u00e9vite un flood de motion dans syslog \r\ntoutes les 10 secondes!<\/pre>\n<p>Il est important que le nom du fichier 'conf' soit pr\u00e9c\u00e9d\u00e9 de 40, afin d'avoir une priorit\u00e9 plus importante que le fichier g\u00e9n\u00e9ral '50-default.conf'. Sans quoi la r\u00e8gle de filtrage interviendrait trop tard.<br \/>\nOn peut \u00e0 pr\u00e9sent red\u00e9marrer rsyslogd pour recharger sa configuration.<\/p>\n<pre>sudo \/etc\/init.d\/rsyslog restart<\/pre>\n<p><span style=\"font-size: 10px\"><a href=\"http:\/\/www.rsyslog.com\/doc\/rsyslog_conf_filter.html\" target=\"_blank\">Plus d'infos sur le filtrage de rsyslog.<\/a><\/span><\/p>\n<p>&nbsp;<\/p>\n<h2>Envoi des images par mail<\/h2>\n<p>A pr\u00e9sent que motion enregistre des images d\u00e9s qu'il per\u00e7oit un mouvement, il est int\u00e9ressant d'en \u00eatre averti et pouvoir consulter ces m\u00eames images ind\u00e9pendamment du serveur.<br \/>\nEn cas de cambriolage, il serait en effet dommage que les intrus partent avec toutes les images en embarquant simplement le serveur!<\/p>\n<p>Motion lui m\u00eame n'est pas capable de remplir cette t\u00e2che, nous allons donc confier cela \u00e0 un simple script, plac\u00e9 dans le dossier des images cr\u00e9es par motion.<\/p>\n<pre>#!\/bin\/bash\r\n\r\nIMG_DIR=\/DIR\/DOSSIER_POUR_MOTION\r\nTAILLE_MAX=`expr 1048576 \\* 9` # Taille maximale de l'archive pour envoi en Mo\r\nMAIL_DEST=\"adresse@domain.tld\"\r\n\r\nBCL=0\t#Compte le nombre de boucle\r\nREBCL=1\r\n\r\nwhile [ $REBCL -eq 1 ]\r\ndo\r\n    #Liste les fichiers \u00e0 inclure.\r\n    ls -1 $IMG_DIR\/*.jpg &gt; $IMG_DIR\/liste 2&gt; \/dev\/null\r\n    NB_IMG=$(wc -l $IMG_DIR\/liste | cut -d ' ' -f 1)\t# D\u00e9termine le nombre d'image en comptant les lignes du fichier de liste\r\n\r\n    #D\u00e9termine la date exact de l'\u00e9v\u00e9nement (head prend la premi\u00e8re ligne, puis cut d\u00e9coupe le nom de fichier pour ne garder que milieu du nom.\r\n    CHAINE=$(head -n 1 $IMG_DIR\/liste | cut -d \"-\" -f 2 | cut -d \" \" -f 1)\r\n    ANNEE=$(echo $CHAINE | cut -c 1-4)\r\n    MOIS=$(echo $CHAINE | cut -c 5-6)\r\n    JOUR=$(echo $CHAINE | cut -c 7-8)\r\n    HEURE=$(echo $CHAINE | cut -c 9-10)\r\n    MINUTE=$(echo $CHAINE | cut -c 11-12)\r\n\r\n    ARCHIVE=$JOUR.$MOIS.$ANNEE-$HEURE,$MINUTE-$BCL.7z\r\n\r\n    if [ $BCL -eq 0 ]\r\n    then\r\n\t\tsleep 5\t\t#Patiente 5 secondes pour laisser le temps \u00e0 la webcam d'enregistrer\r\n\t\t#Ne garde que les 10 premi\u00e8res images de la liste pour envoyer un premier \u00e9chantillon\r\n\t\tls -1 $IMG_DIR\/*.jpg &gt; $IMG_DIR\/liste 2&gt; \/dev\/null\r\n\t\tNB_IMG=$(wc -l $IMG_DIR\/liste | cut -d ' ' -f 1)\t# D\u00e9termine le nombre d'image en comptant les lignes du fichier de liste\r\n\t\thead -n 10 $IMG_DIR\/liste &gt; $IMG_DIR\/liste10\r\n\t\tif [ $NB_IMG -gt 1 ]\r\n\t\tthen\r\n\t\t\t#Cr\u00e9er l'archive des images et vid\u00e9os \u00e0 joindre au mail, seulement si il y a plusieurs images.\r\n\t\t\t7z a -t7z -mmt=on -mx=9 -ms=on -pmot_de_passe \"$IMG_DIR\/$ARCHIVE\" @$IMG_DIR\/liste10\r\n\t\tfi\r\n    elif [ $NB_IMG -gt 1 ]\r\n\tthen\r\n\t\t#Cr\u00e9er l'archive des images et vid\u00e9os \u00e0 joindre au mail, seulement si il y a plusieurs images.\r\n\t\t7z a -t7z -mmt=on -mx=9 -ms=on -pmot_de_passe \"$IMG_DIR\/$ARCHIVE\" @$IMG_DIR\/liste\r\n\tfi\r\n\r\n    #Corps du mail\r\n    echo \"Motion semble avoir d\u00e9tect\u00e9 un mouvement \u00e0 $HEURE:$MINUTE le $JOUR\/$MOIS\/$ANNEE.\" &gt; $IMG_DIR\/corps_mail\r\n    echo \"\" &gt;&gt; $IMG_DIR\/corps_mail\r\n    echo \"Mot de passe de l'archive: indice_du_mot_de_passe\" &gt;&gt; $IMG_DIR\/corps_mail\r\n    echo -n \"L'archive contient $NB_IMG\" &gt;&gt; $IMG_DIR\/corps_mail\r\n    if [ $NB_IMG -eq 1 ]\r\n    then\r\n\t\techo \" photo.\" &gt;&gt; $IMG_DIR\/corps_mail\r\n    else\r\n\t\techo \" photos.\" &gt;&gt; $IMG_DIR\/corps_mail\r\n    fi\r\n\r\n    ARCH_MAX=0\r\n\tif [ $NB_IMG -gt 1 ]\t# Si il y a plus d'une image\r\n\tthen\r\n\t\tif [ $(stat -c \"%s\" \"$IMG_DIR\/$ARCHIVE\") -gt $TAILLE_MAX ]\r\n\t\tthen\t# Si la taille de l'archive exc\u00e8de la limite\r\n\t\t\tARCH_MAX=1      #Indique une taille trop importante de l'archive pour un envoi\r\n\t\t\techo \"L'archive est trop volumineuse pour \u00eatre envoy\u00e9e par mail. Acc\u00e8s aux archives: https:\/\/domain.tld\/acc\u00e8s_motion_dir\" &gt;&gt; $IMG_DIR\/corps_mail\r\n\t\tfi\r\n\tfi\r\n    echo \"Acc\u00e9der \u00e0 la webcam: https:\/\/domain.tld\/motion_cam\" &gt;&gt; $IMG_DIR\/corps_mail\r\n\r\n    # Prend la 5e image prise par la webcam pour l'afficher dans le mail. (Si il y a moins d'images, la derni\u00e8re est prise)\r\n    IMAGE=$(head -n 5 $IMG_DIR\/liste | tail -n -1)\r\n\r\n    #Envoi du mail\r\n    MUTTRC=\/EMPLACEMENT\/ARBITRAIRE\/DU\/FICHIER\/DE\/CONFIG\/MUTT\/Muttrc\r\n    if [ $NB_IMG -eq 1 ] || [ $ARCH_MAX -eq 1 ]\r\n    then\t# Ne joint pas l'archive si il n'y qu'une seule image ou si l'archive d\u00e9passe la taille maximale.\r\n\t\tmutt -F \"$MUTTRC\" -s \"Motion\" -i $IMG_DIR\/corps_mail -a \"$IMAGE\" -- $MAIL_DEST &lt; \/dev\/null\r\n    else\r\n\t\tmutt -F &quot;$MUTTRC&quot; -s &quot;Motion&quot; -i $IMG_DIR\/corps_mail -a &quot;$IMAGE&quot; &quot;$IMG_DIR\/$ARCHIVE&quot; -- $MAIL_DEST  \/dev\/null 2&gt;&amp;1\t#Teste la pr\u00e9sence de fichier jpg dans le dossier (en exploitant le code d'erreur de ls)\r\n    then\r\n\t\tREBCL=0\r\n    fi\r\n    BCL=$(($BCL + 1))\t#Incr\u00e9mente le compteur de boucle\r\ndone\r\n\r\n# 7z\r\n# a    Add\r\n# -t7z\tArchive 7z\r\n# -mmt=on\tSets multithreading mode.\r\n# -mx=3\tSets level of compression.\r\n# -ms=on\tSets solid mode.\r\n# -p{password}\tSpecifies password.\r\n# @listfile.txt\r\n\r\n# mutt\r\n# -a file              Attach a file to your message using MIME.\r\n# -i include           Specify a file to include into the body of a mes\u00adsage.\t???\r\n# -s subject           Specify the subject of the message.\r\n<\/pre>\n<p>Le script fonctionne de la fa\u00e7on suivante:<\/p>\n<ol>\n<li>Scan du dossier des images pour lister les images et les vid\u00e9os pr\u00e9sentes. (Adaptez l'extension jpg si vous n'utilisez pas les m\u00eames options dans motion)<\/li>\n<li>Parse le nom de la premi\u00e8re image pour d\u00e9terminer l'heure et la date.<\/li>\n<li>Cr\u00e9ation d'une archive contenant les 10 premi\u00e8res images. Seulement lors du d\u00e9marrage du script. Ceci permet d'avoir un \u00e9chantillon rapide de l\u2019\u00e9v\u00e9nement d\u00e9tect\u00e9.<\/li>\n<li>Sinon, cr\u00e9ation d'une archive contenant toutes les images enregistr\u00e9es. Les images sont supprim\u00e9es apr\u00e8s avoir \u00e9t\u00e9 archiv\u00e9es.<\/li>\n<li>L'archive est ajout\u00e9e au contenu du mail en pi\u00e8ce jointe ainsi qu'une image pour avoir un visuel imm\u00e9diat.<\/li>\n<li>Puis envoy\u00e9 par mail.<\/li>\n<li>Le script patiente 2 minutes, puis v\u00e9rifie si de nouvelles images ont \u00e9t\u00e9 enregistr\u00e9es.<\/li>\n<li>Si de nouvelles images sont d\u00e9tect\u00e9es, le script reprend \u00e0 l'\u00e9tape 1 en ignorant l'\u00e9tape 3.<\/li>\n<li>Le script prend fin si aucune nouvelle image n'est trouv\u00e9 \u00e0 l'\u00e9tape 7<\/li>\n<\/ol>\n<blockquote><p>Attention \u00e0 l'adresse mail utilis\u00e9e, certain fournisseur filtre d'office les mails provenant d'un serveur n'utilisant pas de nom de domaine pour s'identifier. C'est le cas notamment de yahoo...<br \/>\nOn peux v\u00e9rifier l'envoi du mail en consultant \/var\/log\/mail.log<br \/>\nIl est aussi vivement d\u00e9conseill\u00e9 d'envoyer le mail sur une adresse h\u00e9berg\u00e9e par le m\u00eame serveur, l'int\u00e9r\u00eat de la manoeuvre \u00e9tant \u00e9galement de s\u00e9curiser les images en les envoyant sur un serveur \u00e0 l'abri de ce qui se passe chez vous!<\/p><\/blockquote>\n<blockquote><p>mutt a la f\u00e2cheuse id\u00e9e de vouloir cr\u00e9er une copie du mail envoy\u00e9 dans le dossier utilisateur. Or l'utilisateur motion n'ayant pas de dossier home, mutt tente d'\u00e9crire dans \/root, mais il n'a pas l'autorisation de le faire. Cela provoque un plantage de mutt, qui emp\u00eache l'envoi du mail. Nous allons donc demander \u00e0 mutt de ne pas faire cette copie, en lui pr\u00e9cisant dans un fichier de config d\u00e9di\u00e9.<br \/>\nCe fichier de config peut \u00eatre plac\u00e9 n'importe o\u00f9. Par convenance, nous le placeront au m\u00eame endroit que le script lui-m\u00eame.<\/p>\n<pre>cp \/etc\/Muttrc \/EMPLACEMENT\/ARBITRAIRE\/DU\/FICHIER\/DE\/CONFIG\/MUTT\/Muttrc\r\necho \"set copy=no\" &gt;&gt; \/EMPLACEMENT\/ARBITRAIRE\/DU\/FICHIER\/DE\/CONFIG\/MUTT\/Muttrc<\/pre>\n<\/blockquote>\n<p>Le script doit \u00eatre rendu ex\u00e9cutable,<\/p>\n<pre>sudo chmod +x \/DIR\/DOSSIER_POUR_MOTION\/SCRIPT.sh<\/pre>\n<p>puis utilis\u00e9 par motion d\u00e9s lors qu'il d\u00e9tecte un mouvement. Cela peut \u00eatre fait en exploitant l'option on_event_start du fichier de config de motion.<\/p>\n<pre># Command to be executed when an event starts. (default: none)\r\n# An event starts at first motion detected after a period of no motion defined by gap \r\non_event_start \/DIR\/DOSSIER_POUR_MOTION\/SCRIPT.sh<\/pre>\n<p>Apr\u00e8s red\u00e9marrage de motion, nous seront donc averti de tout mouvement par des mails contenants les images prises par la webcam.<\/p>\n<blockquote><p>Il faut bien consid\u00e9rer que 3 images par seconde durant 2 minutes font 360 fichiers par archives. Il est donc important de veiller au volume de chaque fichier image.<br \/>\nEn effet, les archives trop volumineuses seront notifi\u00e9es par mail, mais pas jointe \u00e0 celui-ci.<\/p><\/blockquote>\n<h3>Supprimer automatiquement les anciennes images de la webcam<\/h3>\n<p>Avec le temps, de nombreuses archives d'images sont cr\u00e9\u00e9s dans le dossier de motion. Ces archives appartiennent \u00e0 motion et ne peuvent donc pas \u00eatre supprim\u00e9es simplement.<br \/>\nAfin de nettoyer r\u00e9guli\u00e8rement ce dossier, nous allons ajouter une t\u00e2che cron pour automatiser la suppression des archives d'images trop ancienne et devenue inutiles.<\/p>\n<p>Pour cela, il faut cr\u00e9er un fichier dans \/etc\/cron.d<\/p>\n<pre>sudo nano \/etc\/cron.d\/motion_clean<\/pre>\n<p>Et \u00e9crire le code suivant:<\/p>\n<pre># Suppression des vieilles images de motion (Datant de plus de 2 mois)\r\n\r\n0 5 * * * motion find \/DIR\/DOSSIER_POUR_MOTION\/*.7z -mtime +60 -exec rm {} \\;\r\n<\/pre>\n<p>La t\u00e2che cron s'ex\u00e9cutera toutes les nuits \u00e0 5h et supprimera toute archive 7z datant de plus de 2 mois dans le dossier des images de motion.<\/p>\n<p>&nbsp;<\/p>\n<h2>Diffusion s\u00e9curis\u00e9e du flux vid\u00e9o de la webcam<\/h2>\n<p>Motion utilise un mini serveur http embarqu\u00e9 pour diffuser le flux de la webcam, mais ne permet ni de restreindre les acc\u00e8s ni de le s\u00e9curiser. Permettre un acc\u00e8s distant \u00e0 cette page reviendrais donc \u00e0 permettre \u00e0 n'importe qui de voir ce qui se passe chez nous. A \u00e9viter donc!<\/p>\n<p>Il est pourtant int\u00e9ressant de pouvoir consulter le flux de sa webcam, en particulier si motion vous averti de mouvements suspects et av\u00e9r\u00e9s. Nous allons donc s\u00e9curiser l'acc\u00e8s \u00e0 cette page, afin de pouvoir la consulter en toute s\u00e9curit\u00e9 en s'identifiant.<\/p>\n<p><em>Merci \u00e0 Johnny Rahm\u00e9, dont j'ai suivi les indications pour cette partie, qui explique sur son <a href=\"http:\/\/hercule.rahme.fr\/index.php?option=com_content&amp;task=view&amp;id=45&amp;Itemid=26&amp;limit=1&amp;limitstart=3\" target=\"_blank\">blog<\/a> la m\u00e9thode \u00e0 suivre.<\/em><\/p>\n<p>Nous allons donc cr\u00e9er un reverse-proxy en SSL \u00e0 l'aide d'apache afin de rooter l'acc\u00e8s \u00e0 la page de motion tout en demandant une identification. L'ensemble \u00e9tant s\u00e9curis\u00e9 par SSL.<\/p>\n<p>Tout d'abord, il faut configurer motion pour qu'il diffuse sur son mini-serveur http.<br \/>\nCeci se passe dans \/etc\/motion\/motion.conf<\/p>\n<pre>[...]\r\nwebcam_port 8081\r\n[...]\r\nwebcam_quality 100\r\n[...]\r\nwebcam_maxrate 24\r\n[...]\r\nwebcam_localhost on\r\n[...]<\/pre>\n<p><strong><em>webcam_port 8081<\/em><\/strong><br \/>\nRepr\u00e9sente le port du serveur http de motion, le port importe peu, tant qu'aucun autre logiciel ne l'utilise \u00e9galement.<\/p>\n<p><strong><em>webcam_quality 100<\/em><\/strong><br \/>\nQualit\u00e9 de la vid\u00e9o diffus\u00e9e. Ma webcam \u00e9tant m\u00e9diocre, j'ai choisi la qualit\u00e9 maximum, c'est \u00e0 mod\u00e9rer en fonction de sa connexion.<\/p>\n<p><strong><em>webcam_<br \/>\nmaxrate 24<\/em><\/strong><br \/>\nLe nombre d'images par seconde pour la vid\u00e9o.<\/p>\n<p><strong><em>webcam_localhost on<\/em><\/strong><br \/>\nOn restreint le mini-serveur http \u00e0 un acc\u00e8s local uniquement, c'est indispensable de garder cette option \u00e0 'on' pour \u00e9viter toute faille de s\u00e9curit\u00e9. C'est apache lui seul qui doit acc\u00e9der au serveur de motion, ce qu'il fera toujours en local.<\/p>\n<p>Nous allons \u00e0 pr\u00e9sent pr\u00e9parer apache en lui ajoutant les 2 modules n\u00e9cessaires, mod_proxy et mod_proxy_http.<\/p>\n<pre>sudo a2enmod proxy\r\nsudo a2enmod proxy_http<\/pre>\n<p>puis cr\u00e9er le virtualhost apache pour motion<\/p>\n<pre>&lt;VirtualHost *:443&gt;\r\n        ServerAdmin adresse@domaine.fr\r\n        ServerName motion.domaine.fr\r\n        SSLEngine On\r\n        SSLCertificateKeyFile \/etc\/ssl\/domain.tld.key\r\n        SSLCertificateFile \/etc\/ssl\/domain.tld.crt\r\n\r\n\tProxyRequests Off\r\n        &lt;Proxy *domain.tld\/motion_cam\/*&gt;\r\n                AuthType Basic\r\n                AuthName \"Motion webcam live\"\r\n         \r\n       AuthUserFile \/etc\/apache2\/htpasswd\r\n                Require user NOM_USER\r\n                Order deny,allow\r\n                Allow from all\r\n        &lt;\/Proxy&gt;\r\n        ProxyPass \/motion_cam\/ http:\/\/localhost:8081\r\n        ProxyPassReverse \/motion_cam\/ http:\/\/localhost:8081\r\n        ServerSignature off\r\n&lt;\/VirtualHost&gt;<\/pre>\n<p>Le fichier htpasswd servira \u00e0 s'authentifier lors de l'acc\u00e8s \u00e0 la page. <a href=\"http:\/\/guide.ovh.com\/HtaccessProtection\" target=\"_blank\">Quelques infos sur sa syntaxe.<\/a><br \/>\nL'user mentionn\u00e9 en argument de 'Require user' doit correspondre \u00e0 un user du fichier htpasswd.<\/p>\n<p>Il suffit de red\u00e9marrer apache ainsi que motion pour valider toutes ces modifications.<\/p>\n<pre>sudo \/etc\/init.d\/motion restart \r\nsudo \/etc\/init.d\/apache2 restart<\/pre>\n<p>&nbsp;<\/p>\n<h2>Activer et d\u00e9sactiver la webcam<\/h2>\n<p>A pr\u00e9sent, il suffit de brancher notre webcam avant de partir pour \u00eatre averti du moindre mouvement par mail. D\u00e9s lors, il sera possible de consulter le flux de la webcam \u00e0 l'adresse https:\/\/domain.tld\/motion_cam\/ pour v\u00e9rifier ce qui se passe.<\/p>\n<p>On peut \u00e9galement d\u00e9cider de laisser la webcam branch\u00e9e, et de l'activer seulement lorsqu'elle sera utile.<br \/>\nPour cela il faut ajouter un script simple, dans le dossier des images.<\/p>\n<pre>#!\/bin\/bash\r\n\r\nif [ $1 -eq 0 ]\r\nthen    # D\u00e9sactivation de la webcam\r\n        sudo sed -i \"s@blacklist uvcvideo@# blacklist uvcvideo@g\" \/etc\/modprobe.d\/blacklist.conf\r\n        sudo rmmod -f uvcvideo > \/dev\/null\r\nfi\r\n\r\nif [ $1 -eq 1 ]\r\nthen    # Activation de la webcam\r\n        sudo sed -i \"s@# blacklist uvcvideo@blacklist uvcvideo@g\" \/etc\/modprobe.d\/blacklist.conf\r\n        sudo modprobe uvcvideo\r\n        sudo ln -sf $(ls -1 \/dev\/video* | sed \/video0\/d) \/dev\/video0\r\nfi<\/pre>\n<p>Qu'on rend ex\u00e9cutable,<\/p>\n<pre>sudo chmod +x \/DIR\/DOSSIER_POUR_MOTION\/active_cam.sh<\/pre>\n<p>Le script va simplement ajouter ou retirer le module uvcvideo dans le noyau syst\u00e8me. Ce module permet la prise en charge de la webcam, sans lui la webcam n'est pas reconnue et est inexploitable.<\/p>\n<p>Pour utiliser simplement le script, on peux soit l'int\u00e9grer au service motion, qui n'a pas de raison de fonctionner si la webcam n'est pas disponible. Soit int\u00e9grer le service au script, selon la m\u00e9thode employ\u00e9e pour g\u00e9rer les services.<\/p>\n<h3>Int\u00e9grer le script au service motion<\/h3>\n<p>Pour ma part, le service est g\u00e9r\u00e9 par l'interface d'administration de <a href=\"https:\/\/yunohost.org\/#\/\" target=\"_blank\">Yunohost<\/a>.<br \/>\nDonc je pr\u00e9f\u00e8re int\u00e9grer le script au service.<br \/>\nOn modifie donc le fichier \/etc\/init.d\/motion de la mani\u00e8re suivante:<\/p>\n<p>Dans la section <em>start)<\/em>, juste apr\u00e8s<\/p>\n<pre>chown motion:motion \/var\/run\/motion<\/pre>\n<p>On ajoute<\/p>\n<pre>\/DIR\/DOSSIER_POUR_MOTION\/active_cam.sh 1<\/pre>\n<p>Et dans la section <em>stop)<\/em>, juste apr\u00e8s<\/p>\n<pre>log_daemon_msg \"Stopping $DESC\" \"$NAME\"<\/pre>\n<p>On ajoute<\/p>\n<pre>\/DIR\/DOSSIER_POUR_MOTION\/active_cam.sh 0<\/pre>\n<p>De cette mani\u00e8re le d\u00e9marrage et l'arr\u00eat du service motion activera ou d\u00e9sactivera la webcam. Il faut toutefois \u00e9galement d\u00e9sactiver le d\u00e9marrage automatique du service lorsque celui-ci est arr\u00eat\u00e9.<\/p>\n<h3>Int\u00e9grer le service motion au script<\/h3>\n<p>Dans le cas o\u00f9 on ne dispose pas d'une interface de gestion des services, il est plus simple d'utiliser directement le script \u00e0 partir d'une connexion ssh.<br \/>\nDans ce cas, on va simplement int\u00e9grer la gestion du service \u00e0 notre script pr\u00e9c\u00e9dent.<br \/>\nEn le modifiant comme suit:<\/p>\n<pre>#!\/bin\/bash\r\n\r\nif [ $1 -eq 0 ]\r\nthen    # D\u00e9sactivation de la webcam\r\n        sudo service motion stop\r\n        sudo update-rc.d -f motion remove\r\n        sudo sed -i \"s@blacklist uvcvideo@# blacklist uvcvideo@g\" \/etc\/modprobe.d\/blacklist.conf\r\n        sudo rmmod -f uvcvideo > \/dev\/null\r\nfi\r\n\r\nif [ $1 -eq 1 ]\r\nthen    # Activation de la webcam\r\n        sudo sed -i \"s@# blacklist uvcvideo@blacklist uvcvideo@g\" \/etc\/modprobe.d\/blacklist.conf\r\n        sudo modprobe uvcvideo\r\n        sudo ln -sf $(ls -1 \/dev\/video* | sed \/video0\/d) \/dev\/video0\r\n        sudo service motion start\r\n        sudo update-rc.d motion default\r\nfi<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Mise \u00e0 jour le 16\/04\/2016 Les f\u00eates de fin d'ann\u00e9es sont pass\u00e9es, avec les nombreuses absences, les cambriolages sont fr\u00e9quents. Sans emp\u00eacher les probl\u00e8mes, une surveillance vid\u00e9o en notre absence permet au moins de savoir ce qui s'y passe. C'est \u00e9galement un bon moyen de garder des traces de tous les mouvements d\u00e9tect\u00e9s. Nous utiliserons [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[3,6,8],"tags":[28,36],"class_list":["post-313","post","type-post","status-publish","format-standard","hentry","category-home-server","category-servus","category-videosurveillance","tag-motion","tag-securite"],"_links":{"self":[{"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/posts\/313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/comments?post=313"}],"version-history":[{"count":2,"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/posts\/313\/revisions"}],"predecessor-version":[{"id":473,"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/posts\/313\/revisions\/473"}],"wp:attachment":[{"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/media?parent=313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/categories?post=313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/tags?post=313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}