Affichage WebCam sur site Web

Bien le bonjour en ce vendredi soir

Préembule

Suite à une question sur un forum, j’ai eu envie de retester un truc d’autrefois. Vous vous souvenez de l’article Affichage RaspiCam depuis serveur FTP écrit en 2017 ?
(Oui, je crois que mon site à de l’audience et que des internautes me suivent depuis des années. Enfin, mon autre moi essaye de s’en persuader pour se rassurer)

Mise en contexte

Là, l’idée de la personne est un peu différente, mais comporte la partie où il faut envoyer une image à intervalle régulier sur un site Web via FTP.

Du coup, je me suis repenché sur la chose en 2025 en prenant en compte les évolutions matérielle et un peu plus de sécurité.

Bon, j’ai des modules caméras V2 et V3 de dispo mais comme je suis sur un Raspbérry Pi Zéro et que je n’ai plus de nappe de dispo, je pars sur l’idée de la WebCam (j’en ai qui traînent).

Matériel

  • Raspberry Pi Zéro v1.3 (acheté 5,22€ à l’époque)
  • Alimentation de fabrication maison (un adaptateur secteur modifié en micro-USB)
  • Adaptateur microUSB vers USB
  • Adaptateur USB vers RJ45 avec 3 ports USB non utilisé par enfant N°1
  • WebCam de récupération

Concept

On veut que le RaspberryPi démarre à la mise sous tension puis réalise une photo toutes les X minutes et l’envoie via sFTP (FTP version Sécurisé) pour être affichée sur une page Web.

Ceci est le concept de base et j’ai dû contourner certains soucis dits « de la vie réelle ».
J’en causerai par la suite.

Mise en place

Il faut installer RasbperryPiOS BookWorm en version Lite

Ensuite mise à jour avec sudo apt update et sudo apt upgrade si besoin puis on installe fswebcam avec

sudo apt install fswebcam 

Et, avant de passer à la suite, on teste avec :

fswebcam -r 640x480 -S 9 --jpeg 100 /home/alban/test.jpg

C’est OK ?
On passe à la suite.
(perso, je fais tout en SSH car ni écran ni clavier sur le RaspberryPi donc je vérifie la photo en me connectant en SFTP via mon explorateur de fichiers pour avoir un retour graphique simple et efficace (je n’utilise que du Linux, mais j’imagine que Windows sait le faire).

Bon, maintenant qu’on est sûr que ça fonctionne, on passe à la partie « transfert » avec un client FTP et un script de transfert.

Le vieux « FTP » est obsolète donc on va lui préférer lftp (vous pouvez lire la page sur wikipedia ou sur le wiki ubuntu pour plus d’info)

sudo apt install lftp

Il reste à utiliser lftp avec un script… et comme on est fainéant (donc efficace voire efficient), on va tout faire d’un coup.

Pour gagner du temps, je vous colle la partie terminale et pas le cheminement.
Mais j’explique après ! 😀

Création du script bash

nano transfert.sh

Et on y colle ceci (attention, adaptez la partie « Variables à personnaliser »)

#!/bin/bash

# Variables à personnaliser
HOST='ftp.XXXXXXX.hosting.ovh.net'
PORT='22'
USER='YYYYYYY'
PASSWD='ZZZZZZZZZZZZ'
REMOTEPATH='/home/YYYYYYYY/www/rasp'
time=$(date +"%d-%m-%Y_%H:%M")

# Prendre la photo
fswebcam -r 640x480 -S 9 --title "WebCam en direct" --subtitle "TREVILLY.COM" --timestamp "$time" --info "Réalisé avec un RaspberryPi" --font /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:24 --banner-colour "#808080" --line-colour "#FFFFFF" -S 9 --jpeg 100 /home/alban/"$time".jpg

# Générer le fichier HTML
cat <<EOF > /home/alban/index.html
<!DOCTYPE html>
<html>
<head>
  <title>Derniere image webcam</title>
  <meta http-equiv="refresh" content="60" />
</head>
<body>
  <p>Page en rafraichissement automatique chaque minute. Wait and See ;-)</p>
  <img src="$time.jpg" alt="Derniere image de la WebCam"/>
</body>
</html>
EOF

# Envoyer la photo via FTP avec lftp
lftp -u $USER,$PASSWD sftp://$HOST:$PORT <<EOF
#lftp -u $USER,$PASSWD $HOST <<EOF
cd $REMOTEPATH
put /home/alban/"$time".jpg
put /home/alban/index.html
bye
EOF

exit 0

Application des droits à ce fichier

chmod +x /home/alban/transfert.sh

Explications et contournement des soucis

Pour faire simple, je voulais que ma photo soit nommée par la date et l’heure mais que la page affiche toujours la dernière image.

J’avais donc mis une fonction pour faire une copie de l’image en « last.jpg » afin que la page web affiche toujours l’image « last.jpg ».
Sauf que le refresh (ou rafraichissement) de la page ne fonctionnait pas (ou pas de manière transparente).

Bon, je ne sais pas vraiment faire donc j’ai trouvé une idée « dans ma tête ». Les spécialistes trouveront peut-être ça stupide, mais c’est ma solution de contournement qui me laisse croire (enfin, à l’autre, vous savez, celui qui croit que des gens lisent ses articles) que je suis intelligent… 🙂

« L’intelligence ce n’est pas ce que l’on sait mais ce que l’on fait quand on ne sait pas.« 
Jean Piaget

Donc, finalement, l’idée a été de prendre une photo et de la nommer avec date et heure comme au départ et de réutiliser cette variable pour créer la page web après chaque photo et d’envoyer la photo + la page web à chaque fois.

Ouais, c’est con, mais ça fonctionne bien 😀

Automatisation

On veut réaliser une photo toutes les minutes donc il suffit de définir une tâche cron :

crontab -e

Et d’y insérer :

*/1 * * * * /home/alban/transfert.sh

Ce délai explique que j’ai paramétré le refresh de la page web toutes les 60 secondes.
(Spoiler Alert : 1 minute = 60 secondes. Mais Chuuuut…)

Conclusion

Bon, ben voilà, j’ai encore perdu du temps (le faire, le tester et écrire cet article) sur un truc que ne sert à rien, sauf à me prouver que je pouvais le faire et à éventuellement servir à quelqu’un qui cherche à le faire sans l’expérience qui est la mienne.
(Dans mon contexte personnel, expérience = temps perdu à tester des tas de choses, souvent sans savoir ni tout comprendre)

Si cet article vous a été utile = je n’ai pas perdu mon temps 😉

A propos de Alban

Papa de 4 enfants étant lui-même resté un enfant. Diététicien-Nutritionniste tombé par obligation dans l'informatique à 22 ans pour le boulot et s'étant "un peu" pris au jeu ... Pas un génie de l'informatique (loin de là), mais intéressé et carrément orienté Linux et entraide. Lassé de l'évolution du Monde de la Santé dans lequel les patients sont de plus en plus à traiter comme des clients (je suis un soignant !!!), j'ai opté pour une reconversion en repartant en Alternance... à... 44 ans D'abord dans le cadre d'un BTS SIO option SISR (Solutions d’Infrastructure, Systèmes et Réseaux) en Septembre 2019. Après l’obtention du BTS, j'ai décidé de poursuivre (toujours en alternance) en Bac+3 avec un Bachelor Concepteur de Systèmes d'Information. Depuis septembre 2022, je suis donc encore plus vieux, mais un jeune diplômé "Administrateur Systèmes et Réseaux". Citation personnelle : « Si la réussite facile flatte l’égo, C’est de la persévérance que nait le plaisir de la réussite. »

Laisser un commentaire

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.