Rasp-Node-Red-picam-mail
PiCamRED - Envoi périodique de photos par email avec PiCam et NodeRED
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.
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
Nous allons maintenant double-cliquer sur celle-ci fin de l'éditer pour voir apparaitre le menu ci-dessous
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).
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.
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
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.
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.
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.
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___... |
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.
Ensuite, cliquer sur le bloc nouvellement créé et configurer celui-ci.
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.
+Append
Ensuite, nous allons décocher la case "msg.payload" si elle est cochée par défaut.
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".
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.
Ensuite, cliquer sur le bloc nouvellement créé et configurer celui-ci.
Le menu suivant s'affichera, et nous pourrons configurer le bloc "Exec" nouvellement créé.
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"
+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.
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".
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