일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- maven-install
- programmers
- 로또의 최고 순위와 처저 순위
- 팰린드롬개수
- 6tunnel
- 데이터넘기기
- 방화벽정책
- on conflict
- 프로그래머스
- usb 포맷시스템
- 2022 KAKAO BLIND RECRUITMENT
- mybatis
- 관리자권한 문제
- 압축권한
- c드라이브에서 압축 안될때
- LV1
- 특정ip차단
- PostgreSQL
- 도커
- 특정ip접근
- java
- 파일이 너무 커서 안들어감
- 폴더압축 권한문제
- usb 공간있는데
- db
- 신고결과받기
- Docker
- ipv6->ipv4
- Linux
- c드라이브에서 압축
- Today
- Total
개발 기록일지
[node-red] MQTT 통신 하기 (1)노드레드 시작 본문
1)Node-red 를 왜 쓰지
회사에서 node-red 를 활용하여 서버와 클라이언트의 MQTT통신을 구현해
dashboard page를 만들어야 할 일이 있었다.
Node-red 는 IBM 에서 개발한 흐름 기반 프로그래밍 도구이다. 일반적인 IDE와는 달리
화면 왼쪽에 '팔레트' 라는 노드모음에서 'Node'를 선택해서 프로그램의 흐름대로 프로그래밍을 하는 것이다.
기본언어는 JavaScript가 제공되고 NodeJS를 설치해야한다.
NodeJS로 웹서비스 만드신분들은 훨씬 능숙하게 다루실듯...?
보통 하드웨어, IOT 의 통신을 통한 내부 이벤트 처리, 모니터링 등으로 많이 쓰인다.
소스의 흐름을 시각화 시켜서 보기 때문에 직관적으로 볼 수 있다는 점이 좋은 것 같다.
그리고 배포하는게 상당히 용이하다. 수정하고 우측 상단에 배포를 누르면 바로 배포가 된다.
또한 Dashboard 팔레트를 설치해서 노드의 흐름을 시각화 시켜서 바로 보여줄 수 있다는 점이 용이하다.
단점이라면 흐름대로 진행되기 때문에
어떤 이벤트가 발생하고 끝난다고 해서 그 값들이 사라지는게 아니라 다 남아있다. 그래서 동작 하나하나에 대한 처리를 다해줘야 한다는 점.
각 노드간 와이어링 ( 연결)을 통해서 이어지는데 점차 많아지면 화면이 너무 복잡해진다...그리고 변수 이런것들을 찾는게 좀 힘들다 .
비주얼이나 리눅스의 vi 편집기, 이클립스 등으로 코딩해오다가 갑자기 이런식으로 해보니 뭔가 적응이 더 안됐던거같다.
Node-red를 사용한 가장 큰 이유는 MQTT 통신 방식을 통해 원격 하드웨어,IOT 등을 다룬다고 가정했을때,
가장 효율적인 방식이며 쉽고 간단하게 구현할 수 있어서 사용했다.
2)MQTT 통신
MQTT 통신은 위 사진처럼 'MQTT Broker' 라는 중간 관리자를 통해 통신하는 방식이다
그리고 MQTT Broker에는 'Python' , 'C' , 'C++' , 'JAVA' 등 Topic 이라는 여러개의 채널이 있고
이 Topic 을 통해 메세지를 전송하고 받는 형식이다. 여기서 메세지란 토픽이라는 링크를 통해 전달되는 데이터를 의미한다.
쉽게말하면
- 바나나와 수박이 서로 메세지를 주고 받고 싶다고 가정하자, 이때 Topic을 통해서 서로 메세지를 주고 받을 수가 있다.
- Topic은 유투브 채널 같은 개념이며 , 바나나가 위 사진과 같이 'C'라는 Topic 채널을 구독(subscribe) 하면 'C' Topic 유투브 채널에 올라오는 영상을 볼 수가 있는 것이다.
- 사진과 같은 경우 수박이 'C' Topic으로 메세지를 전송(publish) , 바나나는 'C' Topic을 구독(subscribe) 하고 있으므로 수박의 메세지를 바나나에서 받을 수 있고, 바나나에서 전송한 메세지를 수박에서 받을 수가 있다.
- 포도는 'C++' Topic에 메세지를 Pub 하면 , 참외는 구독한 'C++' Topic 을 통해 포도의 메세지를 받는다
- 참외가 'JAVA' Topic에 메세지를 Pub 하면 , 포도는 구독한 'JAVA' Topic을 통해 참외의 메세지를 받는다.
이렇게 특정 토픽을 통해 클라이언트와 서버가 메세지를 주고 받는 형식으로 진행 된다.
메세지(msg)라는 객체는
기본적으로 _msgid , topic , payload 로 구성되어있다.
각각 전달되는 msg마다 가지고있는 번호 (msg._msgid)
메세지를 주고받는 토픽 ( msg.topic)
메세지의 내용 (msg.payload)
또한 msg객체에는 사용자가 속성(변수)을 지정해서 사용할 수도 있다.
다음과 같은 function node를 클릭해서
msg.topic="Control"
msg.value="ㅎㅎ";
msg.addr="서울 특별시";
msg.payload="아아아아아";
return msg;
이와 같이 return msg; 를 하면 msg객체안의 다음과 같은 속성을 가지고 가게 된다.
3)노드레드 팔레트 설정
노드레드를 설치하고
http://ip:port/ui 로 접속하게 되면 처음에는 우측에 기본적인 노드들만 존재한다
그래서 우측 상단 배포버튼 오른쪽 메뉴 속 팔렛트 관리를 통해 내게 필요한 팔렛트를 설치할 수 있따.
기본적으로 깔려있는 것들이 있고
dashboard에서 led 를 표현하기 위해 node-red-contrib-ui-led 팔렛트나
DB 와 연결하기위해 postgres 등을 추가로 설치할 수가 있다.
위 사진은 mqtt 브로커 통신으로 DB를 조회,업데이트 다시 특정 토픽으로 메세지를 전달하는 일부분이다.
mqtt node를 클릭하면 다음과 같이 토픽명과 mqtt 서버의 주소,포트, id,pw, tls 설정등을 할 수 가 있다.
작업 일부분 사진처럼 mqtt노드는
mqtt in / mqtt out 으로 나뉘어져 있고
토픽을 구독할때는 mqtt in // 토픽에게 메세지를 전송(publish)할때는 mqtt out 노드를 사용한다
참고로 위 사진처럼 mqtt in의 토픽이 HBEAT_BN/# 인 경우
HBEAT_BN/123, HBEAT_BN/234, HBEAT_BN/ㅎㅎㅎ,....
이런식으로 HBEAT_BN 으로 시작하는 모든 토픽을 구독하겠다는 뜻이다.
위와 같은 토픽들이 들어오면 사진과 같은 동작들을 수행하게 되는 것이다.