반응형

이번 게시글은 아래 지난 게시글 핵심노드 설명 3편에 이은 설명입니다.  아래 게시글 링크를 먼저 참고해 주세요.

【Node-RED #④】노드-레드! 핵심노드 설명 3편/ Core Node Description! #3

①  trigger 노드

 trigger 노드는 메시지를 일정한 규칙에 따라 전달할 수 있도록 해주는 노드인데요, 예를 들면, 메시지에 따라서 일정간격으로 메시지를 전송하도록 하거나, 특정 메시지를 수신하면 홀드 시키거나 하는 등 이벤트를 줄 수 있는 노드입니다.   또한 시스템에서 무한루프에 빠져 있는 경우와 같은 오류등을 감지해 줄 수 있는 와치독 타이머(Watchdog timer)와 같은 역할도 줄 수 있습니다.    정리하자면 노드 플로우에서 흐름을 멈추거나 다시 트리거 시켜주는 등 제어가 가능한 노드라고 볼 수 있습니다. 

그럼, 실습을 위해 아래처럼 노드를 구성해 주세요.

 

1) "타임스탬프" (인젝트) 노드의 설정화면입니다. 

 

2) "STOP" 인젝트 노드의 설정화면입니다.

 

3) "RESET" 인젝트 노드의 설정화면입니다.

 

4) "trigger"노드의 설정화면입니다. 

송신데이터에는 "1"을 적어 놓았는데요,  전달하고 싶은 특정 문자를 적거나하면 되고,  초기화 조건에 "stop"을 적어 놓았는데요,   "STOP" 인젝션을 누를 때 "STOP" 메시지가 전달되면 트리거를 멈추도록 하고 있습니다. 

그럼, 여기서 아래처럼 trigger노드의 속성을 수정해 주면, 3초 간격으로 송신데이터"1"을 반복 송신하게 됩니다. 

 

이때, STOP 인젝터를 클릭하게 되면, 아래처럼 trigger가 멈추게 되고 디버그 창으로도 더 이상 메시지가 전달되지 않게 됩니다.

여기서 기본 트리거 간격을 1초로 바꾸고,   2초 간격의 Trigger 타임스탬프를 하나 더 추가해 볼게요.   그래서 1초 간격으로 트리거 되는 상태에서 추가한 인젝터를 누르게 되면, 2초 간격으로 트리거 시킬 수도 있습니다. 

그리고, 각각의 속성을 아래처럼 입력하거나 수정해 주세요. 

실행해 보면,  처음 기본 "타임스탬프"를 클릭하면 trigger에 설정한 대로 1초 간격으로 "1"이라는 메시지가 디버그창으로 전달되다가, "Trigger 2 sec"인젝터를 클릭하는 순간 2초 간격으로 "1"메시지가 전달되는 것을 볼 수 있습니다. 

 

②  join 노드

 Join 노드는 수신된 메시지들을 지정된 규칙에 따라 하나의 메시지로 변환해 주는 기능 등을 수행합니다. 
우선 Join 노드의 기능알 알아보기에 앞서 직전 게시글에서 다루었던 Split 노드로 메시지를 분리해보고 나서, 여러 개의 메시지가 수신될 때 이를 합쳐서 출력해 보도록 하겠습니다. 

그럼, 아래처럼 Sprit 노드가 포함된 플로우를 구성해 주세요. 

타임스탬프 노드는 아래처럼 해주세요.

다음, Split 노드 속성창인데요,  아래 보시면 '분할 항목'에 아무것도 입력 되어 있지 않은 것처럼 보이지만, "공백 한 칸"이 입력되어 있습니다. 주의해 주세요.  만약 공백을 입력하지 않을 경우, 메시지는 Split 되지 않고 모두 이어져서 하나로 전달 됩니다.

그리고서 배포 후 타임스탬프를 클릭해서 실행하면 아래처럼, 한 줄의 메시지가 각각 분리된 것을 볼 수 있습니다. 

다음으로, 아래처럼, Join노드를 구성해 주시는데요, 다섯 개의 타임스탬프 입력을 Join 노드에 연결한 플로우를 구성해주세요,  각각의 타임스탬프에 있는 메시지를 합쳐서 디버그창으로 출력해 볼게요.

아래는, Data1의 세부 속성 모습인데요,  Data2~Data5의 속성도 동일한 형태로 설정해 주세요. 

다음으로, Join 노드의 속성을 아래와 같이 설정해 주세요.    동작부분에는 수동으로 해주시고, 출력 부분에는 문자열로 선택합니다.  다음으로 연결문자 항목에는 아무 입력도 없을 경우에는 메시지들이 모두 붙어서 출력되며, 공백, '콤머', '+' 기호 등등 메시지들을 결합하고자 하는 문자가 있을 경우 입력하면 됩니다.   그리고 "지정수의 메시지파트를 수신 후" 항목에 5를 입력하여, 5개의 타임스탬프 메시지가 입력되면 자동으로 출력되도록 설정을 하였습니다.   그리고  "첫 메시지수신후부터 타임아웃 후" 항목에 10을 입력하거나 하게 되면, 첫 메시지를 수신하고 10초가 지날 경우 자동으로 입력된 메시지가 출력되는 설정입니다. 

이제 무입력, 공백 한칸, 콤머, + , /  으로 연결문자를 각각 입력해서 결과를 보면 아래처럼 결합되어 출력되는 것을 볼 수 있습니다.  물론 타임스탬프 누르는 순서를 바꾸면 출력도 바뀐 순서대로 결합되어 나오게 됩니다. 

그럼, 다음으로 Join 노드의 속성 중에서 "출력"부분의 항목을 아래처럼 "배열"로 변경해서 실행해 보세요. 

이렇게 하고, 결과를 출력해 보면, 아래처럼 데이터가 배열 형태로 결합되어 저장되는 것을 확인할 수 있습니다. 

그리고 마지막으로, 아래 Join노드의 속성에서 "출력"항목의 선택을 "key/value오브젝트"로 선택해 볼게요. 
이렇게 할 경우 사용할 값 항목에 보면 "msg.topic"으로 되어 있는데요, 이에 따라, 타임스탬프(inject) 노드에 있는 msg.topic 항목에다가, 예를 들어, 숫자 키값을 1~5 각각 입력해 주면,  key/value 오브젝트로 인식되어 결합처리해 줄 수 있게 됩니다. 

그럼, 타임스탬프를 순서대로 클릭해서 출력을 확인해 보면 아래처럼, key/value 오브젝트 형태로 데이터가 결합 정리되어 출력되는 것을 확인할 수 있습니다. 

 

반응형