芯步的通断器模块开放了HTTP接口,这意味着你可以用自己的代码直接控制它,而不需要依赖官方App。下面我整理了一套方案,从签名计算到单设备控制,再到多设备联动(比如开门禁时自动关空调+开灯),一步步来。
一、我们能做什么?
说白了,芯步的这个智能通断器,本质上就是一个可以通过网络控制的开关。它的核心是一个继电器,你给它一个指令,它就闭合或者断开,从而控制电路的通断。
而芯步做得比较好的地方是,他们把接口开放得很彻底,提供了HTTP接口和Websocket两种方式。这就意味着,你完全可以用自己熟悉的编程语言(Python、Java、PHP、Go,甚至Node-RED这种低代码工具)去控制它,不再局限于官方的App。
二次开发的终极目标,就是让这些原本孤立的开关"听懂"你的业务逻辑。比如:
联动控制:A设备触发(如人体传感器感应到人),B设备动作(打开灯)。
场景模式:按下一个键(或收到一个信号),一排排通断器按顺序动作(如影音模式:关主灯、开氛围灯、降幕布)。
二、核心准备工作
在动手写代码之前,我们需要拿到两样东西:
硬件ID:每个通断器模块都有一个唯一的设备ID(Device ID)。你可以通过芯步的控制台看到它。
密钥对
AppID:你的应用ID。
AppSecret:你的应用密钥。
注意:所有的控制请求都是通过HTTPS发送的,所以你的电脑、服务器只要能上网,就能控制家里的设备,没有距离限制。
三、最核心的一步:搞定签名
芯步的接口为了保证安全,所有的请求都需要带一个动态签名(Sign)。这是很多新手容易卡住的地方,但其实弄懂了逻辑,就是几行代码的事。
签名的生成规则很简单(就是套娃)
Sign = MD5( MD5(AppSecret) + ts )
我们用大白话拆解一下:
先把你的
AppSecret做一次MD5加密,得到一串字符S1。获取当前的时间戳(ts)(精确到秒)。
把
S1和ts拼在一起,变成一个新字符串S1ts。再把
S1ts做一次MD5加密,出来的结果就是Sign。
为什么要这样? 这样做是为了防止有人拦截了你的请求,拿着旧的链接去重复捣乱。因为时间戳每一秒都在变,签名也在变。
四、先拿单台设备练练手
我们先试一下最简单的动作:把一盏灯(连接着通断器)打开。
请求地址https://api.thingboot.com/{你的AppID}/device/control/
请求体(JSON格式)
如果你用Python写,脚本大概是这个样子(稍微口语化地解释一下)
注意:如果返回200,只代表云端收到了指令,并下发给了设备。如果设备当时离线,它可能收不到。所以如果是关键场景,需要留意设备的在线状态。
五、进阶玩法:如何实现多设备联动?
现在我们只控制一个设备没意思。多设备联动的本质是什么? 就是"事件驱动"。比如:当门磁打开(事件A),触发关空调(动作B)和开灯(动作C)。
方案一:最简单的批次控制
芯步的接口允许你一行代码控制多个设备。只要在device参数里用逗号隔开设备ID就行了。
场景举例:下班了,一键关掉公司所有电源。
这种适合群控,不需要复杂的逻辑,一次性发一个POST请求就行。
方案二:基于业务逻辑的联动(编写中控脚本)
如果你想要更复杂的逻辑,比如"先关A,等5秒,再开B",或者"检测到A状态变化,然后执行B"。这时候你需要写一个中控脚本跑在你的服务器或者树莓派上。
联动设计
触发源:可能是你按下了一个虚拟按钮,可能是另一个传感器(非芯步品牌,但可以通过MQTT接入)报回来数据。
逻辑判断:你的Python/Node.js脚本收到触发信号。
动作执行:脚本依次调用芯步的HTTP接口。
举个例子:搭建一个"观影模式"当你喊一句"看电影",智能音箱触发一个Webhook到你的脚本,脚本执行以下动作:
发送指令:关掉主灯(通断器1,power=0)。
time.sleep(1)等待1秒。发送指令:打开氛围灯(通断器2,power=1)。
发送指令:降下幕布(通断器3,用来控制电机正反转,可能需要发不同指令)。
方案三:利用分组功能(推荐)
芯步后台是支持设备分组的。
你可以把客厅的3个灯和2个插座拉到一个叫"客厅设备"的分组里。然后代码只需要针对Group ID发命令,不需要管这个组里有几个设备、ID是多少。
这样做的好处是,如果以后你换了设备或者增加了设备,只需要在后台修改分组配置,完全不用改你的代码。
六、高级技巧:如何获取设备当前状态(反馈机制)
很多人在做联动时,只关心"发命令",不关心"有没有执行成功"。这在工业级或者严谨的场景下是不够的。比如你想实现:灯如果没关,就再关一次。
芯步提供了消息推送机制。简单说,你不需要不停地问"灯关了没"。而是等灯关上的那一刻,云端主动打电话(HTTP请求)告诉你:灯已经关了。
怎么用?你需要在后台设置一个URL(比如:http://你的服务器/api/callback)。当设备状态变化时(无论是你在APP点的,还是代码发的指令),芯步会把结果推送到这个URL。
收到的数据大概长这样
你的脚本收到这个通知后,就可以在日志里记录:"设备10001已确认关闭",这样你的系统就闭环了。
七、稍微口语化一点的避坑总结
别把Secret写在前端代码里:如果你是用Vue或HTML写网页,千万不要把
AppSecret直接写在网页里。用户按F12就能看到你的密码,别人就能控制你的所有设备。一定要在后端(Java/Python/PHP)算好签名再发给前端。关于延时控制:如果你想让灯亮10分钟然后自动关,不需要自己写定时任务去发"关"指令。你可以直接发
{"power": 1, "reset": 600000},意思是"打开,并且600000毫秒(10分钟)后自动复位(关掉)"。这功能非常省心。网络延迟:HTTP控制通常有80-200ms的延迟。如果你是用来做生产线上的急停或者精密仪器控制,可能要慎重。但如果是控制灯光、插座、电机、水泵,这个速度绰绰有余了。
调试神器:芯步后台自带"API调试工具"。如果你代码跑不通,先去后台手动发一条命令。如果后台能控制,你的代码不能,那100%是签名格式或者JSON格式写错了。
只要把HTTP请求封装成一个通用的函数,多设备联动其实就是多调用几次这个函数,或者稍微动动脑筋加个if else逻辑而已。