Communitygithub.com

Reolink CLI / Reolink カメラオペレーター

Reolink IP カメラ、ドアベル、NVR を LAN 経由で操作する公式コマンドラインツールです。クラウドは不要で、スナップショット、PTZ、RTSP/RTMP ストリーム URL、双方向音声 (トークバック/TTS)、動体・AI 検知、イベント監視、VOD ダウンロードなどをサポートします。JSON 出力と内蔵 MCP サーバーを備えており、Home Assistant、Frigate、go2rtc と連携します。

Reolink カメラオペレーター とは?

Reolink Camera Operator は、`reolink-cli` を主な操作インターフェースとして提供する AI エージェントスキルです。デフォルトで JSON を標準出力するため、他のツールやスクリプトとの連携が容易です。Claude Code では、固定アクションに対して `/reolink-cli:status` のようなスラッシュコマンドを優先的に利用します。これにより LLM のレイテンシーを回避し、高速かつ決定論的な動作が可能になります。Codex、Cursor、Copilot、Gemini などの他のエージェントではスラッシュコマンドを使用できないため、同等の `reolink-cli` CLI コマンドを直接実行します。複合的な指示やあいまいな意図に対しては、スキル駆動の CLI チェーンにフォールバックして対応します。ゲートウェイ (デフォルトでは `127.0.0.1:9000`) は、ほとんどの制御コマンドに必須であり、コマンドはゲートウェイ経由でルーティングされます。ゲートウェイが起動していない場合は `reolink-cli gateway start` で開始します。デバイスの追加や検出、機能一覧、キャッシュ管理などの特定の操作はゲートウェイなしでも動作します。スキルは `references/` ディレクトリ内のトピック別レシピファイルを参照し、タスクに応じて `references/index.md` から該当するファイルを読み込むルールに従います。また、スキルは「根拠 (Ground Truth)」ルールに従い、実際にコマンドを実行して得た JSON 出力またはゲートウェイの応答のみを事実として扱い、推測や仮の値を使用することを禁止します。意図解釈に関する詳細なテーブルも提供されており、「スナップショット」には `snapshot` を、「プレビュー」には `preview play` を推奨するなど、ユーザーの発言から最適なコマンドをマッピングします。

対応✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI
npx skills add reolink/reolink-cli

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Reolink カメラオペレーター

概要

主なインターフェース: reolink-cli (デフォルトで JSON 標準出力)。特に指示がない限り、MCP サーバーは起動しないでください。ユーザーが CLI 以外のアクセス (ブラウザ、curl、他の言語) を必要とする場合は、ゲートウェイの POST /api を案内してください。

スラッシュコマンド (Claude Code のみ) — 固定/単一アクションの意図にはこちらを優先して使用し、意図マッピングのオーバーヘッドを避けてください:

スラッシュ同等のコマンド使用タイミング
/reolink-cli:statusreolink-cli statusユーザーが現在の状態、ダッシュボード、「調子はどう?」などを尋ねた場合
/reolink-cli:featuresreolink-cli featuresユーザーがプラグインの機能、「何ができる?」と尋ねた場合
/reolink-cli:scanreolink-cli discoverローカルネットワークのスキャン、「スキャンして」
/reolink-cli:devicesreolink-cli device list登録されているカメラの一覧表示
/reolink-cli:cache-cleanreolink-cli cache clean dry-run→apply古いスナップショットのクリア、「キャッシュを消去」
/reolink-cli:updatereolink-cli self-update最新リリースへのアップグレード (GitHub を確認、現在のバージョンなら何もしない)
/reolink-cli:uninstallreolink-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 addCLI のカメラエントリ (~/.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 reboot30~60 秒のオフライン
アップグレード / ファームウェア書き込み / OTAsystem 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 / VLCstream 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 サブカメラ / チャンネル Ndevice 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 回の発動を示し、グローバルテールの残りではありません。
このカメラを監視...

関連スキル