2017.02.14 · 技術と道具

さくらのIoT Platform βを試してみる(その3)データの蓄積

前回の記事では、Arduinoで取得した気温と照明のセンサーデータをさくらのIoTでクラウドにアップして、WebSocketで見えるようにするところまで作業を進めました。

そのあと、MQTTも試してみたのですが、いまのところ、どうも上手く動きません・・・。
そこで、WebSocketで取得できるデータをIBM Bluemix上で動作しているNode-REDで処理してCloudantに蓄積するところまで、やってみました。

Bluemix上でNode-REDを動かす

BluemixではNode-REDが簡単に動作します。後でCloudant(NoSQLデータベース)も使うので、Internet of Things Platform Startarというボイラープレートで簡単に環境構築できます。

このボイラープレートでは、Node-REDの動作環境となるCloud Foundaryアプリの他、CloudantとWatson IoT Platformという2つのサービスが自動的に追加されます。

本当は、Watson IoT PlatformでMQTTを受信してCloudantに蓄積するという流れをNode-REDで作りたかったのですが、そこは断念・・・。

Cloudantに蓄積するNode-REDフロー

ざっと、こんな感じのフローをつくります。

arduino_sakuraというノードはWebSocketの受信です。msg.payloadにWebSocketで受信した内容(JSON)が入っているので、jsonノードでJavaScriptオブジェクトに変換します。
さくらのIoT PlatformのWebSocketは、実際の値がセットされているメッセージ以外に、接続維持用のメッセージも流れてくるので、switchノードで後者を捨てます。msg.payload.typeがchannelsは前者、keepaliveが後者のメッセージです。

convertファンクションが肝心です。下記のようなコードを書きます。

JAVASCRIPT
var temperature = null;
var light = null;

for (var i = 0; i < msg.payload.payload.channels.length; i++) {
  var data = msg.payload.payload.channels[i];
  if (data.channel == 0) {
    temperature = data.value;
    break;
  }
}

for (var i = 0; i < msg.payload.payload.channels.length; i++) {
  var data = msg.payload.payload.channels[i];
  if (data.channel == 1) {
    light = data.value;
    break;
  }
}

msg.payload = {
  "module": msg.payload.module,
  "datetime": msg.payload.payload.channels[0].datetime,
  "temperature": temperature,
  "light": light
}

return msg;

Arduino側からは、いくつかのデータをまとめてクラウドにアップする形になっているので、channelsが複数まとめて来るのですが、気温(channel:0)と照明(channel:1)の先頭だけを取得する形にしています。

最後のsakura_iotノードで、Cloudantに格納しています。

Bluemixのコンソール画面からアクセスできるCloudantダッシュボードを見ると、きちんとデータが格納されていることが分かります。

2017/02/14 19:00
← 3月10日のITCAセミナーに登壇します
IBM Data Science ExperienceでJu… →
井上 研一
経済産業省推進資格ITコーディネータとして中小企業のDX・AI活用の現場で伴走支援を行う。「ITCプロセスガイドライン4.0」および「中小企業向けAI活用ガイド」執筆メンバー。著書・講演多数。ITエンジニアとして25年以上の実務経験。AI導入の実務に10年以上携わる。自ら開発したAIサービス「Gen2Go」が北九州発!新商品創出事業の認定を受ける。2026年4月より北九州市立大学大学院マネジメント研究科の学生としての顔も持つ。

本サイトおよびブログに掲載している内容は、特に明記のない限り、井上研一個人の見解に基づくものです。所属・関与する組織、団体、企業、研究会等の公式見解を示すものではありません。