CATALOG

一、写在前面

咱们今天聊的主题,是怎么对芯步那款8路智能包间电源控制器做二次开发,给它加上定时任务功能。这玩意儿其实就是个能远程控制8路电源通断的设备,每个包间独立控制,常用于KTV包间、会议室、自习室这些需要分时管理电力的场景。

我尽量说得接地气一点,让你拿到就能上手。核心思路就一句话:通过芯步开放的HTTP API接口,调用“任务设置”相关接口,把定时规则推送到云端,让云平台按时下发指令给设备

二、先搞清楚我们的目标

假设咱们运营一个商务中心,有8个独立办公室:

包间号对应线路定时需求
1号线路1工作日 9:00 开灯,18:00 关灯
2号线路2每天 19:00-22:00 开启(共3小时)
3号线路3仅周六 10:00 开启
4-8号线路4-8老板手动控制,不定时

我们需要写个小程序或脚本,在后台把这些规则设置好,后面就全自动跑了。

三、准备工作:拿钥匙开干

动手之前先把这几样东西备齐:

  1. 硬件设备:8路智能控制器已通电、已联网(支持2.4G WiFi)

  2. 开发者账号:去芯步官网注册一个账号

  3. 创建应用:登录后进入“工作台” → “物联网控制台” → “开发设置”,拿到两个关键凭证:

    • AppID:你的应用ID

    • AppSecret:开发者密码,记得保管好

  4. 设备ID:在控制台设备列表里找到你的8路控制器,记下设备ID(一串数字)

一个小提示:如果刚开始想快速测试,可以在“开发设置”里把调试模式打开。调试模式下不校验签名和时间戳,直接用Postman就能发请求,先跑通流程再关掉

四、核心姿势:调用定时任务API

芯步平台提供了完整的任务管理接口,增删改查都支持。咱们主要用两个:

  • 创建/修改任务:把定时规则告诉平台

  • 查看任务列表:确认规则设置成功

4.1 调用规矩(签名计算)

所有接口都走这个格式:

请求头加上:

sign 的计算方式稍微有点绕,但原理很简单:

用人话说就是:

  1. AppSecret做一次MD5加密

  2. 把结果拼上当前的时间戳ts(秒为单位)

  3. 对整个字符串再做一次MD5

举个例子(假设值):

  • AppSecret = abc123

  • 第一次MD5后 = e99a18c428cb38d5f260853678922e03

  • ts = 1700000000

  • 拼接 = e99a18c428cb38d5f260853678922e031700000000

  • 第二次MD5 = 这就是sign的值

我一般把这个逻辑封装成一个函数,每次调用接口前自动生成,省得手算

4.2 创建定时任务(重点)

请求地址:

请求体示例(给线路1设置一个固定时间点执行的任务):

参数解读:

  • title:任务名称,方便自己识别

  • devices:设备ID数组,可以一个任务控制多个设备

  • stage:定时策略,datetime表示固定时间点,loop表示循环

  • actions:要执行的动作,这里是把1号线路打开

  • enable:设为1表示启用

4.3 高级定时场景

场景2:每天固定时段运行(比如2号包间19-22点开)

这种情况需要创建两个任务:

  • 任务A:每天19:00执行 {"power2":1}

  • 任务B:每天22:00执行 {"power2":0}

stage里的loop可以设成"everyday",或者更细粒度的"weekday""weekend"

场景3:批量控制多条线路

如果要把3、4号线路同时打开,可以这样写actions

或者用批量命令格式

4.4 查看已有任务

想确认任务有没有设置成功,或者想拿到任务ID后续修改/删除:

返回的数据里能看到每个任务的idstage策略、enable状态等

4.5 删除/暂停任务

拿到任务ID后:

  • 删除:调用 /task/del/ 接口

  • 暂停:把任务的enable字段改成0

五、代码示例(Python版)

说了这么多,直接上代码吧。这是我最常用的一个脚本模板:

六、踩坑经验分享

说几个我当初踩过的坑,你别再踩一遍:

  1. 时间戳用秒别用毫秒ts必须是秒级时间戳,用毫秒签名对不上

  2. 时区问题:所有时间都是东八区(北京时间),如果你的服务器在别的时区,记得转换

  3. MD5结果是小写:签名计算出来的MD5要转成小写,大写会报错

  4. 设备必须在线:定时任务是把指令存在云端,到点下发。但如果设备断网了,下发会失败,所以要确保设备WiFi稳定

  5. 先测试再上生产:强烈先用调试模式跑通,再关掉调试模式走正式签名流程

七、还能玩出什么花活?

除了简单的开关,这个8路控制器还支持一些高级玩法:

  • 先通后断(point):比如先打开某路线路,过N毫秒再断开,可以用来模拟“点动”操作

  • 先断后通(reset):先断开再接通,相当于重启设备

  • 批量控制(batch):一次性操作多路线路,减少网络请求次数

把这些命令组合起来,理论上可以实现复杂的自动化场景,比如“按顺序逐一亮灯,每个间隔1秒”。

八、总结

把上面这些串起来,整个二次开发的流程就清晰了:

  1. 拿到AppID、AppSecret、DeviceID

  2. 学会计算签名(其实就两次MD5)

  3. 调用 /task/save/ 接口,往里面塞定时规则

  4. 坐等到点自动执行

芯步这套HTTP接口设计得还算友好,用的是标准RESTful风格,不管你用Python、Node.js、PHP还是Java,逻辑都一样

最后:先找一个不重要的小设备(或者用平台的演示设备)把整个流程跑通,验证没问题之后再部署到正式环境。祝二次开发顺利!