2017年3月8日水曜日

Nodejs + ws で MODE に WebSocket 接続してみる

概要

Nodejs の ws を使って MODE の WebSocket 機能を使ってみました
Nodejs の WebSocket ライブラリを他にも Socket.io や Websocket がありますが、今回は ws を使ってみました
理由は MODE が提供している Nodejs の SDK でも使っているからです

環境

  • CentOS 6.7 Final
  • Nodejs 4.2.5
  • Npm 2.14.12
  • ws 1.1.0

ws のインストール

npm コマンドを使って一発です

  • npm install ws

でカレントの npm_moduls 配下にインストールされます

WebSocket クライアント

今回はサーバ側は MODE を使うので、MODE に対して接続する WebSocket クライアントを実装します

  • vim sample_ws_client.js
var WebSocket = require('ws');
var deviceId = '000';
var endpoint = 'wss://api.tinkermode.com:443/devices/' + deviceId + '/command';
var deviceKey = 'v1.xxxxxxxxxx==.xxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
var ws = new WebSocket(endpoint, {
    headers: {
        "Authorization": 'ModeCloud ' + deviceKey
    }
});
ws.on('open', function() {
    var json = {};
    json.action = 'test';
    json.parameters = {'p':1};
    console.log(JSON.stringify(json));
});
ws.on('message', function incoming(message) {
    console.log('received: %s', message);
});

deviceId と deviceKey は認証に必要なので MODE のデバイス一覧から取得してください
nodejs_ws_confirm_device_info.png

  • node sample_ws_client.js

で実行します
MODE が提供する Lumos というアプリがあればそこからコマンドを送信すると以下のように送信されたコマンドを受信することができます

$ node sample_ws.js
received: {“action”:”change”,”parameters”:{“switch”:0}}
received: {“action”:”change”,”parameters”:{“switch”:1}}

最後に

ws を使って Nodejs から MODE に Websocket を張ってみました

SDK を使えばこの辺は何も意識せずにやってくれるのですが個人的に裏側がどういう仕組や実装で動作しているのかわからないと気持ち悪いです
なので、今回は独自の WebSocket クライアントを実装してみました

一応これで WebSocket の接続に必要な情報はわかったので他の言語やプラットフォームでも応用して接続できると思います

0 件のコメント:

コメントを投稿