Files
pig-farm-controller/internal/infra/transport/proto/device.proto

95 lines
3.1 KiB
Protocol Buffer
Raw Normal View History

syntax = "proto3";
package device;
2025-10-02 00:18:13 +08:00
option go_package = "internal/domain/device/proto";
2025-11-29 17:06:09 +08:00
// --- 日志相关 ---
// 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; // 日志内容
}
// --- 核心指令与数据结构 ---
2025-09-29 23:54:09 +08:00
// 平台生成的原始485指令单片机直接发送到总线
message Raw485Command {
2025-09-30 00:01:51 +08:00
int32 bus_number = 1; // 总线号,用于指示单片机将指令发送到哪个总线
bytes command_bytes = 2; // 原始485指令的字节数组
}
2025-10-07 16:14:47 +08:00
// 一个完整的、包含所有元数据的批量采集任务。
message BatchCollectCommand {
2025-09-30 00:01:51 +08:00
string correlation_id = 1; // 用于关联请求和响应的唯一ID
repeated CollectTask tasks = 2; // 采集任务列表
2025-09-25 20:16:07 +08:00
}
2025-10-07 16:14:47 +08:00
// 定义了单个采集任务的“意图”。
message CollectTask {
2025-10-09 13:55:46 +08:00
Raw485Command command = 1; // 平台生成的原始485指令
2025-09-26 15:26:21 +08:00
}
// 这是设备响应的、极致精简的数据包。
message CollectResult {
2025-09-30 00:01:51 +08:00
string correlation_id = 1; // 从下行指令中原样返回的关联ID
repeated float values = 2; // 按预定顺序排列的采集值
2025-10-07 16:14:47 +08:00
}
2025-11-29 17:06:09 +08:00
// OTA空中下载升级指令包含完整的固件包。
message OtaUpgradeCommand {
string firmware_version = 1; // 目标固件版本, e.g., "v1.2.3"
string firmware_hash = 2; // 固件包的SHA-256哈希值用于完整性校验
bytes firmware_package = 3; // 完整的固件二进制文件
}
2025-10-07 16:14:47 +08:00
2025-11-29 17:06:09 +08:00
// 设备端执行OTA升级后的状态报告 (上行)。
message OtaUpgradeStatus {
// 状态码: 0=成功, 1=哈希校验失败, 2=烧录失败, 3=空间不足, 99=其他未知错误
int32 status_code = 1;
// 设备当前运行的固件版本 (升级后或升级失败时)
string current_firmware_version = 2;
}
2025-10-07 16:14:47 +08:00
2025-11-29 17:06:09 +08:00
// 控制设备日志上传的指令 (下行)。
message ControlLogUploadCommand {
bool enable = 1; // true = 开始上传, false = 停止上传
uint32 duration_seconds = 2; // 指定上传持续时间(秒)。
}
// 设备用于向平台批量上传日志的请求 (上行)。
message LogUploadRequest {
repeated LogEntry entries = 1; // 一批日志条目
}
// --- 顶层指令包装器 ---
// Instruction 封装了所有与设备间的通信。
// 使用 oneof 来确保每个消息只有一个负载类型,这在嵌入式系统中是高效且类型安全的。
2025-10-07 16:14:47 +08:00
message Instruction {
oneof payload {
2025-11-29 17:06:09 +08:00
// --- 下行指令 (平台 -> 设备) ---
2025-10-07 16:14:47 +08:00
Raw485Command raw_485_command = 1;
BatchCollectCommand batch_collect_command = 2;
2025-11-29 17:06:09 +08:00
OtaUpgradeCommand ota_upgrade_command = 3;
ControlLogUploadCommand control_log_upload_command = 4;
// --- 上行数据 (设备 -> 平台) ---
CollectResult collect_result = 101;
OtaUpgradeStatus ota_upgrade_status = 102;
LogUploadRequest log_upload_request = 103;
2025-10-07 16:14:47 +08:00
}
}