跳转至

sim-dashboard 快速开始

本指南引导你完成 sim-dashboard 应用的本地安装和运行。

前置条件

  • Node.js 18+(或等效运行时)
  • npmpnpm 包管理器
  • Inklet 后端运行在 http://localhost:4000(认证所需)

安装

克隆仓库并安装依赖:

git clone https://github.com/Inklet-2026/sim-dashboard.git
cd sim-dashboard
npm install

或使用 pnpm:

pnpm install

配置

在项目根目录创建 .env 文件:

VITE_AUTH_URL=http://localhost:4000
变量 描述
VITE_AUTH_URL Inklet 后端 API 的 URL。用于认证和设备 API 调用。

说明

VITE_ 前缀是 Vite 向前端暴露变量所必需的。Fastify 服务器的配置是单独读取的。

运行

同时启动 Fastify 服务器和 Vite 开发服务器:

npm run dev

这将启动:

  • Fastify 服务器,地址 http://localhost:3001 --- 接收 sim-hw 的帧缓冲,WebSocket 广播
  • React 前端,地址 http://localhost:5173 --- 带有电子墨水屏渲染的用户界面

使用仪表盘

第 1 步:打开仪表盘

在浏览器中访问 http://localhost:5173

第 2 步:登录

点击 Sign In 并使用你的 Inklet 账户凭据进行认证。这与你在门户中使用的账户或通过 Auth API 创建的账户相同。

还没有账户?

通过 API 注册新账户:

curl -X POST http://localhost:4000/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "username": "yourname", "password": "password123"}'

第 3 步:查看你的设备

登录后,仪表盘会显示绑定到你账户的所有设备。每张设备卡片显示:

  • 设备名称(Thing 名称)
  • 在线/离线状态
  • 电量
  • 最后可见时间戳
  • 实时电子墨水屏预览

如果没有绑定设备,仪表盘将为空。请参阅设备绑定来绑定模拟设备。

第 4 步:启动模拟设备

在另一个终端中启动 sim-hw 实例:

cd sim-hw
python -m eink_hw --data-dir devices/kitchen

模拟设备将:

  1. 连接到 AWS IoT Core
  2. 向后端发送心跳
  3. 请求配对码(如果未绑定)
  4. 将帧缓冲推送到 http://localhost:3001

第 5 步:绑定并交互

设备运行并绑定到你的账户后(参见设备绑定),你将在仪表盘中看到其实时电子墨水屏显示。发送到设备的任何命令都会实时更新显示。

公开设备视图

每个设备都有一个无需认证的公开 URL:

http://localhost:5173/device/{hwid}

{hwid} 替换为设备的硬件 UUID。此页面显示:

  • 设备当前的电子墨水屏内容
  • 通过 WebSocket 的实时更新
  • 设备状态信息

分享

公开设备 URL 适用于演示、监控仪表盘,或与没有 Inklet 账户的人分享设备显示内容。

开发

项目结构

sim-dashboard/
├── server/              # Fastify 服务器
│   ├── index.ts         # 服务器入口
│   ├── routes/          # HTTP 路由(帧缓冲、健康检查)
│   └── ws/              # WebSocket 处理器
├── src/                 # React 前端
│   ├── components/      # UI 组件
│   ├── pages/           # 路由页面
│   ├── hooks/           # React hooks
│   └── lib/             # 工具函数和 API 客户端
├── .env                 # 环境配置
├── package.json
└── vite.config.ts

热重载

Fastify 服务器和 React 前端都支持热模块替换。源文件的修改会立即反映在浏览器中,无需完整刷新页面。

故障排除

登录时出现"Failed to fetch"

确认 Inklet 后端在 VITE_AUTH_URL 指定的地址上运行:

curl http://localhost:4000/health

设备不显示帧缓冲

  1. 确认 sim-hw 正在运行且配置了 --sim-url http://localhost:3001
  2. 检查 Fastify 服务器日志中是否有传入的 POST 请求
  3. 在浏览器开发者工具中检查 WebSocket 连接(Network > WS 标签页)

端口冲突

如果端口 3001 或 5173 已被占用,检查其他运行中的进程:

# 检查哪个进程占用了端口 3001
lsof -i :3001    # macOS/Linux
netstat -ano | findstr :3001  # Windows