Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@FukMo10

Wio Node SDKをWebSocket対応した

More than 3 years have passed since last update.

※この記事はNIFTY Advent Calendar 8日目の記事です。

前回の記事のFuture WorkだったWebSocket接続に対応しました。
これで、センサーの値の変化をリアルタイムで検知して、イベントを発火することができるようになりました!

リポジトリ:https://github.com/fuku2015/wio_node

(Wio Nodeそのものについてや、基本的な導入方法については、先に前回の記事をご覧ください。=> Wio NodeのSDKをNode.jsで書いてみた )

使い方

WebSocketはセンサーそれぞれではなく、Wio Node本体と一本のコネクションをはるので、モジュールのインスタンスからconnectWSメソッドを生やします。
引数として、メッセージ受信時のハンドラを設定します。

"use strict"

const token = "YOUR_TOKEN";

const Wio = require("./lib/wio_node");
const wio = new Wio(token);

wio.connectWS(function(err, res){
  if(err) console.log(err);
  console.log(res);
});

これで、メッセージが届くたびに、ハンドラが実行されます。
メッセージフォーマットは以下の通りです。

{event: "EVENT_NAME", port: PORT_NUMBER} // PORT_NUMBER -> 0 or 1

生のフォーマットだとJSON形式でもないし、ポート情報も0/1とかPORT0/PORT1とかじゃなかったので、大分使い勝手が良くなったハズ。

活用例

片方のセンサーの値の変化によって、もう片方のセンサーの値をリアルタイムに書き換えるような処理も簡単に書けるようになりました!(APIでサポートしてそうですが、実はされてない。)

以下のサンプルでは、PORT0にLED、PORT1にボタンやタッチセンサーを接続すると、プッシュやタッチするたびにLEDがON/OFFするようになっています。

■ Wio Linkの設定
PORT0: GenericDigitalOutput
PORT1: GenericDigitalInput

"use strict"

const token = "YOUR_TOKEN";

const Wio = require("./lib/wio_node");
const wio = new Wio(token);
const digiOut = new wio.GenericDOut(0);

var onoff = 0;
wio.connectWS(function(err, res){
  if(err) console.log(err);
  if(res.event === "input_rise" && res.port === 1){
    onoff = 1 - onoff;
  }
  digiOut.send(onoff);
});

これはあくまで一例です。
他のサービスやシステムと組みあわせて、人感センサーが反応したらプッシュ通知でアラートがくるとか、温度センサーが一定以下になったら暖房が入るなどといった使い方ももちろんできます。
(SDK使って作ってみた系の記事も追って書くつもりです。)

感想

書き出す前はもう少しめんどくさい使い勝手になるかと思ってましたが、意外とシンプルでいい感じになりました。
リアルタイムに値の変化を取れると、やっぱり動いてる感があってテンション上がりますね!
APIたたくよりもこっちのほうを先に実装すべきだった気がします。

WebSocket接続ができた勢いでnpm公開をしそうになりましたが、検索して出てきたモジュールがこのクオリティだったら、自分ならそっ閉じするなぁと思ったので、イケてるコードとまではいかなくても、せめてテストとかバリデーションとかをちゃんとやってからにしようと思います。
(npmで使えないとなかなか使ってもらえないので、年内にさっさとやろう…。)

明日は@uochanさんです!お楽しみに!

6
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
FukMo10
データ活用支援業をしつつ、エンジニアリングマネジメント界隈をうろうろしています。
fjct
クラウド・IoT 関連サービスを開発・提供している企業です。(こちらは、富士通クラウドテクノロジーズの有志にて運営しております。)

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?