sim-hw 概览¶
sim-hw(包名:eink-hw)是一个 Python 设备模拟器,模拟 Inklet 物理电子墨水屏设备的行为。它实现了完整的设备端 IoT 协议,支持在没有物理硬件的情况下进行端到端开发和测试。
功能介绍¶
sim-hw 模拟完整的设备生命周期:
-
Fleet Provisioning --- 首次运行时,使用 claim 证书连接到 AWS IoT Core,获取设备专属证书和 Thing 名称,并存储到本地。
-
MQTT 连接 --- 通过 X.509 mTLS 连接到 AWS IoT Core,订阅命令主题,发布心跳和状态。
-
心跳上报 --- 定时发送包含硬件 ID、时间戳、固件版本和电量信息的心跳消息。
-
状态上报 --- 通过
up/state主题以任意 JSON 形式上报设备状态。 -
命令处理 --- 接收并处理来自后端的命令:
text--- 将文本渲染为 800x480 1-bit 位图claim_code--- 渲染大尺寸的配对码bound--- 显示绑定确认信息unbound--- 清除显示内容并重新请求配对码already_bound--- 记录日志(不进行显示操作)
-
显示渲染 --- 使用 Pillow 将文本和配对码渲染为 800x480 单色位图,然后通过 HTTP POST 将渲染后的 PNG 推送到 sim-dashboard 的 Fastify 服务器。
-
NFC 载荷生成 --- 生成经过 HMAC 签名的 NFC 载荷(
inklet:1:{hwId}:{signature})并写入数据目录。可用于测试基于 NFC 的设备绑定。 -
浏览器集成 --- 自动在默认浏览器中打开 sim-dashboard,指向设备的实时显示预览页面。
架构¶
sim-hw
├── MQTT Client (AWS IoT Device SDK)
│ ├── Publishes: heartbeat, state, request_claim
│ └── Subscribes: down/cmd
│
├── Fleet Provisioning Client
│ └── Claim cert → device cert + thingName
│
├── Display Renderer (Pillow)
│ └── Text → 800×480 1-bit PNG
│
├── NFC Generator
│ └── HMAC-SHA256 → nfc-payload file
│
└── sim-dashboard Client (HTTP)
└── POST framebuffer to Fastify server
模拟设备 vs 真实设备¶
| 功能 | 真实设备 | sim-hw |
|---|---|---|
| MQTT 连接 | X.509 mTLS | X.509 mTLS(相同) |
| Fleet Provisioning | 首次开机时 | 首次运行时 |
| 显示 | 物理电子墨水屏 | 渲染为 PNG 并推送到 sim-dashboard |
| 电量 | 硬件传感器 | 模拟值(上报为常量) |
| NFC 标签 | 物理 NFC 芯片 | 基于文件的载荷生成 |
| 固件 | 嵌入式 C/Rust | Python 模拟器 |
多设备模拟
可以通过使用不同的 --data-dir 路径同时运行多个 sim-hw 实例。每个数据目录代表一个独立的物理设备,拥有自己的硬件 ID、证书和状态。