OSSでIoTプラットフォームを作ってみよう

2018年03月21日

  • ITインフラ
  • QNAP機能紹介
当記事は「オープンソースカンファレンス2017 Hamanako」で開催したセミナー内容の抜粋です。
Docker上でOSSアプリのコンテナを組み合わせて、プラットフォームを構築してみましょう。

デモンストレーションの環境

センサーデータ表示 ダッシュボード

Raspberry piから送ったセンサーデータをブラウザへダッシュボード形式で表示します。

環境構成(ハードウェア)

  • Raspberry pi、Grove pi、センサー(光、傾き、距離)
  • QNAP(TS-251+)
  • ディスプレイ

環境構成(ソフトウェア)

①Raspberry piとコンテナの連携
  • Raspberry pi→Ponte データ送信
    • Raspberry piにGrove Piを利用するための環境をインストール
    • Raspberry pi上でプログラムを実装
      • サンプルコード  を利用してセンサーの値を取得
      • Ponteへhttp形式のメッセージを送信
②Ponte→Node-RED 連携
  • Node-REDにmqttノードを作成
  • ノードにPonteの情報を設定
③Node-RED→MongoDB 連携
  • Node-Redのノード上でJson形式のクエリを作成
  • Node-REDにMongoDBノードを作成
  • ノードにMongoDBの情報を設定
④Node-RED→Dashing 連携
  • Node-REDのノード上でJson形式のクエリを作成
  • Node-RED上でhttp requestノードを作成
  • ノードにDashingの情報を設定

Dockerを利用したIoTプラットフォーム

4種類のOSSアプリのコンテナを組み合わせて実現します。
  • メッセージブローカー
    受信したメッセージをサービス側のプロトコルに適応するように変換して、送信します。
  • ルールエンジン
    受信したメッセージを処理し、別のメッセージを送信したり、メッセージをDBへ保存したりします。
  • データベース
    メッセージブローカーやルールエンジンから送信されたメッセージを管理します。
  • プレゼンテーション
    メッセージブローカー、ルールエンジンから送信されたメッセージやDBの情報をWebアプリケーションで表示します。
QIoT(IoTプラットフォーム)についての詳しい説明は、以下の記事をご覧ください。

IoTプラットフォームのコンテナ

デモンストレーションで利用したコンテナの説明をします。

Ponte

  • デバイスからのメッセージを受信してパブリッシュする
  • Docker Continer起動時のオプションや設定ファイルで、変換ルールやセキュリティを指定可能
プロトコル変換 HTTP、MQTT、CoAP
データフォーマット変換 JSON、MsgPack、Byson、BSON、XML
セキュリティ デバイスとの認証
参考サイト:Ponte

Node-RED

  • ハードウェア、Web API、オンラインサービス等を簡単に接続できるツール
  • 機能単位のノードをマウスで繋いで作成
 
参考サイト:Node-RED

MongoDB

  • ドキュメント指向のDBで、BSON(Binary Json)形式でデータを保存
  • 多数の開発言語からアクセス可能
    (例:C、C++、Java、Javascript、.NET、Node.js、Perl、PHP、Python、Ruby等)
  • RDBと比較して読み書きが高速
  • RDBMSのような固定的なスキーマを持たない
  • リレーションやトランザクションが多いシステムには不向き

参考サイト:MongoDB

Dashing

  • ダッシュボードを簡単に作成できるライブラリ
  • ダッシュボード上のWidgetのレイアウトをRubyでカスタマイズ可能
  • WidgetをHTML、SCSS、CofeeScriptでカスタマイズ可能

参考サイト:Dashing

構築のポイント

ネットワークの設定

Dockerを利用する場合、コンテナにはホストOSとは別にIPアドレスとポート番号が割り当てられます。
連携先を指定する場合には、以下の通り設定する必要があります。
  • コンテナ間の通信
    →コンテナのIPアドレス、ポート番号を使用します。
  • Raspberry piとコンテナの通信
    →ホストのIPアドレス、ポート番号を使用します。

要件にあったコンテナを組み合わせて使う

今回のデモンストレーション環境では4つのコンテナ全てを使用しましたが、要件に合わせて必要なコンテナを選択することが可能です。

例)
  • セキュリティを強化したい・・・
    Ponteに認証を追加できます。
  • プロトコル変換が不要・・・
    PonteでなくNode-REDへ直接メッセージを渡すことができます。
  • データ処理が不要・・・
    PonteからMongoDBへ直接データを蓄積することができます。

関連コンテンツ

ITインフラ
ITインフラサービス
サーバー/ネットワーク設計・構築からクラウドシステム導入まで、お客様のビジネスIT環境構築を支援します。