Reolink 카메라 운영자
개요
주요 인터페이스: reolink-cli (기본 JSON stdout). 요청받지 않는 한 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에 gateway-addr로 설정 — Linux: ~/.config/reolink-cli/config.toml, macOS: ~/Library/Application Support/reolink-cli/config.toml, Windows: %APPDATA%\reolink-cli\config.toml). 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 status == code) |
references/에는 주제별 레시피 파일이 있습니다. 작업과 일치하는 파일만 로드해야 합니다 — references/index.md가 라우터입니다. references/troubleshooting.md에는 실패에 대한 진단 의사 결정 트리가 있습니다.
실제 근거 (바인딩)
다음을 사실로 진술하거나 암시하는 것은 금지됩니다: 장치 접근성, 로그인 상태, 설정 값, 기능, 감지/AI 유형, 이벤트 수, VOD 파일 존재 여부, 사용자 계정 또는 관찰 가능한 카메라 상태 — 단, 현재 작업 내에서 실행된 reolink-cli 명령 또는 게이트웨이 POST /api 응답의 JSON 출력에서 파생된 경우는 예외입니다.
금지: 데모 스타일 목록, 추측 레이아웃, 합성 값, 오류/시간 초과 후 가짜 성공, 실제 응답 없이 CLI 출력을 흉내내는 일반 텍스트/JSON, 또는 get/info/inventory/capabilities를 실행하지 않고 "장치에 X가 있습니다"라고 말하는 것.
데이터가 누락된 경우 반드시: 무엇이 누락되었고 그 원인(등록된 카메라 없음, 게이트웨이 다운, 인증 실패, 장치 오프라인)을 진술한 후, 하나의 구체적인 복구 단계(에러 복구 표에서)를 수행하거나 하나의 명확한 질문을 하십시오. 그럴듯해 보이는 기본값으로 채우는 것은 금지됩니다.
의도 해석
명령을 선택하기 전에 모호성을 해결하십시오. 여전히 불명확하면 옵션과 함께 질문하십시오.
| 사용자 발화 | 명령 | 이유 / 주의 사항 |
|---|---|---|
| 사용자 추가 | 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 확인; 게이트웨이가 로컬 파일을 읽음; 자동 윈도우/stop-and-wait. 자세한 내용은 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: 연결, 로그인, 정보, 스냅샷. --reuse-session은 warm-path용. 자세한 내용은 references/index.md. |
| CPU / 메모리 / 장치 부하 / 카메라 과부하 / 끊김 | config get performance | 장치의 실시간 판독값: cpuUsedPercent, codeRate, netDataRate. 읽기 전용이며 즉각적 — 1초 간격의 두 호출은 정당하게 다를 수 있음. 모든 모델이 구현하는 것은 아니며, 구현된 모델은 장치 수준의 거부를 응답함. 클라이언트 왕복 시간을 측정하는 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. |
| 8채널 NVR / RLN 하위 카메라 / 채널 N | `device expand [--yes | --names A,B,C]` |
| 명령 거부 400 / "모델이 지원하지 않음" / 허브의 배터리 카메라 / 일시 중지 후 첫 명령 | 아무것도 하지 않음 — 게이트웨이가 이미 재시도합니다. 응답의 attempts가 몇 번째 시도에서 성공했는지 알려줍니다(일시 중지 후에는 3이 정상, 연속 사용 중에는 1) | 허브 뒤의 배터리 자식 장치는 절전 모드로 전환된 후 명령을 지원되지 않는 것과 구별할 수 없는 bare 400으로 거부합니다. 절전 모드가 언제 시작되는지는 유휴 시간만으로 예측할 수 없으므로(어느 날은 ~2분, 나중에는 더 긴 시간 동안 깨어 있음) 미리 대비하려 하지 마십시오. 일관된 점은 절전 중인 카메라는 깨우는 데 평균 3번의 시도(~1.6초)가 필요하며, 거부된 요청 자체가 깨우기 신호라는 것입니다. 예산 내에서도 계속 실패하면 info → channel.loginState = standby가 설명하지만 — 이 필드는 지연되어 실패를 설명할 뿐, 미리 확인하는 데 사용할 수 없습니다. |
| 듀얼 렌즈 / 두 개의 렌즈 / 하나의 카메라에 총+PTZ / 광각과 망원 / 두 번째 렌즈 | 먼저 info (channel.views, channel.dualLens), 그런 다음 설정 명령에 --view N 사용 | --view는 세 번째 축입니다: --channel은 카메라를 선택하고, --view는 렌즈를 선택하며, --stream은 해당 렌즈의 인코딩 프로필을 선택합니다. 뷰별 확인 완료: encode, privacy mask, detect motion, PTZ. 뷰별 아님: snapshot(뷰≥1에서 400 응답), preview/stream url(프로토콜에 선택자가 없음 — 이제 --view N을 조용히 무시하는 대신 거부), 이미지/ISP(공유). 기본값 0 = 일반 카메라의 유일한 뷰입니다. |
| 미리보기 / 한번 보기 / N분 보기 / 실시간 보기 | preview play (ffplay 창 열림) | 기본값은 play, capture가 아닙니다. 사용자는 파일이 아닌 실시간 창을 원합니다. |
| N초 녹화 / 클립 저장 / 저장 | preview capture --packets ≈N×25 | 사용자가 명시적으로 저장/녹화/내보내기를 말할 때만. 패킷 수, 초가 아님; ~25fps 메인, ~10fps 서브 |
| 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]`** |
| 무장 / 해제 / 외출 / 귀가 / 나가요 / 장면 모드 / 내가 있을 때 녹화 중지 | scene set <id> (scene list로 id 확인, scene set --schedule로 시간표로 돌아가기) | 허브/NVR 전용. 하나의 스위치가 모든 채널을 재무장합니다 — 카메라별 감지 설정에는 영향을 주지 않습니다. 먼저 scene show: currentSceneId 0은 시간표가 작동 중임을 의미합니다. 자세한 내용은 references/scene-mode.md. |
| 해상도 / 비트레이트 / fps / 프레임 속도 / h265 / h264 / 스트림 품질 / 스트림 줄이기 | **`encode set --stream main | sub |
| 사람 감지 | 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 | 카메라 측 절단 — 전체 시간을 다운로드하여 자르지 마십시오 |
| 알람 / 오늘 알람 | events query --since 24h | 게이트웨이 필요 |
| 라이브 버퍼보다 과거 이벤트 기록 / 지난 주에 무슨 일이 있었나 / 허브 이벤트 로그 | --channel N events history --since 7d [--types people,motion] (허브/NVR 전용) | 장치의 기록된 이벤트 로그(cmd 516/517)를 읽으며, ~500개 항목 라이브 링 버퍼가 아닙니다. 독립형 IPC는 400. 빈 목록 = 일치하는 이벤트 없음; 허브는 과도한 사용 후 잠시 조용해질 수 있으므로 잠시 후 재시도하십시오. |
| 음성 알림 / 음성 안내 / 누군가 도착하면 알림 / 사람이 감지되면 음성 재생 | audio talk (references/voice-alert.md 참조) | PCM16 LE 모노만; capabilities.audioTalk=1 필요 |
| X 감지 시 Y 수행 / 자동화 / 이벤트 트리거 / 감지 후 수행 | 반드시 TOML 규칙과 함께 events monitor init/check/run을 사용하십시오. 임시 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번 실행이며, 전역 꼬리에서 살아남은 것이 아닙니다. |
| 이 카메라 감시 | events monitor init [...] | TOML 규칙 파일 생성/검증; 자세한 내용은 references/event-monitor.md |
(번역 참고: 원문이 중간에 잘려서 나머지 내용이 없습니다. 잘린 부분이 있으면 추가 번역이 필요합니다.)