[Node-RED] 비동기로 흐르는 별도의 JSON을 하나로 정리

2745 단어 node-red
Node-RED Advent Calendar 2018의 22일째 기사입니다.

비동기로 온 JSON을 하나로 정리하는 이야기를 합니다.
「그런 것 당연하겠지」라는 츳코미가 들려올 것 같습니다만, 개인적으로 수수하게 고민하고, 꽤 심플하게 해결할 수 있었기 때문에 기사로 했습니다. 누군가 뭔가 도움이되면 다행입니다.

동기 : 별도의 API 결과를 집계하고 싶었다 (Wio Node)



Wio Node라고 하는 Grove(찌르는 것만으로 사용할 수 있는 센서)를 찌르는 것만으로 간단하게 API를 세울 수 있는 모듈이 있어, 스위치 사이언스에서 사 보았습니다.
Wio Node에 대해서는 이 기사가 매우 도움이 됩니다.
「Wio Node」로 납땜 없는 전자 공작! 온도계 제작으로 IoT 시작의 한 걸음
Wio Node가 있으면 납땜은 물론 RaspberryPi도 브레드 보드도 필요 없습니다. 집의 라우터와 스마트 폰이 있으면 스마트 폰 앱으로 설정하는 것만으로 API가 세워져 버립니다!

거기서 Wio Node에 온습도 기압 센서와 더스트 센서를 각각 연결해 방의 쾌적함을 얻을 수 있는 API를 만들기로 했습니다. (왼쪽에 온습도 센서, 오른쪽에 먼지 센서를 연결했습니다.)

이제 집에서 원격으로 에어컨 스위치를 넣었을 때 지금 이것으로 어느 정도 방이 있었는지 즉시 확인할 수 있습니다. 또 DB에 축적해 미래 예측을 하면 계절의 변화에 ​​걸리기 십상인 감기도 사전에 예방할 수 있을지도 모릅니다.


그러나 WioNode에서 모든 센서 정보를 얻기 위해서는 온도, 습도, 기압, 고도, 먼지 각각 다른 API를 발행해야 합니다.
이것을 전부 모아 와서 1개의 JSON으로 해 돌려주지 않을까, 라고 생각한 것이 발단입니다.

실제로 집계하려는 흐름은 다음과 같습니다.

JSON이 흩어져 돌아온다...

결론 JOIN 노드에서 JSON을 결합할 수 있음



「function 노드로 만나서 타이머를 만들어… 글로벌 변수에 쓰면서 모이면 정리해… .
JOIN 노드는, 배열등을 SPLIT 노드로 분할해, 가공한 후에 JOIN 노드로 되돌리는, 라고 하는 것으로 자주(잘) 이용되고 있습니다. 이 JOIN 노드의 설정을 조금 바꾸는 것만으로 JSON 집계를 쉽게 할 수있었습니다.

엉망이었던 JSON이 하나에 모였습니다.

설정 화면



이것이 JOIN 노드의 설정 화면입니다.

"Mode"가 기본적으로 "Automatic"입니다. SPLIT 노드와 조합할 때는 그대로 좋지만, 이번은 "manual"로 변경합니다.
또, 「to Create」가 디폴트에서는 「a String」으로 되어 있습니다만, 이것을 「a merged Object」로 변경합니다.
「After a number of message parts」는 조합하고 싶은 JSON의 수(이번은 5개의 센서),
"After a timeout following a first message"는 JOIN을 포기하는 시간을 설정합니다. (Wio Node에서는 그렇게 기다리는 일은 없지만 만약을 위해 5초 정도로 해 두었습니다.)

이것에 의해, 하나의 JSON에 정리되었으므로, 예를 들면 불쾌 지수(온도와 습도로부터 구해지는 수치) 등 센서끼리의 계산 뒤의 노드에서 즉시 할 수 있었습니다. 또, 이 JSON을 DB에 넣으면 검색 추출도 편해집니다.

이번 예는 WioNode의 서버로부터 취한 복수 센서의 집약이었습니다만, BLE나 GPIO측에서 취한 센서치의 집약이나, 기상 정보등 다른 외부의 API의 집약에도 사용할 수 있을 것 같습니다.

좋은 웹페이지 즐겨찾기