Node.js
GoogleCloudPlatform
Firebase
Firestore
IoTCore

IoT CoreからCloud Functions経由でFirestoreにデータを追加する

More than 1 year has passed since last update.


はじめに

Firebaseはモバイルフロントエンドを作るのに大変便利なプラットフォームなので、IoT的なアプリをFirebaseにホストしたくなるものである。

GCPにはIoT Coreというデバイスとクラウドをつなぐプラットフォームもあるので、IoT CoreからMQTTかなんかでデータをパブリッシュしてFirebaseでPub/Subできればデバイスのデータを可視化するアプリなんかはすぐできそう感じがする。しかもほぼ無料で。

というわけで、いままで試してきた Firebase Cloud Firestoreを使ってみるGoogle Cloud IoT Coreを使ってみるCloud Functions で IoT CoreをPubSubしてみる を参考にIoT CoreからCloud Functionsを経由してFirestoreにデータを追加してみる。


やってみる

Cloud Functions で IoT CoreをPubSubしてみる で作ったbtf-test-iot 関数を更新する。まず、Functionsのコンソールから 該当関数をクリックする。

スクリーンショット 2018-03-24 12.06.29.png

編集 をクリック。

スクリーンショット 2018-03-24 12.07.08.png

関数の詳細が開く。インラインエディタの index.js を以下のように変更する。

[SERVICE_ACCOUNT_JSON]Firebase Cloud Firestoreを使ってみる でダウンロードしたサービスアカウントのJSONファイル内のJSONを記載する。


index.js

/**

* Triggered from a message on a Cloud Pub/Sub topic.
*
* @param {!Object} event The Cloud Functions event.
* @param {!Function} The callback function.
*/

const admin = require('firebase-admin');

const serviceAccount = [SERVICE_ACCOUNT_JSON]

admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});

var db = admin.firestore();

exports.subscribe = (event, callback) => {
// The Cloud Pub/Sub Message object.
const pubsubMessage = event.data;

// We're just going to log the message to prove that
// it worked.
var message = Buffer.from(pubsubMessage.data, 'base64').toString();

var docRef = db.collection('messages').add({
"message": message,
"created": Date.now()
}).then(function(docRef) {
console.log("Document written with ID: ", docRef.id);
}).catch(function(error) {
console.error("Error adding document: ", error);
});

// Don't forget to call the callback.
callback();
};


インラインエディタの package.json タブをクリックする。

スクリーンショット 2018-03-24 12.16.33.png

package.json を以下のように変更する。


package.json

{

"name": "sample-pubsub",
"version": "0.0.1",
"dependencies": {
"firebase-admin": "^5.10.0"
}
}

変更したら、保存 をクリックして関数をデプロイする。

Cloud Functions で IoT CoreをPubSubしてみる で作成したIoT Core パブリッシュ用のコードを実行する。

node index.js

実行後しばらくしてFunctionsのログを確認するとFirestoreから追加したドキュメントのIDが表示されている。

スクリーンショット 2018-03-24 12.24.52.png

FirebaseコンソールのDatabaseを確認する。Functionsからデータがリアルタイムに追加されているのが確認できる。

スクリーンショット 2018-03-24 12.27.02.png


まとめ

firebase-admin をCloud Functionsで実行することでFirebaseに簡単にデータを追加できる。ここまでできたら Firebase側で firebase-admin や Cloud Functions for Firebaseでデータを参照すればいい。

次は Cloud Functions for Firebase の Firestore triggerで追加されたデータを取得してみようと思う。