Outils pour utilisateurs

Outils du site


wiki:projets:pmc3tv

PMC³TV

Informations générales

De fois il est utile de pouvoir surveiller un endroit à distance. Un webcam est adapté à cette tâche.

Cahier des charges

  • Latence respectable à plusieurs fois par minute

Matériel

  • N webcams compatibles avec v4l (video4linux)
  • Une distro GNU/Linux

Outils

  • $SHELL
  • $EDITOR

Réalisation

Attention: Dans les sections suivantes, N indique le numéro total de webcams et “…” représente les répétitions nécessaires pour tous les entiers entre le dernier entier et le suivant.

Exempli gratia:

testlol0-1.go
testlol1-1.go
...
testlolN-1.go

Si N=4, le code précédent est équivalent au suivant:

testlol0-1.go
testlol1-1.go
testlol2-1.go
testlol3-1.go
testlol4-1.go

Obtention des images

On a un serveur avec une distro style Debian. Ce qui facilite l'installation de logiciels. Il faut un programme pour interfacer avec les webcams.

À l'aide de notre $SHELL préféré on lance les commandes nécessaires. Nota Bene: la première commande est pour devenir root… ceci n'est pas une bonne pratique en général. L'alternative serait de lancer toute commande qui requiert des pouvoirs root-esques en la préfixant d'un sudo.

sudo su
apt-get install webcam nologin curl

On décide de permettre qu'un utilisateur spécial (dummy) exécute les commandes nécessaires.

useradd -G video -s /usr/sbin/nologin -m dummy
su -s $SHELL dummy

La dernière commande nous permet d'agir comme si l'on était dummy.

Maintenant il faut créer les configurations nécessaires.

$EDITOR ~/.webcamrc.0
$EDITOR ~/.webcamrc.1
...
$EDITOR ~/.webcamrc.N

Voici un exemple du fichier de configuration. Entre deux fichiers de configuration, les champs device et input peuvent varier selon les webcams ainsi que les tailles des images.

.webcamrc.N
[grab]
  device = /dev/videoN
  input = Camera 1
  driver = libv4l
  text = PMClab %Y-%m-%d %H:%M:%S
  fg_red = 255
  fg_green = 255
  fg_blue = 255
  width = 640
  height = 480
  delay = 0
  wait = 0
  rotate = 0
  top = 0
  left = 0
  bottom = -1
  right = -1
  quality = 100
  trigger = 1
  once = 1
[ftp]
  dir = /home/dummy/webcam
  file = pmc3tvN.jpg
  tmp = uploadN.jpg
  passive = 1
  debug = 0
  auto = 0
  local = 1
  ssh = 0

À cause des contraintes particulières de notre serveur au PMClab, il faut un serveur proxy SOCKS pour pouvoir accéder au serveur contenant le site. Les options SSH et FTP du logiciel de webcam ne sont pas utilisées.

On suppose que notre machine a un serveur SOCKS et écoute sur le port 3128. Le script suivant permet de transmettre les images résultantes du serveur webcam au serveur du site.

$EDITOR ~/webcam.sh
webcam.sh
#!/bin/bash
for (( ; ; ))
do
webcam ~/.webcamrc.0 > /dev/null 2>&1 &
webcam ~/.webcamrc.1 > /dev/null 2>&1 &
...
webcam ~/.webcamrc.N > /dev/null 2>&1 &
sleep N
curl --socks5-hostname localhost:3128 --upload-file "/home/dummy/webcam/pmc3tv{0,1,...,N}.jpg" ftp://dummy-ftp:secret@pmclab.fr/
done

Pour que la dernière ligne marche comme attendu, il faut que l'utilisateur dummy-ftp1) ait comme racine le répertoire qui contiendra le site web final.

Pour des raisons de sécurité (webcam.sh contient un mot de passe en clair), seul dummy (ou un administrateur) aura accès aux documents pertinents.

chmod -R 700 ~/*webcam*

Finalement, il faut que notre script soit lancé au boot (ou programmé à des horaires précis à l'aide d'un cron)

exit
echo "su -s /bin/bash dummy -c '~/webcam.sh'" >> /etc/rc.local

Les dernières commandes servent à sortir du $SHELL temporaire de dummy et de rajouter le lancement du script au démarrage de la machine.

Finalement tout est mis en place avec un

reboot

Affichage des images

Dans un répertoire (comme pmc3tv) on met tout ce qu'il faut pour afficher les images obtenues précédemment:

  • Les images
  • Un index
  • Un système d'accès

Comme notre serveur est de type Apache, on écrit un fichier .htaccess pour contrôler l'accès et pour servir un fichier html:

.htaccess
DirectoryIndex index.html
AuthType Basic
AuthName "Quelle est la phrase magique?"
AuthUserFile /pmc3tv/.htpasswd
require valid-user

Le fichier .htpasswd2) contient les noms d'utilisateur et les mots de passe correspondants offusqués par un hachage md5:

.htpasswd
banana:gbCkWSXpcr/uw

À fin d'identifier facilement notre page parmi une multitude d'onglets ouverts ainsi que canaliser un instinct artistique autrement caché, on dessine un petit favicon de 16×16 pixels.

Le voici: Big Brother ne dort pas..

Et finalement on écrit la page html.

index.html
<head>
    <title>PMC³TV</title>
    <meta http-equiv=refresh content="5" charset="utf-8">
    <link rel "shortcut icon" href="eye.ico">
    <link rel "icon" href="eye.ico">
</head>
<body>
    <h1>PMC<sup>3</sup>TV (PMC<sub>lab</sub>CCTV)</h1>
    <img src="pmc3tv0.jpg" alt="cctv 0">
    <img src="pmc3tv1.jpg" alt="cctv 1">
    ...
    <img src="pmc3tvN.jpg" alt="cctv N">
</body>

Pour avoir une adresse agréable, on crée un sous-domaine (tv.pmclab.fr3), par exemple) et on fait que sa racine soit le répertoire pmc3tv.

Résultat

1)
Pour des raisons de sécurité cet utilisateur et son mot de passe ne sont pas les mêmes que ceux du système mis en place.
2)
Ce fichier est évidemment un exemple et n'est pas ce qui a vraiment été mis en place.
3)
Pour des raisons de vie privée, cette adresse n'est pas celle du serveur mis en place.
wiki/projets/pmc3tv.txt · Dernière modification: 2016/09/11 12:59 (modification externe)