CATALOG

共享空间的“无人值守”核心在于门禁与电源的联动控制。本文将围绕芯步开放平台,详细拆解如何将1路墙壁开关集成到你的软件项目中——从设备选型、接口调用,到完整的订单生命周期控制流程。

解决方案:共享台球室包间门禁控制 —— 集成1路独立控制墙壁开关

1. 解决概述与硬件选型

在共享台球室场景中,核心需求是:用户在线下单后,获得某个指定包间的开门权限;进入后,可以自己控制房间内的灯光或电源;订单结束后,系统自动断电并锁门,等待下一位用户。

为实现“1路独立控制”,我们选择芯步 1路 WiFi 墙壁开关(或类似的智能通断器/继电器模块)。该设备具备以下特点:

  • 独立控制:刚好满足控制单一电路的需求(例如:控制门禁电磁锁的电源,或者控制台球桌顶灯/总电源)。

  • 安装简便:通常为标准86型面板,可直接替换现有墙壁开关,或在设备箱内安装导轨式通断器。

  • 状态反馈:支持实时查询当前开关状态(开/关)。

系统架构图逻辑(文字描述)用户小程序 <-> 您的业务后端 <-> 芯步开放平台 <-> WiFi/4G网络 <-> 包间内的1路墙壁开关 <-> 电磁锁/电控锁

2. 准备工作:开放平台配置

在编写代码前,需要在芯步控制台完成以下步骤:

  1. 注册/登录:访问芯步开放平台,进入控制台。

  2. 获取密钥:在“开发设置”页面,记录下 AppIDAppSecret(开发者密码)。这将用于后续接口签名的计算

  3. 添加设备:在控制台“设备列表”中,添加你购买好的“1路墙壁开关”。记录下唯一的 Device ID(设备ID)。

  4. 定义指令集:通常标准品的指令是标准化的,例如 power 属性,值为 1(开)或 0(关)。

3. 核心集成逻辑:如何将墙壁开关嵌入软件项目

在软件项目中(无论是 Java, Python, PHP 还是 Go),你需要实现以下三个核心接口的调用逻辑。

3.1 接口鉴权与签名(Sign)

芯步的接口通常使用 signts 进行安全校验。你需要有一个公共函数来生成签名。

签名生成算法

其中 ts 为10位的Unix时间戳(秒级)注意:请严格在后端计算签名,避免在前端小程序暴露 AppSecret

3.2 开门/通电逻辑(下发指令)

当用户在小程序支付了“台球室包间2小时”订单后,后端需要执行以下操作:

场景A:控制门禁锁如果是控制门锁:调用设备控制接口,让开关闭合(通电),电磁锁断电(或通电,取决于锁型),实现开门。场景B:控制总电源如果是控制房间电:下单成功后自动给房间供电。

接口调用细节

  • 地址http(s)://api.thingboot.com/{AppID}/device/control/

  • Method:POST (推荐使用JSON格式)

  • 关键参数

    • device:[设备ID]

    • order{"power":1} (假设开关的属性名是power,1代表开启)

    • extra{订单号} (这是一个非常实用的字段,可以将业务订单与硬件指令关联)

代码逻辑示例(伪代码/Python思路)

3.3 预约与定时任务(自动断电)

这是共享业务的核心。当订单倒计时结束(或用户手动点击“结束订单”),系统必须自动关闭开关,防止下一个用户免费蹭电或无法进门。

实现方案:

  1. 业务层定时任务:在你的后端数据库中,每个订单都有一个 expire_time。后台运行一个定时任务(如 Cron job 或延迟队列),扫描到期订单。

  2. 调用关断接口:到期时,调用与上面类似的接口,但参数改为 {"power": 0}

  3. 状态校验:调用接口后,再调用一次“查询设备状态”接口,确认设备确实已关闭。

3.4 设备状态的实时同步(异步消息)

为了避免轮询接口造成的资源浪费,采用 MQTTHTTP 推送 接收设备状态变化。

  • 如果用户在包间里按了物理墙壁开关,你如何知道灯是开还是关?

  • 芯步支持消息推送。你需要在后台配置一个接收 URL(Webhook)。

  • 当设备状态发生变化时(无论是通过API控制的,还是物理按键按下的),平台会主动推送消息给你,你可以更新数据库中的状态并展示给用户

  • 重要提示:异步消息中会包含你在下发指令时传入的 extra 字段,这能帮助你精准匹配是哪个订单触发的指令

4. 业务状态流转设计

为了让你更清晰地理解软件与硬件的配合,下面是完整的状态机设计:

  1. 状态 A:空闲

    • 硬件状态:1路墙壁开关为 “关” (0)

    • 门禁状态:电磁锁处于吸合状态,门打不开。

  2. 状态 B:用户下单/验券成功

    • 软件动作:后端接收到支付成功回调 -> 调用芯步API -> 针对该包间的Device ID下发 {"power":1}

    • 硬件反馈:继电器吸合,开关接通电源。如果是控制锁,门弹开;如果是控制灯,灯亮起。

    • 超时保护:生成一条 Redis 或数据库定时任务,设定在 订单结束时间 执行关断。

  3. 状态 C:使用中

    • 交互:用户在包间内可以通过物理墙壁开关随意控制灯光,不影响软件逻辑(软件可实时监听并更新UI显示“灯已开”)。

    • 续费:用户点击续费 -> 后端删除旧的定时关断任务 -> 延长订单时间 -> 重新插入新的定时任务。不需要再次操作硬件(因为灯已经是开的了)。

  4. 状态 D:订单结束 / 超时

    • 软件动作:定时任务触发 -> 调用API下发 {"power":0}

    • 硬件反馈:墙壁开关断开。门禁锁死,房间断电。

    • 最终一致性:为防止API调用失败(如网络抖动),定时任务应有重试机制;或者设置“强制心跳”,若订单结束后5分钟设备仍未关断,系统自动报警。

5. 关键注意事项(避坑指南)

  1. 设备离线的处理

    • 接口返回200不代表开关动作了。如果设备WiFi断了,指令是下发了但执行不了

    • 解决方案:在下发指令后,延时2秒查询一次设备状态。如果状态不对,提示用户“设备离线,请联系管理员”。

  2. 1路开关 vs 总控 vs 门锁

    • 如果你只有一个“1路开关”,你只能控制一个东西。在台球室场景,用这个开关控制门禁电磁锁的电源

    • 房间内的灯光和排风,再加装一个“2路开关”或“智能插座”,分开控制更符合实际使用体验(比如用户打球热了想开风扇,不能让他去关总闸)。

  3. 安全考虑(互锁机制)

    • 假设当前订单结束后,系统下发关断指令。如果上一个用户恶意将墙壁开关强行用胶带粘在“开启”位置,会发生什么?

    • 针对这种情况,可以利用芯步的“循环定时”或“互锁”功能(如果产品支持),或者在软件逻辑中增加心跳监测。一旦订单结束,每隔1分钟强行下发一次关指令,直到物理开关被松开。

  4. 签名安全

    • 严禁将 AppSecret 放在微信小程序前端。必须由你的业务后端代理请求,防止密钥泄露导致设备被恶意控制

通过上述方案,你可以快速地将芯步的1路独立控制墙壁开关集成到共享台球室软件项目中,实现稳定、安全的无人值守门禁与电源控制。