まさかの日記

最近まともな文章しか書けなくなってきました

カテゴリ: RaspberryPi 5 + RTX 5060 Ti (16GB)

最近、MacBook AirでDiscordに常駐させていたOpenClaw(AIエージェント)をRaspberry Pi 5に移行した。合わせてGmailの自動返信システムも整備したので、構成をまとめておく。

やったこと

1. OpenClawのDiscord接続をRPi5に移行

OpenClawはDiscord/Slack等のチャットに常駐するAIエージェントフレームワーク。もともとMacBookで動かしていたが、MacをスリープさせるたびにBotが落ちるのが不便だった。 RPi5(IP: Tailscale経由で接続)にOpenClawがすでに入っていたので、MacのOpenClaw設定からDiscordのBotトークンをコピーし、RPi側のOpenClawに設定。Mac側はDiscordを無効化して再起動することで、Bot接続をRPi5に完全移管した。

2. RPi5にgogcliをセットアップ

gogcliはGmail/Calendar/Drive等をCLIで操作できるGo製ツール。MacではHomebrewでインストールしていたが、RPi5(Debian Linux, arm64)にはHomebrewがないためソースからビルドした。

GoでCross-compile or RPi上でビルド

git clone https://github.com/steipete/gogcli cd gogcli go build -o ~/bin/gog ./cmd/gog
OAuth認証はヘッドレス環境のため工夫が必要だった。gog auth addを実行するとランダムポートでローカルサーバーを起動し、OAuth callbackを待つ。MacブラウザからアクセスできるようSSHポートフォワーディングを使い:
ssh -L :127.0.0.1: masaka@rpi5
Googleの認証後、認証コードを手動でトークンに交換してRPi側のキーリングに保存する方法を取った。 RPi5はヘッドレスでD-Busが動いていないため、gogのキーリングはファイルバックエンドを使用:
export GOG_KEYRING_BACKEND=file
export GOG_KEYRING_PASSWORD=

3. Gmail自動返信システムをRPi5で稼働

OpenClawのcronジョブ機能で5分ごとに未読メールをチェックし、AIが返信文を生成して自動送信するシステムを構築。 フロー: 1. gog gmail search "in:inbox is:unread" で未読メールを取得 2. メール本文を取得・要約・返信文生成 3. gog gmail send --reply-to-message-id で直接送信 4. gog gmail thread modify --remove=UNREAD で既読化 5. Discordに「返信済み」の報告 cronジョブはRPi5のOpenClaw上で動くため、Discordへの通知もRPi5が担当。Mac側のcronは無効化した。

構成まとめ

Discord
  ↕
RPi5 (OpenClaw)
  ├── Discord Bot(24時間稼働)
  ├── Cronジョブ: gmail-checker(5分おき)
  │     └── gog gmail → 未読検知 → AI返信生成 → 自動送信 → Discord報告
  └── ~/bin/gog(gogcli, ファイルキーリング認証)

MacBook Air ├── Discord: 無効 └── gmail-checker cron: 無効(RPiに移管済み)

ポイント

  • ヘッドレスLinuxでのOAuth:D-Busなし環境ではGOG_KEYRING_BACKEND=fileを使う
  • SSHポートフォワーディングでOAuth callback:RPiで起動したgog authのコールバックをMacブラウザで受け取る
  • OpenClawのcron機能:エージェントを定期実行するのに便利。--session isolatedでセッション分離できる
  • gog gmail send--reply-to-message-idで返信スレッドに乗せて送信できる
24時間稼働のAIメール自動返信が低コスト(RPi5の消費電力は数ワット)で実現できた。


下記設定を投入し経過観察中。

## GPU 安定化

### 問題
**Xid 79 "GPU has fallen off the bus"** — アイドル中(24W、42°C)でも発生。
PCIe x1 接続で ASPM L0s 省電力モードが原因で PCIe リンクが切断される。

### 適用した対策

1. **`/boot/firmware/cmdline.txt`**
   ```
   pcie_aspm=off nvidia.NVreg_EnableGpuFirmware=0
   ```

2. **`/etc/modprobe.d/nvidia-power.conf`**
   ```
   options nvidia NVreg_DynamicPowerManagement=0
   options nvidia NVreg_EnableGpuFirmware=0
   ```

3. **`/boot/firmware/config.txt`**
   ```
   dtparam=pciex1_gen=3
   ```
   (既存設定)

4. **`/etc/systemd/system/nvidia-pcie-fix.service`**
   - 起動時に sysfs で L0s/L1 ASPM を無効化
   - setpci でルートポートの ASPM も無効化

5. **`/etc/systemd/system/nvidia-persistence.service`**
   ```
   ExecStart=/usr/bin/nvidia-smi -pm 1
   ExecStart=/usr/bin/nvidia-smi -pl 150
   ```
   - 電力上限 150W (Min: 150W / Max: 180W のため 100W は不可)

このページのトップヘ