智能货柜作为新零售的重要载体,其背后的技术系统远比表面看起来复杂。本文将分享我主导的智能货柜售卖系统从 0 到 1 的技术架构实践。

业务场景与挑战

智能货柜需要实现完整的无人售卖闭环:

用户扫码 → 开门取货 → 商品识别 → 自动结算 → 关门完成

核心技术挑战

  1. 设备实时性:开门指令必须秒级响应
  2. 商品识别:准确识别用户拿取了什么
  3. 异常处理:网络断开、支付失败等场景
  4. 规模化运维:数百台设备的统一管理

系统架构设计

整体架构

┌─────────────────────────────────────────────────────┐
│                    用户层                            │
│    小程序 / 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%

经验总结

  1. 硬件要简单:复杂逻辑放云端,设备只做执行
  2. 通信要可靠:MQTT + 本地缓存双保险
  3. 异常要闭环:每种异常都要有处理策略
  4. 运维要自动化:人工不可能管理数百台设备

智能货柜看似简单,实际是一个完整的 IoT + 新零售解决方案。技术的价值在于让复杂的事情变得简单可控。