技術検証

Googleスプレッドシートで家電操作をクラウド管理!社内運用もラクにtitle_point

はじめに

前回は、Pythonを使って赤外線信号を自動識別し、コマンド名と対応付ける処理を作成しました。
今回は、そのコマンドデータや操作指示をGoogleスプレッドシートで一元管理する方法をご紹介します。

これにより、エンジニア以外のスタッフでも操作フローの登録・更新が簡単に行えるようになります。


なぜスプレッドシート?

  • ✅ 誰でも編集しやすい

  • ✅ 履歴管理・権限管理が容易

  • ✅ プログラムから読み取り/更新が可能(Google Sheets API)

これらの特長により、社内運用ツールとして非常に親和性が高いのが魅力です。


スプレッドシートの構成

シート1:制御一覧

| inputcmd | device | port | cmd           | delay | note                      |
|----------|--------|------|----------------|--------|----------------------------|
| tv_amp   | 風呂   | 1    | AMP_ON        | 0.5    | アンプの電源をONにする     |
| tv_amp   | 風呂   | 1    | PANATUN_10    | 1.0    | チャンネル10にする         |
  • inputcmd が同じ値の行は、連続操作としてまとめて使われます

シート2:場所一覧

| name   | device_id     |
|--------|---------------|
| 風呂   | ESP32_FURO_01 |
| 居間   | ESP32_LIVING  |

Pythonでシートから読み取り→JSON変換

制御一覧からは、同じ inputcmd ごとにまとめて以下のようなJSONを生成します:

[
{
"device": "風呂",
"port": "1",
"cmd": "AMP_ON",
"delay": 0.5
},
{
"device": "風呂",
"port": "1",
"cmd": "PANATUN_10",
"delay": 1.0
}
]

このJSONは irsequence/ フォルダに {inputcmd}.json として保存され、後の自動送信処理に使われます。


Google Sheets API の使用方法(概要)

  1. サービスアカウント作成

  2. 認証情報をJSON形式でダウンロード

  3. 該当シートを共有設定でそのアカウントに許可

  4. Pythonで読み込む

creds = Credentials.from_service_account_file("credentials.json", scopes=SCOPES)
service = build('sheets', 'v4', credentials=creds)

シートからコマンドデータを生成するPythonコード例

range_ = "制御一覧"
values = service.spreadsheets().values().get(spreadsheetId=SPREADSHEET_ID, range=range_).execute().get('values', [])

行ごとに inputcmd が変わったら、新しいファイルとして保存し、

with open(f"irsequence/{inputcmd}.json", "w") as f:
json.dump(entries, f, indent=2, ensure_ascii=False)

という形で制御フローのJSONが完成します。


UI側との連携の基盤に

このようにGoogleスプレッドシートで管理することで:

  • エンジニアが触らなくても新しい操作パターンを追加可能

  • 名前や順序のミスを減らせる(手動と違って)

  • 画面UI(Webやスマホ)とも容易に連携

といった大きなメリットがあります。


おわりに

今回は、Googleスプレッドシートを利用して家電操作のコマンド一覧や制御順をクラウド管理する方法をご紹介しました。

次回はいよいよ「音声で家電を操作」できる仕組みを構築します。OpenAIのTTS APIを使い、喋る・聞くインターフェースを追加していきます!

次回 ▶️ 第4話:OpenAIの音声合成とESP32連携で、家電が喋り出す!


? 社内ではこの仕組みを実験的に導入中。開発現場に興味がある方は採用ページもぜひご覧ください!