CATALOG

一、先认识一下这个小玩意儿

先说说这是个什么东西。芯步的这款智能通断器(型号 UNI-TDQ-AC3-10A-P),说白了就是一个可以用网络控制的智能开关,而且它还能告诉你当前用了多少电。

它的核心能力其实就两条:

  1. 远程开关:通过网络控制电路的通断

  2. 电量计量:实时上报电压、电流、功率、用电量等数据

这个设备用的是 WiFi 2.4G 直接联网,不需要额外的网关,这点比较方便。它开放了 HTTP 接口,意味着无论你的后端用 Java、Python、Go 还是 PHP,只要能发 HTTP 请求,就能跟它玩到一块去

二、集成前的准备工作

动手之前,你得先有这几样东西:

项目说明哪里找
AppID应用唯一标识登录芯步控制台 → 开发设置
AppSecret开发者密码(别泄露!)同上
Device ID设备的唯一ID设备外壳上 / 控制台设备列表
设备已配网设备能连上WiFi用官方App或配网接口完成

这三个字符串就是你和设备之间的“身份证”,后面每一个请求都离不开它们。

三、核心流程:怎么发指令

3.1 签名是怎么算的?

每次调用接口都要带签名,这是为了安全。签名的计算方式有点绕,但说白了就是两重 MD5:

sign = md5( md5(AppSecret) + ts )

具体步骤:

  1. 把 AppSecret 做一次 MD5 加密

  2. 把时间戳 ts 拼到上一步的结果后面

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

一个小例子:

假设 AppSecret = "abc123"
md5一次后 = "e99a18c428cb38d5f260853678922e03"
当前时间戳 ts = 1700000000
拼接后 = "e99a18c428cb38d5f260853678922e031700000000"
再md5一次 = 最终sign

注意:ts 是秒级时间戳,前后两次请求的 ts 不能差太多,否则会被认为过期。

3.2 控制开关:通/断

这是最基本的操作。接口地址是:

POST https://api.thingboot.com/{AppID}/device/control/?sign={sign}&ts={ts}

请求体(JSON格式):

“power”:1 表示接通电路,设备通电;“power”:0 就是断开。

设备多路的情况:如果你用的是多路开关(比如两路控制的),命令就是 power1power2 分别控制第一路和第二路

3.3 读取电量数据

计量版的核心价值就是能看数据。读取电量的方式和控制差不多,只是 order 里的内容不一样:

设备会通过消息推送返回这些数据:

  • 电压(V)

  • 电流(A)

  • 功率(W)

  • 累计用电量(kWh)

拿到这些数据能干啥?后面会讲。

3.4 关于“定时”功能的一个小技巧

这个设备支持一种叫做 “先断后通”(reset)“先通后断”(point) 的命令,非常实用

举个栗子:

  • 你想让插座在通电 1 小时后自动关闭,避免电动车过充或者设备过热。可以直接用 reset 命令,带上时间参数(单位是毫秒):

注意仔细看文档:reset 的定义因产品而异,有的代表“先断后通”(复位重启),有的代表定时关闭。实际操作前用 power:0 直接关更稳妥。如果需要精确定时,你可以在后端自己写定时任务,到点发关断指令,更可控。

四、代码实战:用 Java 和 Python 各写一个

4.1 Java 实现(用 Unirest)

4.2 Python 实现(用 requests)

注意:这两个例子只展示了“控制开关”,读取计量的原理一样,把 order 里的内容换成 {"metering": 1} 就行。

五、集成到真实项目中的设计

把设备集成到正式项目里,不能只是能发指令就完事了。一个靠谱的架构应该长这样:

┌─────────┐    ┌─────────┐    ┌─────────┐
│  前端   │    │  后端   │    │ 芯步云  │
│ (Vue等) │───▶│ (Java等)│───▶│  API   │
└─────────┘    └────┬────┘    └────┬────┘
                    │              │
                    │              ▼
                    │         ┌─────────┐
                    │         │ 计量开关 │
                    │         └─────────┘
                    ▼
              ┌───────────┐
              │  数据库   │
              │ (存电量等)│
              └───────────┘

核心设计要点:

  1. 后端作为控制中枢:不要让前端直接调设备 API,因为 AppSecret 必须保密。由后端统一签名、统一控制,前端只跟后端交互。

  2. 数据存下来:设备上报的电量数据要落到数据库里,这是后续做报表、计费、分析的基础。

  3. 异步处理:设备可能离线,命令下发成功不等于设备执行成功。最好用消息队列做异步处理,配合状态回查机制

六、电量数据的实际应用场景

光有数据没用,得用起来。简单举几个例子:

6.1 共享设备计费

假如你在做共享洗衣机、共享充电桩的项目。每次用户使用设备时,记录开始时的电表读数,结束时再读一次,差值 × 电价 = 用户应付金额。全程自动化,不用人工抄表。

6.2 异常用电告警

设置一个功率阈值,比如 2500W。如果检测到实时功率超过这个值,自动切断电源并推送告警。可以防止过载引发火灾。实现方式很简单:后端轮询设备状态(或接收主动推送),判断功率是否超标,超标则下发 {"power": 0}

6.3 用电统计分析

把累积用电量按天、按月汇总,给用户展示“我的设备用了多少电”,甚至可以对比不同时段的用电情况,帮助用户找到节能空间。

七、几个容易踩的坑

  1. HTTP 200 不等于设备执行成功接口返回 200 只代表平台收到了指令、成功下发了。设备可能离线、可能命令格式错了、可能参数不对。需要业务结果?必须订阅云端的消息推送,那里才有真正的执行结果

  2. 签名的时间戳问题签名里的 ts 必须和请求里的 ts 一致。另外时间戳是 不是毫秒,Java 里用 System.currentTimeMillis() / 1000

  3. 设备 ID 别弄混设备外壳上的 ID、控制台列表里的 ID,有时候长得不一样。先调用设备列表接口确认一下。

  4. 计量数据不是实时的设备上报计量数据有频率限制(通常是几秒到几十秒一次)。如果需要实时显示功率变化,记得在 UI 上做 loading 或者说明“数据每 X 秒刷新一次”,别让用户以为坏了。

  5. 不要循环高频下发指令有些场景需要频繁开关(比如做老化测试),但这对设备和 API 都不友好。真有这种需求,考虑在设备本地做逻辑,或者用定时任务功能。

八、总结一下

把 AC3-10A 计量开关集成到软件项目里,本质上就是在做三件事:

  1. 签个名:AppSecret + 时间戳 → 两重 MD5

  2. 发个请求:HTTP POST 到指定 URL,带上 device 和 order

  3. 处理数据:收到的电量信息存起来,该展示的展示,该报警的报警

接口本身不复杂,花个把小时就能调通。更多的时间其实是花在业务逻辑上——想清楚拿这些数据做什么、怎么做。

有具体场景搞不定的,可以再去翻翻芯步的官方文档,或者直接找他们技术支持,接口人一般响应还挺快的