CATALOG

针对DC-10A直流控制器的按钮屏蔽需求,芯步的开放接口提供了两种实现路径。核心思路是:利用设备上行消息监听按钮事件,配合下行指令覆盖或屏蔽默认行为。以下为详细方案。

一、 原理分析:为什么可以屏蔽按钮

DC-10A的物理按钮按下后,会向云平台发送一条上行消息,默认行为是切换通断状态

二次开发的核心逻辑在于:

  1. 截获事件:服务器接收按钮按下的事件推送。

  2. 逻辑判断:服务器根据当前状态(如门锁状态、安防模式)决定是否允许动作。

  3. 指令覆盖:如果不允许,服务器立即发送 “恢复原状” 指令;如果允许,则不做处理或发送“切换”指令。

这种方法属于“软屏蔽”,即利用软件逻辑覆盖硬件行为。

二、 准备工作与环境配置

在开始编码前,请完成以下配置:

  1. 获取关键凭证

    • AppIDAppSecret:登录芯步控制台,在“开发设置”中获取,用于API签名验证

    • 设备ID (Device ID):在控制台设备列表或DC-10A外壳上获取,这是指令的目标地址

  2. 配置消息接收服务器

    • 由于需要实时捕获“按钮按下”事件,你需要在控制台“开发设置”中配置 “消息推送URL”(即你的服务器公网地址)。

    • 平台会将所有设备事件(包括按钮)通过HTTP POST推送到该地址

  3. 理解签名规则

    • 芯步的API使用双重MD5加密,公式为:sign = md5(md5(AppSecret) + ts)。所有控制指令请求都需要携带此签名

三、 核心实现步骤

步骤 1:解析按钮事件(上行)

当有人按下DC-10A上的按钮时,芯步平台会向你配置的URL推送如下格式的JSON数据。你需要编写后端代码来接收并解析它:

注意:以上字段结构基于通用规范,具体字段名请以产品手册的实际推送内容为准

步骤 2:编写屏蔽逻辑(业务决策)

在你的接收端代码中,决定是否允许本次操作。

示例逻辑(Python Flask):

步骤 3:下发覆盖指令(下行)

send_command_to_device 函数中,需要实现向 DC-10A 发送 HTTP 请求 的功能

  • URLhttps://api.thingboot.com/{AppID}/device/control/

  • 签名计算 (C语言示例思维):构造 sign=md5(md5(Secret)+ts)

  • 请求体 (JSON)

代码实现关键点:由于时间戳(ts)和签名(sign)必须实时计算且在有效期内,你的服务端需要实现签名生成函数。签名方法是将AppSecret MD5加密后拼接时间戳再次MD5

四、 完整交互流程时序图

sequenceDiagram
    participant User as 用户
    participant Device as DC-10A 控制器
    participant Cloud as 芯步云平台
    participant YourServer as 你的业务服务器

    Note over YourServer: 状态:当前处于"锁定模式"

    User->>Device: 1. 物理按下按钮
    Device->>Cloud: 2. 上报按钮事件 (状态变更推送)
    Cloud->>YourServer: 3. HTTP POST 推送事件 (设备ID, 当前状态)
    
    activate YourServer
    YourServer->>YourServer: 4. 判断逻辑:当前锁定中,禁止操作
    YourServer->>Cloud: 5. 发送控制指令 (API请求: 恢复原始状态)
    deactivate YourServer
    
    Cloud->>Device: 6. 下发指令 (MQTT/HTTP)
    Device->>Device: 7. 强制执行指令 (状态被扳回)
    Device-->>User: 8. 物理表现:闪一下或不动作

五、 高级应用场景拓展

除了单纯屏蔽,这套机制还可以实现更复杂的逻辑:

  1. 权限控制

    • 场景:酒店房间控制。

    • 实现:只有在前台办理入住的房间,该房间的DC-10A才接受按钮指令;退房后自动屏蔽。

  2. 双稳态与互锁

    • 场景:控制两台电机正反转。

    • 实现:服务器检测到“按钮A”按下,先发送指令关闭“设备B”的继电器,再开启“设备A”。

  3. 定时解锁

    • 场景:儿童锁。

    • 实现:19:00-07:00屏蔽按钮,其他时间放行。

六、 常见问题与排查

  1. 为什么设备会“闪烁”一下?

    • 这是由于软屏蔽的固有特点——物理按键触发的是硬件电平变化,会瞬间激活继电器。服务器随后下发的指令将其恢复,因此会有极短的通断电,表现为灯闪一下。如果无法接受,考虑硬件屏蔽(拆除按钮或串联物理锁定开关)。

  2. 指令下发失败(返回code 50xx)?

    • 检查签名算法是否正确,尤其是ts(秒级时间戳)是否与服务器时间相差过大

    • 确认设备当前在线(WiFi信号良好)

  3. 收不到按钮事件的推送?

    • 检查控制台的“消息推送URL”配置是否正确,且该URL需外网可访问。

    • 检查服务器日志是否有签名验证失败的记录。

通过以上步骤,你可以高效地利用芯步DC-10A的开放接口,将物理按钮完全置于云端逻辑的控制之下,实现“软开关”与“硬开关”的完美解耦。