Domotique et objets connectés à faire soi-même

Node-RED. Sauvegarde automatique des flows par email, FTP, copie locale

Sauvegarder vos scripts Node-RED

Sauvegarder les scripts Node-RED

Node-RED ne dispose d’aucun outil de sauvegarde automatique par défaut. Même si NodeRED a atteint une certaine stabilité, il est important de sauvegarder régulièrement les flows en cas de problème avec un module ou en cas de panne par exemple. 

 

Localiser les fichiers NodeRED

Les flows sont stockés dans un fichier au format JSON par NodeRED dans le répertoire utilisateur. Par défaut, les fichiers sont enregistrés dans le répertoire /Users/<user>/.node-red sur Windows (c:\users\<utilisateur>.node-red  ), macOS ou Linux.

Mieux que naviguer dans les répertoires, sur Linux ou macOS, il suffit d’exécuter cette commande pour localiser le répertoire d’installation de Node-RED.

La commande sudo est optionnelle si vous êtes connecté avec un compte administrateur (root)

sudo find / -type d -name ".node-red" -ls

La commande retourne la liste des répertoires qui contient le dossier recherché avec les droits attribués

1450744 4 drwxr-xr-x 5 projetsdiy projetsdiy 4096 avril 2 22:58 /home/projetsdiy/.node-red

Déplacez vous dans le répertoire

cd /home/projetsdiy/.node-red

puis exécutez la commande ls pour lister les fichiers stockés dans le dossier

flows_projetsdiy_cred.json  
flows_projetsdiy.json  
lib  
node_modules  
package.json  
package-lock.json  
settings.js 
start  
start_cred

Vous devez y trouver les deux fichiers utilisateur nommés flows_<hostname>.json et flows_<hostname>_cred.json. Hostname est le nom attribué au système. Le fichier cred (pour credential, node-red-contrib-credential) est optionnel. Il permet de stocker de façon séparée les identifiants utilisateur.

Sauvegarde manuelle des flows Node-RED

La première solution consiste à exporter manuellement les flows NodeRed depuis la palette

Dans la boite de dialogue qui s’ouvre, plusieurs options sont disponibles :

  1. Exporter uniquement le flow courant
  2. Exporter tous les flows (conseillé)
  3. L’option Download permet de télécharger les flows sous la forme d’un fichier JSON
  4. L’option Copy to Clipboard (déconseillé) permet de copier dans le presse papier du système le contenu du fichier JSON. Il faudra ensuite enregistrer le contenu du presse papier dans un fichier texte.

Sauvegarde automatique locale

Valerio Vaccaro a proposé un flow qui permet faire une copie de sauvegarde locale. Chaque copie est horodatée à la date du backup. Je vous conseille de créer un sous-répertoire dans lequel les fichiers de sauvegarde seront enregistrés.

N’oubliez pas de modifier les chemins des fichiers avant de déployer le projet.

[{"id":"c9a474c5.cc2e98","type":"file in","z":"5519a8f3.84c4c8","name":"flows_vps.json","filename":"/root/.node-red/flows_vps.json","format":"utf8","x":360,"y":460,"wires":[["cd01d8fb.bcdf58"]]},{"id":"e6ef0ce1.d67b9","type":"file","z":"5519a8f3.84c4c8","name":"","filename":"Save file","appendNewline":false,"createDir":false,"overwriteFile":"true","x":720,"y":460,"wires":[[]]},{"id":"562a7cf3.6bfc14","type":"inject","z":"5519a8f3.84c4c8","name":"","topic":"","payload":"Start backup","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":"","x":130,"y":460,"wires":[["c9a474c5.cc2e98","d6075a9a.835f08"]]},{"id":"cd01d8fb.bcdf58","type":"function","z":"5519a8f3.84c4c8","name":"new filename","func":"msg.filename = \"/root/.node-red/backup_\"+(new Date().toISOString().replace(':', '_').replace(':', '_').replace(/\\..+/, ''))+\"_flows_vps.json\";\nreturn msg;\n","outputs":1,"noerr":0,"x":550,"y":460,"wires":[["e6ef0ce1.d67b9"]]},{"id":"d6075a9a.835f08","type":"file in","z":"5519a8f3.84c4c8","name":"flows_vps_cred.json","filename":"/root/.node-red/flows_vps_cred.json","format":"utf8","x":380,"y":520,"wires":[["2b057928.89d4c6"]]},{"id":"6ed812ec.4e625c","type":"file","z":"5519a8f3.84c4c8","name":"","filename":"Save file","appendNewline":false,"createDir":false,"overwriteFile":"true","x":720,"y":520,"wires":[[]]},{"id":"2b057928.89d4c6","type":"function","z":"5519a8f3.84c4c8","name":"new filename","func":"msg.filename = \"/root/.node-red/backup_\"+(new Date().toISOString().replace(':', '_').replace(':', '_').replace(/\\..+/, ''))+\"_flows_vps_cred.json\";\nreturn msg;\n","outputs":1,"noerr":0,"x":570,"y":520,"wires":[["6ed812ec.4e625c"]]}]

Backup par email

La copie manuelle peut convenir lorsqu’on “bricole” avec Node-RED. Pour un projet en production, c’est rapidement contraignant et très risqué. Voyons comment on peut automatiser la sauvegarde très facilement avec un petit script qui envoi régulièrement une sauvegarde par email.

Commencez par ajouter le Node email depuis le gestionnaire de palette

Ajoutez ensuite un Node inject

Editez le Node (double-clic) :

Placez une fonction (function) sur le flow et reliez le au node inject. La fonction permet de préparer le contenu de l’email. Collez le code ci-dessous dans la fonction et modifier :

msg = {
    payload: "Node-RED files \n\n",
    topic: "Node-RED Backup",
    attachments: [
        {   
            path: '/home/<user>/.node-red/flows_<hostname>.json'
        },{ // optional - optionnel
            path: '/home/<user>/.node-red/flows_<hostname>_cred.json'
        },
    ]
}
return msg;

Ajouter maintenant un Node email et configurer les options :

Relier les Nodes et ajouter un Debug pour vérifier et localiser une éventuelle erreur de configuration.

Déployer le flow de backup

Cliquer sur Deploy pour déployer le projet. Si tout est correctement configuré, vous recevrez quelques instants plus tard un email contenant la sauvegarde des fichiers de votre projet en pièce jointe.

Code complet de script de sauvegarde

Copiez puis importez le script de sauvegarde dans votre projet Node-RED.

[{"id":"5519a8f3.84c4c8","type":"tab","label":"Flow 3","disabled":false,"info":""},{"id":"2f982ae7.a78d56","type":"e-mail","z":"5519a8f3.84c4c8","server":"smtp.gmail.com","port":"465","secure":true,"tls":true,"name":"","dname":"Send email","x":490,"y":80,"wires":[]},{"id":"62d29031.438c4","type":"function","z":"5519a8f3.84c4c8","name":"Prepare email","func":"msg = {\n payload: \"Node-RED files \\n\\n\",\n topic: \"Node-RED Backup\",\n attachments: [\n { \n path: '/home/projetsdiy/.node-red/flows_projetsdiy.json'\n },{ // optional - optionnel\n path: '/home/projetsdiy/.node-red/flows_projetsdiy_cred.json'\n },\n ]\n}\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":100,"wires":[["2f982ae7.a78d56","dd452920.422568"]]},{"id":"dd452920.422568","type":"debug","z":"5519a8f3.84c4c8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":490,"y":120,"wires":[]},{"id":"2ac13700.a040ba","type":"inject","z":"5519a8f3.84c4c8","name":"","topic":"","payload":"start backup","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":130,"y":100,"wires":[["62d29031.438c4"]]}]

Configurer votre compte gmail

Pour les utilisateurs de gmail, il est nécessaire de configurer votre compte afin de pouvoir expédier des emails depuis Node-RED. En effet, Gmail interdit par défaut les applications non sécurisées à expédier des emails. Si vous déployez le flow, vous allez automatiquement recevoir cet email d’alerte de Gmail.

Ouvrez un navigateur et allez sur la page https://myaccount.google.com. Aller sur l’onglet Sécurité puis descendre jusqu’au bloc Accès moins sécurisé des applications et suivre le lien vers Activer l’accès (déconseillé).

Cocher ensuite l’option Autoriser les applications moins sécurisées.

Maintenant vous ne recevrez plus d’email d’avertissement de la part de Gmail.

Sauvegarder sur un serveur FTP

Troisième solution, envoyer régulièrement le flow sur un serveur FTP distant. C’est probablement la meilleure solution pour sécuriser votre travail.

Installer le module node-red-contrib-ftp depuis le gestionnaire de palette.

Placer une fonction et coller le code en l’adaptant à votre configuration :

msg.filename = '<destination_folder>/flow_'+new Date().toISOString()+'.json';
msg.localFilename = '/home/projetsdiy/.node-red/flows_jeedom.json';
return msg;

Coller un Node FTP. Ajouter un nouveau serveur en cliquant sur le crayon :

Choisir dans la liste le serveur FTP que l’on vient de créer. Dans Operation, choisir put.

Enfin relier les Nodes et déployer.

Le code du flow FTP

[{"id":"2ac13700.a040ba","type":"inject","z":"5519a8f3.84c4c8","name":"","topic":"","payload":"Start backup","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":130,"y":300,"wires":[["c23fb1fb.da69e"]]},{"id":"45b0fedd.f6bbc","type":"debug","z":"5519a8f3.84c4c8","name":"","active":false,"console":"false","complete":"payload","x":710,"y":420,"wires":[]},{"id":"c23fb1fb.da69e","type":"function","z":"5519a8f3.84c4c8","name":"Configuration","func":"// filename : chemin et nom de fichier sur la destination - destination path and file name\n// localFilename : chemin du fichier local - local file path\nmsg.filename = '<folder>/flow_'+new Date().toISOString()+'.json';\nmsg.localFilename = '/home/projetsdiy/.node-red/flows_<hostname>.json';\nreturn msg;","outputs":1,"noerr":0,"x":320,"y":340,"wires":[["3be2ee22.016552"]]},{"id":"3be2ee22.016552","type":"ftp in","z":"5519a8f3.84c4c8","ftp":"439530c1.0f6ba","operation":"put","filename":"","localFilename":"","name":"Put to FTP","x":510,"y":380,"wires":[["45b0fedd.f6bbc"]]},{"id":"439530c1.0f6ba","type":"ftp","z":"","host":"xxx.xxx.xxx.xxx","port":"21","secureOptions":"","user":"","connTimeout":"","pasvTimeout":"","keepalive":""}]

Programmer une sauvegarde automatique régulière

Au début du tutoriel, nous avons configuré le Node inject pour qu’il soit exécuté une seule fois au déploiement du projet (ou manuellement en cliquant sur le déclencheur, mais il est tout à fait possible de le programmer pour qu’il soit exécuté régulièrement. Editer le Node. On peut programmer le mode de répétition (repeat) :

Avez-vous aimé cet article ?
[Total: 0 Moyenne: 0]
Quitter la version mobile