1. 完善websocket通信逻辑

2. 实现Switch接口
This commit is contained in:
2025-09-08 14:59:42 +08:00
parent a6ee1013ca
commit 6a2d97b543
7 changed files with 499 additions and 19 deletions

View File

@@ -43,6 +43,21 @@ type SwitchResponseData struct {
DeviceType string `json:"device_type"`
DeviceID string `json:"device_id"`
Action string `json:"action"`
Status string `json:"status"` // 添加状态字段
Message string `json:"message"` // 添加消息字段
}
// RelayControlData 发送给中继设备的控制数据结构体
type RelayControlData struct {
DeviceType string `json:"device_type"`
DeviceID string `json:"device_id"`
Action string `json:"action"`
}
// RelayControlResponseData 中继设备控制响应数据结构体
type RelayControlResponseData struct {
Status string `json:"status"`
Message string `json:"message"`
}
// Switch 设备控制接口
@@ -67,31 +82,45 @@ func (c *Controller) Switch(ctx *gin.Context) {
}
// 通过WebSocket向中继设备发送控制指令
// 这里假设中继设备ID为"relay-001",在实际应用中应该根据设备层级结构动态获取
controlData := map[string]interface{}{
"device_type": req.DeviceType,
"device_id": req.DeviceID,
"action": req.Action,
controlData := RelayControlData{
DeviceType: req.DeviceType,
DeviceID: req.DeviceID,
Action: req.Action,
}
err := c.websocketService.SendCommand("relay-001", "control_device", controlData)
// 发送指令并等待响应
response, err := c.websocketService.SendCommandAndWait("relay-001", "control_device", controlData, 0)
if err != nil {
c.logger.Error("通过WebSocket发送设备控制指令失败: " + err.Error())
controller.SendErrorResponse(ctx, controller.InternalServerErrorCode, "设备控制失败")
controller.SendErrorResponse(ctx, controller.InternalServerErrorCode, "设备控制失败: "+err.Error())
return
}
// 使用响应中的状态和消息
status := "解析失败"
message := "消息解析失败"
// 如果响应中没有明确的状态和消息,则从数据中提取
if status == "" && message == "" {
// 解析响应数据
var responseData RelayControlResponseData
if err := response.ParseData(&responseData); err == nil {
status = responseData.Status
message = responseData.Message
}
}
// 创建设备控制记录
if err := c.createDeviceControlRecord(
user.ID,
req.DeviceID,
req.DeviceType,
req.Action,
"success",
"设备控制成功",
status,
message,
); err != nil {
c.logger.Error("创建设备控制记录失败: " + err.Error())
controller.SendErrorResponse(ctx, controller.InternalServerErrorCode, "设备控制失败")
controller.SendErrorResponse(ctx, controller.InternalServerErrorCode, "记录控制历史失败")
return
}
@@ -99,6 +128,8 @@ func (c *Controller) Switch(ctx *gin.Context) {
DeviceType: req.DeviceType,
DeviceID: req.DeviceID,
Action: req.Action,
Status: status,
Message: message,
}
controller.SendSuccessResponse(ctx, "设备控制成功", data)