IOTOWN에 데이터를 표현하기 위해서는 단말 장치에서 서버로 일정한 포맷의 데이터를 전송하여야 합니다. 전송의 방법 및 일부 포맷은 사용하는 무선, 유선 등 통신 방식의 종류에 따라 달라질 수 있습니다.
JSON 객체처럼
사용자 전용의 포맷을 사용하기 위해서는 전송하는 데이터의 첫번째 바이트를
사용자 전용 포맷 핸들러는 IOTOWN 설치경로의
exports.dataHandler = (data, node, gateway) => { let parsed = {}; /* Please fill the user customized code here. */ /* Return values - null: Invalid (or duplicate) data. Will be discarded. - object: Translated data */ return parsed; };
위 핸들러로 전달되는 파라미터는 다음과 같습니다.
{ node_id: "String", node_type: "String", node_desc: "String", created_at: "Date", bootup_time: "Date", last_data: { ... /* 마지막으로 수신한 데이터 */ }, last_timestamp: "Date", }
{ group_id: "String", gateway_id: "String", gateway_type: "String", gateway_desc: "String", gateway_eui: "String", created_at: "Date", bootup_time: "Date", recent_act: "Date", };
위 파라미터들을 이용하여 변환된 결과를 object 형태로 반환하면 됩니다. 변환된 object는 Dashboard 상의 데이터 시각화에 사용되고, DB에도 그대로 저장됩니다. 변환시 object의 key 이름은 자유롭게 사용이 가능하지만, 가급적 자동으로 추가되는 metadata의 key를 피해야 합니다. Metadata와 동일한 key 이름을 사용시 사용자가 지정한 값이 metadata의 값으로 덮어써질 수 있습니다.
만약,
예를 들어, 첫번째 octet을
exports.dataHandler = (data, node, gateway) => { let lastData = Buffer.from(node.last_data.raw, 'base64'); if (data[1] == lastData[1]) { /* Filter-out duplicate message */ return null; } let parsed = {}; /* Do something. */ return parsed; };
앞의 표현 문법에 어긋나 정상적인 데이터 표현이 불가능한 경우, 다음과 같이 IOTOWN에 표현 및 저장됩니다.
{ "raw":base64 encoded raw data };
위의 base64 encoded raw data는 IOTOWN에서 수신한 데이터의 base64 인코딩된 값을 의미합니다. 이 값은 라인 차트, 게이지 등 위젯 등으로 표현이 불가능하며, 사용자가 [GET] storage 등의 API를 통해 꺼내가서 base64 디코드 하여 사용할 수 있습니다.
LoRaWAN 단말장치는 우선 OTAA(Over-the-Air Actication)가 성공적으로 완료되어야 합니다. 이후 2. Data 표현 문법과
동일하게 IOTOWN으로 데이터를 전송하면 됩니다. Nol.A-SDK를 사용한 LoRaWAN 데이터 전송은
IOTOWN에서 LoRaWAN 프레임을 수신하면 다음과 같이 추가적인 메타데이터들이 함께 서버에 등록됩니다. 또한 Open API를 통한 callback으로도 전달됩니다.
{ "key1": value1, "key2": value2, ... "raw": 수신한 데이터 (base64 encoded string), "fCnt": 수신한 프레임의 fCntUp 값 (integer), "fPort": 수신한 프레임의 port number (integer), "rssi": 수신한 프레임의 신호 세기(dB) (integer), "snr": 수신한 프레임의 Signal-to-Noise Ratio (float), "gateway" : [ { "mac": 프레임을 수신한 게이트웨이의 EUI-64 (hexadecimal string, 예: '70B3D5DF10000001'), "rssi": 프레임의 수신 신호세기 (integer), "snr": 수신 프레임의 Signal-to-Noise Ratio (float) }, ... { "mac": 프레임을 수신한 게이트웨이의 EUI-64 (hexadecimal string, 예: '70B3D5DF10000001'), "rssi": 프레임의 수신 신호세기 (integer), "snr": 수신 프레임의 Signal-to-Noise Ratio (float) } ], "freq": 사용된 채널(단위: Hz, integer), "mod": 사용된 변복조 방식('LoRa' 또는 'FSK', string), "bw": 사용된 대역폭(단위: kHz, integer), "sf": 사용된 Spreading Factor (LoRa only, integer), "cr": 사용된 Coding Rate (LoRa only, string), "adr": 송신한 장치에서의 ADR (adaptive data rate) 사용 여부 (boolean), "bps": 사용된 bitrate (FSK only, integer) }
TCP/IP 기반 단말장치는 MQTTs를 통해 IOTOWN으로 데이터를 전송할 수 있습니다.
MQTT로 데이터 전송을 하기 위해서는 먼저 IOTOWN과 단말간 접속이 이뤄져야 합니다. 접속에 필요한 파라미터는 다음과 같습니다.
IOTOWN에서 사용하는 publish 용 topics는 다음과 같습니다.
메시지 종류 | Topic name |
---|---|
Device Boot |
iotown/tx/{Group ID}/device/{Device ID}/boot 또는iotown/tx/{user name}/device/{Device ID}/boot
|
Device Data |
iotown/tx/{Group ID}/device/{Device ID}/data 또는iotown/tx/{user name}/device/{Device ID}/data
|
Group ID
확인은 사용자 정보에서 가능합니다.정상적으로 접속이 완료된 후에는 Device Boot topic으로 메시지를 발생합니다. 내용은 비어있어도 상관이 없습니다.
이후 데이터를 전송할 때에는 Device Data topic으로 메시지를 발행합니다. 내용의 포맷은 Format을 참고합니다.
TCP/IP 기반 단말장치는 HTTPs 기반 RESTful API를 통해 IOTOWN으로 데이터를 전송할 수 있습니다.
데이터 전송을 위한 API는 [POST] data 입니다. 자세한 내용은 해당 문서를 참고하세요.