syntax = "proto3"; package device; // import "google/protobuf/any.proto"; // REMOVED: Not suitable for embedded systems. option go_package = "internal/domain/device/proto"; // --- Concrete Command & Data Structures --- // 平台生成的原始485指令,单片机直接发送到总线 message Raw485Command { int32 bus_number = 1; // 总线号,用于指示单片机将指令发送到哪个总线 bytes command_bytes = 2; // 原始485指令的字节数组 } // BatchCollectCommand // 一个完整的、包含所有元数据的批量采集任务。 message BatchCollectCommand { string correlation_id = 1; // 用于关联请求和响应的唯一ID repeated CollectTask tasks = 2; // 采集任务列表 } // CollectTask // 定义了单个采集任务的“意图”。 message CollectTask { Raw485Command command = 2; // 平台生成的原始485指令 } // CollectResult // 这是设备响应的、极致精简的数据包。 message CollectResult { string correlation_id = 1; // 从下行指令中原样返回的关联ID repeated float values = 2; // 按预定顺序排列的采集值 } // --- Main Downlink Instruction Wrapper --- // 指令 (所有从平台下发到设备的数据都应该被包装在这里面) // 使用 oneof 来替代 google.protobuf.Any,这是嵌入式环境下的标准做法。 // 它高效、类型安全,且只解码一次。 message Instruction { oneof payload { Raw485Command raw_485_command = 1; BatchCollectCommand batch_collect_command = 2; CollectResult collect_result = 3; // ADDED:用于上行数据 // 如果未来有其他指令类型,比如开关控制,可以直接在这里添加 // SwitchCommand switch_command = 3; } }