Raspberry Pi(ラズパイ) から Node-RED を使って Google SpreadSheetを更新する方法

はじめに

本記事ではラズパイから収集したデータを Googleが提供しているGoogle SpreadSheetに書き込む方法について説明します。

GCPのアカウントの作成については複雑な手順もありませんので、記事からは割愛します。

GCPアカウントでやっておくこと

APIの有効化

Google SpreadSheetをラズパイから制御するにあたり、APIを有効化しておく必要があります。GCPのWebコンソールにログインしたら、メニューにあるAPIとサービスライブラリを選択してください。

APIの検索欄が表示されますので、そこで sheet を入力し、表示される Google Sheets APIをクリックして下さい。

有効にするをクリックしてGoogle Sheets APIを使える状態としてください。

サービスアカウントの作成と秘密鍵の作成

次にサービスアカウントの作成と秘密鍵の作成を行います。こちらはラズパイからGoogle SpreadSheetを更新するためのアカウント作成と、先の手順で説明した Google Sheets APIをコールするための手続きとなります。

GCPのWebコンソールメニューのIAMと管理サービスアカウントを選択してください。

サービスアカウントの画面の上部にあるサービスアカウントを作成をクリックして下さい。

サービスアカウント名を任意の名前で設定し、完了をクリックして下さい。

これでアカウントが作成されますので、今度は操作のところにあるボタンをクリックし、鍵の作成を選択して下さい。

以下のように聞かれるので、JSONタイプを選択し、作成をクリックして下さい。

自動的に xxxxx.json という名前の秘密鍵のダウンロードが始まると思います。このファイルは大切に保管しておいてください。自分以外の人に見せたり、渡してはいけません。

Google SpreadSheetの準備

Google SpreadSheetの使い方については説明不要かと思いますので、適当なシートを1つ作成してください。

作成したシートの画面右上に共有のボタンがありますので、こちらをクリックして下さい。

すると以下の画面が開きます。

ここでユーザーを追加するのですが、ここには先ほどGCPの手順の中でダウンロードを実施した秘密鍵(xxxxx.json)に記載されている client_email を入れてください。

“client_email": “gcp-test@XXXXXXXX.iam.gserviceaccount.com“,

設定がすんだら以下の画面になりますので、共有をクリックして下さい。

これで Google SpreadSheetの設定も完了です。

ラズベリーパイのNode-REDの設定

node-red-contrib-google-sheets のインストール

使うノードは node-red-contrib-google-sheets となります。ラズベリーパイのNode-REDを起動し、画面右上のメニューからパレットの管理からこちらのノードをインストールしてください。

Gsheetの設定

インストールが完了したらGsheetのノードを置いて設定を行っていきます。

creds .. Google SpreadSheetにアクセスするためのcredentialを設定します。鉛筆マークをクリックすると、以下の画面になりますので、先ほどダウンロードした秘密鍵(xxxxx.json)の中身をそのままコピーして貼り付けてください。

Method .. 指定したセルに対するActionを以下の4つから選択します。今回はUpdate Cellsを使用します。

SpreadsheetID .. 書き込みを行いたいSheetのIDを指定します。SpreadSheetを開いた時のURLから抽出したものを設定してください。IDはURLの中で以下の赤字部分となります。

https://docs.google.com/spreadsheets/d/XXXXX/edit#gid=0

Cells .. 書き込みを行いたいSheetのタブ名+セルで指定します。

 例:sheet1!C2

Name .. 任意の名前を設定してください。

これでGsheetの設定も完了です。

その他のノードの設定

SpreadSheetへの書き込み動作を確認するために以下のようなフローを作成します。

タイムスタンプのノードはそのままで問題ありません。create payloadの中身は以下のような形です。Gsheetに書き込む値はmsg.payloadのなかみであることに注意してください。

また、Gsheetの後ろには正常にSpreadSheetへの書き込みが行えたかを確認するためにデバッグのノードを接続しておきます。

動作確認

タイムスタンプのノードの左のボタンをクリックすることで動作を確認します。正常に動作している場合はNode-REDのデバッグ欄に以下のようなメッセージが表示されているかと思います。(もしほかのメッセージが表示されている場合にはおそらく正常に動作しておりません。)

また、少し時間をおいてからSpreadSheetのほうを確認すると、以下のように書き込みが行われていることを確認が出来るかと思います。

最後に

皆さんの環境でも同様に動作の確認が出来ましたでしょうか?少し、いろんな要素が混じってしまい、難しい部分もあったかと思います。

もし何か不明なところがありましたらお気軽にお問合せ下さい。