お問い合わせ
ご不明な点がございましたら、お気軽にお問い合わせ下さい。
ピクスー株式会社
- 所在地: 〒150-0002 東京都渋谷区渋谷1-20-9 co-factory渋谷402 ピクスー株式会社
- メール: info@webiot.io
- 電話番号: 090-9863-0987(担当:塩澤)
このページでは、ウェビオのデータをデータ連携機能を用いて、Google Cloud Platform(GCP)上のBigQueryに転送します。
BigQueryに転送することで、GCP上でウェビオのデータを分析・利用することができるほか、Data Portalでリアルタイムにデータを可視化することが可能になります(参考: Data Portalを用いた可視化)。
データ連携機能から直接BigQueryにデータを取り入れることはできないため、Google Cloud Functionsを利用します。 ウェビオコンソールからCloud Functionsへのデータ連携を設定することで、BigQueryにデータを転送します。
GCPは有料サービスのため、使用料によっては支払いが発生する場合があります。
下記の設定で、1分間に75データをBigQueryに転送した場合、月500円程度で利用することができます。 (弊社の試算によるもので、正確な料金については保証いたしかねます)
まずはBigQueryで、データを保存しておくためのテーブルを作成します。 GCPのメニューからBigQueryを開きます。
ページ内に表示されているプロジェクト(例: webiot-bigquery)をクリックし、「データセットを作成」を選択してください。 「データセットID(例: dataset_01)」を入力して、データセットを作成してください。
さらに、作成したデータセットをクリックし、「テーブルを作成」を選択してください。 「テーブル名(例: table_01)」を入力して、テーブルを作成してください。
ここまででこのような構成になります。
続いて、テーブルのスキーマ(カラム)の設定を行います。
作成したテーブル(例: table_01)をクリックし、「スキーマを編集」を選択してください。 「フィールドを追加」をクリックし、4 事前準備で選定したデータ項目を記入します。
「テキストとして編集」をオンにして以下のテキストをコピー&ペーストし、「テキストとして編集」をオフにすることで、すべての項目が入力されます。 必要に応じて不要な項目を右端の×で消去してください。
webiot_id:STRING,webiot_name:STRING,gateway_id:STRING,gateway_name:STRING,unixtime:INTEGER,datatype:STRING,value:FLOAT,unit:STRING,value01:FLOAT,value02:FLOAT,value03:FLOAT,data_id:STRING,packet_id:INTEGER,rssi:FLOAT,battery:FLOAT
必要な項目を追加し終えたら、「保存」を押してください。
続いて、BigQueryにデータを挿入するCloud Functionsを作成します。
まずは、BigQueryへの書き込み権限のあるユーザ(サービスアカウント)を作成します。 GCPのメニューから「IAMと管理」の中にあるサービスアカウントを開きます。
「サービスアカウントを作成」を選択します。
1. サービスアカウントの詳細
では、サービスアカウント名(例: webiot-bigquery-dataowner)を入力して、「作成」を選択します。
2. このサービスアカウントにプロジェクトへのアクセスを許可する
では、「BigQueryデータオーナー」の権限を追加して、「続行」を選択します。
3. ユーザーにこのサービス アカウントへのアクセスを許可
では、必要に応じて設定を追加してください。このチュートリアルでは設定する必要はありません。
「完了」を選択して設定を終了してください。
続いて、Cloud Functionsを作成します。 GCPのメニューからCloud Functionsを開きます。
「関数の作成」を選択します。
ここで設定することは4つあります。
設定ができたら、トリガーを保存して「次へ」を選択します。
次に、実行するコードの設定をします。
まず、ランタイムがNodeであることを確認します。 バージョンはどれでもかまいませんが、2021年現在では12を利用するのが一番安定しています。
次に、エントリポイントをwebiot
としてください。
続いて、index.js
に次のコードをコピー&ペーストします。
3,4行目のデータセット名とテーブル名を、5.1 BigQuery の準備で作成したものに書き換えてください。
(注) req.body.keyはセキュリティのために追加しています。別の文字列に変更する場合は、5.3 Webiot データ連携の設定のBODYのkeyが同じ文字列になるようにしてください。
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();
const dataset = bigquery.dataset('dataset_01'); // 作成したデータセットの名前に変更してください
const table = dataset.table('table_01'); // 作成したテーブルの名前に変更してください
exports.webiot = (req, res) => {
// APIキーが一致しているかチェック
if(req.body.key !== 'sxPSpsUpd2xuiaHTWH8x') {
res.status(403).json({ msg: 'Wrong key' });
return;
}
// 空白文字列""は挿入できない場合があるので、nullに置き換える
const row = req.body.data;
Object.keys(row).forEach(key => {
if(row[key] == "") {
row[key] = null;
}
});
// BigQueryにデータを追加
table.insert(row, (error, apiRes) => {
if (error) { // データ追加時にエラーが発生した場合
const body = { msg: 'bigquery-api-error', code: error.code, errors: JSON.stringify(error.errors), row: JSON.stringify(row) };
console.error(body);
res.status(error.code).json(body);
return;
}
// データ追加に成功した場合
res.status(200).json({ row: row, apiRes: apiRes });
})
};
さらに、package.json
には次のコードをコピー&ペーストします。
{
"name": "webiot-bigquery",
"version": "0.0.1",
"dependencies": {
"@google-cloud/bigquery": "^5.5.0"
}
}
「デプロイ」を選択します。 数分待つとビルドが完了して利用できるようになります。
関数の詳細を開き、「トリガー」タブに表示されている「トリガーURL」を確認します。 このURLはデータ連携時に使用するので、コピーしておいてください。
最後にウェビオコンソールでデータ連携の設定をし、Cloud Functionsにセンサデータを転送します。 ウェビオコンソールのデータ連携ページを開きます。
「ルール追加」のボタンを押し、HTTP POSTを選択します。
次は、Big Queryにデータを送信したいセンサを選択します。チームを選択するとセンサーが表示されるので、必要なデータタイプを選択してください。
続いての画面の「送信先URL」には、Cloud Functionsの「トリガーURL」をペーストします。 「BODY」には以下の内容をコピー&ペーストし、4 事前準備で選定したデータ項目以外を消去してください。
5.2.2 Cloud Functions を作成するでkeyを変更した場合は、keyの値を書き換えてください。
{
"key": "sxPSpsUpd2xuiaHTWH8x",
"data": {
"webiot_id": "{{id}}",
"webiot_name": "{{name}}",
"gateway_id": "{{gatewayid}}",
"gateway_name": "{{gatewayname}}",
"unixtime": "{{unixtime}}",
"datatype": "{{datatype}}",
"value": "{{value}}",
"unit": "{{unit}}",
"value01": "{{value01}}",
"value02": "{{value02}}",
"value03": "{{value03}}",
"data_id": "{{dataid}}",
"packet_id": "{{packetid}}",
"rssi": "{{rssi}}",
"battery": "{{battery}}"
}
}
最後に「設定する」を選択します。
BigQueryを開きます。
データを追加するテーブルのプレビューからデータが追加されていることが確認できたら設定は完了です。
センサには新しいデータが来ているのに、BigQueryにデータが転送されていない場合、エラーが起きている可能性があります。
ウェビオコンソールのデータ連携ページの「ログ」や、Cloud Functionsの詳細ページの「ログ」のタブで、エラーの内容を確認することができます。
ウェビオコンソールからログを確認した場合、下のような画面が表示されます。 エラーが発生したものはコードの部分が赤色になるので、「詳細」ボタンをクリックしてエラーを確認してください。
今回は、データ連携機能を用いてウェビオのデータをBigQueryに転送しました。 BigQueryにリアルタイムにデータを転送することで、Google Cloud Platform上でウェビオのデータを分析・利用できるようになります。
BigQueryに保存したデータをData Portalでグラフにする記事も公開しています。 もしご興味がありましたらご覧ください。
お問い合わせ
ご不明な点がございましたら、お気軽にお問い合わせ下さい。
ピクスー株式会社