0
0

Raspberry Pi Google Spreadsheet連携

Last updated at Posted at 2024-05-23

Raspberry Pi & Google Spreasheet 連携

Raspberry Pi 4 Model B について

Distributor ID: Raspbian
Description: Raspbian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm

SpreadsheetとGoogle Apps Scriptの構築

  1. Spreadsheet作成後、拡張機能 > Apps Script選択
    スクリーンショット 2024-09-05 075403.png

  2. 作成したSpreadsheetのIDをコピー
    下記画像では~~~/d/ここがシートID/edit?gid=0~
    スクリーンショット 2024-09-05 075537.png

  3. Apps Scriptタブからプロジェクトの設定タブを選択
    スクリーンショット 2024-09-05 075649.png

  4. スクリプトプロパティに「プロパティ(変数名)」と「値(シートID)」を貼り付けし保存
    スクリーンショット 2024-09-05 075849.png

Google Apps Scriptコード

function doPost(e) {
  try {
    // POSTリクエストペイロードをJSONとして解析
    var data = JSON.parse(e.postData.contents);

    // スクリプトプロパティにスプレッドシートIDは保存している
    const PROPERTY_SHEET_ID = PropertiesService.getScriptProperties().getProperties().SHEET_ID;
    var ss = SpreadsheetApp.openById(PROPERTY_SHEET_ID);
    var sheet = ss.getActiveSheet();

    // POSTされた情報を新規行に出力
    sheet.appendRow([data.timestamp, data.pingResult]);

    return ContentService.createTextOutput(JSON.stringify({"status": "success"})).setMimeType(ContentService.MimeType.JSON);
    
  } catch(error) {
    
    return ContentService.createTextOutput(JSON.stringify({"status": "error", "message": error.toString()})).setMimeType(ContentService.MimeType.JSON);

  }
}

GAS側で上記コードを組み込んだら「デプロイ」を行う。
ウェブアプリケーションを左の⚙から選択しWeb appは「自分」
アクセスは「誰でも」にしデプロイを完了させる。

成功するとWeb App URLが表示されるためコピーする。

Raspberyy Pi側

ターミナルを開きvenvで仮想環境を構築

python3 -m venv myenv # myenvは任意の仮想フォルダ名

上記実行すると現在のフォルダにmyenvという仮想フォルダが構築される。
構築できたら下記コマンドを実行し作成した仮想フォルダのアクティベーションを行う

source myenv/bin/activate

アクティベーションが完了したらラズパイにデフォルトで備わっているPython IDE環境Thonnyを開き
下記Pythonコードを書き込み「main.py」となるようにファイル名を作成する。
保存先は「myenv/src/main.py」とする

import os
import json
import requests
from datetime import datetime

# Web App URL of Google Apps Script
WEB_APP_URL = 'デプロイ時に確認したWebAppURLを張り付ける'

# Set Ping Command
response = os.popen('ping -c 4 8.8.8.8').read()
print(response)

# Get Timestamp
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

# Structure Data
data = {
    'timestamp': timestamp,
    'pingResult': response
    }

# POST Request
headers = {'Content-type': 'application/json'}
result = requests.post(WEB_APP_URL, data=json.dumps(data), headers=headers)

print(f'status: {result.status_code}, Response: {result.text}')

上記コードの作成及び保存完了後ターミナルで下記コマンドを実行しスプレッドシートにコマンドの実行結果が反映されるか確認

python src/main.py

実行が成功したらスプレッドシートにコマンド実行日時とpingの情報が出力される。

0
0
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
0
0