CATALOG

基于芯步官方文档中UNI-KZQ-TY-24等控制器产品的开放接口,以下从签名计算、指令构造、定时任务实现到异常处理,给出完整的对接方案。

1. 核心准备:签名计算与请求结构

要实现对接,首先需要理解芯步的API安全机制。所有HTTP请求均需携带签名(sign)和时间戳(ts),以防止接口被篡改或重放攻击。

签名生成逻辑(三步计算):

  1. 将开发者后台获取的 AppSecret 进行一次MD5加密,得到 Secret_MD5

  2. Secret_MD5 与当前Unix时间戳(秒)拼接成字符串。

  3. 将拼接后的字符串再次进行MD5加密,得到最终的 sign

请求示例:

  • 请求地址https://api.thingboot.com/{AppID}/device/control/

  • Method:POST

  • HeadersContent-Type: application/x-www-form-urlencodedapplication/json(视具体命令格式)

  • Body/Params

    • device:设备ID(如:189xxxx

    • order:JSON字符串,即具体的控制指令

    • ts:时间戳(Unix秒数)

    • sign:按上述规则计算出的签名

注意:若部署在纯局域网环境,该设备支持私有化部署和自建消息服务器,API调用逻辑完全一致,只需更换内网IP地址即可

2. 单次控制:线路启停指令构造

定时任务的本质是“在特定时间自动执行单次控制指令”。因此,我们需要先掌握单条线路的控制指令格式。

针对智能通用控制器24路(UNI-KZQ-TY-24),线路编号通常从1至24。控制指令遵循以下规则

操作场景指令内容(order参数)说明
开启第3路{"power3":1}将第3路通道接通
关闭第7路{"power7":0}将第7路通道断开
批量开启{"batch":{"relay":[1,2,3],"power":"1"}}同时开启1、2、3路
批量关闭{"batch":{"relay":[3,4,5],"power":"0"}}同时关闭3、4、5路
点动/脉冲{"point":{"relay":[6],"interval":500}}第6路瞬间接通500ms后断开,类似按一下开关

单次控制逻辑流程系统首先根据当前时间判断需执行哪条任务 -> 构造对应的order指令及签名 -> 调用上述API -> 设备执行线路通断。此步骤通常可在100ms内完成。

3. 定时任务设计

由于定时任务需要在无人工干预下自动执行,采用 “服务端定时器轮询 + API即时下发” 的架构,而非依赖设备本地RTC(实时时钟),这样更易于维护和灵活调整。

架构流程图解:

sequenceDiagram
    participant Admin as 管理后台
    participant Server as 中央服务器/云函数
    participant API as 芯步开放API
    participant Device as 24路控制器硬件

    Admin->>Server: 1. 配置定时策略 (如:每天8:00 开启1-5路)
    Note over Server: 任务持久化存储
    
    loop 每分钟轮询/定时触发
        Server->>Server: 2. 检查当前时间匹配的任务
        alt 时间匹配成功
            Server->>Server: 3. 生成签名 & 指令
            Server->>API: 4. POST /control/ (device=xxx, order={power1:1})
            API->>Device: 5. 下发MQTT/HTTP指令
            Device->>Device: 6. 执行继电器吸合
            Device-->>API: 7. 返回执行成功
            API-->>Server: 8. 返回HTTP 200
            Server->>Admin: 9. 记录操作日志
        end
    end

关键组件说明:

  • 任务存储器:数据库用于存储任务规则,如“任务ID 101:每周一至周五 09:00 开启第1-10路;18:00关闭”。

  • 触发器:使用Linux Crontab、Windows Task Scheduler 或代码中的Quartz/Schedule库,在每分钟或每秒扫描一次任务表。

  • 执行器:即HTTP请求客户端。当“当前时间”大于等于“任务执行时间”且“状态=待执行”时,触发API调用。

4. 代码实战:Python与Java实现案例

基于上述架构,以下是具体的代码实现逻辑。

第一种场景:Python脚本(适用于Flask/Django后端或独立脚本)

第二种场景:Java(SpringBoot)

5. 高级功能与异常处理

5.1 状态反馈与确认

为了确保定时任务执行确实生效,在发送控制命令后,查询一次设备状态进行校验。调用/device/status/接口获取当前线路的通断情况。

5.2 队列与重试机制

在网络不稳定的情况下:

  • 策略:若API调用超时或返回网络错误,应实现随机间隔(或逐次增大间隔)重试(如延迟1秒、2秒、4秒后重试,最多3次)。

  • 防抖:定时任务触发时,先查询数据库该任务上一次执行时间,避免因系统重启或时钟偏移导致的短时间内重复执行。

5.3 私有化部署适配

若在局域网使用(无外网),需在初始化客户端时将api.thingboot.com替换为您配置的自建消息服务器IP。设备在局域网内响应速度更快,延迟可降至毫秒级

总结

通过以上方案,您可以利用“24路控制器”的HTTP接口,采用标准API签名机制构建稳定的定时控制系统。核心点在于正确生成sign签名以及针对多路设备构造精准的order指令(如powerXbatch等)。先使用Postman等工具验证单次控制指令,再集成到定时任务框架中。