Codes Javascript Node-Red
Payload est affecté à un nouvel objet[1] de la classe Date. Réf : act-3-NR : Introduction à Nodered | 1 msg.payload = new Date(); 2 return msg; |
1 [{"id":"537d61e8a0940742","type":"debug","z":"6d04155ec6875301","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":570,"y":120,"wires":[]},{"id":"36bc8c8f2aa708f9","type":"inject","z":"6d04155ec6875301","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"DATE_HR","payloadType":"str","x":240,"y":120,"wires":[["319f996611345b13"]]},{"id":"319f996611345b13","type":"function","z":"6d04155ec6875301","name":"","func":"msg.payload = new Date();\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":120,"wires":[["537d61e8a0940742"]]},{"id":"05784e1d0c884d6b","type":"function","z":"6d04155ec6875301","name":"Format date","func":"const dateNow = {'payload': formatDate()}\n\nfunction formatDate(){\n//29 Aug 2021 06:15:36\n let date = new Date();\n let year = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(date);\n let month = new Intl.DateTimeFormat('en', { month: 'short' }).format(date);\n let day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date);\n let time = date.toLocaleTimeString('en-US', { hour12: false });\n return `${day} ${month} ${year} ${time}`;\n}\n\nreturn dateNow","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":410,"y":160,"wires":[["146b0c5a410803f8"]]},{"id":"5d65b0583e8c1f67","type":"inject","z":"6d04155ec6875301","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":230,"y":160,"wires":[["05784e1d0c884d6b"]]},{"id":"146b0c5a410803f8","type":"ui_date_picker","z":"6d04155ec6875301","name":"","label":"Date Système","group":"181382cbbcf32e5c","order":2,"width":0,"height":0,"passthru":true,"topic":"topic","topicType":"msg","className":"","x":580,"y":160,"wires":[[]]},{"id":"1cff427604f77540","type":"comment","z":"6d04155ec6875301","name":"0001","info":"","x":80,"y":140,"wires":[]},{"id":"181382cbbcf32e5c","type":"ui_group","name":"Act","tab":"9405bf6d154d5c2c","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"9405bf6d154d5c2c","type":"ui_tab","name":"Test","icon":"dashboard","disabled":false,"hidden":false}] |
NR --> Pour décomposer la date en données numériques ( Années, Mois, Jour, Heure)⚓
const dateNow = {'payload': formatDate()}
function formatDate(){
//29 Aug 2021 06:15:36
let date = new Date();
let year = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(date);
let month = new Intl.DateTimeFormat('en', { month: 'short' }).format(date);
let day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date);
let time = date.toLocaleTimeString('en-US', { hour12: false });
return `${day} ${month} ${year} ${time}`;
}
return dateNow
Payload contient l'objet renvoyé par une API. Il faut connaître la(ou les) propriété(s) qui nous intéressent : ici, on récupère la localisation et la température souhaitée. | 1 var T; 2 T=msg.payload.tempc; 3 msg.payload ="La température à "+ msg.payload.location+ " est de "+T+" °C" 4 return msg; |
1 [{"id":"c2433b8572e062a5","type":"openweathermap","z":"6d04155ec6875301","name":"METEO","wtype":"current","lon":"","lat":"","city":"VITTEL","country":"FRANCE","language":"fr","x":320,"y":280,"wires":[["096d38f6c501abb9"]]},{"id":"278cf51491c434b4","type":"debug","z":"6d04155ec6875301","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":690,"y":240,"wires":[]},{"id":"ad64989c63b9584e","type":"inject","z":"6d04155ec6875301","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"METEO VITTEL","payloadType":"str","x":140,"y":280,"wires":[["c2433b8572e062a5"]]},{"id":"096d38f6c501abb9","type":"function","z":"6d04155ec6875301","name":"Température","func":"var T;\nT=msg.payload.tempc;\nmsg.payload =\"La température à \"+ msg.payload.location+ \" est de \"+T+\" °C\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":280,"wires":[["278cf51491c434b4","031cedc1753159d9","a66862d310b132ee"]]},{"id":"031cedc1753159d9","type":"mqtt out","z":"6d04155ec6875301","name":"","topic":"T/EXT/VITTEL","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"fc1577b1b9baca3d","x":700,"y":320,"wires":[]},{"id":"a66862d310b132ee","type":"ui_text","z":"6d04155ec6875301","group":"a55e87cef97c0219","order":2,"width":0,"height":0,"name":"","label":"Site OpenWeather","format":"{{msg.payload}}","layout":"col-center","className":"","x":710,"y":280,"wires":[]},{"id":"5d16067077c9400b","type":"comment","z":"6d04155ec6875301","name":"0002","info":"","x":90,"y":240,"wires":[]},{"id":"fc1577b1b9baca3d","type":"mqtt-broker","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""},{"id":"a55e87cef97c0219","type":"ui_group","name":"Vittel","tab":"eaf8c28aa8f44ccf","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"eaf8c28aa8f44ccf","type":"ui_tab","name":"Temp.EXT","icon":"dashboard","disabled":false,"hidden":false}] |
Payload contient la température en °C que l'on affecte à une variable C qui, de fait sera un numérique, car dans le noeud qui précède la fonction, il a été décidé que payload était un nombre. On calcule les dégrés Fahrenheit. On compose le texte que l'on va transmettre dans le flux en réaffectant la variable msg.payload. | 1 var C = msg.payload ; 2 var F = C*1.8 + 32; 3 msg.payload = C + "°C = "+F.toString()+ "°F"; 4 return msg; |
1 [{"id":"4e970ac7f7ca5aa3","type":"inject","z":"6d04155ec6875301","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"CONV_C_TO_F","payloadType":"str","x":160,"y":420,"wires":[["ece27207c956d81a"]]},{"id":"ece27207c956d81a","type":"change","z":"6d04155ec6875301","name":"Affecter payload à 10","rules":[{"t":"set","p":"payload","pt":"msg","to":"10","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":420,"wires":[["52018e40a57f8975"]]},{"id":"52018e40a57f8975","type":"function","z":"6d04155ec6875301","name":"Conversion °C en °F","func":"var F = msg.payload ;\nvar C = F*1.8 + 32;\nmsg.payload = F + \"°C = \"+C.toString()+ \"°F\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":420,"wires":[["faaa747676b35c1f","8fd16fd4d835a00f","d8c58323c9857eeb"]]},{"id":"faaa747676b35c1f","type":"rpi-sensehat out","z":"6d04155ec6875301","name":"","x":790,"y":460,"wires":[]},{"id":"8fd16fd4d835a00f","type":"ui_text","z":"6d04155ec6875301","group":"181382cbbcf32e5c","order":3,"width":0,"height":0,"name":"","label":"Conversion T°","format":"{{msg.payload}}","layout":"row-spread","className":"","x":800,"y":420,"wires":[]},{"id":"d8c58323c9857eeb","type":"debug","z":"6d04155ec6875301","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":790,"y":380,"wires":[]},{"id":"9cd2bb2bc96d94c1","type":"comment","z":"6d04155ec6875301","name":"0003","info":"","x":90,"y":380,"wires":[]},{"id":"181382cbbcf32e5c","type":"ui_group","name":"Act","tab":"9405bf6d154d5c2c","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"9405bf6d154d5c2c","type":"ui_tab","name":"Test","icon":"dashboard","disabled":false,"hidden":false}] |
Nous allons gérer une consigne de température qui sera mémorisé globalement au niveau de node-red. Cela signifie que cette valeur sera disponible dans tous les FLOW. Les autres choix sont de conserver une variable dite de contexte au niveau du FLOW courant ou bien au niveau du NODE. Cette consigne sera ensuite mise à profit pour décider d'une action en fonction de la comparaison entre une valeur mesurée et la valeur dite de consigne. Ensuite, il vous appartiendra de vous entraîner en réalisant une conversion de température paramétrable. | |
On peut remplacer les noeuds 1 // La consigne affectée à global.consigne dans le NODE Set peut-être lue en js par global.get('consigne') 2 if (msg.payload > global.get('consigne') { 3 msg.payload = "SUP A 20"; 4 } else { 5 msg.payload = ""; 6 } 7 return msg; | |
1 [{"id":"4e970ac7f7ca5aa3","type":"inject","z":"6d04155ec6875301","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"CONV_C_TO_F","payloadType":"str","x":160,"y":420,"wires":[["ece27207c956d81a"]]},{"id":"ece27207c956d81a","type":"change","z":"6d04155ec6875301","name":"Affecter payload à 10","rules":[{"t":"set","p":"payload","pt":"msg","to":"10","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":420,"wires":[["52018e40a57f8975"]]},{"id":"52018e40a57f8975","type":"function","z":"6d04155ec6875301","name":"Conversion °C en °F","func":"var F = msg.payload ;\nvar C = F*1.8 + 32;\nmsg.payload = F + \"°C = \"+C.toString()+ \"°F\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":420,"wires":[["faaa747676b35c1f","8fd16fd4d835a00f","d8c58323c9857eeb"]]},{"id":"faaa747676b35c1f","type":"rpi-sensehat out","z":"6d04155ec6875301","name":"","x":790,"y":460,"wires":[]},{"id":"8fd16fd4d835a00f","type":"ui_text","z":"6d04155ec6875301","group":"181382cbbcf32e5c","order":3,"width":0,"height":0,"name":"","label":"Conversion T°","format":"{{msg.payload}}","layout":"row-spread","className":"","x":800,"y":420,"wires":[]},{"id":"d8c58323c9857eeb","type":"debug","z":"6d04155ec6875301","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":790,"y":380,"wires":[]},{"id":"9cd2bb2bc96d94c1","type":"comment","z":"6d04155ec6875301","name":"0003","info":"","x":90,"y":380,"wires":[]},{"id":"181382cbbcf32e5c","type":"ui_group","name":"Act","tab":"9405bf6d154d5c2c","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"9405bf6d154d5c2c","type":"ui_tab","name":"Test","icon":"dashboard","disabled":false,"hidden":false}] |