IoTボード利用ガイド(メッセージ受信タイプ)

IoT Board Guide

IoT ボード利用ガイド

はじめに

IoT をビジネスに活用するにあたって課題となるのが、IoT デバイスが収集したデータをどうやってサーバーやクラウドに保存するかということです。サーバーやクラウドの構築には専門知識が必要です。また、それにかかる費用や期間も気になるところです。

IoT ボードでは、クラウドにデータを保存する仕組みを提供します。利用するクラウドには、セキュアで大規模データを高速に処理できる Google Cloud Platform を採用しています。

この IoT ボードを使えば、IoT デバイスからのデータを収集・蓄積する仕組みが、サーバーやクラウドに関する専門的な知識を必要とせず、簡単かつスピーディに構築できます。

IoT ボードとは何か

IoT ボードは、IoT デバイス(「デバイス」)から送られてくるデータを受け取り、ストレージに保存するクラウド型のシステムを提供します。

IoT ボード概略図

このシステムは、お客さまの Google Cloud Platform (「GCP」) プロジェクト上に、BLOCKS が自動で構築します。システムの構築(IoT ボードの作成)に、GCP に関する専門的な知識は不要です。

   IoT ボードのシステムは、お客さまの GCP プロジェクト上に構築するため、BLOCKS の料金とは別に「GCP サービスの利用料金」が発生します。

IoT ボードには、データの種類(「タイプ」)に応じて、2 つのタイプあります。

タイプ 説明
メッセージ受信タイプ
  • デバイスから加速度・温度・湿度などの比較的小さなデータ(「メッセージ」)を受け取り、BigQuery のテーブルにデータを保存します。
メッセージ受信タイプ概略図
ファイル受信タイプ
  • デバイスから画像ファイルや音声ファイルなどのファイル形式のデータを受け取り、Google Cloud Storage にファイルを保存します。
  • ログ(ファイル名や保存日時など)を保存できます(オプション)。
  • ファイルの保存を契機に、Big Data ボードのフローを実行します(オプション)。
ファイル受信タイプ概略図

IoT ボードの作り方

このドキュメントでは、メッセージ受信タイプの IoT ボードについて解説しています。

ファイル受信タイプの IoT ボードについては、「IoT ボード利用ガイド(ファイル受信タイプ)」で解説しています。

<セルフサービスプランの場合>
IoT ボードは、ユーザーの GCP プロジェクトに環境を構築します。このため、IoT ボードを作る前に、「GCP プロジェクトの作成」および「GCP の各種サービスにアクセスするためのサービスアカウントの作成」を済ませておく必要があります。

エンジニアブログの「GCP 入門 その 1 」を参考に準備してください。ブログ記事は、BigQuery ブロックの利用を前提としています。プロジェクト名やサービスアカウント名に、bigquery というキーワードを含めていますが、自由に設定して構いません。また、記事中の「MAGELLAN BLOCKS に GCP アカウントを登録する。」部分の作業は不要です。

なお、この準備には Google アカウントが必要です。Google アカウントをお持ちでない方は、Google アカウントの作成 ページで、Google アカウントを作成してから準備を進めてください。

IoT ボードを作る大まかな流れ

IoT ボードは、ボード一覧から「新規ボード作成」ボタンをクリックして、案内に沿って操作するだけで簡単に作れます。

以下は、IoT ボードを作るときの大まかな流れです。

  1. IoT ボード作成
    ボードの種類を選択して、ボードの名前を設定します。
  2. GCP サービスアカウント設定(セルフサービスプランのみ)
    IoT ボードで使用する GCP サービスアカウントを設定します。
  3. エントリーポイント設定
    デバイスが IoT ボードへデータを送るときの送り先の設定をします。
  4. プロセス設定
    IoT ボードが受け取ったデータをどう処理するかを設定します。
  5. ストレージ設定
    IoT ボードが受け取って処理したデータをどう保存するかを設定します。
  6. 入力内容の確認
    これまでの設定内容を確認します。

それぞれについて、以降で詳しく解説します。

IoT ボード作成

「IoT ボード作成」は、ボード一覧の画面から「新規ボード作成」ボタンをクリックします。

新規ボード作成

新規ボード作成画面で、「IoT ボード」を選択して「次へ」ボタンをクリックします。

IoT ボード選択

続いて、IoT ボードのタイプを選択して、「次へ」ボタンをクリックします。

メッセージ受信タイプ選択

タイプは、以下の説明を参考にして選択してください。

タイプ 説明
メッセージ受信タイプ
  • デバイスから加速度・温度・湿度などの比較的小さなデータ(「メッセージ」)を受け取り、BigQuery のテーブルにデータを保存します。
メッセージ受信タイプ概略図
ファイル受信タイプ
  • デバイスから画像ファイルや音声ファイルなどのファイル形式のデータを受け取り、Google Cloud Storage にファイルを保存します。
  • ログ(ファイル名や保存日時など)を保存できます(オプション)。
  • ファイルの保存を契機に、Big Data ボードのフローを実行します(オプション)。
ファイル受信タイプ概略図

ボード名には、わかりやすい名前をつけておくと、管理しやすくなります。

IoT ボード名設定(メッセージ受信)

設定が完了したら、「次へ」ボタンをクリックします。

GCP サービスアカウント設定

   このステップはセルフサービスプランの場合のみです。

ここでは、GCP サービスアカウントの選択と GCP のサービスを利用するための API を有効にします。

IoT ボード(メッセージ受信)GCP サービスアカウント設定
GCP サービスアカウント選択

使用する GCP サービスアカウントをリストから選択します。

API の有効化

「確認」ボタンの前にチェックマークが付いていない API がある場合は、以下の操作を行います。

  1. チェックマークが付いていない API のリンクをクリックします。
  2. 「Google API Console」画面上部の「有効にする」ボタンをクリックします。
  3. 「有効にする」ボタンが「無効にする」ボタンに切り替わったら、Google API Console の画面を閉じて、BLOCKS の画面に戻ります。

すべての API について、上記操作が終わったら、「確認」ボタンをクリックします。「確認」ボタンの前にチェックマークが付くことを確認してください。

もし、チェックマークが付かない場合は、しばらく時間をおいてから「確認」ボタンをクリックしてください。状況によっては、なかなかチェックが付かない場合もあります。その場合は、チェックマークが付くまで、しばらく時間をおく→「確認」ボタンをクリックする操作を繰り返してください。

が表示される原因としては、以下のことが考えられます。

  • 対象となる API が有効化されていない。
    API 名横の をクリックして、表示されるページで確認します。もし、有効となっていない場合は、有効にします。
  • GCP サービスアカウントの役割が「編集者」となっていない。
    GCP コンソール メニュー(GCP コンソール左上の )の「IAM と管理」をクリックし、「IAM」で確認します。もし、役割が「編集者」となっていない場合は、「編集者」を選択します。
  • 対象となる GCP プロジェクトの課金が有効になっていない。
    GCP コンソール メニュー(GCP コンソール左上の )の「お支払い」で確認します。もし、課金が有効になっていない場合は、課金を有効にします。

設定が完了したら、「次へ」ボタンをクリックします。

エントリーポイント設定

ここでは、エントリーポイント URL の設定を行います。

IoT ボード(メッセージ受信)エントリーポイント設定

エントリーポイントとは、デバイスが IoT ボードへデータを送るときの送り先(データを受け取って処理する部分の受け取り口)のことです。エントリーポイントは、URL で示されます。デバイスは、このエントリーポイント URL に HTTP の POST メソッドでデータを送ります。

エントリーポイント説明図

エントリーポイント URL は、以下のように形式が決まっています。一部のみ自由に設定することができます。

https://magellan-iot-<*****>-dot-<プロジェクト ID>.appspot.com

項目 説明
<*****>

この IoT ボードのエントリーポイントを特定するための文字列です。自由に設定できます。デフォルトの値は、ランダムな 16 進数文字列です。

  • 使用できる文字は、英小文字(a 〜 z)、数字 (0 〜 9) およびハイフン (-) です。
  • 末尾の文字は、数字か英小文字でなければなりません。
  • 文字数は、プロジェクト ID の長さによって変わり、15 文字から 27 文字までです。

1 つの GCP プロジェクトで、複数の IoT ボードを作成する場合は、文字列が重複しないように設定してください。

<プロジェクト ID> GCP プロジェクト のプロジェクト ID が自動で設定されます。変更できません。

設定が完了したら、「次へ」ボタンをクリックします。

プロセス設定

ここでは、プロセスに関するオプション設定を行います。

IoT ボード(メッセージ受信)プロセス設定

プロセスとは、エントリーポイントで受け取ったデータを処理する部分のことです。

オプション設定では、GKE に関する設定を行います。

設定項目 説明
マシンタイプ

GKE で使用する仮想マシンの種類を選択します。

  • n1-standard-1 (1 仮想 CPU、3.75 GB メモリ)
  • g1-small (0.5 仮想 CPU、1.70 GB メモリ)

デフォルト値は、n1-standard-1 です。

MAGELLAN BLOCKS の料金とは別に、GCE のマシンタイプごとの料金 が適用されます。

起動 VM の数(ノード)

GKE で起動する仮想マシンのインスタンス(ノード)数を指定します。

起動 VM 数が 5 までは無料です。6 以上になると、MAGELLAN BLOCKS の料金とは別に GCP の課金対象となり、GKE の料金 が適用されます。

設定が完了したら、「次へ」ボタンをクリックします。

ストレージ設定

ここでは、ストレージに関する設定を行います。

IoT ボード(メッセージ受信)ストレージ設定

ストレージとは、デバイスから送られてくるデータの保存先です。ストレージでは、データの種類ごとに、データを分けて保存できます。

データの種類は、メッセージタイプで識別します。メッセージタイプは、デバイスが送るデータの種類を示す識別子であり、ストレージの保存先を示す識別子です。
IoT ボードへデータを送るデバイスは、IoT ボードへ送るデータに、このメッセージタイプを含めなければなりません。IoT ボードは、この「メッセージタイプ」を元に、送られてきたデータをストレージのどこにデータを保存するかを決定します。

メッセージタイプ解説図

ここでは、送られてくるデータと保存先に関する情報を設定をします。この設定では、送られてくるデータと保存先に関する情報の追加、編集、削除ができます。

  • 追加する場合は、「保存先を追加する」リンクをクリックします。
  • 編集する場合は、保存先一覧から編集したい情報の編集欄のアイコンをクリックします。
  • 削除する場合は、保存先一覧から削除したい情報の削除欄のアイコンをクリックします。

なお、現バージョンでサポートするストレージは、BigQuery のみです。このため、データの保存先に関する情報の設定は、BigQuery のテーブルに関する情報です。

BigQuery ストレージで、追加・編集する情報は、次のとおりです。

項目 説明
メッセージタイプ

保存するデータのメッセージタイプを設定します。

ここで設定したメッセージタイプのデータが以下で設定する BigQuery のテーブルに保存されます。

データセット データを保存する BigQuery のデータセット ID を設定します。
テーブル データを保存する BigQuery のテーブル名を設定します。
スキーマ

テーブルのスキーマを設定します。

テーブル分割

データ保存先のテーブルを日ごとや月ごとに分割する設定をします。

テーブルを分割する場合は、「テーブル分割に使用する時間(フィールド)」も設定します。

テーブル分割補足

「テーブル分割に使用する時間(フィールド)」には、スキーマ中のデータ型が TIMESTAMP のフィールドと、「IoT ボードに送られた時間を使用する」が選択候補と列挙されています。「IoT ボードに送られた時間を使用する」を選択すると、IoT ボードがデータを受け取った時間をテーブル分割に使用します。

日ごとや月ごとにテーブルを分割するとテーブル名にはサフィックス(テーブル名の末尾に追加する文字列)がつきます。日ごと、月ごとにつくサフィックスの仕様は、次のとおりです。

  • 日ごと: _%Y%m%d
  • 月ごと: _%Y%m01

%Y、%m、%d は、「テーブル分割に使用する時間(フィールド)」が示す時間情報に応じて、それぞれ年(西暦 4 桁)、月(2 桁)、日(2 桁)に置き換わります。例えば、テーブル名が sample で、日ごとのテーブル分割を選択した場合、sample_20160905、sample_20160906 などのようにテーブルが分割されます。

設定が完了したら、「次へ」ボタンをクリックします。

入力内容の確認

ここでは、これまで設定した内容が確認できます。

IoT ボード(メッセージ受信)入力内容の確認

設定内容に間違いがないかを確認して、もし間違いがあれば「前へ」ボタンをクリックして、間違いを修正する設定画面まで戻ります。設定に間違いがなければ、「完了」ボタンをクリックします。

IoT ボードの作成には、しばらく時間がかかります。IoT ボードの作成が完了すると、IoT ボードの詳細画面に切り替わります。

IoT ボードへデータを送る方法

ここでは、デバイスから IoT ボードへデータを送る方法について解説します。

デバイスから IoT ボードへデータを送るためには、次の 3 つの情報が必要です。

  • エントリーポイント URL
  • API トークン
  • メッセージタイプ

これらの情報は、IoT ボードの詳細画面で確認できます。「IoT ボードの詳細画面」は、確認したい IoT ボードをクリックして、ボード一覧右下の「詳細を見る」ボタンをクリックすると表示されます。

デバイスから IoT ボードへデータを送るときは、このエントリーポイント URL に HTTP の POST メソッドでアクセスしてください。

また、送るデータは JSON 形式にします。API トークンやメッセージタイプは、JSON 形式のデータに含めます。

API に送るデータの解説図

IoT ボードに送る JSON 形式のデータ仕様は、次のとおりです。

{
  "api_token": "************************",
  "logs": [
    {
      "type": "message",
      "attributes": {
        "date": 1473642000,
        "name": "device_001",
        "message": "hello"
      }
    }
  ]
}

各メンバー(名前と値の組)の意味は次のとおりです。

名前 値の説明
"api_token" API トークンを文字列で指定します。
"logs"

データをオブジェクト値の配列で指定します。

  • オブジェクト値: {...} という形式、... はカンマ区切りのメンバーが 1 個以上
  • 配列: [{...}, {...}] という形式
"type" メッセージタイプを指定します。メッセージタイプによって、ストレージのどこ(BigQuery ストレージの場合はテーブル)に保存するかが決まります。
"attributes"

ストレージに保存するデータをオブジェクト値で指定します。

BigQuery ストレージの場合は、名前がそのデータを保存するテーブルのフィールド名、値がそのフィールドに保存するデータ値です。

日時として扱うフィールド(今回の例では、名前 "date" の値 1473642000)は、UNIX 時間の形式で指定する必要があります。

次の例は、2 種類のデータをまとめて IoT ボードへ送るときの JSON 形式データです。

{
  "api_token": "************************",
  "logs": [
    {
      "type": "message",
      "attributes": {
        "date": 1473642000,
        "name": "device_001",
        "message": "hello"
      }
    },
    {
      "type": "temperature",
      "attributes": {
        "date": 1473642000,
        "name": "device_fukuoka_001",
        "temperature": 24.5
      }
    }
  ]
}

GCP サービスの利用料金

IoT ボードは、ユーザーの GCP プロジェクトに各種 GCP サービスを利用した環境を構築します。

このため、MAGELLAN BLOCKS の料金とは別に GCP の料金が発生します。適用される料金は、サービスごとに異なります。詳しくは、IoT ボードで使用する各サービスごとの料金ページを参照してください。

IoT ボードの使い方

ここでは「IoT ボードの作り方」を踏まえて、IoT デバイスから 2 種類のデータを収集する IoT ボードを実際に作ってみます。

作成する IoT ボードの仕様概略図

作成する IoT ボードの仕様

収集するデータは、次の 2 種類のデータとします。

データの種類 データの内容
メッセージ
  • メッセージを送信する日時: UNIX 時間形式の日時
  • メッセージを送信するデバイス名: 文字列
  • メッセージ: 文字列
温度
  • 温度を送信する日時: UNIX 時間形式の日時
  • 温度を送信するデバイス名: 文字列
  • 温度: 数値

これらのデータを保存するストレージの設定は、次のとおりとします。

メッセージデータ保存用:
項目
メッセージタイプ message
データセット sample
テーブル messages
スキーマ
フィールド名 データ型 モード
date TIMESTAMP REQUIRED
name STRING REQUIRED
message STRING NULLABLE
テーブル分割 date フィールドを使って、日ごとに分割する
温度データ保存用:
項目
メッセージタイプ temperature
データセット sample
テーブル temperatures
スキーマ
フィールド名 データ型 モード
date TIMESTAMP REQUIRED
name STRING REQUIRED
temperature FLOAT NULLABLE
テーブル分割 date フィールドを使って、日ごとに分割する

IoT ボードを作る

それでは、これらの情報を元に、以下の内容で IoT ボードを作成します。

画面 項目 内容
IoT ボード作成 タイプ選択 「メッセージ受信タイプ」を選択します。
ボード名 ボード名は自由に設定してください。
GCP サービスアカウント設定(セルフサービスプランのみ) GCP サービスアカウント選択 GCP サービスアカウントを選択します。
エントリーポイント設定 オプション設定 デフォルトのままとします。
プロセス設定 オプション設定 デフォルトのままとします。
ストレージ設定 保存先 作成する IoT ボードの仕様」記載の「メッセージデータ保存用」と「温度データ保存用」を追加します。

試してみる

ここでは、IoT ボードへデータを送る方法をデバイスの代わりに PC を使って、IoT ボードへデータを送ります。PC から IoT ボードへデータを送るには、Unix 系の curl コマンドを使うと便利です。

今回、IoT ボード接続情報とデバイスから送るデータの内容は、次のとおりとします。

IoT ボードへの接続情報:
項目
エントリーポイント URL https://magellan-iot-*****-dot-magellan-iot-sample.appspot.com
API トークン *****
1 つ目のデータ:
項目 名前
メッセージタイプ "type" "message"
メッセージを送信する日時 "date" 1473642000
(2016/09/12 10:00)
メッセージを送信するデバイス名 "name" "device_001"
メッセージ "message" "hello"
2 つ目のデータ:
項目 名前
メッセージタイプ "type" "temperature"
温度を送信する日時 "date" 1473642600
(2016/09/12 10:10)
温度を送信するデバイス名 "name" "device_fukuoka_001"
温度 "temperature" 24.5

curl コマンドを使ったデータ送信は次のとおりです。

1 つ目のデータ送信:

curl --data '{"api_token":"*****","logs": [{"type": "message","attributes": {"date": 1473642000,"name": "device_001","message": "hello"}}]}' https://magellan-iot-*****-dot-magellan-iot-sample.appspot.com/

2 つ目のデータ送信:

curl --data '{"api_token":"*****","logs": [{"type": "temperature","attributes": {"date": 1473642600,"name": "device_fukuoka_001","temperature": 24.5}}]}' https://magellan-iot-*****-dot-magellan-iot-sample.appspot.com/

なお、次のように、2 つのデータをまとめて送ることもできます。

curl --data '{"api_token":"*****","logs": [{"type": "message","attributes": {"date": 1473642000,"name": "device_001","message": "hello"}},{"type": "temperature","attributes": {"date": 1473642600,"name": "device_fukuoka_001","temperature": 24.5}}]}' https://magellan-iot-*****-dot-magellan-iot-sample.appspot.com/

結果は、BigQuery の画面で確認します。

メッセージデータ:

bigquery_storage_data1

温度データ:

bigquery_storage_data2