ABLICのPH-Aシリーズで通信データをGoogle spread sheetに保存する設定をしてみました

今回は、前回USBに保存していた漏水センサー情報をGoogle spread sheetに記録するロジックを紹介しようと思います。
Google spread sheetは無料でお使いできます。

センサー情報の取得

前回追加した、センサーのデータ取得の部分を使っていきます。
内容は下記URLになりますが、今回も簡単に記載しますので興味のある方はご確認ください。

まずはfunctionノードを、jsonノードとセンサー番号取得の間に追加します。

中身を開き、下記コードを追加します。(タイムコードになります)

// ペイロードから日付オブジェクトを生成
let date = new Date();
//年・月・日を取得する
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
month = ("0" + month).slice(-2);
day = ("0" + day).slice(-2);
//時・分・秒を取得する
let hour = date.getHours();
let minute = date.getMinutes();
let second = date.getSeconds();
hour = ("0" + hour).slice(-2);
minute = ("0" + minute).slice(-2);
second = ("0" + second).slice(-2);
// 日付文字列に変換して再度ペイロードをセット
msg.time = year + "/" + month + "/" + day + "_" + hour + ":" + minute + ":" + second;

return msg;

次に、センサー番号取得の中身を開き、下記コードに書き換えます。

var data00

//データの読み取り
data00 = msg.payload.data;
//データからminor部分を取り出し数値に変換する
var minor_hex = data00.slice(-6, -2);
var minor = parseInt(minor_hex, 16);
//データからmajor部分を取り出し数値に変換する
var major_hex = data00.slice(-10, -6);
var major = parseInt(major_hex, 16);
//デバイスから直接取れるデータはmsgで直接入れる
var deviceId = msg.payload.deviceId;
var time = msg.time;
var rssi = msg.payload.rssi;
msg.payload = {
    "time": time,
    "major_Dec": major,
    "minor_Dec": minor,
    "deviceId": deviceId,
    "rssi": rssi,
};
return msg;

ここまでが前回と同じ部分になります。

Google Spread Sheetの設定

Sheetの設定をするには、Google cloudからAPIの設定をする必要があります。
下記URLからCloudの設定画面を開き、有効なAPIとサービスから「プロジェクトを選択」をクリックして新しいプロジェクトを作ります。
https://console.cloud.google.com/apis/dashboard

プロジェクト名を決め、保存先を決め作成をクリックします。(Google cloud内のフォルダー分け)

そうすると、有効なAPIとサービスにグラフなどが表示されます。そうしたら、APIとサービスの横の「+APIとサービスを有効にする」をクリックします。

検索で「Google Sheets API」と検索し、有効にします。

次に、左の欄から認証情報を開き、認証情報の作成をクリックします。

タイプはサービスアカウントを選択します。

サービスアカウント名を入れ、作成して続行をクリック。

アクセス権限はオーナーで渡します。

最後は何も入力なしに完了をクリックします。

すると、下のサービスアカウントに作ったアカウントが追加されますので、こちらをクリックして中身を開きます。

上のタブから鍵を選択し、キーを追加を選択します。

鍵の作成はJSONのまま作成をクリックし、鍵をダウンロードします。

最後に、Spread Sheetにメールを設定します。メールは、サービスアカウントに表示されているものになり、開くとコピーできます。

こちらをコピーしたら、Spread Sheetを開き、右上の共有をクリックします。

先ほどのメールをペーストし、送信をクリックします。

もう一度共有を開き、ユーザーが登録されてることを確認します。

これで、Googleの設定は完了になります。

Node-REDの設定

まずは、Node-REDからSpread sheetに送るためのノードを追加します。
右上のメニューバーからパレット管理を開き、ノードを追加の部分で「Google sheet」と検索をします。2つ検索にかかりますので、「node-red-contrib-google-sheets」を追加してください。

機能にGSheetノードが追加されるので、こちらをプログラムにドラック&ドロップで追加します。

中身を開き、credsの一番右にある+をクリックします。

この中に、先ほどダウンロードした「鍵のJSON」をコピペします。

Methodは「Append Row」にします。
Cellsは「(シートの名前)!始めたいセル番号」になっています。
そのため、今回は「Sheet!A1」になります。

SpreadsheetIDですが、こちらはURLから平って来ることになります。
SpreadsheetのURLをまずコピーします。(下記が例になります)
https://docs.google.com/spreadsheets/d/1TMkABl8PYHxtYAUnH8QYw34vBFJhC5jAEJTRSDJF_SDJdkhrea/edit?gid=0#gid=0
このURLの「/d<この部分>/edit」になります。例では1TMkABl8PYHxtYAUnH8QYw34vBFJhC5jAEJTRSDJF_SDJdkhrea
になります。これをコピペして完了になります。

センサー番号取得とGSheetを接続します。
最後に、データの形がこのままだと送れないので、センサー番号取得を開き、一番下のmsg.payload=の後ろを配列に変更します。

msg.payload =
    [time, major, minor, deviceId, rssi]
return msg;

これで完成になります。
デプロイをかけ、センサーをデータを受けるとSpread sheetに情報が追加されます。
追加する際、指定のセルにデータがある場合、自動で下のセルに移りデータのない場所に書き込まれます。