芯步的2路直流智能开关提供了完整的HTTP API接口,支持远程控制和定时任务。以下方案将带你从接口准备、签名计算,到定时调度脚本的实现,一步步完成二次开发。
一、 技术背景与准备
芯步的智能硬件产品(如智能触摸墙壁开关、智能控制器)均开放了HTTP API接口。这意味着你可以通过任何支持HTTP协议的编程语言(Python, Java, Go, PHP, Shell等)向云端发送指令,云端再将指令下发至设备,从而实现控制。
在进行二次开发前,请确认具备以下前置条件:
硬件设备:已购买并完成配网的“2路智能开关”(如智能触摸墙壁开关2路或智能控制器2路)。
开发者凭证
AppID:应用唯一标识。
AppSecret:应用密钥,用于签名计算。
以上两者可在芯步控制台的“开发设置”中获取。
设备ID:在控制台查看目标设备的
device字符串(通常是一串数字或字母组合)。
二、 核心接口与签名机制
要实现控制,核心是调用芯步的API。出于安全考虑,所有API请求都需要进行签名校验。
1. 接口地址与参数
请求URL:
https://api.thingboot.com/{AppID}/device/control/请求方法:
POSTQuery参数
sign: 接口签名。ts: 当前Unix时间戳(秒)。
Body参数 (JSON)
device: 你的设备ID。order: 控制指令(JSON对象)。
2. 签名算法
签名生成逻辑 YourSign = md5(md5(AppSecret) + ts)。
将
AppSecret进行MD5加密(得到32位小写字符串)。将上述结果拼接上当前时间戳
ts。将拼接后的字符串再次进行MD5加密,得到最终的
sign。
3. 支持的指令集
对于2路直流智能开关,order 参数支持以下命令
| 指令功能 | Order JSON 示例 | 说明 |
|---|---|---|
| 控制线路1 | {"power1": 1} 或 {"power1": 0} | 1为开启,0为关闭 |
| 控制线路2 | {"power2": 1} 或 {"power2": 0} | 1为开启,0为关闭 |
| 线路1点动 | {"point1": 2000} | 先通电,延时后断电,单位毫秒(ms) |
| 线路2点动 | {"point2": 2000} | 先通电,延时后断电,单位毫秒(ms) |
| 线路1互锁 | {"reset1": 3000} | 先断电,延时后通电,单位毫秒(ms) |
| 批量控制 | {"batch":{"relay":[1,2],"power":"1"}} | 同时控制1、2路开启 |
三、 解决方案实施:Python脚本实现定时控制
本节将展示如何使用Python编写一个定时任务脚本,实现“每天定时开启,定时关闭”或“工作循环控制”的功能。
步骤1:环境准备
确保你的开发环境安装了 requests 库(用于发送HTTP请求)和 hashlib(用于签名)。
步骤2:编写核心控制模块
需要实现两个核心函数:签名生成函数 和 命令下发函数。
步骤3:实现定时调度方案
你可以根据实际场景选择合适的方案。
方案A:使用 schedule 库实现周期性任务
若脚本需要在后台长期运行,推荐使用此方案。以下代码实现了 “每隔10秒执行一次点动(先通后断)” 的场景,适用于需要定时冲洗、定时喷淋等工业场景。
方案B:结合Linux Crontab(适合简单定时)
如果是简单的定时开关,你可能不想写死循环。这种情况下,可以将控制逻辑写成单次执行脚本,利用系统的Crontab来触发。
保存脚本:将上述
control_device函数单独保存为switch.py,并通过命令行参数接收指令。配置Crontab
四、 进阶应用:高级自动化模式
利用API接口,你不仅限于简单的开关,还可以实现更复杂的逻辑。
状态保持(防冲突):在无人值守场景下,你可能不希望现场人员手动按开关把灯关掉。可以使用“状态保持”指令,强制开关在被人为关闭后的几秒内自动恢复。
指令示例:
{"power1": {"keep": "1", "revert": "5"}}—— 强制线路1保持开启,如果有人手动关闭,5秒后自动恢复。
场景联动:你可以将芯步的API集成到 Node-RED 或 Home Assistant 等开源智能家居平台中。通过HTTP节点调用上述API,配合传感器(如温湿度、光照),实现“当光照低于10Lux时,自动开启2路开关”。
MQTT直连(私有化部署) :如果你对实时性要求比较高或数据不上云,据产品资料显示,部分直流控制器支持 自定义MQTT 协议。你可以获取设备接入信息后,直接在局域网内通过MQTT协议订阅和控制设备,响应速度将提升至毫秒级。
五、 常见问题与调试
签名错误 (Sign Error)
请检查时间戳
ts是否为秒级(10位数字),不要传成了毫秒级(13位)。检查
AppSecret在两次MD5过程中是否包含空格或换行符。确认拼接顺序是
MD5(AppSecret)+ts,不要搞反。
设备离线
接口若返回设备离线,请检查设备电源是否接通,Wi-Fi信号是否强。
线路状态获取
本方案侧重于“控制”。若需实时获取开关当前状态,可利用平台的消息推送机制(Webhook),或在定时脚本中增加状态查询接口(视具体产品物模型而定)。
总结
通过对芯步2路直流智能开关开放接口的二次开发,你可以轻松构建出符合业务场景的自动化控制系统。核心步骤归纳为:
获取凭证(AppID, AppSecret, DeviceID)。
实现签名(MD5嵌套)。
封装指令(利用point命令实现自动复位,power命令实现常开常关)。
挂载调度(使用Python Schedule库或系统Crontab)。