はじめに
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のコンソールから 該当関数をクリックする。
編集 をクリック。
関数の詳細が開く。インラインエディタの index.js
を以下のように変更する。
[SERVICE_ACCOUNT_JSON]
は Firebase Cloud Firestoreを使ってみる でダウンロードしたサービスアカウントのJSONファイル内のJSONを記載する。
/**
* 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 タブをクリックする。
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が表示されている。
FirebaseコンソールのDatabaseを確認する。Functionsからデータがリアルタイムに追加されているのが確認できる。
まとめ
firebase-admin をCloud Functionsで実行することでFirebaseに簡単にデータを追加できる。ここまでできたら Firebase側で firebase-admin や Cloud Functions for Firebaseでデータを参照すればいい。
次は Cloud Functions for Firebase の Firestore triggerで追加されたデータを取得してみようと思う。