Rasp-Node-Red-picam-mail

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche



MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.
Page-under-construction.pngPage(s) en cours de traduction/élaboration.

Page(s) under translation/construction

PiCamRED - Envoi périodique de photos par email avec PiCam et NodeRED

Rasp-Node-Red-picam-mail-01.png

Description du projet

Dans ce tutoriel, nous allons réaliser des photos à l'aide de la caméra du RaspBerry Pi 2/3 et envoyer ces clichés par email de manière périodique grâce à NodeRED. Nous allons donc utiliser plusieurs blocs et décrire de manière détaillée le déroulement de chaque étape de la réalisation de ce projet.

Création d'une action périodique

Dans la colonne de gauche de NodeRED, se trouvent une liste de blocs à utiliser pour réaliser vos projets. Ils sont classés par "types".

Ainsi nous retrouvons les "types" suivants:

  • Input qui contient tous les blocs d'entrées
  • Ouput qui contient tous les blocs de sortie
  • Function qui contient des blocs de fonctions javascript etc...
  • Social qui sont des blocs d'entrée ou sorties depuis ou vers les réseaux sociaux
  • Storage qui sont des fonctions de lecture ou d'écriture de fichiers
  • Analysis ->> Sentiment interprète du texte et détermine un score sur base d'un dictionnaire anglais, renvoie le texte avec ce score de -5 à +5, déterminant ainsi l'émotion susceptible d'être procuré par ce texte
  • Advanced possède des outils permettant de détecter des changements dans des fichiers ou dossiers, de lire des flux RSS ou encore EXEC qui permet d'exécuter directement des commandes sous linux !
  • Raspberry Pi contient des outils pour piloter/lire le GPIO du raspberry Pi
  • Network qui contient un outil réseau de Ping

Nous allons créer une action périodique, c'est à dire paramétrer un bloc "INJECT" de manière à déclencher régulièrement une chaine d'actions que nous allons accrocher à la suite les unes après les autres. Nous allons donc cliquer sur le bloc "Inject" dans la liste "Input" et maintenir ce clic pour le déplacer vers la zone de travail.

Rasp-Node-Red-picam-mail-02.png

Nous obtiendrons donc une nouvelle instance "inject" qui portera le nom "Timestamp" (ce nom est attribué par défaut par NodeRED) comme dans la capture ci-dessous

Rasp-Node-Red-picam-mail-03.png

Nous allons maintenant double-cliquer sur celle-ci fin de l'éditer pour voir apparaitre le menu ci-dessous

Rasp-Node-Red-picam-mail-04.png

Il va falloir configurer ce bloc, mais avant tout voici une explication de celui-ci:

Payload

Le champs PayLoad est en fait le champ de données qui sera suivi d'un noeud à l'autre jusque à la fin de la chaine. Dans ce module "inject", nous allons donc déterminer quel type de données contiendra le "PayLoad" jusqu'à la fin de la chaine que l'on va réaliser.

Dans notre cas, nous souhaitons construire un email, donc du contenu textuel, nous allons donc choisir "String" ce qui correspond à une chaine de caractères (du texte).

Rasp-Node-Red-picam-mail-05.png

Topic

Le champs "Topic" est un champs de texte dans lequel nous allons mettre un sujet succinct décrivant notre chaine. Dans notre cas, ce sujet fera office de sujet au mail que nous expédierons. Nous allons donc être précis en un minimum de mots pour que le destinataire de l'email puisse facilement deviner le contenu de celui-ci.

Rasp-Node-Red-picam-mail-06.png

Repeat

Nous allons ensuite choisir l'intervalle de déclenchement de notre action, sachant que nous avons le choix entre:

  • none : pas de déclenchement périodique programmé
  • interval : nous fixons un temps de déclenchement à partir du lancement du programme, l'action se réalisera à chaque fois que ce temps sera écoulé de manière répétée jusqu'à l'interruption manuelle du programme
  • interval between times : nous fixons ici le déclenchement par interval, mais nous fixons aussi une fourchette d'heures et des jours pendant lesquels nous exécutons cet interval
  • at a specific time : nous fixons une heure d'exécution, et un ou plusieurs jours d'exécution. Dans ce cas l'action n'est pas répétée en continu mais éxécutée une seule fois par jour à l'heure programmée

Dans notre exemple, nous allons fixer un intervalle de 15 secondes pour commencer. Nous pourrons ensuite augmenter cette valeur pour éviter de recevoir trop d'emails avec des photos :D

Rasp-Node-Red-picam-mail-07.png

La case "inject once at start" permet de ne pas attendre le premier cycle avant d'exécuter une première fois l'action. Elle se lancera dès le lancement du programme, puis périodiquement selon les cycles déterminés par l'intervalle.

Rasp-Node-Red-picam-mail-08.png

Name

Le champs Name va déterminer le nom que portera le bloc dans l'espace de travail et dans les logs (si nous créons des blocs de log ensuite pour contrôler des étapes). Il est important de bien établir ce nom de manière explicite, car le nom des blocs permettra de comprendre et retrouver facilement la logique du schéma construit, même si l'on a pas consulté celui-ci pendant une longue période.

Rasp-Node-Red-picam-mail-09.png

Capture d'une image depuis la PiCam

Nous allons aller à l'essentiel en ce qui concerne la capture photo en utilisant une commande simple pour prendre un cliché et renvoyer celui-ci dans le flux NodeRED grâce à un bloc permettant d'exécuter des commandes bash.

Nous allons tout d'abord cliquer sur le bloc "Exec" dans la section "Advanced" de la colonne de gauche et glisser l'élément dans la zone de travail.

Rasp-Node-Red-picam-mail-10.png

Ensuite, cliquer sur le bloc nouvellement créé et configurer celui-ci.

Rasp-Node-Red-picam-mail-11.png

Le menu suivant s'affichera, et nous pourrons configurer le bloc "Exec" nouvellement créé.

Command

Nous allons y ajouter la commande à exécuter pour prendre une photo avec la caméra du Raspberry Pi et la stocker dans un fichier jpg dans le dossier /tmp/ de linux.

raspistill -o /tmp/cam.jpg -w 640 -h 480

Nous prenons soin de limiter la hauteur et la largeur de l'image afin de réduire son poids pour l'envoi par email.

Rasp-Node-Red-picam-mail-12.png

+Append

Ensuite, nous allons décocher la case "msg.payload" si elle est cochée par défaut.

Rasp-Node-Red-picam-mail-13.png

Extra input parameters et Timeout

Nous n'aurons pas besoin de compléter ces champs pour notre projet.

Si vous cochez le champ "Use spawn() instead of exec()?", votre commande sera réalisée sous forme d'un processus résident et continuera de s'exécuter jusqu'à ce qu'elle se termine par elle-même (sauf si elle ne se termine jamais). Cette solution implique que le programme n'attendra pas que cette commande soit réalisée pour passer aux étapes suivantes. Si la suite de l'exécution de votre flux est susceptible d'utiliser le résultat de cette commande, nous vous déconseillons d'utiliser cette option sous peine de provoquer des erreurs à la suite du traitement du flux.

Le champ "Timeout" permet de définir un temps d'attente maximum avant de mettre un terme à l'exécution de la commande. Cela permet de débloquer la situation si la commande exécutée prends un temps anormalement long à s'exécuter.

Name

Nous allons ensuite compléter le champs nom, celui-ci sera utilisé pour nommer le bloc dans le "schéma", mais aussi de nommer les logs comme pour le bloc "Exec".

Rasp-Node-Red-picam-mail-14.png

Encodage de l'image en base64

Nous allons convertir la photo prise juste avant en utilisant une commande de conversion en base64. Cela facilitera son injection dans un template HTML que nous allons créer ensuite pour construire un email.

Nous allons tout d'abord cliquer sur le bloc "Exec" dans la section "Advanced" de la colonne de gauche et glisser l'élément dans la zone de travail.

Rasp-Node-Red-picam-mail-10.png

Ensuite, cliquer sur le bloc nouvellement créé et configurer celui-ci.

Rasp-Node-Red-picam-mail-11.png

Le menu suivant s'affichera, et nous pourrons configurer le bloc "Exec" nouvellement créé.

Rasp-Node-Red-picam-mail-15.png

Command

Nous allons y ajouter la commande à exécuter pour encoder en base 64 la photo prise précédemment avec la caméra du Raspberry Pi.

base64 -i "/tmp/cam.jpg"

Rasp-Node-Red-picam-mail-16.png

+Append

Ensuite, nous allons cocher la case "msg.payload" si elle n'est pas cochée par défaut pour que le résultat soit directement renvoyé par cette commande dans le "PayLoad" du flux.

Rasp-Node-Red-picam-mail-17.png

Extra input parameters et Timeout

Nous n'aurons pas besoin de compléter ces champs pour notre projet.

Si vous cochez le champ "Use spawn() instead of exec()?", votre commande sera réalisée sous forme d'un processus résident et continuera de s'exécuter jusqu'à ce qu'elle se termine par elle-même (sauf si elle ne se termine jamais). Cette solution implique que le programme n'attendra pas que cette commande soit réalisée pour passer aux étapes suivantes. Si la suite de l'exécution de votre flux est susceptible d'utiliser le résultat de cette commande, nous vous déconseillons d'utiliser cette option sous peine de provoquer des erreurs à la suite du traitement du flux.

Rasp-Node-Red-picam-mail-18.png

Le champ "Timeout" permet de définir un temps d'attente maximum avant de mettre un terme à l'exécution de la commande. Cela permet de débloquer la situation si la commande exécutée prends un temps anormalement long à s'exécuter.

Rasp-Node-Red-picam-mail-19.png

Name

Nous allons ensuite compléter le champs nom, celui-ci sera utilisé pour nommer le bloc dans le "schéma", mais aussi de nommer les logs comme pour le bloc "Exec".

Rasp-Node-Red-picam-mail-20.png

Création d'un email au format HTML

Nous allons maintenant créer un template d'email au format HTML afin de mettre en forme le message que nous enverrons ensuite. Nous allons pour cela utiliser un bloc "Template".

Rasp-Node-Red-picam-mail-21.png

Name

Nous allons attribuer un nom au bloc afin de l'identifier plus facilement dans le flux. Nous allons donc le nommer "Contenu du mail" puisque nous créons le contenu du mail que nous enverrons ensuite.

Rasp-Node-Red-picam-mail-22.png

Set property

La propriété que nous souhaitons créer dans le flux est le "PayLoad". Ce PayLoad existe déjà, il contient pour le moment l'image au format "Base64" précédemment encodé. Cela n'est pas un problème, après notre noeud (notre bloc), le PayLoad sera intégralement remplacé par le template que nous sommes en train de créer.

Rasp-Node-Red-picam-mail-23.png

Template

Dans ce template, nous allons créer une structure HTML de base minimum afin que la structure soit interprétée par la majorité des clients/webmail. Vous pouvez la personnaliser à votre guise si vous avez les connaissances en HTML.

Voici la structure de base pour notre projet:

<html>
    <head>
        <meta charset="utf8"/>
    </head>
    <body>
        <h1>Projet Photo par email</h1>
        <img src="data:image/jpg;base64,{{payload}}"/>
    </body>
</html>

Vous pourrez remarquer que nous intégrons l'image en appelant le PayLoad à 'intérieur du code HTML dans la balise <img>. C'est le PayLoad créé précédemment par le bloc "Exec" qui est récupéré à ce moment précis. Ce PayLoad est remplacé dans le flux par le PayLoad complet avec notre template dans le flux par notre bloc Template.

Rasp-Node-Red-picam-mail-24.png

Création d'un bloc (noeud) "Debug"

Nous allons ajouter la notion d'expéditeur dans le flux que nous avons créé à travers nos blocs (noeuds). Pour rappel, actuellement nous avons deux propriétés avec des données dans notre flux. Si nous voulons observer ce que nous avons créé jusque là, nous pouvons faire appel à un bloc "Debug".

Création du bloc "Debug"

Comme pour les blocs précédents, nous allons glisser/déposer un bloc débug dans l'espace de travail.

Rasp-Node-Red-picam-mail-25.png

Celui-ci s'appelle msg/payload par défaut

Rasp-Node-Red-picam-mail-26.png

Nous allons double-cliquer sur ce bloc pour le configurer.

Rasp-Node-Red-picam-mail-27.png

Output

Dans ce champs, nous allons choisir la partie du flux que nous souhaitons afficher, ou nous allons sélectionner le flux entier.

Rasp-Node-Red-picam-mail-28.png

Sélectionner le flux entier, nous affichera le flux complet incluant toutes ses propriétés.

Rasp-Node-Red-picam-mail-29.png

To =

La propriété "To" nous permet de choisir ou nous souhaitons afficher les données que nous récupérons. Soit nous les affichons uniquement dans l'onglet "Debug" à droite de l'espace de travail, soit nous l'affichons dans cet onglet mais aussi dans la console de NodeJS. Dans notre cas, nous allons nous contenter d'afficher nos éléments dans l'onglet de "Debug" à droite de notre espace de travail.

Rasp-Node-Red-picam-mail-30.png

Name

Le champs Name nous servira à identifier quel bloc de "Debug" affiche les données en console ou dans l'onglet "Debug". Il faut donc le nommer efficacement pour bien attacher et comprendre les données que nous récupérons, surtout si nous en plaçons plusieurs dans le flux.

Rasp-Node-Red-picam-mail-31.png

Exploitation et compréhension des données récupérées

Nous avons placé notre bloc "Debug" à la suite du flux en dernière position.

Rasp-Node-Red-picam-mail-32.png

Nous allons donc déployer le programme en cliquant sur "Deploy" en haut à droite de la page.

Rasp-Node-Red-picam-mail-33.png

Ensuite, nous allons exécuter manuellement le programme en cliquant sur le bouton se trouvant en début de chaîne:

Rasp-Node-Red-picam-mail-34.png

Nous allons ensuite afficher l'onglet "Debug" sur le coté droit de la page et analyser les données récupérées:

Rasp-Node-Red-picam-mail-35.png

Analyse des données récupérées dans l'onglet "Debug"

08/05/2017 à 12:54:31node: FORMATAGE
MCHobby - Photo bureau : msg : Object
object
_msgid: "81efe35c.3208d"
topic: "MCHobby - Photo bureau"
payload: "<html>↵ <head>↵ <meta charset="utf8"/>↵ ↵ </head>↵ <body>↵ <h1>MCHobby - Photo bureau</h1>↵ <p>Cette photo est un instantané pris dans les bureaux de MCHobby.</p>↵ <img src="data:image/jpg;base64,&#x2F;9j&#x2F;4WP6RXhpZgAATU0AKgAAAAgACgEAAAQAAAABAAACgAEBAAQAAAABAAAB4AEPAAIAAAAMAAAA↵hgEQAAIAAAAKAAAAkgEaAAUAAAABAAAAnAEbAAUAAAABAAAApAEoAAMAAAABAAIAAAEyAAIAAAAU↵AAAArAITAAMAAAABAAEAAIdpAAQAAAABAAAAwAAAA3xSYXNwYmVycnlQaQBSUF9vdjU2NDcAAAAA↵SAAAAAEAAABIAAAAATIwMTc6MDU6MDggMTI6NTQ6MzAAABeCmgAFAAAAAQAAAdqCnQAFAAAAAQAA↵AeKIIgADAAAAAQADAACIJwADAAAAAQD6AACQAAAHAAAABDAyMjCQAwACAAAAFAAAAeqQBAACAAAA↵FAAAAf6RAQAHAAAABAECAwCSAQAKAAAAAQAAAhKSAgAFAAAAAQAAAhqSAwAKAAAAAQAAAiKSBQAF↵AAAAAQAAAiqSBwADAAAAAQACAACSCQADAAAAAQAAAACSCgAFAAAAAQAAAjKSfAAHAAABMAAAAjqg↵AAAHAAAABDAxMDCgAQADAAAAAQABAACgAgAEAAAAAQAAAoCgAwAEAAAAAQAAAeCgBQAEAAAAAQAA↵A2qkAgADAAAAAQAAAACkAwADAAAAAQAAAAAAAAAAAAEPYwAPQkAAAHE4AAAnEDIwMTc6MDU6MDgg↵MTI6NTQ6MzAAMjAxNzowNTowOCAxMjo1NDozMAAAOrTCAA9CQAAAd&#x2..."

Création d'un expéditeur

Nous avons construit petit à petit un message avec un sujet, mais il manque encore un détail: l'expéditeur de l'email que nous allons envoyer.

Voici une méthode pour ajouter cet expéditeur dans le flux.


Source: Raspberry Pi Hosting Node-Red
Créé par C. Mobberley pour AdaFruit Industries.

Traduction réalisée et augmentée par Meurisse D. pour MCHobby.be.

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com