Node.js
GoogleCloudPlatform
Firebase
Firestore
IoTCore

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

はじめに

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で追加されたデータを取得してみようと思う。