はじめに
Raspberry Piで温湿度を測ってみたい。
やりたいことはシンプルです。でも実際には、送信APIの仕様確認、スクリプトの常駐化、ログ確認まで、コード以外の作業がたくさんあります。
そこで、PC上のCodex CLIを窓口にして、Raspberry Piのセットアップからデータ送信、動作確認、トラブル対応までを自然言語で進めます。
今回作るもの
Raspberry Piに温湿度センサーをつないで、測定値を定期的にMiniVizへ送ります。
やることはこんな感じです:
- センサーから温度・湿度を取得
- MiniVizへ定期送信
- 再起動しても自動で動くよう常駐化(systemd)
- MiniViz上で最新値や傾向をCodexから確認
- データが止まったときの原因調査(Pi側のログとMiniViz側のデータを突き合わせる)
使う機材:
- Raspberry Pi(実機のモデルは検証後に追記)
- 温湿度センサー(DHT11など)
- MiniVizアカウント
- Codex CLI(Claudeや他のCLIでも可)
MiniVizとは?
MiniVizは、IoTデータを受け取り、保存・可視化するためのサービスです。Raspberry PiなどからHTTPで送った値を、まずはグラフで確認したいときに使えます。
Codex CLIとMiniViz MCPの役割
今回のポイントは、Codex CLIを窓口にすることです。
こんな構成になります:
あなた
└─ 自然言語で依頼
└─ Codex CLI
├─ SSH経由でRaspberry Piを操作
│ ├─ センサー読み取り
│ ├─ Python環境と送信処理
│ ├─ systemd
│ └─ サービス状態とjournalログ
└─ MiniViz MCPで許可したprojectを参照
├─ 最新値
├─ 時系列・集計
├─ チャート・ルールの要約
└─ MiniViz公式Docs
MiniViz MCPは読み取り専用です。データ送信・変更・削除、通知実行、秘密情報の取得などはできません。また、Raspberry Pi上のログを読む機能でもありません。
Pi側はSSH経由でCodexが確認して、MiniViz側はMCPで確認する。両方を一つの会話で扱えるのがこの構成のメリットです。
1. まずSSH公開鍵でPiへログインできるようにする
CodexがPi側の調査・実装・ログ確認を行うには、PCからSSH公開鍵認証でログインできる状態が必要です。passwordを会話へ貼り付けず、専用の公開鍵をPiのauthorized_keysへ追加します。
確認用プロンプト:
このPCからSSH接続できるRaspberry Piを使います。
構成は変更せず、OS、Python、GPIO関連ツールを確認して、結果を要約してください。
接続先は pi@raspberrypi.local です。
2. ソースコードの前に、GPIOで温度・湿度を取得できるか確認する
いきなり送信処理を書かせません。最初にDHT11から温度・湿度を取得できることを確認します。これで、後から「送信が失敗した」のか「そもそもセンサーが読めない」のかを分けられます。
確認用プロンプト:
DHT11はGPIO4(物理Pin 7)へ配線済みです。
まだMiniVizへの送信コードやserviceは作らず、まずPi上で温度と湿度を取得できることを確認してください。
センサー確認の結果、使ったGPIO番号、失敗した場合の原因候補を分けて報告してください。
3. MiniViz MCPとの連携
センサー値を取れることを確認したら、MiniViz MCPをCodex CLIへ接続し、MiniViz Docsから送信仕様を確認します。MCPのServer URLをMiniVizの「AI連携」画面でコピーし、次のように登録します。
codex mcp add miniviz --url "<コピーしたServer URL>"
codex mcp login miniviz
詳細はこちら
許可済みprojectを確認する
MiniVizの仕様をMCP経由で確認する
MCP経由でAPI仕様などサービス仕様全般を把握させます。
4. 実装はCodexへ。確認ポイントだけ残す
GPIO取得とMiniViz仕様の確認が済んだら、実装と常駐化をCodexへ依頼します。
ここで大事なのは、コード全文を載せることより「何を判断して、何を確認したか」を残すことです。
GPIO取得とMiniViz仕様の確認結果を前提に、本実装へ進めて。
- 温度と湿度をセンサーから取得
- MiniVizへ60秒ごとに送る
- timestamp、label_key、temperature、humidityを適切な形式で
- project tokenをソースコードに直接書かない
- 送信成功、センサー取得失敗、HTTPエラーをログで区別できるように
- Raspberry Pi再起動後もsystemdで自動起動
- 作業後にサービス状態と直近ログを確認
秘密情報を画面やログに表示しないで。
Pythonやsystemd unitを手書きする必要はありません。
ただし、ブラックボックスにはせず、Codexが作った内容・設定理由・確認結果は必ず説明してもらいます。
あとで見返す4つの確認ログ
- 変更前にCodexが示した作業計画
- Pi側で確認したservice状態と送信ログ
- MiniViz MCPで確認した最新値・時系列
- 障害時のログ、切り分け、復旧後の受信確認
ログはそのまま貼らず、project ID、project token、IPアドレス、ユーザー名、認証情報、不要なpayloadはマスクします。
残すのは、判断に必要な時刻・service名・エラー種別だけで十分です。
送信成功ログの見せ方(サンプル)
値とevent IDは実測ではなく、MiniViz DocsのDHT11例と送信契約に合わせたサンプルです。
2026-08-04T18:00:00+09:00 miniviz-dht11[4217]: sensor_read temperature=26.1 humidity=58.0 gpio=4
2026-08-04T18:00:01+09:00 miniviz-dht11[4217]: event_sent status=200 event_id=<redacted> label_key=raspberry_pi_home
2026-08-04T18:01:00+09:00 miniviz-dht11[4217]: sensor_read temperature=26.0 humidity=58.0 gpio=4
2026-08-04T18:01:01+09:00 miniviz-dht11[4217]: event_sent status=200 event_id=<redacted> label_key=raspberry_pi_home
5. MiniViz MCPで送信結果を確認
MiniViz MCPをCodexに接続しておけば、別の管理画面や別のAIチャットに移らず、そのまま確認できます。
ここでは「送信処理が起動している」だけじゃなく、MiniVizまで値が届いて、会話から参照できることを完了条件にします。
MCPで受信データを確認する
欠損を厳密に追う場合や大量raw eventを確認したい場合は、MiniViz画面とPiログを併用してください。
6. あえて障害を起こし、PiログとMCPから原因を特定する
動作確認だけで終わらせず、意図的に1つ障害を起こして切り分けまで試します。
ここでは、DHT11 serviceを停止して再開するシナリオを使います(安全に元へ戻せるため)。
2026-08-04T18:10:00+09:00 systemd[1]: Stopping MiniViz DHT11 sender...
2026-08-04T18:10:00+09:00 miniviz-dht11[4217]: sender_stopped reason=operator_test
2026-08-04T18:10:00+09:00 systemd[1]: Stopped MiniViz DHT11 sender.
Codexには、原因を決めつけず事実ベースでの切り分けを依頼します。
温湿度データの更新が止まったみたい。
まだ修正せず、次の情報を確認して原因を切り分けて。
1. MiniViz MCPで対象projectの最新受信時刻と直近の傾向を確認
2. Raspberry Piのsystemd service状態と直近ログを確認
3. センサー取得、プロセス停止、HTTP送信、ネットワークのどこで失敗してるか整理
4. 確認できた事実、推測、追加確認が必要な点を分けて説明
原因と修正案を説明して、私が確認してから修正して。
見るポイントは、もっともらしい推測ではなく次の順序で確認できるかです。
- MiniVizの最終受信時刻
- Piのservice状態とログ
- センサー取得 / HTTP送信 / ネットワークのどこで止まったか
- その判断の根拠
修正後は、service復旧に加えてMiniViz MCPで新しい値の受信まで確認します。
まとめ
今回は、よくある温湿度モニタリングを題材に、ラズパイ構築から運用確認までをAIとMCPで自然言語ベースに進める流れを試しました。
Web開発だけでなく、組み込みLinuxまわりも少しずつ同じように効率化していけると感じています。


