跳转至

sim-hw 概览

sim-hw(包名:eink-hw)是一个 Python 设备模拟器,模拟 Inklet 物理电子墨水屏设备的行为。它实现了完整的设备端 IoT 协议,支持在没有物理硬件的情况下进行端到端开发和测试。

仓库: Inklet-2026/sim-hw

功能介绍

sim-hw 模拟完整的设备生命周期:

  1. Fleet Provisioning --- 首次运行时,使用 claim 证书连接到 AWS IoT Core,获取设备专属证书和 Thing 名称,并存储到本地。

  2. MQTT 连接 --- 通过 X.509 mTLS 连接到 AWS IoT Core,订阅命令主题,发布心跳和状态。

  3. 心跳上报 --- 定时发送包含硬件 ID、时间戳、固件版本和电量信息的心跳消息。

  4. 状态上报 --- 通过 up/state 主题以任意 JSON 形式上报设备状态。

  5. 命令处理 --- 接收并处理来自后端的命令:

    • text --- 将文本渲染为 800x480 1-bit 位图
    • claim_code --- 渲染大尺寸的配对码
    • bound --- 显示绑定确认信息
    • unbound --- 清除显示内容并重新请求配对码
    • already_bound --- 记录日志(不进行显示操作)
  6. 显示渲染 --- 使用 Pillow 将文本和配对码渲染为 800x480 单色位图,然后通过 HTTP POST 将渲染后的 PNG 推送到 sim-dashboard 的 Fastify 服务器。

  7. NFC 载荷生成 --- 生成经过 HMAC 签名的 NFC 载荷(inklet:1:{hwId}:{signature})并写入数据目录。可用于测试基于 NFC 的设备绑定。

  8. 浏览器集成 --- 自动在默认浏览器中打开 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、证书和状态。

后续阅读

  • 快速开始 --- 安装并运行你的第一个模拟设备
  • NFC 绑定 --- NFC 载荷生成和绑定流程详解
  • 命令处理 --- 详细的命令处理和显示渲染说明