CATALOG

芯步的智能墙壁触摸开关开放了标准HTTP接口,这意味着你可以绕过官方App,直接将开关接入自有的控制系统。下面从接口机制、二次开发流程到代码示例,提供一个完整的方案。

解决方案:基于芯步开放接口的1路智能开关二次开发

1. 背景与目标

在许多智能化改造场景中,仅能通过手机App控制开关是远远不够的。用户往往需要将硬件设备集成到自有系统(如工厂MES系统、楼宇自控BA系统、或实验室环境监控系统)中。

本方案基于芯步 UNI-KG-CM-1(1路智能墙壁触摸开关),利用其开放的 HTTP API接口,实现以下两个核心目标:

  • 反向控制:通过自有软件系统远程控制开关的“开/关”状态。

  • 状态监控:实时获取开关的当前状态(是通还是断),实现闭环控制。

2. 核心技术原理

芯步的设备采用了“设备直连+云云对接”的轻量化架构

  • 通信方式:设备通过WiFi 2.4G直接连接路由器(无需网关)。

  • 接口协议:标准的HTTP POST请求。

  • 数据流

    • 下行(控制):您的系统 → 芯步API → 设备。

    • 上行(状态):设备 → 芯步消息推送服务 → 您的服务器。

3. 二次开发环境准备

在开发之前,需要获取以下关键信息:

  1. AppId 和 AppSecret:在芯步开放平台(ThingBoot Open)注册开发者账号,创建应用后获取

  2. 设备ID (Device ID):在物联网控制台中添加设备,获取目标开关的Device ID(通常是一个数字ID)

  3. 服务器接收地址:准备一台具备公网IP或内网可达的服务器,用于接收设备上报的状态数据。

4. 开发实施

4.1 接口鉴权与签名机制

为了保证接口安全,所有API请求需携带签名。签名算法通常如下:

  • 参数AppId, DeviceId, Timestamp(Unix时间戳), Order(指令)。

  • Sign:将参数按Key排序后拼接,使用HMAC-SHA256或MD5加密(具体以官方文档为准)。

请求地址示例http://api.thingboot.com/{AppId}/device/control/?sign={SIGN}&ts={TIMESTAMP}

4.2 功能一:下发指令(实现远程控制)

这是二次开发中最核心的部分。我们通过向开关发送JSON数据来控制电路的通断。

  • 开启线路

  • 关闭线路

*命令下发后,设备响应时间约为80-120ms,响应速度快*citation:

4.3 功能二:状态监控(实现闭环反馈)

仅仅发送指令是不够的,我们需要知道命令是否执行成功,或者用户是否通过物理按键触碰了开关。这需要配置消息推送机制

  1. 配置回调URL:在芯步控制台设置您的服务器接收地址(例如:http://yourdomain.com/api/device/callback)。

  2. 接收状态:当开关状态发生变化时(无论是App控制、脚本控制还是手指触摸),设备会主动上报数据。

  3. 数据解析:您的服务器接收POST数据包,解析JSON格式,获得power字段。

接收到的状态数据示例

您的系统收到此数据后,可在前端实时更新开关的UI样式(例如按钮变为高亮绿色),实现“即控即显”

4.4 代码开发示例(Python Flask)

以下是一个简易的二次开发逻辑,演示如何在一个Web服务中集成控制与接收反馈。

5. 关键注意事项

  1. 私有化部署支持:芯步支持私有化部署。如果您的系统运行在纯内网环境(不允许访问外网),可以将API地址切换到内网服务器地址,实现数据不出厂的内网闭环

  2. 多WiFi冗余:该开关支持设定5组WiFi网络。在工业环境中,如果主网络不稳定,设备会自动切换备用WiFi,这保证了状态监控的稳定性,不会因为网络抖动而频繁掉线

  3. 状态同步机制:采用轮询+推送双保险。虽然设备会主动推送状态,但在网络恢复或页面刷新时,您的系统也可以主动发一个查询指令(通常接口为/device/status)来获取最新状态。

  4. 物理按键冲突处理:当用户按压物理按键时,开关会即时上报状态。您的监控系统界面无需刷新即可通过Websocket收到推送的状态,这能避免界面显示的开关状态与实际不符。

6. 方案总结

通过芯步的开放接口,将“1路智能墙壁触摸开关”集成到自有系统中技术门槛较低。开发者无需钻研底层射频或蓝牙协议,只需调用标准的HTTP API即可实现:

  • 控制:通过代码逻辑决定何时通电。

  • 感知:通过回调实时感知通断变化。

这一方案不仅适用于简单的开关监控,还可以结合传感器实现更复杂的联动,例如:“检测到漏水信号 -> 调用API关闭一路开关 -> 发送状态通知”