LoginSignup
21
17

More than 5 years have passed since last update.

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

Posted at

はじめに

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

21
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
17