第四十章 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 案例

状态机(口述)disconnectedhandshakereadybusyerrorerror 经退避重连handshake

40.1.3 截图占位

图 40-1 IoT 盒子连接设备列表

40.1.4 本节练习

  1. 简答:驱动中如何处理 设备断电重连?(探测、重初始化、清空陈旧句柄 等。)
  2. 判断: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 requests 与 urllib 超时行为对比(日志)

40.2.4 本节练习

  1. 实操:对比 requests.get(..., timeout=3)旧 urllib 默认拔网线 时的 挂起时间(口述预期即可)。
  2. 简答连接超时读超时 分开设置的好处?

参考答案提示: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 模拟扫描/打印测试通过日志

40.3.4 本节练习

  1. 拓展:在 CI 启用 Test IoT配置要点镜像、服务、标签 概述)。
  2. 简答硬件在环测试纯模拟 各适合 哪个发布阶段

参考答案提示:2. 模拟适合每次 CI硬件在环适合发布前/试点门店


本章综合练习

  1. 运维100 台门店打印机 固件升级 策略(分批、回滚、离线缓存 至少两条)。
  2. 安全IoT 设备证书轮换 流程(新证并行、老证过期窗口)。
  3. 综合POS 高峰 时 IoT 延迟飙升,列出 三条 排查顺序(网络、盒子 CPU、驱动重试)。
  4. 实操:画 「扫码 → 入库单行」组件图POS/库存、IoT、设备)。

本章对应白皮书目录:第四十章 IoT 硬件集成。