初めての IoT アプリを構築する

モノのインターネット (IoT) は、スマート・サービスを提供するためのデバイスとアプリで構成される新たなエコシステムを表します。これらのデバイスやアプリが革新的な方法で統合されることによって、スマート・サービスが実現されるのです。単純な例として、インターネット対応のコーヒー・マシンや庫内の在庫を確認する機能を備えた冷蔵庫などが挙げられます。これらの例は、一般的なコンシューマー向けサービスの例ですが、IoT プログラミングは、ビジネス、農業、研究調査、医療などを含む多種多様な業界の分野にも適用することが可能です。

以降のセクションでは、IBM Cloud ワークスペースをセットアップし、Node-RED を利用してデモ・アプリを開発し、Twilio を利用してこのアプリから携帯電話に SMS を送信できるようにします。

皆さんに IoT のプログラミングを開始する準備ができているのなら、このチュートリアルに従うことで、コンピューターや IT ネットワークがダウンすると自動的にリモート・ユーザーに通知する IoT アプリの作成に取り掛かることができます。このアプリに使用するテクノロジーは以下のとおりです。

  • IBM Cloud: オープンソースの Platform as a Service である Cloud Foundry をベースとした、IBM のクラウド・オファリングです。
  • Node-RED: モノのインターネットを理解するには、おあつらえ向きと思われるオープンソース・テクノロジーです。
  • Twilio: このテクノロジーの SMS メッセージング機能を使用します。

pingGo IoT アプリを作成するために必要となるもの

この pingGo というデモ・アプリは、継続的にネットワーク・ポートとマシン・ポートに ping を送信することで、マシンのステータスを追跡します。マシンがダウンすると、pingGo は登録済みユーザーに SMS で通知します。このような IoT アプリは、ミッション・クリティカルなリモート・サーバーや分散コンピューター・ネットワークなどの監視を担当する技術ユーザーの役に立ちます。それは、このアプリは緊急事態が発生すると、アクションを取るよう監視担当者にアラートを送信するからです。

このデモ・アプリを作成するために必要となるものは以下のとおりです。以下に記載するアカウントにサインアップしてから、チュートリアルのステップを開始してください。

  • IBM Cloud アカウント (このリンク先のページでフリーアカウントを取得できます。)
  • Twilio アカウント。サインアップする際に、人間がサインアップしていることを確認するために、携帯電話の番号を入力するよう求められます。ここで入力する番号は、デモ・アプリから送信される SMS の受信用 (SMS レシーバー) としても使用します。
  • SMS 通知を受信する携帯電話の番号。
  • JavaScript プログラミングの知識。

If you don’t want to create the app yourself, you can deploy the simple, pre-built app to IBM Cloud. From there, you can edit and redeploy the code as many times as you like.

1. IBM Cloud 内で Node-RED アプリを作成する

  1. IBM Cloud アカウントにログインします。
  2. dev ワークスペースが作成されていて、アクティブな領域が正しく設定されていることを確認します。 alt
  3. カタログで、「Node-RED Starter」サービスを検索して選択します。
  4. アプリ用に一意の名前を入力して、「Create (作成)」をクリックします。アプリのホスト名は、アプリ名を入力すると自動的に指定されます。
  5. 「Your application was started (アプリケーションが起動しました)」というようなメッセージが表示されるまでに、数秒待たなければならない場合もあります。

2. 2つのノードからなるアプリを作成する

Node-RED では、単純な 2つのノードからなるアプリを開発することから始めます。

  1. IBM Cloud アプリの URL リンクを開き、「Go to your Node-RED flow editor (Node-RED フロー・エディターを表示)」をクリックします。フロー・エディターの画面中央に空白のシートが表示されます。左側のパレットには、使用可能な多数のノードが表示されます。 「Error: Lost connection to server (エラー: サーバーに接続できません)」というエラー・メッセージが表示された場合は、HTTPS 接続を使用していることを確認してください。HTTPS 接続を使用していれば、「https://pinggo.eu-gb.mybluemix.net/red/」のような URL になっているはずです。
  2. パレットの「Input (入力)」セクションで「Inject (注入)」ノードを見つけて、それを空白のシートにドラッグします。このノードには、現在時刻のタイム・スタンプを接続先のノードに送信するためのボタンがあります。
  3. パレットの「Output (出力)」セクションで「Debug (デバッグ)」ノードを見つけて、それを「Inject (注入)」ノードの隣にドラッグします。このノードを使用することで、受信されるメッセージをアプリの「Debug (デバッグ)」タブに表示することができます。
  4. 「Inject (注入)」ノードの出力ポートを「Debug (デバッグ)」ノードの入力ポートに接続します。これにより、「Inject (注入)」ノードのタイム・スタンプ・メッセージが「Debug (デバッグ)」ノードに送信されるようになります。「Debug (デバッグ)」ノードはメッセージを受信すると、msg.payload (タイム・スタンプ) を「Debug (デバッグ)」タブに表示します。(この 2 つのノードを接続するには、「Inject (注入)」ノードの右側にあるグレーの四角をクリックしたまま、「Debug (デバッグ)」ノードの左側にあるグレーの四角にドラッグします)。
  5. ページの右上隅にある「Deploy (デプロイ)」ボタンをクリックして Node-RED フローをデプロイします。
  6. 「Inject (注入)」ノードの左側にあるボタンをクリックします。
  7. クリックした時点でのタイム・スタンプが「Debug (デバッグ)」タブに表示されます (図 1 を参照)。
    Figure 3. 図 1. 2つのノードからなるアプリのフロー図
    alt

3. カスタマイズしたノードをパレットに追加する

次は、「Ping」ノードをパレットに追加する必要があります。

  1. Node-RED フロー・エディターの右上のメニューから、「Manage Palette (パレットの管理)」を選択します。
  2. 「Install (インストール)」タブを選択します。
  3. 「node-red-node-ping」を検索します。
  4. 小さな「install (インストール)」ボタンを選択します。
  5. 「Done (完了)」をクリックして、Node-RED フロー・エディターに戻ります。 新しい「Ping」ノードは、パレットの一番下に追加されます。alt

4. 「Ping」ノードをフローに追加する

  1. フロー・エディターで、「Ping」ノードをシート上にドラッグします。
  2. ノードをダブルクリックして、ノードの構成を編集します。「Target (ターゲット)」フィールドに、監視するマシンの IP アドレスを入力します。ノードを説明する簡潔な名前 (例えば、「ping myServer」) を入力してから、「Done (完了)」をクリックします。
  3. 「Ping」ノードの出力に「Debug (デバッグ)」ノードを接続して、このノードの出力を観察します。 alt
  4. これまでの手順でノードを定義した Node-RED アプリをデプロイします。デバッグ・メッセージが、「Debug (デバッグ)」タブの右ペインに表示されるはずです (図 1 を参照)。

5. ping に対する応答をチェックする

ping が成功した場合、「Ping」ノードは往復時間を msg.payload プロパティーに含めて返します。5 秒以内にサーバーからの応答がなければ、このノードから false が返されます。msg.payload プロパティーの値をチェックするには、「Function (関数)」ノードをセットアップします。

  1. パレットで「Function (関数)」セクションを見つけて、「Function (関数)」ノードをシート内の「Ping」ノードの隣にドラッグします。
  2. 「Ping」ノードの出力を「Function (関数)」ノードの入力に接続します。
  3. ノードをダブルクリックして編集します。「Name (名前)」フィールドに、「isAlive?」と入力します。 この関数ブロックに、以下のコードを追加します。
    Listing 2. リスト 1. 「Function (関数)」ノードのコードの編集
    
    msg.tripTime = msg.payload;
    msg.payload = msg.payload !== false ?
     "Your server is running":
     "Your server is down";
    return msg;
    
  4. 「Done (完了)」をクリックして編集ダイアログを閉じます。 上記コードを追加することで、「Function (関数)」ノードは 5 秒以内に応答を受け取ると「Your server is running」というテキストを含むストリングを作成し、サーバーに ping が到達不能の場合は「Your server is down」というテキストを含むストリングを作成します。
  5. おそらく皆さんは 20 秒ごとに新しい SMS を受信したくはないことでしょう。そこで、例外を処理するノードをアプリのフローに追加します。
    1. 「Report by Exception (例外発生時のレポート)」ノード (rbe ノード) をシートまでドラッグします。
    2. ノードをダブルクリックして、「block unless value changes (値が変更されない限りブロックする)」を選択します。 これで、msg.payload プロパティーの値が前の値と異なる場合にだけ、メッセージが渡されるようになります。
    3. このノードの「Name (名前)」フィールドに、「send once」と入力します。
    4. 「Done (完了)」をクリックします。
  6. 「Debug (デバッグ)」タブにメッセージを表示するために、「Function (関数)」ノードの出力を「Debug (デバッグ)」ノードに接続します。

6. Twilio を使用して SMS アラートを送信する

アプリを完成させるための作業は、残りわずかです。次は、Twilio ノードをアプリのフローに追加します。

  1. 作成した Twilio アカウントから、Twilio 番号と資格情報を収集します。 a. このリンク先の Twilio メッセージング・ページを開きます。 b. 「Get your first Twilio Number (初めての Twilio 番号を取得)」をクリックします。表示される SMS 送信側電話番号をメモします (この番号は、テキスト・ファイルにコピーすることをお勧めします)。 c. 「Choose this Number (この番号を選択)」をクリックします。 d. Twilio メッセージング・ページで、「Show API Credentials (API 資格情報を表示)」という小さなリンクを見つけてクリックします。表示されるアカウント SID と認証トークンをメモします (これらの情報は、テキスト・ファイルにコピーすることをお勧めします)。 alt
  2. フロー・エディターに戻ります。
  3. パレットの「Output (出力)」セクションで「Twilio」ノードを見つけて、それをシートにドラッグします。
  4. 「Twilio」ノードをダブルクリックして、ノードの設定を以下のように構成します。 a. 「Service (サービス)」フィールドで、「External Service (外部サービス)」を選択します。 b. 小さな編集アイコンをクリックして「Add new twilio-api config node (新規 Twilio API 構成ノードの追加)」ダイアログを開きます。 c. このダイアログで、アカウント SID、SMS 送信側電話番号、および Twilio メッセージング・ページからコピーした認証トークンを指定します。 d. 「Add (追加」)」をクリックして「Edit (編集)」ダイアログに戻ります。 e. 「SMS to (SMS 送信先)」フィールドに、携帯電話番号 (SMS 受信側の携帯電話番号) を入力します。
  5. 「Name (名前)」フィールドに「SMS alert to admin」と入力し、「Done (完了)」をクリックします。以下のメッセージを受け取ることがあります。

     message:
     "Permission to send an SMS has not been enabled for the region indicated by the 'To'
     number: *************."
    

    このメッセージを受け取った場合は、Twilio アカウントの GEO 設定を更新して、メッセージの送信先番号が属する領域に対する権限をアクティブにする必要があります。GEO 設定を更新するには、URL: https://www.twilio.com/console/sms/settings/geo-permissions にアクセスしてください。

  6. フロー・エディターの「Deploy (デプロイ)」ボタンをクリックします。

参考として、以下に最終的なアプリのフローを示します。

Figure 8. 図 2. 最終的なアプリのフロー
alt

7. Node-RED アプリをデプロイする

フロー・エディターで、「Deploy (デプロイ)」をクリックします。

おめでとうございます!デモ・アプリが完成しました。このアプリをデプロイすれば、コンピューターでもネットワークでも意のままに監視することができます。

まとめ

このチュートリアルを完了した今、Node-RED、IBM Cloud、および Twilio を利用すれば IoT アプリをいかに簡単に作成できるかを理解できたはずです。アプリのフローでは、標準的なノードとカスタム・ノードの両方を使用し、これらのノードを接続して構成しました。そして SMS アラートの受信側として皆さんの携帯電話を使用する設定で、このアプリをデプロイしました。

次は、どのような IoT アプリを作成したいと思いますか?