Install
openclaw skills install @jftech/jf-open-pro-garbage-inspection杰峰垃圾溢出巡检技能。通过杰峰监控设备抓图,Agent 直接看图分析垃圾桶是否溢出,输出结构化巡检报告。支持单设备/批量巡检和定时任务。
openclaw skills install @jftech/jf-open-pro-garbage-inspection通过杰峰监控设备云抓图 + Agent 视觉分析,自动判断垃圾桶是否溢出:
垃圾巡检 / 垃圾溢出 / 垃圾桶巡检 / 巡检怎么用 / 检查垃圾 / 垃圾溢出了吗 / 巡检一次 / 添加摄像头 / 定时巡检 / 自动巡检
| 依赖技能 | 用途 |
|---|---|
jf-open-pro-device-list | 添加摄像头时查询已绑定设备列表 |
jf-open-pro-device-status | 添加摄像头时验证设备在线状态 |
抓图和下载由本技能自带的 scripts/capture_and_download.py 完成。
| 变量名 | 说明 | 默认值 | 必需 |
|---|---|---|---|
JF_UUID | 开放平台用户 uuid | - | 是 |
JF_APP_KEY | 开放平台应用 appKey | - | 是 |
JF_APP_SECRET | 开放平台应用密钥 | - | 是 |
JF_MOVE_CARD | 移动卡标识(用于签名) | 2 | 是 |
JF_ENDPOINT | API 接入地址 | api-cn.jftechws.com | 否 |
pip install requests
config/cameras.json 存储巡检摄像头列表和参数:
{
"cameras": [
{
"sn": "设备序列号",
"name": "A栋1楼垃圾桶",
"password": "设备密码",
"location": "A栋1楼大厅"
}
],
"settings": {
"overflow_threshold": "moderate",
"default_channel": 0
}
}
sn:杰峰设备序列号(唯一标识)name:用户定义的显示名称password:设备密码(用于自动获取 Token)location:位置描述(辅助分析报告中提供上下文)overflow_threshold:分析敏感度(low / moderate / high)default_channel:默认抓图通道号触发: 用户说"垃圾巡检"、"垃圾溢出"、"巡检怎么用"、"帮我配置巡检",或 Agent 判断用户是首次使用。
流程:
Agent 先静默检查环境状态,然后根据结果引导用户:
config/cameras.json,检查 cameras 列表是否为空。JF_UUID、JF_APP_KEY、JF_APP_SECRET 是否已设置(通过 echo %JF_UUID% 或 Bash 命令)。情况 A — 全新状态(无摄像头、无环境变量):
你好!我来帮你搭建垃圾溢出巡检系统。
这个系统能做什么:
- 通过杰峰摄像头抓图,用 AI 分析垃圾桶是否溢出
- 自动输出巡检报告,标注严重溢出/轻度溢出/正常
- 支持定时自动巡检,结果推送到 IM 频道
搭建只需要 2 步:
1. 配置环境变量(JF_UUID, JF_APP_KEY 等)
2. 添加巡检摄像头
我们先从配置环境变量开始,好吗?说"开始"就行。
情况 B — 有环境变量,无摄像头:
环境变量已就绪!接下来需要添加巡检摄像头。
说"添加摄像头",我会帮你从已绑定的设备中选择。
情况 C — 有摄像头,就绪状态:
一切就绪!当前配置:
摄像头:{列出摄像头名称}
敏感度:{overflow_threshold}
现在可以:
- "巡检一次" — 立即对所有摄像头抓图分析
- "检查 A栋 的垃圾桶" — 只检查指定摄像头
- "查看摄像头" — 管理摄像头列表
- "定时巡检" — 设置自动巡检
需要做什么?
注意事项:
触发: 用户说"添加摄像头"、"删除摄像头"、"查看摄像头"
流程:
查看摄像头:
读取 config/cameras.json,展示已配置的摄像头列表(名称、SN、位置)。
添加摄像头:
jf-open-pro-device-list 技能查询可用设备列表。jf-open-pro-device-status 验证设备是否在线。config/cameras.json 的 cameras 列表中。删除摄像头:
从 config/cameras.json 的 cameras 列表中移除对应条目。
触发: 用户说"巡检一次"、"检查垃圾"、"垃圾溢出了吗"、"检查 X 的垃圾桶"
流程:
读取 config/cameras.json。如果用户指定了特定摄像头(如"检查 A 栋"),只巡检匹配的设备;否则巡检全部。
运行抓图脚本(设置 PYTHONIOENCODING=utf-8):
python {skill_dir}/scripts/capture_and_download.py \
--action inspect-batch \
--config {skill_dir}/config/cameras.json \
--output-dir {workspace}/captures/{YYYYMMDD}/ \
--json
如果是单设备巡检:
python {skill_dir}/scripts/capture_and_download.py \
--action inspect-single \
--device-sn {设备SN} \
--device-name {设备名称} \
--device-location {位置} \
--output-dir {workspace}/captures/{YYYYMMDD}/ \
--json
脚本输出 JSON 格式的结果。
对 JSON 结果中每个 "success": true 的设备:
results[].file 指向的本地图片文件。分析维度:
识别垃圾桶:在画面中找到垃圾桶,确认其位置和数量。如果画面中没有垃圾桶或看不到垃圾桶,标记为"无法判断 — 画面中未发现垃圾桶"。
判断溢出状态:
严重程度分级(参考 overflow_threshold 设置):
敏感度调节(根据 overflow_threshold):
low:只有"严重溢出"才标记为异常,轻度溢出视为正常moderate(默认):轻度溢出也标记为异常high:垃圾桶接近满(约 80%)即标记为轻度溢出附加观察:
将所有设备的分析结果汇总,按以下格式输出:
📋 垃圾溢出巡检报告
━━━━━━━━━━━━━━━━━━━
巡检时间:YYYY-MM-DD HH:mm:ss
巡检设备:N 台 | 成功:X 台 | 失败:Y 台
🔴 {摄像头名称} (sn: {设备SN})
状态:严重溢出
位置:{位置描述}
分析:{具体分析描述}
🟡 {摄像头名称} (sn: {设备SN})
状态:轻度溢出
位置:{位置描述}
分析:{具体分析描述}
🟢 {摄像头名称} (sn: {设备SN})
状态:正常
位置:{位置描述}
分析:{具体分析描述}
⚫ {摄像头名称} (sn: {设备SN})
状态:无法判断
位置:{位置描述}
原因:{无法判断的原因}
━━━━━━━━━━━━━━━━━━━
汇总:严重溢出 A 台 / 轻度溢出 B 台 / 正常 C 台 / 无法判断 D 台
建议优先处理:{严重溢出的摄像头名称列表}
排列顺序: 严重溢出 → 轻度溢出 → 正常 → 无法判断(按严重程度降序)。
失败的设备和离线的设备也需在报告中展示,用"离线"或具体错误原因标注。
展示抓图图片: 输出文字报告后,必须使用 present_files 工具将所有成功抓取的图片文件展示给用户。每台设备对应一张抓图,让用户能直观看到每个摄像头的实时画面。示例:
present_files([
{"file_path": "抓图文件的完整路径"},
{"file_path": "抓图文件的完整路径"}
])
触发: 用户说"定时巡检"、"每天巡检"、"自动巡检"
流程:
使用 AskUserQuestion 工具确认:
qoder_list_channel_conversations 查询可用 IM 会话列表,让用户选择接收人使用 qoder_cron 创建定时任务,message 示例:
执行以下垃圾溢出巡检任务:
技能目录: {skill_dir}
数据目录: {data_dir}
步骤 1 — 抓图
使用以下命令对所有巡检摄像头抓图:
设置 PYTHONIOENCODING=utf-8
python {skill_dir}/scripts/capture_and_download.py --action inspect-batch --config {skill_dir}/config/cameras.json --output-dir {data_dir}/captures/{今天YYYYMMDD}/ --json
环境变量: JF_UUID=xxx, JF_APP_KEY=xxx, JF_APP_SECRET=xxx, JF_MOVE_CARD=xxx
步骤 2 — 分析
对抓图成功的每台设备,使用 Read 工具读取下载的本地图片,分析垃圾桶是否溢出。
判断标准:严重溢出(大量垃圾溢出桶外)、轻度溢出(略超桶口)、正常(未满或刚满)。
如果画面中看不到垃圾桶,标记为"无法判断"。
步骤 3 — 推送
汇总巡检结果,通过 IM 频道发送报告给「{用户名}」。
报告格式包含每台设备的状态(严重溢出/轻度溢出/正常/无法判断)和具体分析。
| 场景 | 处理方式 |
|---|---|
| 摄像头离线 | 跳过该设备,报告中标记"离线",计入失败 |
| 抓图 API 错误 | 跳过该设备,报告中标记失败原因 |
| 图片下载失败 | 脚本自动重试一次,仍失败标记"下载失败" |
| 图片无法分析 | Agent 标记"无法判断",说明原因 |
| 环境变量缺失 | 提示用户配置所需环境变量 |
| 配置文件为空 | 引导用户先添加摄像头 |
| 脚本 | 用途 | 调用方式 |
|---|---|---|
scripts/capture_and_download.py | 抓图 + 下载 | CLI: --action {inspect-single,inspect-batch} --config --output-dir --json |
scripts/crypto.py | 签名加密工具 | 被 capture_and_download.py 导入 |
| 文件 | 说明 |
|---|---|
SKILL.md | 技能文档 |
scripts/capture_and_download.py | 抓图 + 下载脚本 |
scripts/crypto.py | 签名/时间戳加密工具 |
config/cameras.json | 摄像头配置文件 |