动检/人形告警推送到自建服务:乐橙 setMessageCallback + 3 分钟验收清单

动检/人形告警推送到自建服务:乐橙 setMessageCallback + 3 分钟验收清单

动检/人形告警推送到自建服务:乐橙 setMessageCallback + 3 分钟验收清单

现行 OpenAPI · 勿用 旧版本协议(不再维护) · 回调见 事件消息推送


我给乐橙门口机写了一个自建通知服务——动检推 Telegram,人形推 Home Assistant,打算周末搞定。

周五晚上,在 乐橙开放平台 拿到的accessTokenlistDeviceDetailsByPage都通了。我在镜头前挥手,乐橙 App 立刻弹「有人」

自建服务日志:一行都没有

周六我把 MD5 签名对了八遍;周日才发现——从没调过setMessageCallback。App 通知走厂商通道;你的 HTTPS 服务,乐橙云不知道往哪 POST。改完回调,按下面清单3 分钟跑通,第一条human进日志。


动检和人形,为什么必须走推送而不是轮询

方式延迟配额能否进自建服务
乐橙 App 推送
定时getAlarmMessage30s~分钟级烧 API易漏、难扩展
HTTP 回调通常 1~3s友好正路

setMessageCallback在乐橙云产生videoMotion/human时,主动 POST到你的公网 URL。

callbackFlag 与 msgType

callbackFlag msgType(回调 JSON) ────────────────────────────────────────────────── alarm → videoMotion(动检) → human(人形) deviceStatus → online / offline faceAnalysis(可选) → aiPerLine 等(行业 AI,视机型)

家用乐橙 IPC常见AlarmMD+AiHumancallbackFlag: alarm即可,不必误订faceAnalysis(设备不支持则永远收不到)。

能力字段(分页接口返回)期望 msgType设备端
AlarmMDvideoMotion开移动侦测
AiHumanhuman开人形检测

POST

乐橙 IPC

乐橙云 OpenAPI

setMessageCallback

桥接 200

Telegram / HA / 工单

边界:回调仅针对开发者主账号资产池设备;列表用listDeviceDetailsByPage,勿用停维护的deviceList方法


计时从「桥接 HTTPS 已部署、设备 online」开始。任一步失败即停。

第 0 分钟 · 调用壳(国内网关)

// lib/platform-call.jsimportcryptofrom'node:crypto';import{randomUUID}from'node:crypto';exportfunctioncalcSign(time,nonce,appSecret){constraw=`time:${time},nonce:${nonce},appSecret:${appSecret}`;returncrypto.createHash('md5').update(raw,'utf8').digest('hex');}exportasyncfunctionplatformCall(method,params={}){constappId=process.env.APP_ID;constappSecret=process.env.APP_SECRET;constbase=process.env.OPENAPI_BASE;consttime=Math.floor(Date.now()/1000);constnonce=randomUUID();constbody={system:{ver:'1.0',appId,sign:calcSign(time,nonce,appSecret),time,nonce},id:randomUUID(),params,};constres=awaitfetch(`${base}/${method}`,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(body),});constjson=awaitres.json();if(json.result?.code!=='0')thrownewError(`[${json.result.code}]${json.result.msg}`);returnjson.result.data;}exportasyncfunctionadminToken(){const{accessToken}=awaitplatformCall('accessToken',{});returnaccessToken;}
APP_ID=lcdxxxxxxxxxxxxAPP_SECRET=your_secretOPENAPI_BASE=https://openapi.lechange.cn/openapiCALLBACK_URL=https://your-bridge.example.com/imou/events

签名规则:开发规范 ·accessToken约 3 天有效,生产 Redis 缓存。


第 1 分钟 · 资产 + 能力验收

// scripts/minute-1-verify-device.jsimport'dotenv/config';import{platformCall,adminToken}from'../lib/platform-call.js';consttoken=awaitadminToken();constpage=awaitplatformCall('listDeviceDetailsByPage',{token,pageSize:10,page:1,source:'bindAndShare',});constdev=page.deviceList?.[0];if(!dev)thrownewError('资产池为空:开发者主账号绑定设备');constability=dev.channelList?.[0]?.channelAbility??dev.deviceAbility??'';console.log({deviceId:dev.deviceId,deviceStatus:dev.deviceStatus,hasMotion:ability.includes('AlarmMD'),hasHuman:/AiHuman|AiHumanCar/.test(ability),});

✅ 通过deviceList ≥ 1·online· 含AlarmMD和/或AiHuman

踩坑 A:乐橙 App 能看、列表 0 → 私人号绑定,换 开发者主账号 重新添加。


第 2 分钟 · setMessageCallback + 读回

// scripts/minute-2-set-callback.jsimport'dotenv/config';import{platformCall,adminToken}from'../lib/platform-call.js';consttoken=awaitadminToken();awaitplatformCall('setMessageCallback',{token,status:'on',callbackUrl:process.env.CALLBACK_URL,callbackFlag:'alarm,deviceStatus',basePush:'2',});console.log(awaitplatformCall('getMessageCallback',{token}));
参数说明
callbackUrlHTTPS 公网
callbackFlagalarm,deviceStatus
basePush: '2'业务接管,避免与乐橙 App 重复推送
getMessageCallback读回验收

踩坑 B:HTTP / 自签证书 → 校验失败。踩坑 C:漏alarm→ 收不到videoMotion/human


第 3 分钟 · 桥接 + 实机触发

// src/alarm-bridge.jsimportexpressfrom'express';constapp=express();app.use(express.json());functionclassify(msg){if(msg.msgType==='human')return'human';if(msg.msgType==='videoMotion')return'motion';if(msg.msgType==='online'||msg.msgType==='offline')return'status';return'other';}app.post('/imou/events',(req,res)=>{res.status(200).send('ok');queueMicrotask(()=>{constmsg=req.body;console.log(JSON.stringify({kind:classify(msg),msgType:msg.msgType,deviceId:msg.did,alarmId:msg.id,}));});});app.listen(8080);

镜头前走动或站立,日志应出现:

{"msgType":"videoMotion","did":"DOOR_CAM_001","cid":0,"id":2447736561}

"msgType": "human"

踩坑 D:业务逻辑放在200之前 → 超时后平台停推(我们丢过一周告警)。

踩坑 E:App 有人形、日志只有动检 → 乐橙 App 开人形侦测,或机型无AiHuman


验收后 · 分流与留证

asyncfunctiondispatch(msg){if(msg.msgType==='human'){/* 高优先级:推 HA / 电话提醒 */}elseif(msg.msgType==='videoMotion'){/* 普通动检 */}}constdetail=awaitplatformCall('getAlarmMessageById',{token:awaitadminToken(),deviceId:msg.did,channelId:'0',alarmId:String(msg.id),msgType:msg.msgType,});

告警缩略图 URL 约1 天有效,重要场景转存 OSS。


3 分钟 Checklist(可打印)

【0′】 open.imou.com 应用 + openapi.lechange.cn + 桥接 HTTPS 【1′】 listDeviceDetailsByPage ≥1 online,AlarmMD/AiHuman 对齐需求 【2′】 setMessageCallback(on) + getMessageCallback 读回一致 【3′】 实机触发 → videoMotion 或 human ≥1,200 < 500ms

幂等与补洞

asyncfunctiononce(alarmId,fn){constok=awaitredis.set(`imou:alarm:${alarmId}`,'1',{NX:true,EX:86400});if(ok)awaitfn();}
  • 每小时getAlarmMessage与本地 diff,补source: backfill
  • 轮询改回调后,我的资源 配额通常明显下降。

排错速查

现象处理
3 分钟无 POSTcallback on + HTTPS 可达
收几天就停必须先 200
只有动检无人形开人形;查 AiHuman
App 有、服务无未 setMessageCallback

与 Home Assistant

HA Core Imou 集成 约 2 分钟轮询,毫秒联动仍建议本回调 → MQTT → automation。见同系列 HA Core 接入文。


小结

乐橙动检/人形进自建服务,最短路径:

listDeviceDetailsByPage 验收 → setMessageCallback(alarm) → 桥接 200 → msgType 分流 → 3 分钟实机验收

App 能弹「有人」,只说明检测正常;Telegram、HA、工单要响,必须让乐橙云知道你的 callbackUrl

延伸阅读

  • 事件消息推送
  • 分页查询设备详情
  • 自建全屋智能 · 列表与回调
  • 需 MQTT 扇出到多下游时,在桥接层publish即可(工单 / HA / 大屏各订 topic)

开始接入

乐橙开放平台 open.imou.com注册并创建应用,领取免费设备接入与媒体带宽。平台以视频技术与安全为核心,提供 OpenAPI、OpenSDK 与告警 HTTP 推送,帮助开发者快速把乐橙 IPC 动检/人形事件接进自建自动化。

建议今天:setMessageCallback 配好 → 镜头前走一圈 → 日志里看到第一条humanvideoMotion。比写 200 行轮询任务值。

你卡在回调 URL、200 响应还是只有动检没有人形?评论区说说。