Bonjour
Je suis débutant avec Node-red. J'essaye d'apprendre à monitorer des valeurs reçues depuis des capteurs connectés à un Wemos D1 mini.
J'arrive à recevoir les données d'un capteur DHT22 grâce à 2 nœuds "mqtt" qui reçoivent respectivement la température et l'hygrométrie.
J'arrive à utiliser les nœuds "graphique" et "jauge" pour afficher ces valeurs. Cependant, je n'arrive pas à créer un fichier .csv pour accumuler ces données. Le nœud "CSV" semble être fait pour séparer des données d'une même source. Or, je souhaite justement rassembler ces 2 données avec celles fournies par un Time Stamp. J'ai également essayé de créer une fonction pour faire cela (4 lignes max si c'était en python !!!) Cependant le nœud "Fonction" semble ne pouvoir avoir qu'une seule entrée de données...
Bref, ça fait pas mal de temps que je rame... Alors que j'aurais pensé que c'était ultra-basique comme utilisation.
Quelqu'un pourrait m'expliquer comment faire ou bien me donner un exemple ou une piste ?
Merci !
Créer un fichier .csv sous Node-red
Re: Créer un fichier .csv sous Node-red
En cherchant, j'ai fini par trouver ce tutoriel :
https://www.youtube.com/watch?v=qWheXVuh73k
Tous les autres que j'ai essayés n'ont rien donné.
Il y a quand-même un truc bizarre : ce gars dit qu'il fait un fichier .csv alors qu'il fait un Json avec une extension .csv...
Je vais étudier comment, soit modifier le script java de la fonction pour qu'elle retourne une structure CSV soit convertir la sortie Json de la fonction en .csv
Le code de la fonction :
Et voici mon arborescence Node-Red actuelle :
Est-ce que quelqu'un pourrait me conseiller un livre ou bien peut-être un cours en français, basique et pas à pas pour apprendre Node-Red / Mosquitto ?
J'ai des bases en C Arduino et en Python, mais je sens bien que je patauge avec les notions de "payload" et de "topic"...
Merci !
https://www.youtube.com/watch?v=qWheXVuh73k
Tous les autres que j'ai essayés n'ont rien donné.
Il y a quand-même un truc bizarre : ce gars dit qu'il fait un fichier .csv alors qu'il fait un Json avec une extension .csv...
Je vais étudier comment, soit modifier le script java de la fonction pour qu'elle retourne une structure CSV soit convertir la sortie Json de la fonction en .csv
Le code de la fonction :
Code : Tout sélectionner
var t = new Date().toLocaleString();
msg.data = msg.payload;
msg.payload = { "Time": t, "Data": msg.data };
return msg;Code : Tout sélectionner
[
{
"id": "9d11118f3e19aa6a",
"type": "mqtt in",
"z": "3cde287fad7b8d2b",
"name": "Température",
"topic": "D1mini/latemperature",
"qos": "0",
"datatype": "auto-detect",
"broker": "57169c2e5fa91f35",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 370,
"y": 420,
"wires": [
[
"62a0aa8859429028"
]
]
},
{
"id": "62a0aa8859429028",
"type": "function",
"z": "3cde287fad7b8d2b",
"name": "function 1",
"func": "var t = new Date().toLocaleString();\nmsg.data = msg.payload;\nmsg.payload = { \"Time\": t, \"Data\": msg.data };\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 600,
"y": 420,
"wires": [
[
"90f1ac785f88a8d7",
"70b553032e6f8b67"
]
]
},
{
"id": "90f1ac785f88a8d7",
"type": "file",
"z": "3cde287fad7b8d2b",
"name": "",
"filename": "/home/yonnel/Desktop/Essai.csv",
"filenameType": "str",
"appendNewline": true,
"createDir": false,
"overwriteFile": "false",
"encoding": "none",
"x": 930,
"y": 420,
"wires": [
[]
]
},
{
"id": "70b553032e6f8b67",
"type": "debug",
"z": "3cde287fad7b8d2b",
"name": "debug 5",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 880,
"y": 540,
"wires": []
},
{
"id": "57169c2e5fa91f35",
"type": "mqtt-broker",
"name": "DHT22 Sur Wemos",
"broker": "192.168.0.23",
"port": "1883",
"clientid": "",
"autoConnect": true,
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willPayload": "",
"willMsg": {},
"userProps": "",
"sessionExpiry": ""
}
]Est-ce que quelqu'un pourrait me conseiller un livre ou bien peut-être un cours en français, basique et pas à pas pour apprendre Node-Red / Mosquitto ?
J'ai des bases en C Arduino et en Python, mais je sens bien que je patauge avec les notions de "payload" et de "topic"...
Merci !
Re: Créer un fichier .csv sous Node-red
Après de nombreux essais / erreurs, j'ai réussi à modifier le script de la fonction.
À tâton, j'ai bricolé pour obtenir une sortie sous la forme "string" , "string"
Et c'est bien ce que j'obtiens :
J'arrive à importer le fichier .csv généré dans LibreOffice, mais je dois remplacer les points par des virgules pour pouvoir faire un graphique.
Voici mon flow actuel :
J'imagine qu'il y a moyen de reformater "32.67" en "32,67" avec java script...
À tâton, j'ai bricolé pour obtenir une sortie sous la forme "string" , "string"
Et c'est bien ce que j'obtiens :
Code : Tout sélectionner
"19:11:52","32.57"
"19:11:58","32.57"
"19:12:04","32.59"
"19:12:10","34.29"
"19:12:16","34"
"19:12:22","41.11"
"19:12:28","37.68"Voici mon flow actuel :
Code : Tout sélectionner
[
{
"id": "6f92b69901d1e45c",
"type": "mqtt in",
"z": "3cde287fad7b8d2b",
"name": "Température",
"topic": "D1mini/latemperature",
"qos": "0",
"datatype": "auto-detect",
"broker": "57169c2e5fa91f35",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 230,
"y": 860,
"wires": [
[
"f672ed951fb80864"
]
]
},
{
"id": "f672ed951fb80864",
"type": "function",
"z": "3cde287fad7b8d2b",
"name": "function 2",
"func": "var t = new Date().toLocaleTimeString();\nmsg.data = msg.payload;\nmsg.payload = '\"' + t + '\"' + ',' + '\"' + String(msg.data) + '\"'\nreturn msg;\n\n// var t = new Date().toLocaleString();\n// msg.data = msg.payload;\n// msg.payload = { \"Time\": t, \"Data\": msg.data };\n// return msg;\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 460,
"y": 860,
"wires": [
[
"a1265a70c138db30",
"b847041ceea9ddeb"
]
]
},
{
"id": "a1265a70c138db30",
"type": "debug",
"z": "3cde287fad7b8d2b",
"name": "debug 6",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 660,
"y": 860,
"wires": []
},
{
"id": "b847041ceea9ddeb",
"type": "file",
"z": "3cde287fad7b8d2b",
"name": "",
"filename": "/home/yonnel/Desktop/Essai.csv",
"filenameType": "str",
"appendNewline": true,
"createDir": false,
"overwriteFile": "false",
"encoding": "none",
"x": 730,
"y": 1020,
"wires": [
[]
]
},
{
"id": "57169c2e5fa91f35",
"type": "mqtt-broker",
"name": "DHT22 Sur Wemos",
"broker": "192.168.0.23",
"port": "1883",
"clientid": "",
"autoConnect": true,
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willPayload": "",
"willMsg": {},
"userProps": "",
"sessionExpiry": ""
}
]Re: Créer un fichier .csv sous Node-red
Un chercher / remplacer dans libre office si l'import est manuel.
Sinon une fonction JavaScript semble faire le job
https://www.analyste-programmeur.com/ja ... pt-replace
Sinon une fonction JavaScript semble faire le job
https://www.analyste-programmeur.com/ja ... pt-replace
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
[RESOLU] Créer un fichier .csv avec Node-red
Et voilà !
Oui, merci pour le conseil et le lien.
Grâce à la fonction .replace(), j'arrive enfin à faire un .CSV digne de ce nom !
Le nouveau code de la fonction est celui-ci :
Le code de mon flux est ici :
Oui, merci pour le conseil et le lien.
Grâce à la fonction .replace(), j'arrive enfin à faire un .CSV digne de ce nom !
Code : Tout sélectionner
"12:19:36","34,83"
"12:19:42","34,9"
"12:19:48","34,85"
"12:20:18","34,78"
"12:20:24","34,98"
"12:20:30","35,05"
"12:20:36","34,98"
"12:20:42","34,95"Code : Tout sélectionner
var t = new Date().toLocaleTimeString();
msg.data = msg.payload;
msg.data = String(msg.data);
msg.data = msg.data.replace(".",",");
msg.payload = '"' + t + '"' + ',' + '"' + msg.data + '"';
return msg;Code : Tout sélectionner
[
{
"id": "a5c1fd7028437f84",
"type": "mqtt in",
"z": "3cde287fad7b8d2b",
"name": "Température",
"topic": "D1mini/latemperature",
"qos": "0",
"datatype": "auto-detect",
"broker": "57169c2e5fa91f35",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 230,
"y": 1120,
"wires": [
[
"ae9a96385d6e1117"
]
]
},
{
"id": "ae9a96385d6e1117",
"type": "function",
"z": "3cde287fad7b8d2b",
"name": "function 3",
"func": "var t = new Date().toLocaleTimeString();\nmsg.data = msg.payload;\n\nmsg.data = String(msg.data)\nmsg.data = msg.data.replace(\".\",\",\")\n\nmsg.payload = '\"' + t + '\"' + ',' + '\"' + msg.data + '\"'\nreturn msg;\n\n// Fonction pour remplacer un motif de string par un autre :\n// myString.replace(motif_a_remplacer, motif_de_remplacement);\n\n// https://www.analyste-programmeur.com/javascript/les-expressions-regulieres/javascript-replace\n\n// var t = new Date().toLocaleTimeString();\n// msg.data = msg.payload;\n// msg.payload = '\"' + t + '\"' + ',' + '\"' + String(msg.data) + '\"'\n// return msg;\n\n\n// var t = new Date().toLocaleString();\n// msg.data = msg.payload;\n// msg.payload = { \"Time\": t, \"Data\": msg.data };\n// return msg;\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 460,
"y": 1120,
"wires": [
[
"8770c7a35d5d25e0",
"5e93ee95ee3354b8"
]
]
},
{
"id": "8770c7a35d5d25e0",
"type": "debug",
"z": "3cde287fad7b8d2b",
"name": "debug 7",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 660,
"y": 1120,
"wires": []
},
{
"id": "5e93ee95ee3354b8",
"type": "file",
"z": "3cde287fad7b8d2b",
"name": "",
"filename": "/home/yonnel/Desktop/Essai.csv",
"filenameType": "str",
"appendNewline": true,
"createDir": false,
"overwriteFile": "false",
"encoding": "none",
"x": 710,
"y": 1200,
"wires": [
[]
]
},
{
"id": "57169c2e5fa91f35",
"type": "mqtt-broker",
"name": "DHT22 Sur Wemos",
"broker": "192.168.0.23",
"port": "1883",
"clientid": "",
"autoConnect": true,
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willPayload": "",
"willMsg": {},
"userProps": "",
"sessionExpiry": ""
}
]