CATALOG

芯步的开放接口整体设计得还算清晰,签名机制是典型的物联网云平台做法。50A智能空开本质上是一个“可控的电力传感器”——既能读取实时数据,也能执行分合闸指令。下面说说具体怎么对接。

一、准备工作:先搞定“通信证”

在写代码之前,你需要先登录芯步的控制台,拿到两样东西:

  1. AppID:你的应用身份标识。

  2. AppSecret:你的应用密钥,千万别泄露给任何人

这两个东西就像你进游乐园的“门票”和“身份证”,所有接口请求都需要带上。

二、核心机制:签名怎么算?

芯步的接口用了sign签名,这不是密码,而是为了保证数据在传输过程中没被篡改。官方推荐的签名算法是:sign = md5( md5(AppSecret) + ts )

是不是有点绕?拆解一下:

  • 第1步:把你拿到的AppSecret做一次MD5加密,得到一个32位的字符串。

  • 第2步:把上面加密的结果,再拼接上当前的时间戳ts(比如 1625145600)。

  • 第3步:把拼接后的字符串再做一次MD5,最终结果就是sign

为什么要这么麻烦?因为加了时间戳ts,这个签名通常只在短时间内有效(比如5分钟),就算被别人截获了,他也无法用这个签名一直访问你的设备,安全系数高一些。

三、实战:查询50A智能空开的开关状态

现在开始实现你的需求:远程查询开关状态

对于智能空开这类设备,状态查询通常有两种模式,我更推荐第二种。

方式一:主动查询(HTTP 请求)

这就像你主动打电话问设备:“你开机了吗?” 需要你发一条HTTP请求去问。

根据芯步的接口定义,如果50A智能空开属于通断器类产品,控制它的开关命令是power(也可能是power1,具体看你那款产品的文档,一般一个空开默认就是power)。

但注意:控制接口(/device/control/)主要是用来“下发命令”的。如果你想“查询状态”,通常逻辑是:你先发一条查询指令,设备会立即回复状态;或者你调用获取设备详情的接口(如果有)。

不过,最稳妥的“查询”其实是读取设备的最新上报数据。由于搜索到的文档中没有专门“查询设备详情”的接口说明,最保险的做法是利用消息推送

这里先给你演示如何通过控制接口间接确认状态(因为控制接口调用成功,其实也就确认了设备在线且响应了),以及通用的获取状态思路:

结论:单纯用/device/control/来做实时查询,可能会比较生硬。更优雅的方案是被动接收

方式二:被动接收(消息推送)—— 强烈推荐!

这是最标准的物联网做法。50A智能空开只要有电流通过、或者开关状态变化(比如被人手动按了、或者过热跳闸了),它就会主动上报一条消息给云端,云端再推送给你的服务器。

你不需要一直去问,设备会“主动汇报”。

设置步骤:

  1. 在芯步控制台,设置你的消息推送服务器URL(比如 http://yourdomain.com/api/device_state)。

  2. 设备状态变化时,芯步平台会POST一个JSON数据包给你

你收到的数据格式大概是这样:

你的服务器代码只需要解析这个JSON

  1. 判断 device 是不是你要监控的那台50A智能空开

  2. 读取 data 里的 power 值。

  3. 如果是 "1",说明现在是开(通电);如果是 "0",说明是关(断电)或者跳闸了。

这种方式零延迟、最省事,不需要处理复杂的签名,只要你的服务器能接收POST请求就行。

四、常见坑点和注意事项

  1. 小心签名中的ts时间戳ts一般用,别写成毫秒,否则服务器会觉得时间对不上,给你报签名错误

  2. 设备ID哪里找? 设备ID不是产品型号,是那一串数字(比如 147034)。可以在控制台设备列表里复制,或者调用设备列表接口获取

  3. 如果只做查询,真的不需要控制:如果你的系统只需要看状态,不要调用 /device/control/。那相当于你一秒钟问一次“你开了没?”,设备就要一秒钟动作一次。用消息推送,设备状态变了才通知你,对设备寿命和网络带宽都友好很多。

  4. 关于50A的特定指令:50A智能空开通常还支持电量数据查询。除了开关状态,你可能还想看电流、电压、功率因数。这些数据一般也会在state推送的data数组里一起带上来。如果没带,就需要查对应的产品手册,看是否支持get_energy之类的读命令。

五、总结

要实现“50A智能空开的远程开关状态查询”,最利落的二次开发流程就是三步:

  1. 配环境:在控制台拿 AppID 和 Secret。

  2. 写接口:在你的后端写一个接收地址(URL),用来接收芯步平台推送过来的设备状态。

  3. 解数据:解析收到的 JSON,把 message.data 里的 power 字段读出来,存入你的数据库或者在前端界面上显示“已合闸”或“已分闸”。

这样,你的二次开发就完成了。不需要搞复杂的轮询,轻轻松松拿到实时状态。