CATALOG

AC3-10A计量版本身不具备断电记忆功能,但通过芯步开放的HTTP接口和外部存储,可以在应用层轻松实现。下面是一个相对口语化、注重实操的实现方案。

方案名称:基于应用层状态同步的AC3-10A异常断电记忆恢复方案

适用型号: UNI-TDQ-AC3-10A-P (就是你手里的那个带计量的版本)技术前提: 设备必须在线(WiFi灯常亮或慢闪),你的服务器能够调用芯步的开放接口。

一、 核心思路(大白话版)

这个硬件本身像是一个“听话”的开关,它只会执行命令,但如果突然断电,它自己不记事。

所以,我们要给它配一个“外挂大脑”(也就是你的云服务器或本地服务器)。原理非常简单:

  1. 日常“记作业”: 每次你或你的系统给设备下发“开”或“关”的命令时,别发了就完事,顺手把这个状态(开/关)存到你的数据库里。

  2. 断电“回魂”: 当设备断电重启并重新连上WiFi后,它会处于一个默认状态(通常是关或保持断电前状态,为了保险我们主动查)。这时候你的服务器检测到设备上线,立马去数据库里翻一下最后存的那个状态。

  3. 恢复“作业”: 服务器把刚才翻出来的那个状态,通过芯步的HTTP接口重新下发给设备。

就这么三步,把记忆的功能从硬件挪到了软件上。

二、 具体实施步骤(手把手教学)

第一步:准备工作

你需要拿到三样东西,都在芯步的后台:

  1. 设备ID (device_id): 就是那个AC3的序列号,一般是 xxxxxxx

  2. API Key / Access Token: 调用接口时的身份凭证(通常在控制台 -> 我的应用 -> 接口密钥里)。

  3. 设备状态变更的入口: 确保你的系统能收到设备的状态变化(Webhook/回调)。

第二步:在云端建立一个“备忘录”(状态表)

在你的数据库里建个简单的表,不用太复杂:

字段名类型说明举例
device_idString设备唯一IDAC3_001
last_power_stateInt/Boolean核心字段:最后一次指令状态1 (1=开,0=关)
last_control_timeDatetime最后一次操作时间2023-xx-xx xx:xx:xx

关键点: 只要你的业务逻辑里调用了“控制设备通断”的接口,在返回成功后,请一定要更新这个表里的 last_power_state

第三步:接管设备上线通知(Webhook/MQTT)

芯步的设备在连上网的那一刻,是会向服务器发一个“我上线了”的消息的你需要配置一个回调接口

伪代码逻辑如下:

第四步:接口调用示例(防坑指南)

当你需要下发恢复命令时,参考芯步官方文档的HTTP接口方式

  • 接口地址:https://api.yoyoiot.net/ordercontrol/

  • 请求方法: POST

  • 请求参数(Body):

  • 携带签名: 记得在请求头里带上签名(具体生成看文档,一般是把Access Token和时间戳组合一下)。

三、 如果没有“上线通知”接口怎么办?(降级方案)

虽然芯步的机制一般是支持回调的,但万一你的网络环境比较奇怪(比如纯局域网或私有化部署),收不到通知,那就用主动轮询

写一个定时任务(比如每分钟跑一次):

  1. 查状态: 调用“获取设备状态”的接口,看看这个设备的 online 字段是 true 还是 false

  2. 做对比: 如果你上次记录到设备是 true,这次轮询发现设备从 false 变成了 true,说明设备刚刚重启上线。

  3. 执行恢复: 执行上面第三步的逻辑,查数据库 -> 发命令。

四、 几个会让体验更好的细节

  1. 延迟恢复(防闪烁): 有的灯在通电瞬间会闪一下。如果你追求极致体验,可以在设备上线后,设置一个 sleep(2) (等2秒),等电网稳定了,再发开启命令。这样灯光恢复会更丝滑。

  2. 超时与重试: 刚开机时WiFi连接可能不稳定。如果第一次下发“恢复开”命令失败了,不要只报错。设置一个重试机制:隔1秒重试,总共重试3次。

  3. 计量数据的处理: 既然你用的是计量版,断电期间的用电量肯定统计不到了(因为没电)。恢复通电后,记得让你的代码重新初始化一下电量累加器,不要把断电前的功率算到通电后的时间里。

五、 总结:这个方案的优缺点

  • 优点: 完全不用等厂商给硬件升级固件,任何支持远程控制的设备都能用这套逻辑,而且成本极低(就几行代码的事情)。

  • 缺点: 严重依赖服务器正常运行。如果你的服务器挂了,或者设备连不上WiFi,那它也记不住(毕竟它自己的大脑——也就是你的服务器——昏迷了)。

一句话总结: 把这个AC3当成一个听话的“手”,你的服务器当成“大脑”。手断了电失忆无所谓,大脑记得回家要敲门的动作就行,来电了再指挥手做一遍。