一键导入
camera
Use when working with Home Assistant cameras — taking a snapshot for the agent to look at, getting a stream URL, or recording — through HA NOVA Relay.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when working with Home Assistant cameras — taking a snapshot for the agent to look at, getting a stream URL, or recording — through HA NOVA Relay.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use when the user wants Home Assistant operations through HA NOVA (App + Relay) with local OS-backed auth.
Use when checking Home Assistant home status, repairs, system health, unavailable/unknown entities, low batteries, or component/config summaries through HA NOVA Relay.
Use when HA NOVA Relay requests fail due to onboarding, connectivity, or auth issues.
Use when checking pending Home Assistant updates (core, OS, Apps, integrations, device firmware), reading release notes, installing updates with safety gates, or skipping/unskipping update versions through HA NOVA Relay.
Use when managing Home Assistant people, zones, tags, and user accounts — creating a person, drawing a zone, adding a tag, or reviewing who has access — through HA NOVA Relay.
Use when working with Home Assistant's voice assistant — testing what Assist understands, inspecting or editing Assist pipelines, managing which entities are exposed to voice, and listing TTS/STT/wake-word engines — through HA NOVA Relay.
| name | camera |
| description | Use when working with Home Assistant cameras — taking a snapshot for the agent to look at, getting a stream URL, or recording — through HA NOVA Relay. |
| license | MIT |
| compatibility | Requires the ha-nova CLI (run 'ha-nova setup' first) and the HA NOVA Relay in Home Assistant (App, or standalone container on Container/Core). |
Camera access:
Not in scope: creating automations around cameras (ha-nova:write), person/motion detection setup, or any image analysis claim beyond what the agent can see in the fetched frame.
Read and follow ../ha-nova/session-bootstrap.md.
Verify relay CLI: ha-nova relay health
If this fails: ha-nova setup
Binary responses are guaranteed by the skills' enforced relay floor (skills/ha-nova/relay-api.md -> Bounded Event Collection). If any relay command printed a relay-outdated warning, have the user update the NOVA Relay before fetching frames — an older relay would corrupt the image bytes.
ha-nova relay core --method GET --path /api/camera_proxy/<entity_id> --out-binary <image-file> — the ONLY correct way to fetch a frame: the relay returns the image base64-marked and --out-binary decodes it to real bytes. Never use --out for an image (that writes the JSON envelope) and never pipe it through --jq.ha-nova relay ws --data-file <payload-file> for WS commandsha-nova relay core --method POST --path /api/services/camera/<service> --body-file <payload-file> for camera services{"type":"config/entity_registry/list_for_display"}, filter ei starting with camera.; for room phrasing resolve the area and use search/related with item_type: "area". Ambiguity: present candidates (max 5), ask once./api/states/<entity_id>): state (idle/recording/streaming/unavailable), attributes.supported_features (1 = ON_OFF, 2 = STREAM), entity_picture, frontend_stream_type. An unavailable camera cannot deliver a frame — say so instead of retrying.--out-binary, then open that file with the client's own image-reading tool. Only describe what is actually visible in the frame; never infer content you did not see.{"type":"camera/stream","entity_id":"camera.<id>"} returns an HLS URL under .data.url. It is relative to the Home Assistant base URL and short-lived — give it to the user, do not try to consume it here.camera.snapshot (filename) and camera.record (filename, duration, lookback). The path must be inside HA's allowlist_external_dirs, or the call fails — say this before the call rather than after. Preview the exact filename and confirm. These write files on the Home Assistant server, not on this machine.camera.turn_on / camera.turn_off need ON_OFF (bit 1); verify by re-reading the state.Full relay/upstream error taxonomy: skills/ha-nova/relay-api.md -> Error Handling. Camera specifics:
--out-binary refusing with "no base64 marker": the response was not an image — usually a 404 (wrong entity) or an error envelope. Re-run without --out-binary to read the actual error.camera/stream errors when the camera has no STREAM feature: check bit 2 first.camera.snapshot failing with a path error means the target directory is not in allowlist_external_dirs — that is an HA configuration change the user must make in configuration.yaml.Apply skills/ha-nova/output-rules.md to all user-facing output. Write previews, delete confirmations, and results render as the Cards defined there.
Render the Report shape (output-rules.md). For a snapshot, describe what is visible in the frame and name the camera plus the time it was taken. For a stream, give the URL and say it is short-lived. Never claim to have seen something the frame does not show.
Preview before write: nothing is saved until the user confirms the shown preview.
Confirmation binds to the displayed preview and expires on any change to target, payload, endpoint, or scope (context skill → Active Preview Confirmation).
Pre-preview phrases ("do it", "go ahead", "implement the plan") authorize drafting and preview only — never the write itself.
Delete and destructive operations require the typed confirmation code confirm:<token> verbatim; "yes" or any natural-language reply is invalid.
Never guess entity, service, or config IDs — resolve them or ask.
Home Assistant is reached exclusively through ha-nova relay.
For any HA write this skill does not cover, STOP and invoke ha-nova:fallback first — never probe unfamiliar write endpoints.
A camera frame is private data: keep it in client-private scratch storage, never write it into the project workspace, and never send it anywhere outside this conversation.
camera.snapshot / camera.record write files on the Home Assistant server — preview the exact path and confirm; they can overwrite an existing file.
Do not fetch frames repeatedly to simulate a live view.
--out or --jq for an image; only --out-binary.