Différences entre versions de « Rasp-Node-Red-picam-mail »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 137 : Ligne 137 :
 
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 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.
  
{{ambox | text = Vous trouverez un TUTO détaillé sur la PiCam vous permettant de prendre la main, ou de la paramétrer si vous n'avez pas encore utilisé celle-ci auparavant: ....___TUTO___...}}  
+
{{ambox | text = Vous trouverez un TUTO détaillé sur la PiCam vous permettant de prendre la main, ou de la paramétrer si vous n'avez pas encore utilisé celle-ci auparavant: [https://www.raspberrypi.org/documentation/usage/camera/raspicam/raspistill.md tutoriel RaspiStill pour contrôler la caméra en ligne de commande)]}}  
  
 
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.
 
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.

Version du 9 mai 2017 à 20:25



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.

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.

Dans NodeRED, il est important de bien identifier la finalité de notre projet afin de connaître au préalable tous les éléments qu'il faudra créer et fournir à l'action finale (celle qui enverra un email).

Quels sont les besoins du noeud email

Composants nécessaires pour constituer un email

Un email est composé des éléments suivants:

  • Un expéditeur
  • Un destinataire
  • Un sujet
  • Le corps du message

Tous ces éléments vont donc devoir être préparés afin de pouvoir construire le message à envoyer par le noeud final.

Le noeud final aura aussi besoin d'un serveur SMTP (serveur d'envoi d'emails) et éventuellement de paramètres d'identification pour ce serveur d'envoi d'emails.

Détail des besoins du noeud email

La liste des éléments nécessaires s'affiche lorsque le bloc est dans la zone de travail (Schema). Commençons donc par sélectionner le bloc email, et de le glisser dans la zone de travail.

Commençons par cliquer sur le bloc email et nous maintenons le clic pour le glisser à droite dans l'espace de travail.

(on choisit celui qui a son point de liaison à gauche, car nous voulons un bloc de sortie)

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

Glissons le dans l'espace de travail, et cliquons un clic simple pour le sélectionner.

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

Ensuite, dans la colonne à droite de cet espace de travail, nous cliquons sur info et nous pourrons découvrir les éléments nécessaires à la constitution d'un bloc email.

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

Nous utiliserons les champs suivants
  • msg.payload --> Ce champ contient le corps de l'email
  • msg.topic --> Ce champ contient le sujet de l'email
  • msg.from --> Ce champ contient l'email de l'expéditeur
  • msg.to --> Ce champ contient l'email du destinataire

Les autres champs ne seront pas utilisés dans notre cas, mais vous pourrez constater que le bloc email est complet de part ses fonctionnalités et possibilités.

Les données de serveur et d'identification seront abordées en fin de tuto lors de la configuration finale du bloc.

Nous allons maintenant passer à la réalisation du flux en commençant par le début de celui-ci.

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:31 node: 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;4WP6x2.../>"

Comme vous pourrez le constater, chaque élément du noeud est détaillé. Les données sont cependant tronquées, le noeud "Debug" ne nous fourni pas la totalité du "PayLoad" mais nous avons déjà un bon aperçu des données qu'il contient.

  • _msgid: est un Id unique de message
  • topic: est le sujet du mail, nous l'avons déterminé dans le premier bloc
  • payload: contient les données du message formatées par le template que nous avons créé et complété par l'image en base64.

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: le fameux "msg.from" que nous avons évoqué au début de tuto !

Si vous avez bien suivi les étapes précédentes du tuto, jusqu'au noeud "Debug" et à son résultat, vous comprendrez facilement la démarche ci après pour ajouter un expéditeur dans le flux.

Nous allons ajouter un nouveau noeud "Template" dans la zone de travail et double cliquer dessus pour afficher sa page de configuration:

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


Nous allons ensuite sélectionner le type de propriété que nous souhaitons injecter dans le flux: "msg.from"

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


Cette propriété étant une adresse email, nous allons choisir le type "plaintext" comme type de données.

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


Nous allons enfin donner un nom explicite à notre bloc afin d'identifier facilement sa fonctionnalité parmi les autres blocs.

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

Création du bloc d'envoi d'email

To : destinataire

Simplement, l'adresse email du destinataire du message.

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

Server, port, secure connection

Dans ce champ, nous allons mettre un serveur SMTP (serveur email) pour permettre l'envoi de l'email. Dans la plupart des cas, le SMTP de votre FAI (fournisseur d'accès à internet) pourra servir d'intermédiaire. Nous vous invitons à consulter les paramètres propres à votre fournisseur d'accès pour paramétrer ce bloc.

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

UserID et Password

Ces champs resteront vides si votre FAI ne nécessite pas d'authentification pour envoyer des emails. Si vous utilisez un autre fournisseur, tel que GMAIL par exemple, il faudra mettre votre adresse email et votre mot de passe pour vous identifier.

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

Name

Enfin, le champ "Name" qui vous permet de donner un nom au bloc d'envoi d'email.

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

Déploiement et premiers tests

Afin de "lancer le programme" que nous venons de créer, il suffit de cliquer sur le bouton "Deploy" en haut à droite de la page.

La photo ne se réalise pas

Si la photo ne se réalise pas, il faut commencer par vérifier la commande dans le bloc de prise de photo. Nous vous invitons vivement à tester la commande directement dans le terminal afin de vous assurer que celle-ci soit d'une syntaxe correcte et ne rencontre pas de problème d'exécution. Les problèmes d'exécution de commandes externes dans le bloc "command" peuvent amener à des blocages dans l'exécution et empêcher NodeRED de continuer à exécuter le "Schéma".

La photo se réalise mais l'encodage en base64 bloque

Si le programme bloque à l'encodage, comme précédemment, nous vous invitons à vérifier votre commande en l'exécutant directement dans le terminal. Vous pourrez identifier directement le problème et le résoudre le cas échéant.

L'encodage fonctionne, mais le PayLoad reste vide

N'auriez-vous pas oublié de cocher la case "+ Append : msg.payload" dans le bloc qui lance la commande de conversion en base64 ?

Mon email arrive vide

Retournez à l'étape de mise en forme du message afin de vérifier si vous n'avez pas omis un paramètre ou une fonctionnalité.

L'image ne s'affiche pas dans l'email reçu

Si l'image ne s'affiche pas, il faudrait vérifier si vous avez bien lié vos blocs sur la première sortie des blocs "Exec". Les deux autres sorties étant destinées à d'autres états d'exécution/erreur.

Le sujet de l'email est vide

Dans notre cas, le sujet est fixé dans le premier bloc dans le champ "Topic". Vous pouvez-donc ré-éditer ce bloc afin de vérifier si celui-ci n'est pas resté vide.



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