第四十章 IoT 硬件集成
篇别:第十篇 IoT 与 AI 集成
本章学习目标
- 了解 IoT Box / 驱动 在 Odoo 中的 角色(发现设备、暴露能力、POS/车间调用)。
- 理解 网络库统一到
requests后的 超时、SSL、会话 习惯与 迁移注意点。 - 掌握 Test IoT 思路:无物理硬件 下 模拟扫描、打印 等路径,便于 CI。
- 能从 运维与安全 角度讨论 固件、证书、门店规模。
导读:IoT 是「现场设备」的延伸
仓库 扫码枪、门店 小票打印机、产线 电子秤 等需要 稳定、低延迟、可恢复 的连接。Odoo IoT 体系将 设备协议差异 收敛到 驱动与盒子;应用层仍通过 标准 API 发 打印/读码 等指令。本章偏 架构与工程习惯;具体驱动 API 以企业版/IoT 文档与源码为准。
40.1 IoT 驱动开发
40.1.1 知识要点
- 分层:物理连接探测(USB/网络) → 能力声明(支持哪些命令) → 命令下发与应答解析 → 错误恢复(重连、重试)。
- 幂等:同一打印任务 重复提交可能导致 双打小票;应用层 用 任务 id 去重。
- 日志:设备 SN、固件版本、最后心跳 落日志,便于 400 电话排障。
- 降级:设备离线时 队列缓存 或 提示换人工流程,勿 无限阻塞 POS 结账。
40.1.2 案例
状态机(口述):disconnected → handshake → ready → busy → error;error 经退避重连 回 handshake。
40.1.3 截图占位

40.1.4 本节练习
- 简答:驱动中如何处理 设备断电重连?(探测、重初始化、清空陈旧句柄 等。)
- 判断:IoT 驱动内可直接 硬编码门店 Wi-Fi 密码。( )
参考答案提示:2. 错。
40.2 网络库标准化(新增)
40.2.1 知识要点
- 方向:新代码优先
requests,与主代码库 依赖一致;逐步替换urllib3裸调用。 - 超时:
timeout=(connect, read)显式;禁止 依赖 无限等。 - SSL:校验证书;内网自签需 企业 CA 或 受控
verify(非生产禁用校验)。 - Session:连接池 复用;注意 线程安全(worker 模型 下每请求独立 env)。
40.2.2 案例
import requests
resp = requests.get("https://device.local/status", timeout=(1, 3))
resp.raise_for_status()
data = resp.json()
40.2.3 截图占位

40.2.4 本节练习
- 实操:对比
requests.get(..., timeout=3)与 旧 urllib 默认 在 拔网线 时的 挂起时间(口述预期即可)。 - 简答:连接超时 与 读超时 分开设置的好处?
参考答案提示:2. 慢服务器仍可读 body;不可达主机快速失败。
40.3 Test IoT System(新增)
40.3.1 知识要点
- 目标:CI / 开发机 无 真打印机/扫描枪 仍能跑 回归。
- 手段:模拟设备驱动、loopback socket、录制/回放 二进制帧。
- 范围:关键路径(开钱箱、打印、扫码)各 至少一测;不追求 100% 硬件覆盖。
- 与 Odoo 测试:
@tagged区分 需模拟器 的用例,避免 默认 CI 过重。
40.3.2 案例
配置要点:环境变量 IOT_TEST_MODE=1 → 驱动 注入 fake backend → 断言 上层收到预期事件。
40.3.3 截图占位

40.3.4 本节练习
- 拓展:在 CI 启用 Test IoT 的 配置要点(镜像、服务、标签 概述)。
- 简答:硬件在环测试 与 纯模拟 各适合 哪个发布阶段?
参考答案提示:2. 模拟适合每次 CI;硬件在环适合发布前/试点门店。
本章综合练习
- 运维:100 台门店打印机 固件升级 策略(分批、回滚、离线缓存 至少两条)。
- 安全:IoT 设备证书轮换 流程(新证并行、老证过期窗口)。
- 综合:POS 高峰 时 IoT 延迟飙升,列出 三条 排查顺序(网络、盒子 CPU、驱动重试)。
- 实操:画 「扫码 → 入库单行」 的 组件图(POS/库存、IoT、设备)。
本章对应白皮书目录:第四十章 IoT 硬件集成。