智能货柜售卖系统:从 0 到 1 的技术架构实践
智能货柜作为新零售的重要载体,其背后的技术系统远比表面看起来复杂。本文将分享我主导的智能货柜售卖系统从 0 到 1 的技术架构实践。
业务场景与挑战
智能货柜需要实现完整的无人售卖闭环:
用户扫码 → 开门取货 → 商品识别 → 自动结算 → 关门完成
核心技术挑战
- 设备实时性:开门指令必须秒级响应
- 商品识别:准确识别用户拿取了什么
- 异常处理:网络断开、支付失败等场景
- 规模化运维:数百台设备的统一管理
系统架构设计
整体架构
┌─────────────────────────────────────────────────────┐
│ 用户层 │
│ 小程序 / App / H5 │
└──────────────────────┬──────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────┐
│ API 网关 │
│ 认证 / 限流 / 路由 │
└──────────────────────┬──────────────────────────────┘
│
┌─────────────────┼─────────────────┐
▼ ▼ ▼
┌────────┐ ┌──────────┐ ┌──────────┐
│订单服务│ │ 设备服务 │ │ 商品服务 │
└───┬────┘ └────┬─────┘ └────┬─────┘
│ │ │
└────────────────┼─────────────────┘
▼
┌────────────────┐
│ MQTT Broker │
│ 设备通信层 │
└───────┬────────┘
│
┌───────────┼───────────┐
▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐
│货柜1 │ │货柜2 │ │货柜N │
└──────┘ └──────┘ └──────┘
设备通信方案
选择 MQTT 协议 作为设备通信方案:
| 特性 | 说明 |
|---|---|
| 轻量级 | 适合资源受限的嵌入式设备 |
| 发布/订阅 | 支持一对多通信 |
| QoS 机制 | 保证消息可靠投递 |
| 心跳保活 | 实时感知设备在线状态 |
核心交互流程
1. 开门流程
用户扫码 → 服务端验证 → 生成开门指令 → MQTT下发 → 设备开门 → 状态上报
关键设计点:
- 指令超时:3秒未响应则重试
- 防重复:指令带唯一ID,设备端去重
- 状态同步:开门成功后上报当前商品库存
2. 商品识别方案
我们采用 重力感应 + 视觉辅助 的混合方案:
# 商品识别逻辑示意
def identify_taken_items(before_weights, after_weights, shelf_config):
taken_items = []
for shelf_id, (before, after) in enumerate(zip(before_weights, after_weights)):
weight_diff = before - after
if weight_diff > THRESHOLD:
# 根据重量差和货道配置识别商品
item = match_item_by_weight(weight_diff, shelf_config[shelf_id])
taken_items.append(item)
return taken_items
3. 异常处理机制
| 异常场景 | 处理策略 |
|---|---|
| 网络断开 | 本地缓存交易,恢复后同步 |
| 识别失败 | 人工复核 + 用户申诉通道 |
| 支付超时 | 自动取消 + 库存回滚 |
| 设备故障 | 自动标记下线 + 运维告警 |
规模化运维能力
设备状态监控
┌─────────────────────────────────────────┐
│ 设备监控大屏 │
├─────────┬─────────┬─────────┬──────────┤
│ 在线设备 │ 离线设备 │ 故障设备 │ 补货预警 │
│ 285 │ 12 │ 3 │ 45 │
├─────────┴─────────┴─────────┴──────────┤
│ 设备地图分布 │
│ [实时位置 + 状态] │
└─────────────────────────────────────────┘
远程运维能力
- OTA 升级:固件远程更新
- 参数下发:运营配置实时生效
- 远程诊断:日志上报 + 远程调试
- 批量操作:按区域/类型批量管理
落地效果
| 指标 | 数据 |
|---|---|
| 设备规模 | 300+ 台 |
| 日均订单 | 5000+ 单 |
| 识别准确率 | 98.5% |
| 系统可用性 | 99.9% |
经验总结
- 硬件要简单:复杂逻辑放云端,设备只做执行
- 通信要可靠:MQTT + 本地缓存双保险
- 异常要闭环:每种异常都要有处理策略
- 运维要自动化:人工不可能管理数百台设备
智能货柜看似简单,实际是一个完整的 IoT + 新零售解决方案。技术的价值在于让复杂的事情变得简单可控。