NodeRed

node-red의 Flow안에서 node간에 함수를 공유 하여 사용법

아이티제어1998 2022. 2. 23. 05:44

 Func1 이라는 object를  함수가 들어간 object를 Func1설정OnStart  라는 노드에 On Start에 선언하함.Flow안에서 사용을 위새
24Hors 노드에 Flow1을 얻어 Func 로   얻어 콘솔로그 화면에 출력

 

node-red 실행 콘솔에서  Func.timeConverter() 결과 정상작동 확인   

 

 

//node Context 
let d = context.get("myData");
context.set("myData", {color: "red"});

// Flow Context
let s = flow.get("sensor");
flow.set("sensor",1234);

// global context
let a = global.get("active");
global.set("active",false);


// Get 'MyObject' from Flow Context
var myObject = flow.get("myObject");


myObject.color= "red"; //modify it 
flow.set("myObject", myObject); // save it back to context


//get myObject from Flow context 

var myObject = flow.get("myObject");
//Clone it to allow local changes 
msg.payload = RED.util.cloneMessage(myObject);

//modify and send it
msg.payload.color="red";
return msg;

예제) Func1 라는 오브젝트를  Flow안에서 Node간에 공유하여 사용해보자.

아래코드는 잘 동작한다.

// Code added here will be run once
// whenever the node is started.
Func1 = {

    GrantAccess : function (haystack, arr) {
                return arr.some(function (v) {
                return haystack.indexOf(v) >= 0;
                })},
            pad : function (num, size) {
                var s = num+"";
                while (s.length < size) s = "0" + s;
                return s;
                },
    DaysBetween : function (date1, date2) {
                var one_day=1000*60*60*24;
                var date1_ms = date1.getTime();
                var date2_ms = date2.getTime();
                var difference_ms = date2_ms - date1_ms;
                difference_ms = Math.round(difference_ms/1000,3);
                var mseconds = difference_ms % 1000;
                var seconds = Math.floor(difference_ms % 60);
                difference_ms = difference_ms/60; 
                var minutes = Math.floor(difference_ms % 60);
                difference_ms = difference_ms/60; 
                var hours = Math.floor(difference_ms % 24);  
                var days = Math.floor(difference_ms/24);
                return Func.pad(minutes,2) + ':' + Func.pad(seconds,2) + '.' + Func.pad(mseconds,3);
                },
                
    timeConverter: function( e ) { 
            var date = new Date(e*1.000);
            var year = date.getFullYear();
            var month = ("0"+(date.getMonth()+1)).substr(-2);
            var day = ("0"+date.getDate()).substr(-2);
            var hour = ("0"+date.getHours()).substr(-2);
            var minutes = ("0"+date.getMinutes()).substr(-2);
            var seconds = ("0"+date.getSeconds()).substr(-2);
            return year+"-"+month+"-"+day+" "+hour+":"+minutes+":"+seconds;
            } 
    }

flow.set('Func1', Func1); //flow 내 공유 선언
//node.log("로딩완료 env.get('NR_NODE_NAME')"+ env.get('NR_NODE_NAME') );
node.status({fill:"green",shape:"dot",text:"Func1 Functions Loaded"});