目次


スマートフォンをセンサー兼アクチュエーターに変身させる

IBM Cloud と Watson IoT Platform を利用して迅速かつ簡単に IoT アプリを作成してデプロイする

Comments

モノのインターネット (IoT) とは、インターネットに接続された多種多様な端末を利用して毎日膨大な量の情報を取り込んだり生成したりすることを指します。コンシューマーとしての IoT 端末としては、スマートフォン、スポーツ用ウェアラブル端末、家庭の冷暖房システムなどが挙げられます。産業の分野では、製造装置やサプライ・チェーン、さらに車両のコンポーネントなどに IoT の端末やセンサーが組み込まれています。IoT によって、私たちの毎日の生活をより快適なものにすることができます。そのような IoT ソリューションを、規模を問わずに簡単に開発してデプロイできるよう、IBM は IBM Watson IoT Platform を作り出しました。

このチュートリアルでは、Watson IoT Platform を利用して単純な IoT ソリューションを作成するために、スマートフォンをデータの読み取りと送信を行うセンサーに変身させる方法、さらにデータを読み取ってアクションを実行するアクチュエーターとしても機能させる方法を説明します。

このチュートリアルでは、Watson IoT Platform を利用して単純な IoT ソリューションを作成するために、スマートフォンをデータの読み取りと送信を行うセンサーに変身させる方法、さらにデータを読み取ってアクションを実行するアクチュエーターとしても機能させる方法を説明します。

このチュートリアルで作成する IoT Starter Mobile アプリは、スマートフォン上で使用するものです。スマートフォンをセンサーに変身させる方法として、スマートフォンから加速度計の計測値を読み取り、その値が所定のしきい値に達しているかどうかによって特定のアクションを実行する IoT アプリを作成します。さらに特定のコマンドをスマートフォンに送信する IoT アプリを作成して、スマートフォンがそのコマンドを受信してアクチュエーターとして機能するようにします。

このチュートリアルで説明する IoT アプリを作成するために必要なもの

以下の端末およびアカウントが必要となります。

  • IBM Cloud ライト・アカウント (このリンク先のページで取得できます)。
  • スマートフォン (Android 端末または iOS 端末)
  • iOS スマートフォンを使用する場合は、有効な iOS Developer License と Apple Xcode
  • ツイートによる通知を受ける場合は、Twitter アカウント (任意)
  • e-メールのメッセージによる通知を受ける場合は、SMTP リレー機能を使用できる e-メール・アカウント (任意)

手順を開始する前に、以下の点を確認してください。

  • IBM Cloud Platform の知識があること。カタログをブラウズして、サービスをインスタンス化する方法を把握している必要があります (このリンク先のページで IBM Cloud の学習課程として用意されているチュートリアルに取り組むことで、IBM Cloud を完全に理解できるようになります)。
  • Node-RED の知識があること。Node-RED 内でのノードの使用方法およびメッセージの処理方法を理解している必要があります。Node-RED は JavaScript のフロントエンドなので、JavaScript を扱った経験も必要です。このリンク先の Node-RED Web サイトに用意されている入門資料を参考に、Node-RED の知識を得てください。
  • このリンク先の IBM Cloud の資料「Watson IoT Platform の概説」のセクションを一読してください。

サンプル IoT アプリのアーキテクチャー

以下の図に、このチュートリアルで作成する IoT ソリューションの大まかなアーキテクチャーを示します。

このチュートリアルでは、以下の 2 つの IoT アプリケーションを管理するための IoT アプリを IBM Cloud 内に作成します。

  • スマートフォンから加速度計の計測値を読み取り、受信する IoT センサー・アプリ。このアプリで、スマートフォンを落としたり素早く動かしたりした場合の事例に対処します。加速度が所定の限界値を超えると、このアプリがアラートを使用して通知するようにします。
  • スマートフォンに単純なコマンドを送信する IoT アクチュエーター・アプリ。スマートフォンで解釈できる、これらの一連の単純なコマンドは、このソリューションで使用する IoT Starter Mobile アプリに用意されています。スマートフォンに対し、例えばそのポジションに基づいてスマートフォンのライトのオン/オフを切り替えるコマンド、あるいはアプリの背景色を変えるコマンドを送信します。
1

IBM Cloud 内にメインの IoT アプリを作成する

IBM Cloud 内に作成するメインの IoT アプリが、この IoT ソリューションのバックエンド・アプリケーションになります。バックエンド・アプリケーションで、センサー・データが含まれる着信ペイロード・メッセージの読み取り、受信、解釈を行います。さらに、IoT コマンドを定義して、所定の条件に適合するかどうかによってアクチュエーターにそれらのコマンドを送信するのも、このバックエンド・アプリケーションの役目です。

  1. IBM Cloud ライト・アカウントにログインします。
  2. IBM Cloud カタログ内で、「Boilerplates (ボイラープレート)」セクションから「Internet of Things Platform Starter」ボイラープレートを選択します。
  3. 右側のペイン内で、アプリに一意の名前を指定します。指定した名前が、アプリの一意のホスト名を作成するために使用されます。名前を指定したら、「CREATE (作成)」をクリックします。

Internet of Things Platform Starter ボイラープレートによって自動的に Internet of Things Platform サービスと Cloudant NoSQL Database サービスがアプリに追加されます。さらに、アプリの Node-RED ランタイム環境も組み込まれます。

2

スマートフォンを Watson IoT Platform に登録する

スマートフォンを IoT に接続するには、あらかじめそのスマートフォンを Watson IoT Platform に登録しておく必要があります。スマートフォンを登録すると、IBM Cloud IoT Platform サービスによって自動的に IoT 組織が割り当てられます。IoT 組織とは、端末を IBM Watson IoT Platform に接続して管理するためのスペースのことです。IoT 組織が割り当てられることにより、アプリケーションはライブ・データや履歴データにアクセスできるようになります。

  1. IBM Cloud ダッシュボードから、「Internet of Things Platform」サービスを選択し、「Launch dashboard (ダッシュボードを起動)」をクリックします。
    新しいブラウザー・タブに IBM Watson IoT Platform のダッシュボードが開きます。ダッシュボードの右上に、アプリに割り当てられた組織 ID が表示されています。
  2. デバイスとデータを管理する場所は、「Boards (ボード)」ページです。このページの左側にあるメニューの上にマウスのカーソルを合わせて、「Devices (デバイス)」を選択します。表示される「Devices (デバイス)」ページで、「Add Device (デバイスの追加)」をクリックします。
  3. 「Add Device (デバイスの追加)」ページ内で、「Create device type (デバイスのタイプを作成)」をクリックします。デバイスのタイプ名では大文字と小文字が区別されます。タイプ名は「Android」または「iPhone」のいずれかにする必要があります。IoT Starter Mobile アプリではデバイスのタイプとして、このいずれかの単語を想定しています。

これで完了です。スマートフォンが Watson IoT Platform に登録されました。まだスマートフォンを Watson IoT Platform に接続する作業が残っていますが、それにはまず、IoT Starter Mobile アプリをスマートフォンにインストールして構成する必要があります。

3

IoT Starter Mobile アプリをスマートフォンにインストールして構成する

IoT Starter Mobile アプリを使用して、スマートフォンからのセンサー・データを読み取り、スマートフォンにデータを送信するだけでなく、コマンドを受信して実行するアクチュエーターとしてもスマートフォンが機能するようにします。IoT Starter Mobile アプリは iOS プラットフォームと Android プラットフォームの両方の上で、ネイティブ言語を使って開発されています。このモバイル・アプリを使用すると、以下のイベントをパブリッシュできます。

  • スマートフォンの加速度計の X, Y, Z イベント
  • touchMove イベント
  • Text イベント
3a

iOS スマートフォンに IoT Starter Mobile アプリをインストールする

IoT Starter Mobile アプリをダウンロードし、ビルドしてインストールする必要があります。

  1. iot-starter-for-ios という名前の GitHub プロジェクトから、iOS デモ・アプリケーションとしての IoT Starter Mobile アプリをダウンロードします。
  2. ダウンロードしたアプリを Xcode 開発環境にインポートします。
  3. .ipa パッケージ・ファイルをビルドします。

    .ipa パッケージ・ファイルを iOS スマートフォンにデプロイします。

  4. デモ・アプリがスマートフォン上にインストールされたら、IoT Starter Mobile アプリを開きます。アプリのアイコンは以下のように表示されています。

スマートフォンに搭載されている iOS のバージョンによっては、International Business Machines 開発者を信頼するかどうかを尋ねるダイアログがポップアップ表示されます。iOS スマートフォンの「General Settings (一般設定)」をスクロールダウンして「Device Management (デバイスの管理)」を選択します。「International Business Machines」を選択してから、「Trust "International Business Machines" (International Business Machines を信頼する)」リンクをクリックします。アプリのリストに IoT Starter が検証済みとして一覧されているはずです。

3b

Android スマートフォンに IoT Starter Mobile アプリをインストールする

IoT Starter Mobile アプリをダウンロードし、ビルドしてインストールする必要があります。

  1. iot-starter-for-android という名前の GitHub プロジェクトから、Android デモ・アプリケーションとしての IoT Starter Mobile アプリをダウンロードします。
  2. ダウンロードしたアプリを Android 開発環境にインポートします。
  3. .apk パッケージ・ファイルをビルドします。
  4. .apk パッケージ・ファイルを Android スマートフォンにデプロイします。
  5. デモ・アプリがスマートフォン上にインストールされたら、IoT Starter Mobile アプリを開きます。アプリのアイコンは以下のように表示されています。
4

スマートフォンのメッセージが Watson IoT Platform に送信されていることを確認する

IoT Starter Mobile アプリをスマートフォンにインストールした後は、このアプリを構成して IoT 資格情報を設定した上で、アプリを Watson IoT Platform に接続する必要があります。

  1. スマートフォン上で IoT Starter Mobile アプリを開き、割り当てられている組織とスマートフォン資格情報を指定します。
  2. アプリのプロファイルを開きます。
    • Android 端末の場合は、右上にあるメニューを選択し、「Open profiles (プロファイルを開く)」を選択します。
    • iPhone 端末の場合は、「Pr...iles (プロ...イル)」リンクを選択し、「Open profiles (プロファイルを開く)」を選択します。
  3. 「Save setting (設定を保存)」をクリックし、プロファイルに付ける名前を入力します (例: myProfile)。「Save (保存)」をクリックしてログイン・ウィンドウに戻ります。これで資格情報が保存されます。次回接続する際は、この資格情報が適用されます。
  4. 「Activate Sensor (センサーのアクティベーション)」をクリックします。これにより、アプリが Watson IoT platform にメッセージを送信します。
  5. Watson IoT Platform ダッシュボード内 (IBM Cloud 内) で、左側にあるメニューから「Devices (デバイス)」を選択します。リストから自分のスマートフォンを選択します。「Recent Events (最近のイベント)」セクションに、加速度計のイベントが表示されていることを確認します。
  6. 必要に応じて、ダッシュボードにカードを追加して、スマートフォンのデータが (しかもリアルタイムで) 表示されるようにすることもできます。ボードとカードの作成方法については、このリンク先の Watson IoT Platform 資料を参照してください。
5

IoT センサー・アプリからのメッセージを処理する

ここまでのところで、スマートフォンを登録し、スマートフォンに内蔵されている加速度計のデータが Watson IoT Platform に送信されていることを確認しました。次は、IoT サービスを利用して、この IoT アプリを Watson IoT Platform に接続する必要があります。Watson IoT Platform に接続した後は、スマートフォンのデータを IoT ソリューション内で使用できるようになります。

  1. IBM Cloud ダッシュボード内で、IBM Cloud 内に作成したアプリケーションを表示し、そのルートをクリックしてアプリケーションにアクセスします。
  2. Node-RED フロー・エディターを開きます。
  3. Node-RED フロー・エディター内で、表示されているサンプル・フローのすべてのノードを選択して削除します。
  4. 新しいフローを作成するために、「input (入力)」セクションにある「ibmiot」ノードと「output (出力)」セクションにある「debug (デバッグ)」の両方をワークスペースにドラッグ、この 2 つのノードを接続します。
  5. 「IBM IoT」ノードをダブルクリックしてノードを構成するためのエディターを開き、IBM Cloud サービス認証と端末 ID の情報を指定します。端末 ID は、スマートフォンを Watson IoT Platform に登録したときに選んだものです。入力し終わったら「Done (完了)」をクリックします。
  6. Node-RED フロー・エディターの右上にある「Deploy (デプロイ)」ボタンをクリックします。
    フローがデプロイされると、ボタンの色がグレーに変わります。
  7. 「debug (デバッグ)」タブを選択して、スマートフォンからのセンサー・データを表示します。
    「debug (デバッグ)」タブが表示されていない場合は、ブラウザー・ウィンドウを拡大すると (またはウィンドウをスクロールすると) 見つかるはずです。

受信するセンサー・データは JSON フォーマットになっています。IoT Starter Mobile アプリは MQTT プロトコルを使用してセンサー・データを送信するようになっています。

6

スマートフォンを落とした時点でアラートを送信する

次は、センサー・データを使用するように Node-RED フローを更新します。

そのための手順は以下のとおりです。

  • JSON ペイロード・メッセージから「acceleration_y」の値を抽出します。
  • 加速度の値 (例えば、iOS の場合は 0.5Android の場合は 7) に対するトリガーを作成します。
  • 通知メッセージをデバッグします。
  • 任意で、ツイートを投稿するか、e-メールを送信します。

Node-RED フロー・エディターを表示します。以下の図に示すとおりのフローを作成するために、該当するノードをドラッグして接続します。

  1. JSON ペイロード・メッセージからスマートフォンの acceleration_y の絶対値を抽出するために、関数ノードを追加して構成します。パレットの「function (関数)」セクションから、「function (関数)」ノードをワークスペースにドラッグします。関数ノードをダブルクリックし、以下の値を使用してノードを構成します。
    1. getAcceleration_y」をこのノードの名前として指定します。
    2. 以下のコードをコピーして、この関数ノード内に貼り付けます。
      return {payload: Math.abs(msg.payload.d.acceleration_y)};
    3. 「Done (完了)」をクリックします。
  2. acceleration_y 値に対するトリガーを作成するために、切り替えノードを追加して構成します。パレットの「function (関数)」セクションから、「switch (切り替え)」ノードをワークスペースにドラッグします。関数ノードを切り替えノードに接続します。切り替えノードをダブルクリックし、以下の値を使用してノードを構成します。
    1. testAcceleration_y」をこのノードの名前として指定します。
    2. プロパティーには「msg.payload」を指定します。
    3. 「condition value (条件値)」ドロップダウン・リストから「>=?」を選択し、値として iOS には 0.5、Android には 7 を指定します。
    4. 最後のドロップダウン・リストから、「stopping after first match (最初の一致で停止)」を選択します。
    5. 「Done (完了)」をクリックします。
  3. スマートフォンを落とすと送信される通知メッセージを定義するために、テンプレート・ノードを追加して構成します。パレットの「function (関数)」セクションから、「template (テンプレート)」ノードをワークスペースにドラッグします。切り替えノードをテンプレート・ノードに接続します。テンプレート・ノードをダブルクリックし、以下の値を使用してノードを構成します。
    1. Acceleration_y_exceed_message」をこのノードの名前として指定します。
    2. プロパティーには「msg.payload」を指定します。
    3. 以下のコードをコピーして、ノード・エディターに貼り付けます。
      Wow! Is your phone falling?
      Its acceleration y = {{payload}}!
    4. 「Done (完了)」をクリックします。
  4. 通知メッセージの数を制限するため、そして通知メッセージが重複しないようにするために、遅延ノードを追加して構成します。パレットの「function (関数)」セクションから、「delay (遅延)」ノードをワークスペースにドラッグします。テンプレート・ノードを遅延ノードに接続します。遅延ノードをダブルクリックし、以下の値を使用してノードを構成します。
    1. Limit Rate」をこのノードの名前として指定します。
    2. 「Action (アクション)」ドロップダウン・リストから、「Limit rate to (速度制限)」を選択します。速度を 1 に設定し、「Minute (分)」を選択します。
    3. 「Drop intermediate message (中間メッセージを破棄)」チェック・ボックスにチェック・マークを付けます。
    4. 「Done (完了)」をクリックします。
  5. フローの「Debug (デバッグ)」タブに通知メッセージを表示するために、デバッグ・ノードを追加して構成します。パレットの「output (出力)」セクションから、「debug (デバッグ)」ノードをワークスペースにドラッグします。遅延ノードをデバッグ・ノードに接続します。
  6. 「Debug (デバッグ)」タブに表示されるデバッグ・メッセージが多くなりすぎないようにするには、デバッグ・ノードの一部となっている緑色の四角形をクリックして、デバッグ・ノードの状態のアクティブ/非アクティブを切り替えるという方法を使えます。

    ブラウザーの最上部に、デバッグ・ノードがアクティブになっているかどうかを説明するメッセージが表示されます。
  7. IBM Cloud アプリケーション (および Node-RED フロー) をテストするために、以下の手順を実行します。
    1. 「Deploy (デプロイ)」をクリックして Node-RED フローを再デプロイします。
    2. スマートフォン上で IoT Mobile Starter アプリを実行し、「Activate Sensor (センサーのアクティベーション)」をクリックします。
    3. スマートフォンを素早く上下に動かして、スマートフォンの落下をシミュレートします。
    4. Node-RED フロー・エディターの「Debug (デバッグ)」タブ内で、acceleration_y の値と併せて通知メッセージが表示されていることを確認します。
6a

ツイートによって通知を受ける

Twitter アカウントを持っている場合、通知をツイートとして送信することができます。

  1. Node-RED フロー・エディターで、パレットの「social (ソーシャル)」セクションから、「twitter」出力ノードをワークスペースにドラッグします。Twitter 出力ノードを遅延ノードに接続します。
  2. Twitter 出力ノードをダブルクリックし、以下の値を使用してノードを構成します。
    1. 「twitter out (Twitter 出力)」ダイアログ・ボックス内で、「Twitter ID」ドロップダウン・リストの横にある鉛筆アイコンを選択します。
    2. 次に表示されるダイアログ・ボックス内で、Twitter で認証を行うためのボタンをクリックします。これによって表示されるウィンドウ内で、Twitter 資格情報を指定し、IBM Cloud アプリに Twitter アカウントを使用する権限を与えます。
    3. 「Add (追加)」をクリックして Twitter アカウントを追加します。
    4. 「twitter out (Twitter 出力)」ダイアログ・ボックス内で、自分の ID が選択されていることを確認します。
  3. 「Deploy (デプロイ)」をクリックして、この新しいバージョンのフローをテストします。「Deploy (デプロイ)」ボタンが赤で表示されている場合、それは、フローが更新されているため再デプロイする必要があることを意味します。「Deploy (デプロイ)」ボタンがグレーで表示されているとしたら、フローはデプロイされた状態になっています。
  4. この通知方法をテストするには、以下の手順を実行します。
    1. スマートフォン上で IoT Starter Mobile アプリが実行中であることを確認します。実行されていない場合は、「Activate Sensor (センサーのアクティベーション)」をクリックします。
    2. スマートフォンを素早く上下に動かして、落とした状態をシミュレートします。
    3. 「Debug (デバッグ)」タブ内で、加速度の値と通知メッセージが表示されていることを確認します。
    4. Twitter アプリにアクセスして、IBM Cloud アプリからの通知メッセージがツイートで送信されていることを確認します。
6b

e-メールによって通知を受ける

SMTP e-メール・アカウントを持っている場合、アプリにスマートフォンを落としたことを通知する e-メールを送信させることができます。アプリに e-メールの送信を許可するには、e-メールのセキュリティー設定を構成しなければならない場合があります。例えば、Gmail アカウントを使用しているとしたら、「Sign-in & security (ログインとセキュリティ)」設定内で「Allow less secure apps (安全性の低いアプリの許可)」項目を有効にする必要があります。

  1. Node-RED フロー・エディター内で、パレットの「social (ソーシャル)」セクションから、「e-mail (e-メール)」出力ノードをワークスペースにドラッグします。e-メール出力ノードを遅延ノードに接続します。
  2. e-メール出力ノードをダブルクリックし、以下の値を使用してノードを構成します。
    1. 「To (宛先)」フィールドに、自分の e-メール・アドレスを指定します。
    2. 「Server (サーバー)」フィールドに、使用している SMTP サーバーのアドレス (例えば、smtp.gmail.com) を指定します
    3. 「Port (ポート)」フィールドに、e-メールの送信用 SMTP TCP ポート (例えば、465) を指定します。
    4. 「Userid (ユーザー ID)」フィールドに、SMTP サーバーによる認証に使用するユーザー名を指定します。このユーザー名には、e-メール・アドレスが使用されていることがあります。
    5. 「Password (パスワード)」フィールドに、ユーザー名に関連付けられているパスワードを指定します。
  3. この通知方法をテストするには、以下の手順を実行します。
    1. スマートフォン上で IoT Starter Mobile アプリが実行中であることを確認します。実行されていない場合は、「Activate Sensor (センサーのアクティベーション)」をクリックします。
    2. スマートフォンを素早く上下に動かして、スマートフォンの落下をシミュレートします。
    3. 「Debug (デバッグ)」タブで、加速度の値と通知メッセージが表示されていることを確認します。
    4. メール・アプリにアクセスして、IBM Cloud アプリからの通知メッセージが e-メールで送信されていることを確認します。
7

コマンドをスマートフォンに送信する

ここまでのところ、スマートフォンはセンサーとしての役割を果たしてきましたが、IoT Starter Mobile アプリを使用してスマートフォンをアクチュエーターに変身させることもできます。アクチュエーターとしてのスマートフォンは、コマンドを受信して、それに応じてアクションを実行するようになります。

IoT Starter Mobile アプリで管理できるイベントには、以下の 3 種類があります。

  • accel イベント: 加速度計のイベント
  • touchmove イベント: スマートフォン上でのスワイプ・イベント
  • text イベント: テキスト・コマンドのイベント

アプリは以下の 4 つのコマンドを受信して、それぞれのアクションを実行します。

  • light: スマートフォンのライトのオン/オフを切り替えるコマンドです。
  • color: IoT Starter Mobile アプリの背景色を変更するコマンドです。
  • alert: アプリ内にアラート・メッセージを表示するコマンドです。
  • any text value: アプリ内のログにメッセージを記録するコマンドです。
7a

Node-RED 内で IoT アクチュエーター・アプリを作成する

  1. このリンク先の私の watson-iot-actuator GitHub プロジェクトから、/flows/commands.json ファイルをコンピューターにダウンロードします。
  2. テキスト・エディターを使用して commands.json ファイルを開き、すべてのコードが 1 行になっていることを確認します。改行が入っている場合は削除してから、コード行をコピーします。
  3. Node-RED フロー・エディター内で、新しいフローを作成してワークスペースに追加するためにプラス・アイコンをクリックします。
  4. Ctrl+I を押して「Import Nodes (ノードのインポート)」ダイアログ・ボックスを開きます。先ほどコピーしたコードを貼り付けて、「Import (インポート)」をクリックします。ワークスペースに以下のフローが表示されます。
  5. このフローを IoT アクチュエーター・アプリ用にカスタマイズするには、以下の説明に従ってノードを構成する必要があります。
    1. 「IoT App In (IoT アプリ入力)」ノードをダブルクリックし、スマートフォンの登録時に使用したスマートフォン ID を指定した後、「Done (完了)」をクリックします。
    2. 「IoT App Out (IoT アプリ出力)」ノードをダブルクリックし、スマートフォン ID とスマートフォンのタイプ (iPhone または Android) を指定した後、「Done (完了)」をクリックします。
  6. 「Deploy (デプロイ)」をクリックします。
7b

スマートフォン上でコマンドをテストする

  1. スマートフォン上で IoT Starter Mobile アプリが実行中であることを確認します。実行されていない場合は、「Activate Sensor (センサーのアクティベーション)」をクリックします。
  2. スマートフォンをひっくり返したり、傾けたりします。この動きに応じて、スマートフォン上に表示されているアプリの背景色が変わります。これで、スマートフォンが accel イベントを受信していることを確認できました。
  3. IoT Starter Mobile アプリがフォアグラウンドで実行されている状態のスマートフォン上で、画面を 1 本の指で左右にスワイプしてから、アプリの「Log (ログ)」タブを表示します。2 つのメッセージが記録されています。これで、スマートフォンが touchmove イベントを受信していることを確認できました。
  4. スマートフォン上で、「IoT」タブを再表示します。「Send Text (テキストの送信)」ボタンをクリックします。何らかのテキスト値を入力してから「Submit (送信)」ボタンをクリックします。
  5. 前と同様に「Log (ログ)」タブを表示すると、2 つのメッセージが記録されています。これで、スマートフォンが text イベントを受信していることを確認できました。
  6. スマートフォン上で、「IoT」タブを再表示します。「Send Text (テキストの送信)」ボタンをクリックします。フィールドに「alert」と入力してから「Submit (送信)」ボタンをクリックします。ポップアップ・ダイアログ・ボックスにアラートが表示されます。これで、スマートフォンが alert イベントを受信していることを確認できました。
  7. スマートフォン上で、「IoT」タブを再表示します。「Send Text (テキストの送信)」ボタンをクリックします。フィールドに「light」と入力してから「Submit (送信)」ボタンをクリックします。スマートフォンのライトがオンになります。このコマンドはすべての Android スマートフォン上で機能するわけではありませんが、iOS スマートフォン上では例外なく機能します。これで、スマートフォンが light イベントを受信していることを確認できました。「Send Text (テキストの送信)」ボタンをもう一度クリックして「light」と入力すると、今度はライトがオフになります。

次のステップでは、センサーとしてのスマートフォンとアクチュエーターとしてのスマートフォンの概念を 1 つにした IoT アプリを作成します。

8

スマートフォンを横向きにするとライトがオンになるようにする

スマートフォンをセンサーまたはアクチュエーターに変身させる方法を説明したので、次は、スマートフォンをセンサー兼アクチュエーターに変身させるための IoT アプリを作成しましょう。このシナリオでは、スマートフォンを横向きにすると、スマートフォンのライトのオン/オフが切り替わるようにします。

スマートフォンから送信される加速度 Z の値をテストして、その値が正の値か負の値かをチェックし、その状態を保存します。

  • 加速度 Z が正の値であり、スマートフォンのライトがオフになっている場合は、light コマンドをスマートフォンに送信してライトをオンにします。
  • 加速度 Z が負の値であり、スマートフォンのライトがすでにオンになっている場合は、light コマンドをスマートフォンに送信してライトをオフにします。
  1. Node-RED フロー・エディターを表示します。以下の図に示すとおりにフローを作成するために、該当するノードをドラッグして接続します。
  2. パレットの「function (関数)」セクションから、「function (関数)」ノードをワークスペースにドラッグします。
    1. この関数ノードの名前を指定します。この例では、「Detect Flip」という名前にします。
    2. 以下のコードを、関数ノード・エディターにカット・アンド・ペーストします。
      var accelerationZ = msg.payload.d.acceleration_z;
      var isAlreadySwitchedOn = context.get('isAlreadySwitchedOn')|| false;
      
      // For Android reverse this test !!!
      if (accelerationZ > 0) {    
      	if (!isAlreadySwitchedOn) {
      		isAlreadySwitchedOn = true;
      		msg.eventOrCommandType = "light";
      		msg.payload = JSON.stringify({"d":{"text":"Received light on message"}}); 
      	}
      } else {
      	if (isAlreadySwitchedOn) {
      		isAlreadySwitchedOn = false;
      		msg.eventOrCommandType = "light";
      		msg.payload = JSON.stringify({"d":{"text":"Received light off message"}}); 
      	} 
      }
      context.set('isAlreadySwitchedOn', isAlreadySwitchedOn);
      return msg;
    3. 「Done (完了)」をクリックします。
  3. 切り替えノードをワークスペースにドラッグします。このノードでは、コマンドをスマートフォンに送信する必要があるかどうかをテストします。それぞれのフィールドに以下の値を入力します。
    1. この切り替えノードの名前を指定します。この例では、「Flip Detected」という名前にします。
    2. 「Property (プロパティー)」を「msg.eventOrCommandType」に設定します。
    3. ドロップダウン・リストから「is not null (ヌルではない)」を選択します。
    4. 一番下のドロップダウン・リストから、「stopping after first match (最初の一致で停止)」を選択します。
    5. 「Done (完了)」をクリックします。
  4. 「ibmiot」出力ノードをワークスペースにドラッグします。このノードでは、light コマンドをスマートフォンに送信します。それぞれのフィールドに以下の値を入力します。
    1. このノードの名前を指定します。この例では、「IBM IoT Out」という名前にします。
    2. 「Authentication (認証)」ドロップダウン・リストから、「IBM Cloud Service (IBM Cloud サービス)」を選択します。
    3. 「Output Type (出力タイプ)」ドロップダウン・リストから、「Smartphone Command (スマートフォン・コマンド)」を選択します。
    4. スマートフォンのタイプ (iPhone または Android) を入力します。
    5. スマートフォン ID を入力します。
    6. 「Command Type (コマンド・タイプ)」テキスト・ボックスに「text」と入力します。
    7. 「Format (フォーマット)」テキスト・ボックスに「json」と入力します。
    8. 「Data (データ)」テキスト・ボックスに、以下のストリングを入力します。
      {"d":{"value":"text"}}
    9. 「Done (完了)」をクリックします。
  5. 新しいフローをデプロイします。スマートフォンを手に取り、「Activate Sensor (センサーのアクティベーション)」をクリックして IoT Starter Mobile アプリを実行します。
    1. Node-Red フロー・エディターの「Debug (デバッグ)」タブを観察して、スマートフォンからの着信 MQTT メッセージを確認します。
    2. スマートフォンを横向きにして、ライトがオンになることを確認します。
    3. スマートフォンを縦向きに戻して、ライトがオフになることを確認します。

Android スマートフォンで light コマンドが解釈されない場合は、関数ノードのコードを以下のコードで置き換えてください。このコードでは代わりのソリューションとして color コマンドを使って、スマートフォンを横向きにするたびにライトのオン/オフを切り替えるのではなく、IoT Starter Mobile アプリの背景色を変更します。

var accelerationZ = msg.payload.d.acceleration_z; 
var r = 0.0; 
var b = 0.0; 
var g = 0.0; 
a = 1.0; 

 
if (accelerationZ < 0) { 
    // green 
    r = 102.0; 
    g = 255.0; 
    b = 102.0; 
} else { 
   // purple 
    r = 178.0; 
    g = 102.0; 
    b = 255.0; 
} 
msg.eventOrCommandType = "color"; 
msg.payload = JSON.stringify({"d":{"r":r,"b":b,"g":g,"alpha":a}}); 
return msg;

まとめ

このチュートリアルでは、簡単に IoT アプリを作成する方法、簡単にスマートフォンをセンサーやアクチュエーター端末に変身させる方法、簡単にスマートフォンを IBM Watson IoT Platform に接続する方法、そしてスマートフォンのデータを送受信する方法を説明しました。

IBM Cloud プラットフォームと Watson IoT Platform を利用することで、開発にかかる時間を短縮し、アプリを迅速に市場に送り出すことができます。さらに、組織は端末 (組織固有の一連のセンサーやアクチュエーター) を迅速に接続して IoT アプリを構築し、特定のビジネス問題を解決して企業および業界に変革をもたらすことができます。


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Mobile development, Internet of Things
ArticleID=1044313
ArticleTitle=スマートフォンをセンサー兼アクチュエーターに変身させる
publish-date=04262018