Reolink カメラオペレーター
概要
主なインターフェース: reolink-cli (デフォルトで JSON 標準出力)。特に指示がない限り、MCP サーバーは起動しないでください。ユーザーが CLI 以外のアクセス (ブラウザ、curl、他の言語) を必要とする場合は、ゲートウェイの POST /api を案内してください。
スラッシュコマンド (Claude Code のみ) — 固定/単一アクションの意図にはこちらを優先して使用し、意図マッピングのオーバーヘッドを避けてください:
| スラッシュ | 同等のコマンド | 使用タイミング |
|---|---|---|
/reolink-cli:status | reolink-cli status | ユーザーが現在の状態、ダッシュボード、「調子はどう?」などを尋ねた場合 |
/reolink-cli:features | reolink-cli features | ユーザーがプラグインの機能、「何ができる?」と尋ねた場合 |
/reolink-cli:scan | reolink-cli discover | ローカルネットワークのスキャン、「スキャンして」 |
/reolink-cli:devices | reolink-cli device list | 登録されているカメラの一覧表示 |
/reolink-cli:cache-clean | reolink-cli cache clean dry-run→apply | 古いスナップショットのクリア、「キャッシュを消去」 |
/reolink-cli:update | reolink-cli self-update | 最新リリースへのアップグレード (GitHub を確認、現在のバージョンなら何もしない) |
/reolink-cli:uninstall | reolink-cli setup --uninstall --purge --no-interactive | 完全なアンインストール |
Claude Code ランタイム: ユーザーの意図がこれら 7 つのいずれかに完全に一致する場合は、必ずスラッシュコマンドを使用してください。これらのコマンドは高速 (LLM のレイテンシーなし)、決定論的で、/ のオートコンプリートで発見可能です。
他のエージェント (Codex / Cursor / Copilot / Gemini): これらのプラットフォームはプラグイン定義のスラッシュコマンドをサポートしていないため、「スラッシュ優先」ルールは適用されません — 同等の reolink-cli … CLI コマンドを直接実行してください。スキル駆動の意図マッピングが他のすべてを処理します。
すべてのエージェント: 上記のスラッシュリスト/7 つの固定アクションに該当しない複合/あいまいな意図 (「人が検出されたら知らせて」、「明るくして」) に対しては、スキル駆動の CLI チェーンにフォールバックしてください。
ゲートウェイは、ほとんどの制御コマンドで必須です。 CLI はデフォルトで 127.0.0.1:9000 経由でルーティングされます (プラットフォームの設定ディレクトリ内の config.toml で設定 — Linux では ~/.config/reolink-cli/config.toml、macOS では ~/Library/Application Support/reolink-cli/config.toml、Windows では %APPDATA%\reolink-cli\config.toml、キーは gateway-addr)。gateway connect failed: Connection refused と表示された場合、ゲートウェイが実行されていません — 一度起動してください:
reolink-cli gateway start --addr 127.0.0.1:9000 &
ゲートウェイなしで動作するもの: device add|list|update|remove|resolve|show、config init、discover、features、doctor、cache status|clean — つまり、ローカル設定を読み取ったり、ネットワークに直接通信したりするものすべてです (ゲートウェイをリッスンしていない状態でそれぞれ実行して確認済み)。これ以外のもの (ping、login、info、config get/set、image、osd、ptz、detect、light、audio、preview、snapshot、vod、events、users、system reboot、system upgrade) はゲートウェイが起動している必要があります。
エンベロープ — CLI では .ok、ゲートウェイでは .status を解析:
| インターフェース | 成功 | エラー |
|---|---|---|
| CLI | {ok:true, command, protocol, data} | {ok:false, error:{code, message, retryable}} (stderr) |
| CLI バッチ | {command, summary, results:[{camera, host, ok, data, error}]} | ターゲットごとの ok |
ゲートウェイ /api | {status:"success", data} | {status:"error", code, message} (HTTP ステータス == code) |
references/ には、トピックごとにスコープされたレシピファイルがあります。必ずタスクに一致するファイルのみを読み込んでください — references/index.md がルーターです。references/troubleshooting.md には、障害発生時の診断のための判断ツリーがあります。
根拠 (バインディング)
以下のことを事実として述べたり暗示したりすることは禁止されています: デバイスの到達可能性、ログイン状態、設定値、機能、検知/AI タイプ、イベント数、VOD ファイルの有無、ユーザーアカウント、または観測可能なカメラの状態 — ただし、現在のタスク内で実行された reolink-cli コマンドまたはゲートウェイ POST /api 応答の JSON 出力から導出された場合は除きます。
以下のことも禁止されています: デモリスト、推測されたレイアウト、合成値、エラー/タイムアウト後の偽の成功、実際の応答なしに CLI 出力を模倣した散文/JSON、または get/info/inventory/capabilities が実行されていないのに「デバイスには X がある」と述べること。
データが不足している場合は必ず: 何が不足しているかとその原因 (カメラが登録されていない、ゲートウェイがダウンしている、認証に失敗した、デバイスがオフライン) を述べ、具体的な回復手順 (エラー回復テーブルから) を 1 つ実行するか、明確な質問を 1 つしてください。もっともらしいデフォルト値で埋めることは禁止されています。
意図解釈
コマンドを選択する前に、あいまいさを解消してください。それでも不明な場合は、選択肢を提示して質問してください。
| ユーザーの発言 | コマンド | 理由/注意点 |
|---|---|---|
| ユーザーを追加 | users add | デバイスアカウントであり、CLI のカメラエントリではありません |
| カメラを追加 | device add | CLI のカメラエントリ (~/.config/reolink-cli/aliases.toml) であり、デバイスアカウントではありません |
| パスワードを変更 | users passwd (デフォルト) または device update (CLI 資格情報) | どちらかを質問 |
| 点滅ライト | light statusled | 本体の LED |
| ナイトビジョン | light ir | 不可視 IR LED |
| スポットライト | light spotlight (手動) または light whiteled (アラーム連動) | 同じ電球、異なる配線 |
| 暗すぎる | まず image tune --bright、夜間なら light ir get を確認 | 画像調整であり、スポットライトではありません |
| 上下逆さま | image flip set --flip | 垂直 |
| ミラーリング | image flip set --mirror | 水平 |
| マスク | privacy mask | 最初に現在の領域を読み取る |
| 名前変更 | osd set --name (画面表示) または config set device-name (アプリ) | どちらかを質問 |
| 再起動 / リブート | system reboot | 30~60 秒のオフライン |
| アップグレード / ファームウェア書き込み / OTA | system upgrade <file.pak> | ⚠️ 文鎮化リスク。info でモデル+hw_ver を確認; GATEWAY がローカルファイルを読み取る; 自動ウィンドウ/ストップアンドウェイト。詳細は references/admin.md |
| 工場出荷時リセット | — 単独; system upgrade --factory-reset はフラッシュ中にリセット | 単独リセットは CLI にありません; ユーザーに Reolink アプリの使用を依頼 |
| キックオフ | users remove (永続的) または users passwd + system reboot (セッション追い出し) | アクティブセッションは users remove 後も再起動まで存続 |
| スナップショット | snapshot [--file PATH] | JPEG。親ディレクトリはバイナリによって自動的に作成されます (v0.5.0 以降) — 保存先に対して mkdir -p を事前に行わないでください。vod download および preview capture --file も同様です。 |
| 遅い / どのくらいの時間 / 時間がかかる / パフォーマンス / レイテンシー / ベンチマーク | benchmark [--iterations N] [--phases ...] [--reuse-session] | フェーズごとの p50/p95/p99: connect、login、info、snapshot。--reuse-session はウォームパス用。詳細は references/index.md。 |
| cpu / メモリ / デバイス負荷 / カメラが過負荷か / カクつく | config get performance | デバイスからのライブ読み取り: cpuUsedPercent、codeRate、netDataRate。読み取り専用で瞬間的な値 — 1 秒間隔での 2 回の呼び出しは正当に異なります。すべてのモデルが実装しているわけではありません。benchmark はクライアントのラウンドトリップ時間を計測するものであり、カメラの負荷ではない点で異なります。 |
| rtsp / rtmp / flv アドレス / ストリーム URL / HA / Frigate / go2rtc / VLC | stream url [--kind rtsp,rtmp,flv] [--stream main,sub,ext] [--with-auth] | デフォルトは --kind rtsp --stream main。--with-auth はユーザーが明示的にワンショットで貼り付け可能な URL を望んだ場合のみ。NVR: device expand してから --tag <nvr>。詳細は references/media.md。 |
| 8ch NVR / RLN サブカメラ / チャンネル N | device expand <nvr-name> [--yes | --names A,B,C] | NVR のみ。チャンネルごとに 1 エントリを登録し、親名でタグ付けします。その後: --tag <nvr-name> でファンアウトします。 |
| コマンド却下 400 / 「モデルがサポートしていません」 / ハブ上のバッテリーカメラ / 一時停止後の最初のコマンド | 何もしない — ゲートウェイはすでにリトライします。回答内の attempts が、どの試行が成功したかを示します (一時停止後は 3 が通常、連続中は 1) | ハブの背後にあるバッテリー子機はスリープし、サポートされていないコマンドと区別がつかない生の 400 でコマンドを拒否します。いつスリープするかは、アイドル時間だけからは予測できません (ある日の測定では約 2 分; その後の夜間の測定では起きていた) ので、先取りしようとしないでください。一貫しているのは、スリープ中のカメラは起きるまでに 3 回の試行 (~1.6 秒) を要し、拒否されたリクエスト自体がウェイクアップであることです。予算を使い切っても失敗する場合、info → channel.loginState = standby で説明されますが、そのフィールドは遅れるため、失敗の説明にはなっても、事前チェックにはなりません。 |
| デュアルレンズ / 2 つのレンズ / 1 台のカメラの bullet+PTZ / 広角と望遠 / セカンドレンズ | まず info (channel.views、channel.dualLens)、次に設定コマンドで --view N | --view は第 3 の軸です: --channel でカメラを選択し、--view でレンズを選択し、--stream でそのレンズのエンコーディングプロファイルを選択します。ビューごとに確認済み: encode、privacy mask、detect motion、PTZ。ビューごとでないもの: snapshot (デバイスは view≥1 で 400 を返す)、preview/stream url (プロトコルにセレクターがない — これらは --view N を拒否するようになりました)、image/ISP (共有)。デフォルト 0 = 通常のカメラが持つ唯一のビューです。 |
| プレビュー / ちょっと見て / N 分間見る / ライブを見る | preview play (ffplay ウィンドウを開く) | capture ではなく play をデフォルトにしてください。 ユーザーはライブウィンドウを望んでおり、ファイルではありません。 |
| N 秒間録画 / クリップを保存 / 保存する | preview capture --packets ≈N×25 | ユーザーが明示的に保存/録画/エクスポートと言った場合のみ。パケット数であり、秒数ではありません; メインは約 25 fps、サブは約 10 fps |
| 60 秒プレビュー (あいまい!) | ユーザーが「N 秒/分間プレビュー」と言った場合 → preview play --packets N×fps。ユーザーが「N 秒間録画」と言った場合 → preview capture。本当に不明な場合は質問。 | 動詞が「プレビュー/見る」の場合は play をデフォルトに、「録画/保存/エクスポート」の場合のみ capture を使用 |
| ボリューム | audio volume set (マスター) | ミュートを意味するか質問: audio mute |
| アラームをミュート | audio mute | アラーム音のみ、プレビューは対象外 |
| サイレン / アラーム音 / 警報を鳴らす / 追い払う / ビープ音を鳴らす | audio siren play [--duration N | --times N] [--wait] | 大音量 + 副作用あり — 最初に確認。cmd 263 手動リンクダウン (アプリのサイレンボタンと同等); デバイスは --duration 秒後に自動停止、または audio siren stop で停止。--wait は duration の間保持し、明示的に停止して stoppedAt + stopAcknowledged を報告します — サイレンが開始されただけでなく停止したことを伝えられる必要がある場合に使用してください。ハブの背後にあるバッテリーカメラからの 400 は、ハードウェアに関する証拠ではありません — スリープしている子機は、実装されていないコマンドとまったく同じように 400 を返します。(別途: ある Home Hub 2 では、コマンドが成功した場合でもサイレンがまったく鳴らないことが確認されています — 以下の verified: false を参照。決してサイレンが鳴ったと主張しないでください。) ゲートウェイはリトライします (測定値: 2 分以上アイドル状態のカメラは 3 回の試行、約 1.6 秒必要)、回答内の attempts がどの試行が成功したかを示します。それでも失敗する場合、info → channel.loginState = standby で説明されます — ただし、そのフィールドは遅れるため、失敗の説明のためであり、事前チェックのためではありません。400 を理由にユーザーにカメラに機能がないと伝えないでください; capabilities が答えるものです。light spotlight も同じルールです。「動きが検出されたらサイレン」は異なります — それは audio siren task リンケージです (新しいモデルでは多くの場合 405)。 |
| 武装 / 解除 / 外出 / 在宅 / 出かける / シーンモード / 自分がいるときは録画を停止 | scene set <id> (scene list で ID を確認、scene set --schedule でタイムテーブルに戻す) | ハブ/NVR のみ。1 つのスイッチですべてのチャンネルを再武装します — カメラごとの検知設定には影響しません。まず scene show: currentSceneId が 0 の場合、タイムテーブルが駆動していることを示します。詳細は references/scene-mode.md。 |
| 解像度 / ビットレート / fps / フレームレート / h265 / h264 / ストリーム品質 / ストリームを小さくする | encode set --stream main|sub|third ... | 最初に encode capability を実行してください — デバイスが提供していない値は、生の 400 で返ってきます。stream url は無関係です (これは再生 URL を構築するだけです)。 |
| 人物検知 | detect ai --type person | 最初に device inventory --capabilities を確認 |
| 車両 | detect ai --type vehicle | すべてのモデルが対応しているわけではありません |
| 録画を有効にする | record schedule set --enable | |
| 録画設定 / 録画パラメータ / プリレコード秒数 / クリップサイズ | record config get | 読み取り専用; サイクル/プリポスト録画/パッケージ時間 |
| SD カード / ストレージカード / 容量 / 空き容量 | storage status | 読み取り専用; totalGB / remainGB / formatted / mounted |
| 手動録画 / 今すぐ録画 / 録画開始 | — | Reolink IPC ではサポートされていません; record schedule set --enable/--disable にフォールバック |
| 昨日のダウンロード / 録画をダウンロード | vod search --since 24h → vod download NAME | |
| 09:45–09:55 をダウンロード / そのクリップだけ / 時間範囲 | vod download --from 2026-09-02T09:45:00 --to 2026-09-02T09:55:00 | カメラ側でのカット — 1 時間全体をダウンロードしてトリミングしないでください |
| アラーム / 今日のアラーム | events query --since 24h | ゲートウェイが必要 |
| ライブバッファより過去のイベント履歴 / 先週何があったか / ハブのイベントログ | --channel N events history --since 7d [--types people,motion] (ハブ/NVR のみ) | デバイスの記録されたイベントログ (cmd 516/517) を読み取ります。スタンドアロン IPC は 400。空のリスト = 一致するイベントなし; ハブは大量使用後に短時間静かになることがあります。一時停止後に再試行してください。 |
| 音声アラート / 音声アナウンス / 誰かが到着したら知らせる / 人が検出されたら音声を再生 | audio talk (references/voice-alert.md を参照) | PCM16 LE モノラルのみ; capabilities.audioTalk=1 が必要 |
| X を検出したら Y を行う / 自動化 / イベントトリガー / 検出してから実行 | events monitor init/check/run を TOML ルールと共に使用。 アドホックな bash while + events query ループは禁止 — references/event-monitor.md を参照。 | |
| モニターは実行中か / ルールが発動したか / モニターの状態 / 最近何が発動したか | events monitor status (pid + cursor + lastFires + ルールごとの expired/secondsRemaining) または events monitor history --last N [--rule NAME] [--since 30m] | 再起動せずに実行中のデーモンを検査します。フィルターは --last の前に適用されるため、--rule watch --last 20 はそのルールの最後の 20 回の発動を示し、グローバルテールの残りではありません。 |
| このカメラを監視 | ... |