Aller au contenu
Menu
  • Catégories
    • Geekitude
    • Jeux vidéos
    • Hack ps3
    • Japon
    • Politique et libertés
    • Jeux vidéos adultes
    • Divers
  • FreeDrive
    • Le service
    • La FAQ
  • Partage de connaissance
    • Copie du système
    • Création de paquet (.deb)
    • Petit mémo sur lsof
    • LVM – Les bases
    • LVM – Fonctionnement interne
    • LVM : Trucs et astuces
    • LVM – Les snapshots
    • Chiffrement – Théorie
    • Chiffrement – Pratique
    • 100 pages sur burp, sqlmap et metasploit
    • Présentations IRL
  • Downloads
    • kclean
    • myst
    • lvmiostat
    • Night City 2020
    • Mia, Corps d’acier, Cœur tendre
  • contact
    • RSS
    • Télécharger ma clef publique
    • Email
  • Rechercher
  • Catégories
    • Geekitude
    • Jeux vidéos
    • Hack ps3
    • Japon
    • Politique et libertés
    • Jeux vidéos adultes
    • Divers
  • FreeDrive
    • Le service
    • La FAQ
  • Partage de connaissance
    • Copie du système
    • Création de paquet (.deb)
    • Petit mémo sur lsof
    • LVM – Les bases
    • LVM – Fonctionnement interne
    • LVM : Trucs et astuces
    • LVM – Les snapshots
    • Chiffrement – Théorie
    • Chiffrement – Pratique
    • 100 pages sur burp, sqlmap et metasploit
    • Présentations IRL
  • Downloads
    • kclean
    • myst
    • lvmiostat
    • Night City 2020
    • Mia, Corps d’acier, Cœur tendre
  • contact
    • RSS
    • Télécharger ma clef publique
    • Email
ATDC

Foscam FI8918W + Motion : bricolage perso

hoper2 juillet 20128

Le besoin

Tout en sachant parfaitement que mes bricolages ne remplaceraient jamais un véritable système d’alarme, je voulais mettre en place quelque chose qui me prévienne lors de la détection d’un mouvement chez moi. Bien sur, le système devait être le plus automatisé possible, et facilement pilotable depuis un smartphone. Au niveau matériel, je disposai de mes serveurs, de caméras usb et d’une caméra IP.

Détection de mouvement

Premier gros soucis, je ne suis pas parvenu à faire fonctionner la foscam avec Zoneminder. (D’autres semblent pourtant y parvenir sans problèmes…) D’après les messages d’erreurs, les images jpeg qu’elle envoi sont corrompues. Une mise à jour du firmware n’a strictement rien changé. Heureusement que d’autre logiciels, à commencer par motion, sont plus tolérants, et parviennent à récupérer le flux vidéo (même si des warning en mode debug indiquent la aussi très clairement que la « syntaxe » des fichiers jpg n’est pas respecté).

Paramétrer motion pour qu’il utilise la caméra se fait sans difficulté :

 netcam_url http://ip_fixe/videostream.cgi?user=LOGIN&pwd=PWD&resolution=32&rate=3

Pour connaître la liste des arguments possible et ainsi pouvoir régler la résolution et la fréquence de capture, je vous invite à aller lire ceci.

Le vrai soucis était plutôt le paramétrage lié à la détection de mouvement. La, je vous laisse le soin de lire la documentation de motion avec attention. En ce qui me concerne, j’ai du par exemple indiquer « minimum_motion_frames 15 », autrement dit, le soft ne considère qu’il y a un vrai mouvement qu’a partir de 15 images différentes. A une fréquence de 10 images par seconde, cela signifie qu’un mouvement ne sera détecté que si il dure plus d’une seconde et demi. Un paramétrage qui n’est pas optimal, mais qui permet de limiter le nombre d’alarmes inutiles (généralement du à une modification de la luminosité, et cela malgré l’utilisation d’un autre paramètre : lightswitch 100.

Un peu d’automatisation

Détecter les mouvements c’est fait. Assembler les images pour créer un fichier .mp4, motion sait aussi le faire en standard. Par contre, pour mettre à disposition la vidéo et envoyer un petit mail avec le bon lien, la un petit script de quelques lignes est nécessaire. Petit soucis, dans le fichier de configuration de motion, on ne peut donner qu’un seul argument au script que l’on appel. Pour passer plusieurs parametres (le numéro de la caméra, le nom du fichier etc) il faut donc ruser un peu en concaténant les arguments, avant de les ré-découper dans le script. Cela donne par exemple dans le fichier motion.conf

 on_movie_end /etc/motion/scripts/movie_end "%t@%f"

Ici j’assemble %t et %f, en utilisant un @ comme séparateur. Dans le script, il suffit de ré-découper :

CAMERA=`echo $1 | cut -d'@' -f1` 
PATH_FILE=`echo $1 | cut -d'@' -f2`

Une fois les arguments récupérés, on fait bien ce que l’on veut (envoi de mail, upload des vidéos, mise à disposition sur un serveur web etc).

Motorisation

Il y a des gens qui n’ont pas confiance dans la sécurité de leur machine. Et malgré tout le soin et le sérieux que j’ai mis à sécuriser la solution (ajouts de reverse proxy https, etc), personne n’est totalement infaillible. Surtout, je peux comprendre qu’il n’est pas très agréable de se sentir observé 24h/24. Il fallait donc faire en sorte que la caméra se tourne lorsque le système de détection n’était pas opérationnel. Pour cela il suffit d’utiliser les « presets ». On commence par régler la caméra pour qu’elle regarde précisément la zone à surveiller, et on enregistre la position (position 1). Ensuite, on fait tourner la caméra pour qu’elle regarde totalement ailleurs (le plafond ou ce que vous voulez) et on enregistre une position 2. Pour passer d’une position à l’autre, il suffira alors d’une simple commande wget :

 wget -q -O /dev/null "http://ip/decoder_control.cgi?command=31&user=X&pwd=PWD"

La encore, je vous renvoi à cette page. Les mouvements de la caméra sont donc très facilement scriptable (sur la FI8918W, le preset 0 est en fait le premier, le premier est le second etc).

Contrôle à distance

control_camera.jpg

Il était facile, via la crontab, d’automatiser le système pour qu’il s’enclenche et se désactive à une heure donnée. Mais il faut aussi pouvoir piloter le tout à distance. Pour cela, un peu de php à été nécessaire. (Note : Je suis admin sys, pas développeur web… donc oui, c’est probablement TRES moche comme code et je suis ouvert à toutes les suggestions). Sur un serveur https correctement protégé, ajouter les deux pages suivantes :

La page d’index :

<html>
<font size=7>
<?php
exec('ps -eaf | grep -v grep | grep motion',$sortie,$code_retour);
if ( $code_retour == 0 ) { print "<p align=center> Surveillance ACTIVE </p>";}
if ( $code_retour == 1 ) { print "<p align=center> Surveillance desactivee </p>";}
?>
<form method="post" action="./traitement.php">
<p align="center">
<input type="submit" name="on" value="ON" style="height: 200px; width: 600px" />
</p>
<p align="center">
<input type="submit" name="off" value="OFF" style="height: 200px; width: 600px"/>
</p>
</form>
</font>
</html>

La page de traitement du « formulaire » :

<html>
<head>
<meta http-equiv="refresh" content="3;url=index.php" />
</head>
<font size=7>
<?php
error_reporting (E_ALL ^ E_NOTICE);

if ( $_POST['on'] == "ON" )
{
    $cmd = "/etc/motion/scripts/goto_pos1" ;
    $id = shell_exec($cmd);
    sleep (17);
    $cmd = "sudo /etc/init.d/motion start" ;
    $id = shell_exec($cmd);
}
if ( $_POST['off'] == "OFF" )
{
    $cmd = "sudo /etc/init.d/motion stop" ;
    $id = shell_exec($cmd);
    sleep (4);
    $cmd = "/etc/motion/scripts/goto_pos2" ;
    $id = shell_exec($cmd);
}
?>

<p align=center>C'est fait !</p>
</font>
</html>

Pour que cela fonctionne, il faut que le serveur web ai le droit de lancer ou d’arrêter motion. Prenez bien soin de lui donner uniquement ce droit la. A propos de sécurité, si vous voyez la moindre faille dans ces deux bouts de code, merci de me le signaler 🙂

Conclusion

Lorsque j’ai montré ce bricolage à ma femme, en lui expliquant comment activer ou désactiver la surveillance à partir de son téléphone, elle l’a dit que j’étais fou. Mais… je crois qu’elle m’aime bien quand même 🙂 Il me reste quelques détails à peaufiner. Automatiser la purge des photos et de vidéos capturés par exemple. Et surtout mettre en place un système de synthèse vocale pour prévenir les intrus que leur tronche est déjà uploadée sur le net et qu’ils se sont trompés de maison… Cela fera, peut être, le sujet d’un autre billet.

Catégories
  • Geekitude
Article précédent

Paroles d’un saint homme

Article suivant

L’Histoire de nolife

8 commentaires

  1. jojo 2 juillet 2012Répondre

    shell_exec ? Non ? pas toi !

  2. hoper 2 juillet 2012Répondre

    Alors comme je l’ai dit, je suis pas développeur moi. Et quand on tape « php exec », on voit que des fonctions qui font quasiment la même chose il en existe au moins 3 ou 4. Alors la comme ça, désolé, j’ai pris la première qui à tout de suite fait ce que je voulais. Si il faut que je remplace par autre chose, tu m’explique, et je corrige 🙂

  3. lildadou 3 juillet 2012Répondre

    Pour le reverse https t’utilise quel serveur? T’as essayé de creuser pour faire de l’authentification par certificat client? (cf. la page d’auth de Cacert ou starssl)?

    J’ai tenté de faire ça avec nginx et j’ai pas trouvé, donc si ça t’intéresse et que tu trouves, je suis preneur 😀

  4. hoper 3 juillet 2012Répondre

    Pour le serveur utilisé, c’est apache. (sachant qu’il tournait déjà sur le serveur, pourquoi en utiliser un autre…) Pour la mise en place des certificats clients, vu le contexte, c’est une excellente idée. Il faudra que je me penche sur la question un jour 🙂

  5. ShoLine 3 juillet 2012Répondre

    C’est dommage de devoir transmettre le user & password de ta caméra en clair quand tu fais le wget… Pas moyen de faire autrement ?

  6. hoper 3 juillet 2012Répondre

    Bonne remarque aussi 🙂 Malheureusement, pour le moment, je vois pas trop comment faire autrement. Le firmware de la caméra ne sait pas travailler directement en https. Sur mon réseau (filaire) je ne suis pas trop inquiet au niveau écoute. Par contre, ces informations apparaissent forcément (même brièvement) dans la liste des processus…

    Une faille potentielle donc, mais que je ne vois vraiment pas comment éviter.

  7. caracole 3 décembre 2012Répondre

    Tres Tres interessant.
    Le sujet m’interesse mais je n’y connais rien en Php . Je en retraite et j’ai décroché depuis 10a. Est-ce que je pourrai par exemple utiliser plusieurs camera ip ? j’ai 15.000 m a surveiller ( en espagne )
    Bravo

  8. hoper 4 décembre 2012Répondre

    motion supporte en théorie un nombre illimité de caméra. Par contre, le cpu, qui doit évidement analyser chaque image reçue en temps réel, ne pourra surement pas surveiller plus de quelques caméras. De plus motion n’est pas vraiment adapté pour gérer un grand nombre de caméras (plus de 4 ou 5 quoi). Pour un parc important (plus de 10), mieux vaut se tourner vers un logiciel de surveillance vraiment fait pour ça, comme zoneminder.

Laisser un commentaire Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Articles récents

  • Je suis sexiste
  • Mia ou le début d’une trilogie.
  • Mia : Vos critiques constructives
  • Qui se souvient des sub channels ?
  • Pour moi Daikin c’est terminé

Commentaires récents

  • hoper dans Pour moi Daikin c’est terminé
  • hoper dans Mia : Vos critiques constructives
  • Electrophy dans Pour moi Daikin c’est terminé
  • electrophy dans Mia : Vos critiques constructives
  • Zenzla dans Je suis sexiste

Archives

  • mars 2025
  • février 2025
  • août 2024
  • juillet 2024
  • juin 2024
  • avril 2024
  • février 2024
  • septembre 2023
  • janvier 2023
  • décembre 2022
  • février 2022
  • janvier 2021
  • décembre 2020
  • novembre 2020
  • octobre 2020
  • septembre 2020
  • mars 2020
  • février 2020
  • décembre 2019
  • septembre 2019
  • juillet 2019
  • mai 2019
  • avril 2019
  • février 2019
  • janvier 2019
  • décembre 2018
  • novembre 2018
  • octobre 2018
  • septembre 2018
  • juillet 2018
  • juin 2018
  • avril 2018
  • janvier 2018
  • novembre 2017
  • mai 2017
  • avril 2017
  • mars 2017
  • février 2017
  • janvier 2017
  • octobre 2016
  • mai 2016
  • février 2016
  • octobre 2015
  • septembre 2015
  • août 2015
  • juin 2015
  • mai 2015
  • avril 2015
  • février 2015
  • janvier 2015
  • novembre 2014
  • octobre 2014
  • septembre 2014
  • juillet 2014
  • juin 2014
  • mai 2014
  • avril 2014
  • mars 2014
  • février 2014
  • janvier 2014
  • décembre 2013
  • novembre 2013
  • octobre 2013
  • septembre 2013
  • août 2013
  • juillet 2013
  • juin 2013
  • mai 2013
  • avril 2013
  • mars 2013
  • février 2013
  • janvier 2013
  • décembre 2012
  • novembre 2012
  • octobre 2012
  • septembre 2012
  • août 2012
  • juillet 2012
  • juin 2012
  • mai 2012
  • avril 2012
  • mars 2012
  • février 2012
  • janvier 2012
  • décembre 2011
  • novembre 2011
  • octobre 2011
  • septembre 2011
  • août 2011
  • juillet 2011
  • juin 2011
  • mai 2011
  • avril 2011
  • mars 2011
  • février 2011
  • janvier 2011
  • décembre 2010
  • novembre 2010
  • octobre 2010
  • septembre 2010
  • août 2010
  • juillet 2010
  • juin 2010
  • mai 2010
  • avril 2010
  • mars 2010
  • février 2010
  • janvier 2010
  • décembre 2009
  • novembre 2009
  • octobre 2009
  • septembre 2009
  • août 2009
  • juillet 2009
  • juin 2009
  • mai 2009
  • avril 2009
  • mars 2009

Catégories

  • Autres jeux
  • Delires
  • Divers
  • Geekitude
  • Hack ps3
  • Japon
  • Jeux vidéos
  • Jeux vidéos adultes
  • Non classé
  • Politique et libertés

Méta

  • Connexion
  • Flux des publications
  • Flux des commentaires
  • Site de WordPress-FR

Archives

Articles récents

  • Je suis sexiste
  • Mia ou le début d’une trilogie.
  • Mia : Vos critiques constructives
  • Qui se souvient des sub channels ?
  • Pour moi Daikin c’est terminé
  • Législatives 2024 : Messages pour tous
  • Les types de batteries
  • Meilleurs jeux 18+ : Mise à jour 2024

Catégories

Autres jeux (4) Delires (3) Divers (75) Geekitude (177) Hack ps3 (10) Japon (9) Jeux vidéos (27) Jeux vidéos adultes (10) Non classé (5) Politique et libertés (83)

Flus RSS

  •   Les articles

Copyright 2025 © ATDC Tous droits réservés.

Thème Codilight par FameThemes