Utiliser Raspberry Pi et sa PiCam comme serveur webcam

Posté le par | Réponse(s) : 46

Suite à plusieurs mails reçus ces derniers temps me demandant comment je procède pour capturer des images avec la PiCam et les envoyer sur un serveur FTP, j'ai décidé de rédiger ce tuto que je vais tenter de faire le plus complet possible. C'est la procédure que j'ai mis en place pour obtenir cette image sur mon autre site personnel. (À noter que les serveurs free sont perturbés en ce moment et l'actualisation des données et de la weather cam peuvent ne pas avoir été mises à jours correctement).

Comme vous avez pu le remarquer, le module PiCam ne fonctionne pas comme une webcam classique et n'est pas pris en charge comme un module vidéo classique qui se monte en /dev/video0. Aussi l'utilisation de fswebcam, motion ou autres ne fonctionnent pas (exception faite d'un motion hacké qui fonctionne encore de manière bancale), le tuto "Comment transformer votre Raspberry Pi en serveur webcam ?" n'est donc pas du tout adapté au module PiCam.

Pour ce faire, nous allons utiliser tous les outils Raspbian pour mettre en œuvre la prise d'images régulière, le traitement de cette image et l'envoi sur un serveur distant. Schématiquement cela donne :

serveur_picam

Avant de commencer, assurez-vous bien que la PiCam fonctionne, sinon reportez-vous à ce tuto de mise en route. Je pars du principe que votre RPi est connecté à votre réseau local et a accès à internet via votre box.

Les prérequis

Comme à chaque fois, veillez à ce que votre Raspberry Pi soit à jour :

sudo apt-get update && sudo apt-get upgrade -y

Nous allons installer les programmes qui vont nous servir plus loin

sudo apt-get install imagemagick ftp metar gnome-schedule

Tout d'abord, créons un dossier dans lequel vont se trouver tous les fichiers :

mkdir /home/pi/webcam/
cd webcam

Les scripts

Nous allons créer 4 scripts shell qui auront chacun une fonction bien particulière :

  • webcam.sh : script principal qui va orchestrer les autres. Il exécute la commande de prise d'image, sauvegarde les données metar (optionnel), redimensionne l'image avec la fonction crop, puis lance le script de traitement d'image ( dtstamp.sh) et les deux scripts de transfert FTP (free.sh et domicile.sh).
  • dtstamp.sh : script qui va lancer les commandes de tag de l'image (texte, insertion texte météo, logo).
  • free.sh : script qui va permettre l'envoi de l'image finale sur le serveur free (à adapter à vos besoins).
  • domicile.sh : script qui va permettre l'envoi de l'image finale sur votre ordinateur principal (optionnel).

 

Sous la racine /home/pi/webcam :

nano webcam.sh

#!/bin/sh
cd /home/pi/webcam
raspistill --output image.jpg          // prise de l'image
metar -d lflc > metar.txt               // récupère les données météo

sleep 20s                              // pause de 20 secondes, temps d'écriture de l'image

convert image.jpg -crop 1920x1080-0-0 capture.jpg    // crop image

sleep 1s

./dtstamp.sh capture.jpg

sleep 3s

/home/pi/webcam/domicile.sh
/home/pi/webcam/free.sh

rm -rf image.jpg

# Ctrl X pour sortir de nano - O pour écrire le fichier

EDIT (7 août 2016) : Je viens de m'apercevoir que la commande "metar" (metar -d lflc) qui permet de récupérer les observations météo (température et pression atmosphérique) ne fonctionne plus. Une alternative consiste à utiliser un autre programme pour récupérer ces données :

sudo apt-get update
sudo apt-get install python-pymetar

Il ne reste qu'à modifier le fichier webcam.sh en remplaçant "metar -d lflc > metar.txt" par "pymetar lflc > metar.txt". Nous allons aussi devoir modifier le script "dtstamp.sh" plus bas.

Quelques explications sur webcam.sh :

  • metar (de l'anglais METeorological Airport Report) est une application Linux qui permet de récupérer les données issues de rapports réguliers d'observation météo des aéroports. La syntaxe est metar -d code_de_l'aéroport_proche_de_chez_vous. La commande metar -d xxxx > metar.txt écrira dans le fichier metar.txt les données actualisées toutes les 30 à 60 minutes. Les codes peuvent aussi être récupérés sur le site du National Weather Service. Ceci est optionnel.
  • l'utilisation de la fonction convert -crop (voir images ci-dessous) : j'ai positionné ma PiCam de façon à avoir le Puy de Dôme (pas les grues 😉 ) au milieu de la ligne d'hoziron mais l'image en haute résolution prend aussi le salon de mon voisin direct. Mon but n'étant de publier une image intrusive ou de me voir bêcher ou tondre le jardin -- c'est pas très sexy 😉 -- (vie privée), j'ai opté pour un recadrage (crop) du cliché pour en faire une image exploitable publiquement. L'image de base (image 1) est en 2592x1944 pixels, ce qui va me permettre de couper, et de conserver une image HD de 1920x1080 (image 2). L'image 1 est détruite en fin de processus.

Ce recadrage donne un effet zoom. Point négatif : la zone de précision se trouve au centre de l'image, la zone plus floue est en périphérie. Le fait de ne prendre que la partie supérieure gauche augmente la zone floue. C'est sur cette image "cropée" que nous allons appliquer le script dtstamp.sh.

Passons à la suite.

Télécharger le logo (si l'image du logo n'est pas présente, le script s'arrêtera) :

wget http://epingle.info/wp-content/uploads/Raspberry_Pi.png
nano dtstamp.sh

#!/bin/sh
# Change the font variable to point to your font location
#font="http://fonts.googleapis.com/css?family=Pathway+Gothic+One"

# Fonction permettrant d'extraire du fichier 2 caractères de la 9ème ligne (température) :
temp=$(cat metar.txt | sed -n '9 p' | cut -c16-19 | sed 's/\C//')

# Fonction permettrant d'extraire la valeur de la pression atmosphérique :
hpa=$(cat metar.txt | sed -n '11 p' | cut -c16-24)

time=$(date +"%d/%m/%Y %Z %H:%M:00")

if [ $# -eq 0 ]
   then
      cat << _EOF_

USAGE: $0 file1 file2 ..., or
       $0 *.jpg, or
       $0 dir/*.jpg
       ...

_EOF_
      exit
fi

while [ "$1" != "" ]; do
        # Skip directories
        if [ -d "$1" ]; then
                shift
                continue
        fi
        # Skip already converted files (may get overwritten)
        if [[ $1 == *_DT* ]]
        then
                echo "------  Skipping: $1"
                shift
                continue
        fi

        # Work out a new file name by adding "_DT" before file extension
        file="$1"
        echo "######  Working on file: $file"
        filename=${file%.*}
        extension=${file##*.}
	composite=${filename}_CP.${extension}
        output=${filename}_DT.${extension}

        # Get the file dimension
        dim=$(identify -format "%w %h" "$file")
        width=${dim%% *}
        height=${dim#* }

        # Decide the font size automatically
        if [ $width -ge $height ]
        then
                pointsize=$(($width/30))
        else
                pointsize=$(($height/30))
        fi

        echo "        Width: $width, Height: $height. Using pointsize: $pointsize"

        # The real deal here
	composite -geometry +20+20 -gravity SouthEast Raspberry_Pi.png "$file" \
			"$composite"

        convert "$composite" -fill '#00000080' -draw 'rectangle 0,0,2592,53' \
			-gravity NorthEast -pointsize 18 -fill white -annotate +$pointsize+10 "$time | $temp°C | $hpa"  \
			-gravity NorthEast -pointsize 15 -fill white -annotate +$pointsize+30 "Proudly Powered by Raspberry Pi"  \
			-gravity NorthWest -pointsize 18 -fill white -annotate +10+10 "http://route63.free.fr"  \
			-gravity NorthWest -pointsize 15 -fill white -annotate +10+30 "WeatherCam @ Lempdes - Puy-De-Dôme - France"  \
			-quality 75 \
			"viewcam.jpg"

        shift
done

exit 0

EDIT suite (7 août 2016) : Après avoir modifié le script webcam.sh qui permet de récupérer les observations météo (température et pression atmosphérique), il faut :

  • remplacer temp=$(cat metar.txt | sed -n '9 p' | cut -c16-19 | sed 's/\C//') par temp=$(cat lflc.txt | sed -n '3 p' | cut -c14-19 | sed 's/\C//')
  • remplacer hpa=$(cat metar.txt | sed -n '11 p' | cut -c16-24) par hpa=$(cat lflc.txt | sed -n '7 p' | cut -c11-24)

Le bandeau contient maintenant les données correctement mises à jour.

 

Quelques explications sur dtstamp.sh :

Extraction des données contenues dans metar.txt (température et pression). À adapter en fonction de ses besoins.

Si vous souhaitez utiliser la "mise en page" que je propose, ne modifiez que les parties écrites en rouge. Sinon il va falloir vous plonger et étudier l'outil très puissant qu'est ImageMagick. pervasive-network.org traite de ce sujet en français. Un bandeau supérieur transparent est créé avec les mentions notées en rouge. Le logo RPi vient se placer sur l'angle inférieur droit.

viewcam

L'image finale est créée, nous allons nous pencher sur les deux scripts qui permettent l'envoi de l'image finale vers FTP (free et ordinateur personnel).

Pour votre page perso chez free (à adapter à vos besoins) :

nano free.sh

#!/bin/sh
cd /home/pi/webcam
ftp -i <<**
open ftpperso.free.fr
cd webcam
put viewcam.jpg
disconnect
bye *

Pour l'ordinateur local (à adapter à vos besoins) :

nano domicile.sh

#!/bin/sh
cd /home/pi/webcam
ftp -i <<**
open 192.168.1.2
cd /var/www/perso
put viewcam.jpg
disconnect
bye *

Nous allons rendre ces scripts exécutables :

sudo chmod a+x webcam.sh dtstamp.sh free.sh domicile.sh

Enfin, free.sh et domicile.sh ont besoin de connaître vos identifiants. Pour cela, nous allons créer un fichier .netrc : ce fichier contient des séquences de connexions automatiques à des sites distants pour transfert de fichiers (voir commande ftp). Ce fichier doit se situer dans le dossier du user pi :

cd ~
nano .netrc

# inscrire vos identifiants et mot de passe. Laisser une ligne vide à la
# fin du fichier :

machine ftpperso.free.fr
login votre_login
password votre_mot_de_passe

machine 192.168.1.2
login votre_login
password votre_mot_de_passe

Enfin, étant donné que ce fichier contient des mots de passe, la protection doit être assurée en conséquence par des droits d'accès appropriés : la commande chmod 600 .netrc les définira.

sudo chmod 600 .netrc

Le traitement automatique des scripts

Vos scripts sont prêts à l'emploi, il ne reste plus qu'à automatiser leur exécution. On va automatiser l’exécution du script principal webcam.sh à un certain intervalle de temps. Pour cela deux méthodes :

  • La méthode graphique consiste à installer un gestionnaire de tache (si cela n'a pas été fait dans les prérequis) :
sudo apt-get install gnome-schedule

On le trouve dans menu > Outils système > Tâches Planifiées.

Nouveau >Tâche récurrente

Puis renseigner :

Description : Collecte données météo

Commande : /home/pi/webcam/webcam.sh

Date et heure > Minute : */15

Valider et cliquer sur l'icône "Lancer la tâche sélectionnée".

  • En ligne de commande avec crontab

crontab est en fait une commande qui permet de lire et de modifier un fichier appelé la "crontab". Ce fichier contient la liste des programmes que vous souhaitez exécuter régulièrement, et à quelle heure vous souhaitez qu'ils soient exécutés.

Pour afficher la crontab actuelle :

crontab -l
no crontab for pi

Modification de la crontab :

crontab -e

La console bascule sur un affichage nano, il suffit d'y ajouter votre commande :

*/15 * * * * sh /home/pi/webcam/webcam.sh

# Ctrl X pour sortir, O pour écrire sur le fichier

Plus d'info sur crontab ici. Toutes les 15 minutes, le script sera exécuté et lancera tout le processus (exécution des 3 autres scripts). Les images seront uploadées sur vos serveurs/ordinateur principal et seront exploitables : intégration dans une page web, affichage dans un programme de bureau comme gkrellm (pour Linux). Oui j'utilise encore ce vieux programme ^^

Même si j'ai détaillé tous les scripts, je vous les mets à disposition dans le paquetage compressé en tar.gz ou zip (à décompresser dans home/pi/webcam).

À la première utilisation le dossier /home/pi/webcam contiendra 9 fichiers : 4 scripts, 4 images (dont le logo) et un fichier texte (metar.txt). Je vous laisse le soin d'adapter tous ces fichiers à vos besoins.

J'espère que ce tutoriel n'a pas été trop rébarbatif à lire (et à mettre en œuvre). Je vous remercie d'avoir pris le temps de lire cet article. N'hésitez pas à laisser des commentaires, je prendra le temps de répondre dès que j'ai le temps.

Météo sur Route63 et la weather cam

Je profite de ce billet pour partager avec vous le travail de Bertrãn qui m'a motivé à publier cet article. Il a mis en place une weather cam propulsée par son RPi/PiCam et j'avoue que c'est très réussi. Bref, cap sur Gamarthe dans les Pyrénées-Atlantiques (région Aquitaine) d'où Bertrãn nous propose dans son site, la météo en direct et sa weather cam. Merci à lui 🙂

N'hésitez pas à me faire parvenir en commentaire ou par mail vos webcam, je me ferai un plaisir de les partager.


Licence Creative Commons
Cet article, sauf mention contraire expresse, est publié sous licence Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported Licence.

Vous avez aimé cet article ? Alors partagez-le avec vos amis en cliquant sur les boutons ci-dessous :
Google Plus Twitter Facebook Linkedin Framasphere email Flattr !

46 commentaires sur “Utiliser Raspberry Pi et sa PiCam comme serveur webcam

  1. UN grand MERCI pour le tuto, très complet !!!Et ça fonctionne à merveille :)Par hasard, sais-tu s'il existe un moyen pour que l'image de la webcam soit également envoyé sous ce format par exemple:capture_%H_%M_.jpg  incluant donc dans le nom du fichier l'heure de la prise de la photoEn plus de l'image elle-même envoyée sur le serveur, tout cela pour y créer un diaporama de 24h.Merci encore.

    • (commentaire mis à jour)
      Bonjour Bertrãn 🙂
      Oui il existe un moyen très simple, il se fera en plus de ce que tu as déjà mis en œuvre :

      - dans un premier temps, créé un script dans le répertoire webcam
      nano horodatage.sh
      dans lequel tu vas définir tes besoins (définir le timestamp (horodatage), copier l'image finale vers une autre renommée avec le timestamp):
      #!/bin/sh
      # time=$(date +"%Y-%m-%d-%H%M") # définition année-mois-jour-heureminute
      time=$(date +"%H_%M_") # définition heure_minute
      cp viewcam.jpg viewcam-$time.jpg

      dans ton exemple ce sera plutôt :
      cp viewcam.jpg capture_$time.jpg

      - rends le script exécutable :
      sudo chmod a+x horodatage.sh

      - on va modifier webcam.sh comme ceci (je reprends l'exemple du script sur mon blog) :
      nano webcam.sh
      on ajoute les parties en rouge :
      #!/bin/sh
      cd /home/pi/webcam
      # on supprime toute image horodatée
      rm -rf Ispoure_*.jpg

      raspistill --output image.jpg
      metar -d lflc > metar.txt
      sleep 20s
      convert image.jpg -crop 1920x1080-0-0 capture.jpg
      sleep 1s
      ./dtstamp.sh capture.jpg
      sleep 3s
      # on exécute le script horodatage.sh (création d'une nouvelle image)
      /home/pi/webcam/horodatage.sh

      # on exécute les scripts d'envoi sur les serveurs
      /home/pi/webcam/domicile.sh
      /home/pi/webcam/free.sh
      # on efface l'image primaire
      rm -rf image.jpg

      - on va modifier free.sh (je reprends aussi mon exemple) :
      nano webcam.sh
      on ajoute les parties en rouge :

      #!/bin/sh
      cd /home/pi/webcam
      ftp -i <<**
      open ftpperso.free.fr
      cd webcam
      # on demande d'envoyer l'image de la webcam
      put viewcam.jpg
      # on demande d'envoyer l'image horodatée uniquement
      put Ispoure_*.jpg

      disconnect
      bye *

      Sur le serveur distant, toutes les 5 minutes, l'image de la webcam + l'image dernièrement horodatée seront envoyées. Le jour suivant chaque image horodatée écrasera celle correspondant à son homologue de la veille.

      C'est la méthode que j'emploie pour générer des images horodatées dans le but (peut-être un jour...) de faire un timelapse.

      J'espère que ceci a pu t'aider. Comment comptes-tu t-y prendre pour le diaporama ?

    • Mes excuses pour le retard dans ma réponse. Je suis content de voir que cela fonctionne selon tes souhaits et le résultat est pas mal du tout. Je reste à ton écoute si tu as des soucis, je répondrai le plus rapidement possible. Bonne continuation 🙂

    • Bonjour
      je souhaiterais mettre en place sur une weather cam avec la meme chose que vous , c'est a dire un diaporama.
      Le parametrage classique est en place et fonctionne.
      J aurais aimé connaitre le script pour le diaporama s'il vous plait.

      Salutations
      Julien

      • Bonjour Julien,

        Je suis content de voir que mes tutos portent leurs fruits. Je ne connaissais pas ce site de webcams sur la Corse, beau travail!

        Il existe une multitude de scripts qui vont vous permettre d'afficher un diaporama ou galerie d'images, pour cela il vous faudra quelques connaissances de base en HTML(5), CSS (pour la mise en page) et d'une bibliothèque en JavaScript. Pour cela, il vous faudra en choisir une sur le Net, certains sont plus ou moins faciles à mettre en place. La page de Creative Juiz est bien documentée et accessible à des nouveaux créateurs de pages Web (dont je fais encore parti, on apprend tous les jours 😉 ).
        Si j'ai bonne mémoire, le script de MeteoAmikuze est écrit en PHP sans requête CSS et JS.

  2. salut, nous avons un projet pour le bac, on aimerait retransmettre en direct des images et sons sur internet grâce à la pi cam et donc avec une raspberry.
    Auriez-vous une solution pour retransmettre une vidéo sans lag ?

    Merci d'avance. 🙂

    • Bonjour,
      Voir des projets à base de Raspberry pi en France me fait grand plaisir. La transmission en directe de l'image ne parait pas être un gros soucis si le but est de passer par une URL style http://adresse.ip.du.serveur:8080 par exemple. Pour se faire, il va falloir utiliser l'une des méthodes développées dans cet article. La fondation Rasperry Pi et Raspbian proposent depuis quelques semaines une update du firmware qui permet la prise en charge de la RaspiCam comme périphérique v4l2 avec un driver approprié.
      Le Raspberry Pi ne dispose malheureusement pas d'entrée micro, aussi il faudra passer par une extension matérielle : soit via USB, soit par la nouvelle carte Wolfson.
      En ce qui concerne le lag, il est difficile de le réduire car il peut avoir de nombreuses raison. La première est qu'il faut laisser le temps de calcul au RPi (ou tout autre appareil d'ailleurs) pour créer les images et le flux. Ensuite, il y a les latences dans le réseau local, et s'ajoutent les latences des transmissions de données sur le réseau Internet. On peut donc tacher de les réduire au maximum mais il y aura toujours un temps de décalage.
      J'espère que ceci a pu t'aider et bonne chance pour le Bac 🙂

  3. Bonjour,
    Chez moi j'obtiens "webcam.sh: 20: webcam.sh: Syntax error: Unterminated quoted string"
    Au début j'avais enlevé la ligne "convert..." et corrigé les nom des fichiers image et capture
    Mais même en remettant cette ligne "convert...", j'obtiens la même erreur

    • Bonjour Guillaume,
      En effet, le retour indique une erreur de syntaxe à la ligne 20. Comme tu as modifié pour adapter le script à tes besoins, je ne sais pas trop à quoi correspond cette ligne 20. Je suspecte que tu as laissé la ligne : # Ctrl X pour sortir de nano - O pour écrire le fichier. Je ne l'ai pas mentionné mais cette ligne ne doit pas figurer dans le script. Tu peux donc la supprimer (elle correspond d'ailleurs à la ligne 20 de mon exemple). En revanche la première ligne #!/bin/sh doit être présente.
      Si ça ne fonctionne toujours pas, essaye de copier/coller les lignes de ton script, je trouverai peut-être la source du problème.

      • Merci pour la réponse
        J'ai enlevé la ligne "convert" car dans mon projet la camera (et le raspberry pi+une batterie+un dongle wifi) sera suspendu donc j'ai besoin de toute l'image.
        J'ai modifié le script (enlevé la ligne de commentaire) mais ça donne la même erreur !
        Voici le script :
        #!/bin/sh

        cd /home/pi/webcam

        raspistill -o image.jpg -ex auto -awb auto -q 90 // prise de l'image

        metar -d lfbm > metar.txt // récupère les données météo de M2m

        sleep 20s // pause de 20 secondes, temps d'écriture de l'image

        ./dtstamp.sh image.jpg

        sleep 3s

        /home/pi/webcam/domicile.sh
        /home/pi/webcam/sfrftp.sh

        rm -rf image.jpg

        • Honnêtement, je ne vois pas trop d'où peut provenir cette erreur. Déjà, comme tu as enlevé la ligne "convert", tu peux aussi enlever la dernière ligne "rm -rf image.jpg".
          Essaye aussi de virer tous les commentaires du style "// prise de l'image"
          Mais cela ne solutionnera pas le problème. Essaye de trouver la source du problème par "tâtonnement" : lance chaque commande séparément pour trouver laquelle pose soucis. Le retour d'erreur est signalé sur webcam.sh mais l'erreur peut aussi venir des autres scripts. Idem, enlève tous les commentaires "//". Vérifie aussi dans dtstamp.sh la syntaxe : un simple " ou ' en plus ou manquant peut faire planter l'exécution des scripts. Tiens-moi au courant, bonne recherche ^^

          • Bonjour
            Merci l'erreur est passé
            Mais une nouvelle se pointe !!!
            Le curseur se bloque après la fermeture de parenthèse et les 2 points.
            Voici mon message d'erreur .
            sudo sh webcam.sh
            ./dtstamp.sh: 33: ./dtstamp.sh: [[: not found
            ###### Working on file: image.jpg
            Width: 2592, Height: 1944. Using pointsize: 86
            ftp: connect: Connection timed out
            Not connected.
            Not connected.
            Password:Name (ftpperso.sfr.fr:root):

            Le script dtstamp.sh est comme le votre
            J'utilise les mêmes paramètres de .netrc pour me connecter avec Filezilla et cela fonctionne.
            Dans le dossier webcam je trouve bien la photo image.jpg + sa copie (image_CP) avec le logo incrusté en bas a droite.

            Merci de votre aide
            Guillaume

          • Bonjour Guillaume,
            Une erreur de moins, c'est déjà ça. Il y a encore une erreur qui bloque le script webcam.sh se s'achever.
            Si je résume, tu n'as pas besoin de "cropper" l'image et tu souhaites que le processus soit le même.
            webcam.sh doit alors ressembler à cela :

            #!/bin/sh
            cd /home/pi/webcam

            # prise de l'image
            raspistill --output capture.jpg

            # récupère les données météo
            metar -d lflc > metar.txt

            # pause de 20 secondes, temps d'écriture de l'image
            sleep 20s

            # exécussion du script dtstamp.sh sur l'image prise au dessus
            ./dtstamp.sh capture.jpg

            # pause de 3 secondes pour laisser le processus dtstamp.sh se faire correctement
            sleep 3s

            # envoi des données par ftp en réseau local
            /home/pi/webcam/domicile.sh

            # envoi des données par ftp sur serveur distant
            /home/pi/webcam/free.sh

            A priori dtstamp.sh n'a pas a être modifié, sauf pour tes besoins. L'image finale se nomme viewcam.jpg

            Visiblement les scripts domicile.sh et free.sh fonctionnent donc il ne faut rien toucher.

            Enfin, si .netrc fonctionne avec filezilla, tout est bien paramétré.

            As-tu essayé avec le dtstamp.sh de l'archive tar.gz ou zip ?

  4. Bonjour,
    je déterre un peu le sujet, mais je viens de recevoir la camera et je souhaite mettre en place l'équivalent pour surveiller mes belles montagnes 😉
    Bref, tout fonctionne correctement (enfin presque) il ne me reste plus qu'a gérer l'envoi par SFTP, qui semble très différent du FTP. Je tatone un peu sur le sujet, mais si qqun peut m'aider, je suis preneur. Pour info, j'ai un hébergement chez Gandi (simple hosting)
    Merci, j'ai hâte de vous montrer le resultat 😉

    • Bonjour Gux, si j'ai bien compris ton projet, tu souhaites basiquement te servir de ton RPi/Picam comme webcam et envoyer à intervalle régulier les clichés sur un serveur web.
      Tu peux lire "Utiliser Raspberry Pi et sa PiCam comme serveur webcam" qui explique comment j'ai procédé pour faire ce type de chose.

      En gros, on créé un script dans lequel on demande de prendre le cliché, on modifie l'image (optionnel), on exécute 1 ou 2 scripts pour envoyer automatiquement la photo sur le serveur souhaité. Pour que ce transfert se fasse automatiquement sans passer par sFTP, on créé dans le home un fichier caché (.netrc) qui contient l'adresse du ou des serveurs + login + mot de passe. Un simple crontab -e exécute un seul script, netrc permettra de simplifier l'utilisation FTP.

      J'espère que ça t'aidera et envoie une photo de tes belles montagnes 😉

      • Merci de ta réponse !

        Effectivement, j'ai suivi à la lettre la procédure (je suis novice avec ces bestioles), mais je n'arrive pas à me connecter à mon hébergement (Gandi qui n'utilise que SFTP) avec la méthode .netrc
        Peut-être ai-je mal compris un truc, mais de ce que j'ai recherché la procédure est un peu plus complexe, me trompe-je ? =)

        Merci

        • Ouch... je ne savais pas que Gandi ne permettais que SFTP pour communiquer avec le serveur et là ça devient sport.

          En creusant un peu, le transfert par SFTP ne fonctionne pas avec netrc mais avec une authentification de clé SSH (sftp est un client ftp SSH).

          Si j'ai bien compris les commentaires de ce post, il te suffirait d'ouvrir un terminal sur ton RPi, de te connecter via SSH sur ton serveur Gandi, d'accepter la clé RSA et de te déconnecter. Fait un test avec comme avec netrc, on sait jamais cela peut marcher. Sinon, il faudrait que tu modifies ton script en remplaçant les commandes "ftp" par "sftp". Exemple de script :

          #!/bin/bash
          cd /là/où/se/trouve/ton/image
          sftp -b ton_login@adresse_de_ton_serveur_gandi << EOT cd /là/où/tu/veux/copier/ton/image put viewcam.jpg bye EOT

          Je ne sais pas si cet exemple fonctionne mais je ne dois pas être loin. À modifier donc si besoin. À la commande sftp, l'authentification devrait se faire automatiquement puisque la clé a été déjà validée.

          Si ça ne fonctionne pas, il faut utiliser Expect. J'ai pas trop le temps de m'y plonger en ce moment mais en gros tu peux créer un script (pour le transfert uniquement) qui va te permettre de communiquer avec le serveur SSH Gandi (tu es le client SSH avec ton RPi). Même principe que l'exemple ci-dessus pas technique à écrire.

          Sinon, tu peux toujours jeter un œil du côté du forum Gandi, il y a peut être un billet ouvert traitant de ce sujet.
          En tout cas, tiens moi au courant.

        • Je viens de trouver une solution beaucoup plus simple (enfin, j'espère).
          Comme tu ne peux que communiquer avec ton serveur Gandi par sFTP (utilisant donc SSH) je me suis amuser à faire un test de transfert entre mon ordi et mon RPi en passant par un script.

          Pour cela il faut installer sur la machine qui envoie le fichier un petit logiciel : sudo apt-get install sshpass
          Ce programme permet de donner la commande de renseigner le mot de passe lorsque la connexion via ssh se fait. Il faut donc avoir été authentifié au moins une fois avec l'autre serveur distant.
          Le script est très simple, il renseigne le mot de passe lorsque la connexion via ssh (sshpass), il transfert un fichier via protocole scp. Et c'est tout. Voici le script à rendre exécutable :

          #!/bin/sh
          sshpass -p 'mot_de_passe_ssh' scp /répertoire/de/l'images/image.jpg user@adresse_du_serveur_distant:/répertoire/de/destination

          Chez moi ça fonctionne, cette méthode était utilisée avant l’avènement de sFTP.

          • Merci pour le code !
            Malheureusement, ça ne fonctionne pas mieux ... et je pense que ça viens de Gandi qui ne semble pas autoriser les actions sur fichiers via ssh... me v'la bien !
            Ce qui est cool c'est que leur doc est très bien faite ... fin bon.
            Je vais tenter avec un autre hébergement, même si cela ne solutionne qu'a moitié mon problème 😉
            Merci en tout cas, je te tiens au courant.

            G.

          • En fait je crois que je regarderai demain, car impossible de me connecter à un ftp de chez OVH non plus, il me demande mon password sur l'utilisateur root, je ne sais pas pourquoi...

          • Je me répond tout seul =)
            J'ai réussi en plaçant .netrc dans root et non dans home/pi/
            Je suis presque en mesure de vous montrer un truc, n'empêche j'aimerai résoudre le "problème" Gandi (ça pourra servir à quelqu'un).

            G.

    • Bonjour Roland,
      Oui il est possible de prendre les données d'autres sources. Si tu as une source proche et fiable proche de chez toi, il te faudra récupérer les données. Le plus rien est de pouvoir accéder aux données sur un fichier .txt. Il faudra alors modifier le script dtstamp.sh pour extraire les infos que tu souhaites exploiter. C'est faisable mais il faut être relativement à l'aise avec les commandes cat/sed/cut.
      Je peux éventuellement t'aider 🙂
      Ookpik

  5. Bonjour
    Merci pour ce tutorial. Il semble très intéressant mais malheureusement je n'arrive pas à le faire marcher. Pour mon application je n'ai pas besoin du crop donc je l'ai enlevé. L'image viewcam.jpg a l'air d'être OK. Mais le FTP ne marche pas. Je suis chez OVH et j'ai essayé de mettre .netrc dans le root sans succès. J'ai les erreurs suivantes si j'exécute webcam.sh manuellement :
    root@raspberrypi:/home/pi/webcam# ./webcam.sh
    ./dtstamp.sh: 33: ./dtstamp.sh: [[: not found
    ###### Working on file: image.jpg
    Width: 2592, Height: 1944. Using pointsize: 86
    Password:Name (ftp.mbidi.info:root):
    Login failed.
    No control connection for command: Success
    Not connected.
    Not connected.
    root@raspberrypi:/home/pi/webcam#

    Je ne comprends pas celle de la ligne 33 de dtstamp.sh.... mais ne semble pas trop grave. Par contre le FTP est fatal!
    MBidi

    • Merci Marco pour ton retour, cela fait plaisir de voir que le tuto sert et continue de servir 🙂

      Ton lien me retourne une erreur 403 "Forbidden" (You don't have permission to access /index.php/fr/webcam-fr on this server. Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.) : erreur de proxy, ou parfeu, ou de configuration apache certainement.

      Je viens de m'apercevoir que la commande "metar" qui permet de récupérer les observations météo (température et pression atmosphérique) ne fonctionne plus. Je vais publier un update dans l'article pour le faire à partir de "pymetar".

      • Cela fonctionne très bien avec pymetar. Il suffit de remplacer metar par pymetar dans le script webcam.sh et comme on reçoit le rapport sous une autre présentation modifier dans horodatage.sh la ligne
        temp=$(cat metar.txt | sed -n '9 p' | cut -c16-19 |sed 's/\C//')
        par
        temp=$(cat metar.txt | sed -n '3 p' | cut -c14-17 |sed 's/\C//')

        et
        hpa=$(cat metar.txt | sed -n '11 p' | cut -c16-24 |sed 's/\C//')
        par
        hpa=$(cat metar.txt | sed -n '7 p' | cut -c10-18 |sed 's/\C//')

        Bien sur après avoir installé le paquet python-pymetar

    • Me suis fait grillé 😉
      J'ai juste cut un peu plus loin en cas de températures négatives élevées (-10.0 °C) et pour ne pas modifier l'affichage de la pression.
      En tout cas merci pour ton retour Txo 😀

      GNU/Linuxement 😀

  6. Plop tout le monde,
    Je rédige dans les commentaires un petit edit qui aura plus de chance d'être lu qu'une information noyée dans un article déjà assez long et qui a l'avantage d'avertir les abonnés à cet article.

    Depuis le début août 2016, metar ne fonctionne plus et par conséquent ne revoie pas les données metar. Une solution était d'utiliser pymetar. Malheureusement pymetar revoie aussi une erreur depuis quelques jours :/

    Après avoir mené quelques investigations, il s'avère que le service (metar et taf) proposé par weather.noaa.gov n'est plus disponible et a été abandonnée (voir l'annonce). TL;DR le service est rendu disponible par le National Weather Service (NWS ; « Service météorologique national »), le service météorologique des États-Unis -un des six services scientifiques qui composent le National Oceanic and Atmospheric Administration (NOAA)-.

    Une solution pour afficher à nouveau les informations ?

    Metar est un programme binaire, certainement écrit en C, je ne sais pas le modifier. En revanche, pymetar est écrit en python et la modification est simple :
    sudo nano /usr/share/pyshared/pymetar.py
    À la ligne 1035, il suffit de remplacer l'URL par http://tgftp.nws.noaa.gov/data/observations/metar/decoded/

    Problème résolu en attendant la mise à jour des programmes (les deux auteurs ont été contactés par mail).

    Update (29/08/2016) : pour les impatients les sources metar (GitHub) et pymetar (Site officiel) ont été mis à jour. Les paquets Debian/Raspbian ne devraient pas trop tarder.

    Framboisement,
    Ookpik

    • Bonjour,
      Il est possible d'envoyer via FTP vers autant de serveurs que l'on souhaite. Je l'explique dans cet article (envoi sur page perso Free et envoi sur mon ordinateur local).
      Que le serveur soit local (dans sa maison vers un ou plusieurs ordinateurs/NAS/RPi/etc..) soit sur Internet (espace de stockage -chez Free/OVH/autre hébergeur utilisant le protocole FTP), la procédure est la même.

      Dans cet article, le RPi sert donc à prendre des images, à la redimensionner ces images, à les taguer, à les envoyer sur mon ordinateur principal (via FTP) et à les envoyer chez mon hébergeur web Free (Route63) et aussi une copie de sauvegarde sur l'espace de stockage de ce blog.
      Dans un soucis de souplesse d'utilisation, de simplicité et de maintenance, chacune des opérations effectuées par le RPi sont programmées sous forme de script (qui seront automatiquement exécutés).

      La partie envoi par FTP se décompose en 2 scripts : free.sh et domicile.sh dans mon cas. Dans chacun de ces deux scripts, on va renseigner :

      • l'endroit où se trouve le fichier à envoyer sur le RPi (cd /home/pi/webcam)
      • le programme à exécuter pour envoyer le fichier via FTP (ftp -i <<**)
      • l'action que le programme FTP devra exécuter :
          - ouvrir le serveur distant (open adresse.du.serveur.distant)
            - se déplacer dans l'arborescence du serveur distant et choisir l'emplacement souhaité (cd /là/où/on/veut/coller/le/fichier)
              - mettre le fichier souhaité (put viewcam.jpg)
                - se déconnecter du serveur distant (disconnect)
              • dire au revoir au serveur distant (bye *)

              Chaque script correspondra à un seul serveur distant, donc si on souhaite envoyer un fichier via FTP sur 5 serveurs distant, il faudra créer 5 scripts sur le même schéma expliqué ci-dessus.

              Pour des raisons de sécurité, ces scripts ne contiennent pas les paramètres d’authentification de login : utilisateur/mot de passe. Pour cela, on va renseigner un fichier conçu spécialement pour l'authentification via FTP : .netrc

              .netrc est un fichier caché qui contient des informations de configuration et d'autologin (les informations de connexion et d'initialisation) rendant le processus de connexion automatique. On le renseigne en indiquant le nom du serveur distant (le même indiqué dans le script ci-dessus), login et le mot de passe. On peut y ajouter autant de serveurs distant que l'on souhaite.

              Concrètement, un script (webcam.sh) va prendre la photo, exécuter tous les scripts de serveurs distants (s'authentifiant avec .netrc) et attendre d'être à nouveau exécuté.

              Le Raspberry Pi est un outil très utile, relativement simple à utiliser. Pour une telle utilisation, lorsque le RPi tourne avec Raspbian on peut faire joujou dans "casser" la partie software : on ne fait que créer des dossiers, y coller des scripts qui vont donner des instructions. En cas d'erreur, au mieux l'exécution que chaque processus sera altérée, au mire cela ne fonctionnera pas. Chaque script peut être lancé individuellement dans un terminal, le résultat s'affichera (en succès ou en échec). Donc faut pas hésiter à faire des tests 😉

              Pour les non-initiés à l'environnement et à l'utilisation des OS sous GNU/Linux, je conseille de toujours prendre son temps, bien lire le/les documentation(s) et essayer de les mettre en œuvre.

              Si besoin, je peux vous aider à mettre en place le projet que vous avez.

              Ookpik

              • Bonjour et encore merci de votre réponse rapide,

                Donc il est possible d'envoyer à plusieurs serveur. Ma question qui peut paraitre stupide : faut-il pour chaque serveur créer un fichier distinct ou est-il possible de mettre les infos sur ceux déjà existants.
                De nouveau merci
                Saroyan

                • Il n'y a pas de question stupide 😉 Dans l'absolu on pourrait effectivement créer un seul un fichier distinct (ou script) dans lequel on mettrait les infos pour les différents serveurs distants. Cependant, je me suis aperçu qu'en cas de panne d'un des serveurs distants, il a un retour d'erreur et le script ne s'exécutera pas en entier. C'est pour cela que je préfère séparer chaque opération par serveur dans des scripts différents. D'une part cela évite les problèmes d'exécution en cas de soucis, d'autre part, en cas de problème il devient plus simple de savoir d'où vient le problème, d'autre part si on listait une succession de commande dans un seul et même script, il pourrait y avoir source de conflit entre les commandes. Comme pour le reste, il faut tester 😉

                  Ookpik

                  • Bonjour,
                    Merci de vos réponse rapide et constructive.
                    Je me permet de vous expliquer mon souci. Je possède donc une Raspberrypi 3 météo. Jusqu’à ce que j'y mette mes doigts cela fonctionnais bien.
                    Pourtant j'ai juste ajouté les caractéristiques ftp dans un nouveau fichier pour mon autre serveur (free.sh et gite.sh) puis j'ai déposé les identifiants de connexion ftp dans .netrc
                    Maintenant plus rien est envoyé !
                    Avez-vous un conseil svp ?
                    Merci Saroyan

          • Bonjour, super votre tuto...
            j'avais 3 webcam, 2 ont rendu l'ame. je souhaite les remplacer par 3 raspberry pi 2 equipee chacune d'une webcam pi. (j'ai pour le moment 1 Raspberry pi et une webcam pi pour essayer.
            J'ai donc suivi scrupuleusement (enfin je crois) la marche a suivre du tuto.
            mais voila lorsque je lance depuis root@raspberrypi:/home/pi/webcam# la cmd : sudo chmod a+x webcam.sh dtstamp.sh free.sh domicile.sh
            La reponse est : sudo: unable to resolve host raspberrypi

            Ou est le probleme ?

            Pour info voici le contenu de mon repertoire :
            root@raspberrypi:/home/pi/webcam# dir
            Raspberry_Pi.png domicile.sh dtstamp.sh free.sh webcam.sh
            root@raspberrypi:/home/pi/webcam#

            A votre disposition pour vous faire parvenir d'autres details

            Cordiales salutations

            Christian Sturny

          • Pingback: DIY : Montage d'une webcam avec une PiCam et clé 3G | Raphaël C.

          • Bonjour,

            merci pour ce tuto que je suis en train de réaliser. Tout marche bien sauf la récupération des données météo qui ne se fait pas. Quand je teste dans un terminal à partir du pi où sont les scripts j'obtiens :

            $ pymetar lflc
            Something went wrong when fetching the report.
            These usually are transient problems if the station ID is valid.
            The error encountered was:

          • bonsoir
            Merci pour ce descriptif très bien détaiilé .
            J'ai suivi votre procédure pour l' installation de la camera météo .
            J'ai juste modifié quelques lignes de commandes pour le bandeau météo.
            Depuis 2 ans maintenant , ma raspicam fonctionne sans bugg .
            Vraiment du très content d'avoir pu bénéficier de votre expérience .
            Cordialement
            René Marnat
            St Germain Lespinasse 42640

          • bonjour, super tuto ,je me lance, j'ai une question, peut on modifier les paramètres de configuration à la volée (sans redémarrer le rasppi) en ligne de commande ou par appli android par exemple ?
            merci pour le partage.

          Répondre à Marc Bidiville Annuler la réponse

          Votre adresse e-mail ne sera pas publiée.

          Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.