很多人把 IoT 接 POS 理解成“盒子发现设备 -> POS 直接可用”。企业版 pos_iot 故意把这件事拆开:box 先识别自己带了哪些 device,计算关联哪些 pos.config;session 再决定前台要加载哪些 box 和 device;自动配置 wizard 只是帮你填默认映射,不会跳过归属关系。
主要参考源码:
enterprise/pos_iot/models/iot_box.pyenterprise/pos_iot/models/iot_device.pyenterprise/pos_iot/models/pos_session.pyenterprise/pos_iot/wizard/auto_config_pos_iot.py
一、box 和 device 不是一回事
iot.box 和 iot.device 都各自计算 associated_pos_config_ids。这说明系统区分:
- 一台盒子物理上挂了哪些设备;
- 哪些 POS 配置逻辑上承认这些设备是自己的。
只有第二层成立,POS 才会把它们视为可用。
二、session 前台加载是第三层投影
pos.session._load_pos_data_models() 额外把 iot.device 与 iot.box 纳入加载模型;iot.device._load_pos_data_domain() 又只取当前 config 关联的设备。也就是说,前台看到的设备集合不是全库扫描,而是配置裁剪后的投影。
三、自动配置只是加速,不是绕过
action_autoconfigure() 会根据盒子上的显示器、打印机、扫码枪给 POS 配置默认设备字段,但这只是“把映射写好”。如果设备类型不匹配、配置不在关联范围,session 侧仍不会把它们当成可用能力。
四、为什么要分三层
如果把设备发现直接等同于 POS 可用,会出现:
- 多个 POS 抢同一设备;
- 前台加载过多无关设备;
- 自动配置后以为所有能力都已可用,实际上 session 还没正确投影。
五、结论
POS IoT 不是“发现设备就能直接收银”,而是物理发现 -> 配置归属 -> session 投影三层链路。只有理解这三层,才知道为什么有的设备在后台可见,却在前台不可用。
DISCUSSION
评论区