AC4-10A这款硬件自带物理按钮,但在某些场景下(比如防止孩子误触、或作为无人值守设备),官方明确支持“按钮动作可屏蔽”。下面说说怎么通过二次开发实现这个功能。
一、写在前面:硬件到底支不支持?
在动手之前,我们得先确认一下硬件底子怎么样。毕竟,如果硬件本身不支持,代码写得再溜也是白搭。
好消息是,根据芯步的官方产品手册,AC4-10A 是明确支持“按钮动作可自定义、可屏蔽”的。这意味着,它的 GPIO 引脚或者内部控制逻辑是允许我们通过软件指令来忽略那个物理按键的触发信号的。
我们要做的,就是通过它的开放 HTTP API 接口,发送特定的配置指令,告诉设备:“嘿,从今往后,用户按那个按钮你别搭理他,只听我远程的指令。”
二、核心思路:怎么“骗”过这个开关?
要实现“按了没反应”,其实原理并不复杂。
物理按钮本质上就是一个输入信号。正常模式下,你按一下,电流通断,开关状态翻转(开变关,关变开)。
而要屏蔽它,我们的思路有两种:
最直接的方法(推荐):修改设备的配置参数。既然官方文档写了“支持屏蔽”,大概率是有专门的
mode或者lock指令。我们直接发一条指令把物理按钮锁死。这是最干净利落的做法。取巧的方法(逻辑覆盖):如果没有直接的锁指令(或者你想更灵活地控制),我们可以写一个死循环脚本。这个脚本不停地监测设备状态,只要发现状态被物理按钮改变了,立马给它扳回来。比如你刚按了“关”,脚本0.1秒内就发指令“开”。用户体验就是:这开关坏了吧?咋按不动呢?
为了保险起见,我们主要采用第一种官方推荐的方法,如果不行,再用第二种逻辑兜底。
三、动手实战:通过 API 实现屏蔽
既然要用代码控制,就得先搞懂它的 API 怎么玩。
1. 准备工作:拿到三把钥匙
在芯步的后台,你需要拿到三个东西:
AppID:你的应用ID。AppSecret:你的应用密钥(用来加密签名,防止别人乱调你的接口)。Device_ID:你的 AC4-10A 设备的唯一ID。
另外,接口地址通常是这样的格式(记得替换掉大括号里的内容):https://api.thingboot.com/{你的AppID}/device/control/?sign={签名}&ts={时间戳}
2. 签名计算(Sign)
这个稍微有点绕,其实就是为了防止接口被随便调用。芯步的签名规则是:YourSign = md5( md5(AppSecret) + ts )
大白话解释:
先把你的
AppSecret进行MD5加密一次,得到一串乱码。把上面这串乱码和当前的时间戳(比如
1715678900)拼在一起。再把拼好的新字符串整体 MD5 加密一次。
这个就是你的sign参数。别怕,代码里一行就搞定了。
3. 发送屏蔽指令(代码演示)
这里我们直接用万能的 Python 和 curl 命令来演示,你可以把它们集成到任何后端系统里。
第一种场景:直接下发锁定指令(假设存在 lock 参数)
如果官方文档里有类似于 {"button_lock":"1"} 这样的指令,直接用这个就行。
第二种场景:逻辑锁定(没有专门指令时的 Plan B)如果官方没有直接屏蔽的接口,只是提供了power控制接口,那我们就写个简单的“看门狗”脚本,放在服务器上跑着。这个脚本会持续不断地把开关状态维持在“关闭”。
注意:上面这个脚本会让物理按钮完全失效,但也会导致无法远程开启(因为一开就被关)。如果你只是临时屏蔽(比如前 23 小时屏蔽,晚上 1 小时允许按),可以用定时任务来控制脚本的启停。
四、如果你不想写代码:利用第三方工具(IoT 大佬的捷径)
如果你嫌写代码麻烦,或者不想搭服务器,可以利用一个叫 Node-RED 的拖拽式编程工具(很多智能家居玩家都用这个)。
在树莓派或电脑上装好 Node-RED。
安装
node-red-contrib-http-request节点。拖一个
inject节点(定时触发),连上一个http request节点。在
http request节点里填入上面的 URL、Method 为 POST、添加 Header,并把{"power":"0"}写在 Body 里。设置
inject节点每 3 秒触发一次。
这样,一个图形化的“物理按钮屏蔽器”就搞定了。
五、踩坑预警 & 小贴士
指令名称一定要核实:上面代码里的
button_disable是我推测的。在实际操作中,请请一定要去芯步的控制台或者 API 文档里查一下,AC4-10A 针对“按钮屏蔽”的具体参数名是什么。可能是{"button_lock":"1"}、{"disable_key":"1"}或者是在设备属性里设置。注意线程冲突:如果使用第二种场景(轮询脚本),万一网络卡了,或者服务器重启了,那几秒钟的间隙里按钮可能会生效一次。如果是安全要求很高的场景(比如控制加热器),请优先找官方要硬件级的锁定方案。
局域网控制:芯步的接口是支持局域网控制的。如果你的服务器和 AC4-10A 在同一个 WiFi 下,可以把域名
api.thingboot.com替换成设备在局域网里的 IP 地址(如果有 SDK 支持),这样响应速度会快很多,几乎没有延迟。
总结
实现 AC4-10A 的按钮动作屏蔽,首选方案是查阅官方文档找 lock 或 disable 指令,一条指令永久生效,干净利落。
如果只是想做个简单的项目自己玩玩,或者临时应急,写个几行代码的循环脚本定时把开关状态复位,也完全能达到目的。
希望这篇攻略能帮到你,搞定那个不听话的按钮!