AC3-10A计量版本身不具备断电记忆功能,但通过芯步开放的HTTP接口和外部存储,可以在应用层轻松实现。下面是一个相对口语化、注重实操的实现方案。
方案名称:基于应用层状态同步的AC3-10A异常断电记忆恢复方案
适用型号: UNI-TDQ-AC3-10A-P (就是你手里的那个带计量的版本)技术前提: 设备必须在线(WiFi灯常亮或慢闪),你的服务器能够调用芯步的开放接口。
一、 核心思路(大白话版)
这个硬件本身像是一个“听话”的开关,它只会执行命令,但如果突然断电,它自己不记事。
所以,我们要给它配一个“外挂大脑”(也就是你的云服务器或本地服务器)。原理非常简单:
日常“记作业”: 每次你或你的系统给设备下发“开”或“关”的命令时,别发了就完事,顺手把这个状态(开/关)存到你的数据库里。
断电“回魂”: 当设备断电重启并重新连上WiFi后,它会处于一个默认状态(通常是关或保持断电前状态,为了保险我们主动查)。这时候你的服务器检测到设备上线,立马去数据库里翻一下最后存的那个状态。
恢复“作业”: 服务器把刚才翻出来的那个状态,通过芯步的HTTP接口重新下发给设备。
就这么三步,把记忆的功能从硬件挪到了软件上。
二、 具体实施步骤(手把手教学)
第一步:准备工作
你需要拿到三样东西,都在芯步的后台:
设备ID (device_id): 就是那个AC3的序列号,一般是
xxxxxxx。API Key / Access Token: 调用接口时的身份凭证(通常在控制台 -> 我的应用 -> 接口密钥里)。
设备状态变更的入口: 确保你的系统能收到设备的状态变化(Webhook/回调)。
第二步:在云端建立一个“备忘录”(状态表)
在你的数据库里建个简单的表,不用太复杂:
| 字段名 | 类型 | 说明 | 举例 |
|---|---|---|---|
device_id | String | 设备唯一ID | AC3_001 |
last_power_state | Int/Boolean | 核心字段:最后一次指令状态 | 1 (1=开,0=关) |
last_control_time | Datetime | 最后一次操作时间 | 2023-xx-xx xx:xx:xx |
关键点: 只要你的业务逻辑里调用了“控制设备通断”的接口,在返回成功后,请一定要更新这个表里的 last_power_state。
第三步:接管设备上线通知(Webhook/MQTT)
芯步的设备在连上网的那一刻,是会向服务器发一个“我上线了”的消息的。你需要配置一个回调接口。
伪代码逻辑如下:
第四步:接口调用示例(防坑指南)
当你需要下发恢复命令时,参考芯步官方文档的HTTP接口方式
接口地址:
https://api.yoyoiot.net/ordercontrol/请求方法: POST
请求参数(Body):
携带签名: 记得在请求头里带上签名(具体生成看文档,一般是把Access Token和时间戳组合一下)。
三、 如果没有“上线通知”接口怎么办?(降级方案)
虽然芯步的机制一般是支持回调的,但万一你的网络环境比较奇怪(比如纯局域网或私有化部署),收不到通知,那就用主动轮询。
写一个定时任务(比如每分钟跑一次):
查状态: 调用“获取设备状态”的接口,看看这个设备的
online字段是true还是false。做对比: 如果你上次记录到设备是
true,这次轮询发现设备从false变成了true,说明设备刚刚重启上线。执行恢复: 执行上面第三步的逻辑,查数据库 -> 发命令。
四、 几个会让体验更好的细节
延迟恢复(防闪烁): 有的灯在通电瞬间会闪一下。如果你追求极致体验,可以在设备上线后,设置一个
sleep(2)(等2秒),等电网稳定了,再发开启命令。这样灯光恢复会更丝滑。超时与重试: 刚开机时WiFi连接可能不稳定。如果第一次下发“恢复开”命令失败了,不要只报错。设置一个重试机制:隔1秒重试,总共重试3次。
计量数据的处理: 既然你用的是计量版,断电期间的用电量肯定统计不到了(因为没电)。恢复通电后,记得让你的代码重新初始化一下电量累加器,不要把断电前的功率算到通电后的时间里。
五、 总结:这个方案的优缺点
优点: 完全不用等厂商给硬件升级固件,任何支持远程控制的设备都能用这套逻辑,而且成本极低(就几行代码的事情)。
缺点: 严重依赖服务器正常运行。如果你的服务器挂了,或者设备连不上WiFi,那它也记不住(毕竟它自己的大脑——也就是你的服务器——昏迷了)。
一句话总结: 把这个AC3当成一个听话的“手”,你的服务器当成“大脑”。手断了电失忆无所谓,大脑记得回家要敲门的动作就行,来电了再指挥手做一遍。