更新proto

This commit is contained in:
2025-12-03 14:06:56 +08:00
parent 72d70e90f1
commit 7974955335
4 changed files with 509 additions and 525 deletions

View File

@@ -8,13 +8,13 @@ http://git.huangwc.com/pig/pig-farm-controller/issues/71
# 开发计划
## Lora 监听逻辑重构
- [x] [Lora逻辑重构](design/ota-upgrade-and-log-monitoring/lora_refactoring_plan.md)
## OTA 升级
- [x] 增加一个proto对象, 用于封装ota升级包
- [x] 区域主控增加版本号
- [x] 增加ping指令并获取带版本号的响应
- [ ] [实现ota升级逻辑](design/ota-upgrade-and-log-monitoring/ota_upgrade_solution.md)
## Lora 监听逻辑重构
- [x] [Lora逻辑重构](design/ota-upgrade-and-log-monitoring/lora_refactoring_plan.md)

View File

@@ -93,7 +93,6 @@ message PrepareUpdateReq {
message RequestFile {
string task_id = 1; // 升级任务ID
string filepath = 2; // 请求的文件路径 (例如 "/manifest.json" 或 "/main.py")
uint32 retry_count = 3; // 设备请求该文件的重试次数
}
// FileResponse: 平台响应设备请求,发送单个文件的完整内容
@@ -106,9 +105,8 @@ message FileResponse {
// UpdateStatusReport: 设备向平台报告升级状态
message UpdateStatusReport {
string device_id = 1; // 设备ID
string task_id = 2; // 升级任务ID
string current_version = 3; // 操作完成后的当前版本
string task_id = 1; // 升级任务ID
string current_version = 2; // 操作完成后的当前版本
enum Status {
STATUS_UNKNOWN = 0;
@@ -121,9 +119,9 @@ message UpdateStatusReport {
// --- 平台推断的状态 (数据库记录用) ---
FAILED_TIMEOUT = 5; // 平台在超时后仍未收到SUCCESS报告将任务标记为此状态
}
Status status = 4; // 升级的最终状态
string error_message = 6; // 人类可读的详细错误信息
string failed_file = 7; // 失败时关联的文件路径 (可选)
Status status = 3; // 升级的最终状态
string error_message = 4; // 人类可读的详细错误信息
string failed_file = 5; // 失败时关联的文件路径 (可选)
}
```

File diff suppressed because it is too large Load Diff

View File

@@ -4,24 +4,6 @@ package device;
option go_package = "internal/domain/device/proto";
// --- 日志相关 ---
// LogLevel 定义了日志的严重级别。
enum LogLevel {
LOG_LEVEL_UNSPECIFIED = 0; // 未指定
DEBUG = 1; // 调试信息
INFO = 2; // 普通信息
WARN = 3; // 警告
ERROR = 4; // 错误
}
// LogEntry 代表一条由设备生成的日志记录。
message LogEntry {
int64 timestamp_unix = 1; // 日志生成的Unix时间戳 (秒)
LogLevel level = 2; // 日志级别
string message = 3; // 日志内容
}
// --- 核心指令与数据结构 ---
// 平台生成的原始485指令单片机直接发送到总线
@@ -47,32 +29,6 @@ message CollectResult {
repeated float values = 2; // 按预定顺序排列的采集值
}
// OTA空中下载升级指令包含完整的固件包。
message OtaUpgradeCommand {
string firmware_version = 1; // 目标固件版本, e.g., "v1.2.3"
string firmware_hash = 2; // 固件包的SHA-256哈希值用于完整性校验
bytes firmware_package = 3; // 完整的固件二进制文件
}
// 设备端执行OTA升级后的状态报告 (上行)。
message OtaUpgradeStatus {
// 状态码: 0=成功, 1=哈希校验失败, 2=烧录失败, 3=空间不足, 99=其他未知错误
int32 status_code = 1;
// 设备当前运行的固件版本 (升级后或升级失败时)
string current_firmware_version = 2;
}
// 控制设备日志上传的指令 (下行)。
message ControlLogUploadCommand {
bool enable = 1; // true = 开始上传, false = 停止上传
uint32 duration_seconds = 2; // 指定上传持续时间(秒)。
}
// 设备用于向平台批量上传日志的请求 (上行)。
message LogUploadRequest {
repeated LogEntry entries = 1; // 一批日志条目
}
// 平台向设备发送的Ping指令用于检查存活性。
message Ping {
// 可以留空,指令本身即代表意图
@@ -85,6 +41,48 @@ message Pong {
// 可以扩展更多状态, e.g., int32 uptime_seconds = 2;
}
// --- OTA 升级相关 ---
// PrepareUpdateReq: 平台发送给设备,通知设备准备开始 OTA 升级 (下行)
message PrepareUpdateReq {
string version = 1; // 新固件版本号
string task_id = 2; // 升级任务唯一ID
string manifest_md5 = 3; // 清单文件的 MD5 校验和,用于设备初步校验清单文件完整性
}
// RequestFile: 设备向平台请求特定文件 (包括清单文件和固件文件) (上行)
message RequestFile {
string task_id = 1; // 升级任务ID
string filepath = 2; // 请求的文件路径 (例如 "/manifest.json" 或 "/main.py")
}
// FileResponse: 平台响应设备请求,发送单个文件的完整内容 (下行)
// LoRa 传输层会自动处理分片和重组,因此应用层可以直接发送完整的单个文件内容
message FileResponse {
string task_id = 1; // 升级任务ID
string filepath = 2; // 设备上的目标路径 (例如 "/manifest.json" 或 "/main.py")
bytes content = 3; // 文件的完整内容
}
// UpdateStatusReport: 设备向平台报告升级状态 (上行)
message UpdateStatusReport {
string task_id = 1; // 升级任务ID
string current_version = 2; // 操作完成后的当前版本
enum Status {
STATUS_UNSPECIFIED = 0; // 未指定protobuf3 要求枚举从0开始
SUCCESS = 1; // 升级成功,新固件已运行
SUCCESS_ALREADY_UP_TO_DATE = 2; // 版本已是最新,未执行升级
FAILED_PRE_CHECK = 3; // 升级前检查失败 (例如拒绝降级、准备分区失败)
FAILED_MANIFEST_VERIFY = 4; // 清单文件下载或校验失败
FAILED_DOWNLOAD = 5; // 固件文件下载或校验失败
FAILED_ROLLED_BACK = 6; // 新固件启动失败,已自动回滚
FAILED_TIMEOUT = 7; // 平台在超时后仍未收到SUCCESS报告将任务标记为此状态 (平台推断)
}
Status status = 3; // 升级的最终状态
string error_message = 4; // 人类可读的详细错误信息
string failed_file = 5; // 失败时关联的文件路径 (可选)
}
// --- 顶层指令包装器 ---
@@ -95,14 +93,14 @@ message Instruction {
// --- 下行指令 (平台 -> 设备) ---
Raw485Command raw_485_command = 1;
BatchCollectCommand batch_collect_command = 2;
OtaUpgradeCommand ota_upgrade_command = 3;
ControlLogUploadCommand control_log_upload_command = 4;
Ping ping = 6;
Ping ping = 3;
PrepareUpdateReq prepare_update_req = 4;
FileResponse file_response = 5;
// --- 上行数据 (设备 -> 平台) ---
CollectResult collect_result = 101;
OtaUpgradeStatus ota_upgrade_status = 102;
LogUploadRequest log_upload_request = 103;
Pong pong = 104;
Pong pong = 102;
RequestFile request_file = 103;
UpdateStatusReport update_status_report = 104;
}
}