syntax = "proto3"; 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指令,单片机直接发送到总线 message Raw485Command { int32 bus_number = 1; // 总线号,用于指示单片机将指令发送到哪个总线 bytes command_bytes = 2; // 原始485指令的字节数组 } // 一个完整的、包含所有元数据的批量采集任务。 message BatchCollectCommand { string correlation_id = 1; // 用于关联请求和响应的唯一ID repeated CollectTask tasks = 2; // 采集任务列表 } // 定义了单个采集任务的“意图”。 message CollectTask { Raw485Command command = 1; // 平台生成的原始485指令 } // 这是设备响应的、极致精简的数据包。 message CollectResult { string correlation_id = 1; // 从下行指令中原样返回的关联ID 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; // 一批日志条目 } // --- 顶层指令包装器 --- // Instruction 封装了所有与设备间的通信。 // 使用 oneof 来确保每个消息只有一个负载类型,这在嵌入式系统中是高效且类型安全的。 message Instruction { oneof payload { // --- 下行指令 (平台 -> 设备) --- Raw485Command raw_485_command = 1; BatchCollectCommand batch_collect_command = 2; 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; } }