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

IoT Board Guide

IoT ボード利用ガイド

はじめに

この機能はベータ版です。正式版リリース後、本機能は利用できなくなります。ご注意ください。

正式版リリース後は、正式版の機能をご利用ください。

また、ベータ版での提供となるため、一部の機能が正常に動作しない可能性があります。機能改善や不具合などのフィードバックは、フォーラムやお問い合わせで情報提供をお願いします。フィードバックの内容は MAGELLAN BLOCKS の品質向上のために利用いたします。

IoT ボードとは何か

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

IoT ボード概略図

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

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

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

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

   現バージョンで作成できる IoT ボードの数は、5 ボード / 組織[1]までです。

IoT ボードの作り方

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

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

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

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

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

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

IoT ボードは、ボード一覧(MAGELLAN BLOCKS ログイン直後の画面)から IoT ボードの [追加する] ボタンをクリックして、案内に沿って操作するだけで簡単に作れます。

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

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

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

IoT ボード作成

「IoT ボード作成」は、ボード一覧の画面から IoT ボードの [追加する] ボタンをクリックすると、表示される画面です。

ここでは、IoT ボードの名前(「ボード名」)と、ボードのタイプ(「タイプ選択」)を設定します。

ボード名には、わかりやすい名前をつけておくと、管理しやすくなります。なお、IoT ボード作成後、名前は変更できません。

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

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

ボード名とタイプ選択が完了したら、[次へ] ボタンをクリックして、「GCP サービスアカウント設定」へ進みます。

([キャンセル] ボタンをクリックすると、IoT ボードは作らずに、ボード一覧画面に戻ります。ここで設定した内容は残りません。)

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

「GCP サービスアカウント設定」は、「IoT ボード作成」画面で [次へ] ボタンをクリックすると表示される画面です。

ここでは、GCP のサービスアカウントキーファイル(JSON 形式)を次のいずれかの方法で登録(「アップロード」)します。

  • ドラッグ&ドロップの操作で、「GCP サービスアカウント JSON ファイルアップロード」にファイルをドロップする
  • [ファイルを選択] ボタンをクリックしファイルを指定する

「GCP プロジェクト」や「GCP サービスアカウント」の準備ができていない場合は、エンジニアブログの「GCP 入門 その 1 」を参考に準備してください。

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

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

GCP サービスアカウントキーのアップロードが完了したら、[次へ] ボタンをクリックして、「エントリーポイント設定」へ進みます。

([キャンセル] ボタンをクリックすると、IoT ボードは作らずに、ボード一覧画面に戻ります。ここまで設定した内容は残りません。)

エントリーポイント設定

「エントリーポイント設定」は、「GCP サービスアカウント設定」画面で [次へ] ボタンをクリックすると表示される画面です。

ここでは、以下のエントリーポイントに関する設定を行います。

  • App Engine Admin API (「Admin API」) の有効化
  • Google Cloud Pub/Sub API (「Cloud Pub/Sub API」) の有効化
  • 接続先 URL の設定

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

エントリーポイントのイメージ図

   エントリーポイントでファイルを受け取る処理は、Google App Engine (「GAE」) と Google Cloud Pub/Sub (「Cloud Pub/Sub」) で実現しています。この GAE と Cloud Pub/Sub を使ったシステムの構築は BLOCKS 側で行いますが、そのためには Admin API と Cloud Pub/Sub API を有効にする必要があります。

API を有効化する手順は以下のとおりです。

  1. API のリンクをクリックします。
    別タブに GCP の画面が表示されます。
  2. 画面上部にある [有効にする] ボタンをクリックします。
  3. [有効にする] ボタンが [無効にする] に変化したら、画面を閉じて BLOCKS の画面に戻ります。
  4. [更新する] ボタンをクリックします。
    API の状態表示が「有効化済み」と表示されます。「有効化済み」とならない場合は、しばらく時間をおいてから [更新する] ボタンをクリックしてください。

また、接続先 URL は、以下のように形式が決まっています。一部のみ自由に設定することができます。

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

項目 説明
<*****>

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

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

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

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

エントリーポイントの設定が完了したら、[次へ] ボタンをクリックして、「プロセス設定」へ進みます。

([キャンセル] ボタンをクリックすると、IoT ボードは作らずに、ボード一覧画面に戻ります。ここまで設定した内容は残りません。)

プロセス設定

「プロセス設定」は、「エントリーポイント設定」画面で [次へ] ボタンをクリックすると表示される画面です。

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

ここでは、以下のプロセスに関する設定を行います。

  • Google Container Engine (「GKE」) API の有効化
  • オプション設定

   データを処理する部分では、GKE を活用しています。GKE を使ったシステムの構築は BLOCKS 側で行いますが、そのためには GKE API を 有効にする必要があります。

API を有効化する手順は以下のとおりです。

  1. API のリンクをクリックします。
    別タブに GCP の画面が表示されます。
  2. 画面上部にある [有効にする] ボタンをクリックします。
  3. [有効にする] ボタンが [無効にする] に変化したら、画面を閉じて BLOCKS の画面に戻ります。
  4. [更新する] ボタンをクリックします。
    API の状態表示が「有効化済み」と表示されます。「有効化済み」とならない場合は、しばらく時間をおいてから [更新する] ボタンをクリックしてください。

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

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

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

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

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

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

起動 VM の数(ノード)

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

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

プロセスの設定が完了したら、[次へ] ボタンをクリックして、「ストレージ設定」へ進みます。

([キャンセル] ボタンをクリックすると、IoT ボードは作らずに、ボード一覧画面に戻ります。ここまで設定した内容は残りません。)

ストレージ設定

「ストレージ設定」は、「プロセス設定」画面で [次へ] ボタンをクリックすると表示される画面です。

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

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

iot_board_data_type

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

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

なお、現バージョンでサポートするストレージは、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 ボードは作らずに、ボード一覧画面に戻ります(ここまで設定した内容は残りません)。

[完了] をクリックすると、ユーザーの GCP プロジェクトに作成される IoT ボード関連のリソースが一覧表示されます。これらのリソースは、IoT ボード作成後、GCP プロジェクトから誤って削除しないように気をつけてください。

このまま、IoT ボードの作成を続ける場合は、[OK] ボタンをクリックしてください。ここで、[OK] ボタンをクリックすると、IoT ボードの作成が開始されます。

[キャンセル] ボタンをクリックすると、IoT ボードは作成せずに、「入力内容の確認」画面に戻ります。

IoT ボードの作成には、しばらく時間がかかります。IoT ボードの作成が完了すると、IoT ボードの詳細画面に切り替わり、画面上部に IoT ボードの作成が完了した旨のメッセージが表示されます。

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

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

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

  • 接続先 URL
  • API トークン
  • メッセージタイプ

「接続先 URL」と「API トークン」は、「IoT ボードの詳細画面」の「IoT ボード接続情報」で確認できます。「IoT ボードの詳細画面」は、確認したい IoT ボードの [詳細] ボタンをクリックすると表示されます。

iot_board_connection_information_ja

メッセージタイプは、「IoT ボードの詳細画面」の「設定内容」の「ストレージ」で確認できます。

settings_summary_ja

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

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

iot_board_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_board_how_to_use

作成する 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 サービスアカウント設定 ファイル名 JSON 形式の 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

[1] 組織とは、何人かの MAGELLAN BLOCKS ユーザーをひとつにまとめる仕組みです。組織は、BLOCKS アカウント登録時に、自動で作成されます。この組織には、自身のアカウントのみが所属しています。現バージョンでは、組織を追加したり、他の組織に所属したりできません。従って、現時点では、「組織 = ユーザー」となっています。