node.jsによるデータ送受信
OpenBlocks IoT BX1とインテルEdison Kitでnode.jsを使用してリアルタイムデータ送受信を行うためにMQTTを使用します。
MQTTを使用することでデータ送信側がpublisher(パブリッシャ)、データ受信側がsubscriber(サブスクライバ)となり、データはTopic(トピック)として送受信されます。
publisherはデータをTopicを指定して送信します。subscriberは自信が受信したいデータのTopicを予めsubscribe(サブスクライブ)しておくことで、送信されたタイミングでリアルタイムで受信できます。
データ本体のPayloadのフォーマットはMQTTでは規定されていませんが、データ量を最適化するためにはバイナリでデータ送信が出来るMessagePackを使用します。MessagePackは様々な言語・デバイスで動作できるようにここでライブラリが提供されています。
・ データ送信例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var opts = { username:username, password:password, rejectUnauthorized : false, certPath: SECURE_CERT, encoding: 'binary' }; var client = mqtt.createSecureClient(connect_port, connect_host, opts); client.publish(topic, msgpack.pack(data), {qos:1, messageId:seqid, retain:true}); // dataがMessagePackでエンコードされて送信される if (connectArchitect == false) { // エラー処理 } else { // 正常処理 } |
・データ受信例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var opts = { username:username, password:password, rejectUnauthorized : false, certPath: SECURE_CERT, encoding: 'binary' }; var client = mqtt.createSecureClient(connect_port, connect_host, opts); client.on('connect', function() { client.subscribe('topic/#'); }); client.on('message', function (topic, message) { var response = msgpack.unpack(message); // responseにMessagePackからデコードされたデータが入る }); |
データ送信・データ受信例ではMQTTサーバとの接続時にユーザアカウントでの認証およびデータフォーマットをバイナリで指定してTLS (SSL)通信で接続しています。