🕌

AIアクアリウム スプレッドシートDBとshiftr.ioの設定

に公開

2025/08/11に大阪南森町のFabCafeで開催された「ITエンジニアのための個人開発LT会&展示会」」で紹介した「AIアクアリウム」の技術仕様です。

https://orion.connpass.com/event/354726/

資料はこちら
https://speakerdeck.com/yutaueda/11-ge-ren-zhi-zuo-lthui-aiakuariumu?slide=11

資料のデータベースおよびMQTT通信部分について、実装方法を解説します

スプレッドシートの準備

スプレッドーシートについては特に説明する必要もないでしょう。

id:AppSheet
topic:
object:
item:
value:
timestamp:

拡張機能からAppSheetを作成してください。

AppSheetを設定する

Dataメニューで以下の通り設定します。

initial_valueとして、idはUNIQUE()、timestampはNOW()を設定します。

次にSetttingsメニューのIntegrationメニューで、App IDと Access Keyを設定します。

これでAppSheetでREST APIを使うことができます。

REST APIの書き方は、公式ドキュメントまたは私の記事を参考にしてください
https://zenn.dev/yuta_enginner/articles/5b382d51b0019e

ちなみにAppSheetはデプロイする必要はありません。

shftr.ioの設定

インスタンスの作成

インスタンスはプロジェクトごとに作成すると良いでしょう。
(今回の例だと、栽培装置やアクアリウム装置を統合的に一つのプロジェクトとしたいので、「Electrium」というインスタンス名にしました。ちなみにElectriumは電子工作とアクアリウムを掛け合わせた私個人が造った言葉です。)

インスタンスを選択すると、デバイスやトピックのつながりが可視化されたダッシュボードが見れます。

webhookの作成

ダッシュボード右下に歯車アイコンがあるので、それを開くとSettingメニューが表示されます
(結構わかりにくいです。shiftr.ioのデザインセンスはどうにかならんかね)

ここのWebhooksでwebhookを設定できます。

Topicの項目には、このトピックがパブリッシュされたらこのWebhookを起動させてね、という意味です。
好きな名称を設定でき、ワイルドワードとして#と+が使えます。
今回の設計では、"record/#"にしました(「ラズパイ側からDBに書き込んでほしいデータがパブリッシュされたよ」という意味です)

record/#

URLには、先ほどAppSheetで書き込むためのREST APIを作成しましたので、それを入れます

https://api.appsheet.com/api/v2/apps/<App Id>/tables/シート1/Action?applicationAccessKey=<Access Key>

Bodyは以下の通りです。この書き方はAppSheet REST APIを参考にしてください

{
  "Action":"Add",
  "Properties":{
    "Locale":"ja-JP"
  },
  "Rows":[
     {"topic": "%TOPIC%", "value": %PAYLOAD%}
  ]
}

Report Topicは空白でも良いのですが、AppSheetのREST APIを呼び出した後の結果をパブリッシュしたい(必要に応じてラズパイ側からもう一度データを送る)ので、resultというトピックで返すようにします。

以上でDBとMQTT通信の準備が整いました。

次はラズパイ側を作成しましょう。

Discussion