OpenDuck OTA 管理平台{{ user.username }} 退出
设备总数
{{ dashboard.device_count }}
在线设备
{{ dashboard.online_count }}
文件数量
{{ artifacts.length }}
任务数量
{{ tasks.length }}

当前架构

设备自动注册 SN;Agent 根据 SN 领取最新全量或指定设备任务;只替换 runtime 根目录内经过校验的现有普通文件。

设备信息

设备首次连接会自动注册 SN;动态信息由 Agent 心跳更新。

SN算力板型号系统版本IP 位置状态最后在线设备信息
{{ device.serial_number }}{{ device.board_model || '-' }}{{ device.system_version || '-' }}{{ device.ip_location || '-' }}{{ device.status }}{{ formatTime(device.last_online) }}
当前型号没有设备

Target File OTA 文件仓库

上传任意普通文件,并填写 `/home/orangepi/open_duck_mini_runtime` 下已经存在的相对目标文件。

{{ artifactFile ? artifactFile.name : '尚未选择文件' }}

不支持绝对路径、目录、符号链接、ota/、.git/ 或 .venv/;Agent 校验大小与 SHA-256 后使用原子重命名直接替换,不保留旧文件。

版本原始文件Target大小SHA-256上传时间状态操作
{{ artifact.version }}{{ artifact.filename }}{{ artifact.target }}{{ formatSize(artifact.size) }}
{{ artifact.sha256 }}
{{ formatTime(artifact.upload_time) }}{{ artifact.status }}
暂无可发布文件

文件夹 OTA

直接选择一个文件夹,平台会自动打包为安全的 `.tar.gz` 并计算 SHA-256;你不需要手动压缩或计算哈希。设备通过 https://ota.xiaoyinrobot.com 轮询更新。

{{ folderFolderName ? folderFolderName + '(' + folderFiles.length + ' 个文件)' : '尚未选择文件夹' }}

当前选择的文件夹会由浏览器自动打包并计算 SHA-256;压缩包内容是目标目录内容(不额外嵌套一层),防止路径穿越。平台和 Agent 双重校验,成功后整目录替换,不保留旧目录。 SHA-256:{{ folderArchiveHash }}

版本压缩包Target 文件夹大小SHA-256上传时间状态操作
{{ artifact.version }}{{ artifact.filename }}{{ artifact.target }}{{ formatSize(artifact.size) }}
{{ artifact.sha256 }}
{{ formatTime(artifact.upload_time) }}{{ artifact.status }}
暂无可发布文件夹

OTA 任务

全量任务对所有 SN 生效;指定任务仅对目标 SN 可见,每台设备状态独立统计。

任务 ID类型版本Target范围目标 SN状态创建时间操作
{{ task.task_id }}
{{ task.kind==='folder'?'文件夹':'文件' }}{{ task.version }}{{ task.target }}{{ task.scope==='global'?'全量':'指定设备' }}{{ task.serial_number || '所有 SN' }}{{ statusLabel(task.status) }}
{{ deliverySummary(task) }}
{{ formatTime(task.create_time) }}
暂无文件或文件夹 OTA 任务

硬件信息

CPU Serial{{ selectedDevice?.cpu_serial || '-' }}
SD CID{{ selectedDevice?.sd_cid || '-' }}
有线 MAC{{ selectedDevice?.wired_mac || '-' }}
算力板型号{{ selectedDevice?.board_model || '-' }}

软件信息

公网 IP{{ selectedDevice?.public_ip || '-' }}
IP 归属地(仅供参考){{ selectedDevice?.ip_location || '-' }}
系统版本{{ selectedDevice?.system_version || '-' }}
内核版本{{ selectedDevice?.kernel_version || '-' }}

{{ taskDetail.kind==='folder'?'文件夹 OTA':'Target File OTA' }} 设备状态

版本{{ taskDetail.version }}
Target{{ taskDetail.target }}
发布范围{{ taskDetail.scope==='global'?'全量':taskDetail.serial_number }}
任务 ID{{ taskDetail.task_id }}
SHA-256{{ taskDetail.sha256 }}
文件大小{{ formatSize(taskDetail.size) }}

每台设备当前状态

Agent SN状态最后时间错误/消息操作
{{ delivery.serial_number }}{{ statusLabel(delivery.state) }}{{ formatTime(delivery.time) }}{{ delivery.message || '-' }}-
等待 Agent 轮询

完整报告时间线

  • {{ statusLabel(report.state) }}{{ report.serial_number }}
    {{ report.message || '-' }}
    {{ formatTime(report.time) }}
  • 等待 Agent 轮询