52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
| 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 = 1; // 平台生成的原始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;
 | ||
|     }
 | ||
| }
 |