liuxiulin 8 mesiacov pred
rodič
commit
eb1b7bbe0c

+ 14 - 3
pkg/deviceStatus/deviceStatus.go

@@ -5,8 +5,9 @@ import (
 )
 
 const (
-	KeyPrefix   = "status:device:"
-	dataExpires = 7200
+	StatusKeyPrefix = "status:device:"
+	InfoKeyPrefix   = "info:device:"
+	dataExpires     = 7200
 )
 
 type SplitStatus struct {
@@ -42,7 +43,17 @@ func NewDevStatusManager(host string, port int) *DevStatusManager {
 }
 
 func (mgr *DevStatusManager) GetDeviceStatus(id string) (string, error) {
-	key := KeyPrefix + id
+	key := StatusKeyPrefix + id
+	// get status from redis
+	result, err := mgr.redisClient.DoVar("GET", key)
+	if err != nil {
+		return "", err
+	}
+	return result.String(), nil
+}
+
+func (mgr *DevStatusManager) GetDeviceInfo(id string) (string, error) {
+	key := InfoKeyPrefix + id
 	// get status from redis
 	result, err := mgr.redisClient.DoVar("GET", key)
 	if err != nil {

+ 2 - 1
pkg/models/device.go

@@ -85,7 +85,8 @@ type SendCommandParams struct {
 	Internal     int    `json:"internal"`       // 间隔时间,单位:秒,范围:30~180,默认:30秒
 	Module       int    `json:"module"`         // 对应模块(1:新风模块2:加湿模块)
 	ModulePower  int    `json:"module_power"`   // 电源状态,1:开启,2关闭
-	Id           string `json:"id"`             // 长度12个字节,如 YHK-16777216
+	Id           int    `json:"id"`             // 长度12个字节,如 YHK-16777216
+	Prefix       string `json:"prefix"`         // 字符串
 	Num          int    `json:"num"`            // 1-8 对应1-8路电热执行器
 	NumPower     int    `json:"num_power"`      // 1:开启,0:关闭
 	OutdoorPower int    `json:"outdoor_power"`  // 1:开启,0:关闭

+ 4 - 0
pkg/rpcs/access.go

@@ -63,3 +63,7 @@ type ChunkUpgrade struct {
 type ReplyStatus struct {
 	Status string
 }
+
+type ReplayInfo struct {
+	Info string
+}

+ 11 - 0
services/devicemanager/manager.go

@@ -129,3 +129,14 @@ func (dm *DeviceManager) GetDeviceStatus(args rpcs.ArgsGetStatus, reply *rpcs.Re
 	}
 	return nil
 }
+
+func (dm *DeviceManager) GetDeviceInfo(args rpcs.ArgsGetStatus, reply *rpcs.ReplayInfo) error {
+	info, err := dm.statusManager.GetDeviceInfo(args.Id)
+	if err != nil {
+		return err
+	}
+	if info != "" {
+		reply.Info = info
+	}
+	return nil
+}

+ 4 - 4
services/knowoapi/controllers/device.go

@@ -286,12 +286,12 @@ func (a *DeviceController) PostReport() {
 		return
 	}
 
-	err := a.Service.SetReport(*params)
+	result, err := a.Service.SetReport(*params)
 	if err != nil {
 		responseError(a.Ctx, ErrNormal, err.Error())
 		return
 	}
-	done(a.Ctx, params.DeviceId)
+	done(a.Ctx, result)
 }
 
 // PostRestart 重启设备
@@ -354,12 +354,12 @@ func (a *DeviceController) PostInfo() {
 		return
 	}
 
-	err := a.Service.GetInfo(*params)
+	result, err := a.Service.GetInfo(*params)
 	if err != nil {
 		responseError(a.Ctx, ErrNormal, err.Error())
 		return
 	}
-	done(a.Ctx, params.DeviceId)
+	done(a.Ctx, result)
 }
 
 // PostForcerun 远程控制某个模块强制运行

+ 26 - 7
services/knowoapi/services/device.go

@@ -31,7 +31,7 @@ type DeviceService interface {
 	// GetDeviceStatus 获取设备状态数据
 	GetDeviceStatus(deviceId string) (*gjson.Json, error)
 	// SetReport 获取设备状态
-	SetReport(params models.SendCommandParams) error
+	SetReport(params models.SendCommandParams) (*gjson.Json, error)
 	// Restart 重启设备
 	Restart(params models.SendCommandParams) error
 	// ClearData 清除设备配置数据
@@ -39,7 +39,7 @@ type DeviceService interface {
 	// SetDataTrans 设备端自动上报配置
 	SetDataTrans(params models.SendCommandParams) error
 	// GetInfo 获取网关信息
-	GetInfo(params models.SendCommandParams) error
+	GetInfo(params models.SendCommandParams) (*gjson.Json, error)
 	// ForceRun 远程控制某个模块强制运行
 	ForceRun(params models.SendCommandParams) error
 	// SetDeviceId 写入设备id
@@ -207,11 +207,15 @@ func (a deviceservice) GetDeviceStatus(deviceId string) (*gjson.Json, error) {
 }
 
 // SetReport 获取设备状态
-func (a deviceservice) SetReport(params models.SendCommandParams) error {
+func (a deviceservice) SetReport(params models.SendCommandParams) (*gjson.Json, error) {
 	var args rpcs.ArgsSendCommand
 	args.DeviceId = params.DeviceId
 	args.Cmd = string(models.Report)
-	return a.sendCommand(args)
+	err := a.sendCommand(args)
+	if err != nil {
+		return nil, err
+	}
+	return a.GetDeviceStatus(params.DeviceId)
 }
 
 // Restart 重启设备
@@ -243,11 +247,25 @@ func (a deviceservice) SetDataTrans(params models.SendCommandParams) error {
 }
 
 // GetInfo 获取网关信息
-func (a deviceservice) GetInfo(params models.SendCommandParams) error {
+func (a deviceservice) GetInfo(params models.SendCommandParams) (*gjson.Json, error) {
 	var args rpcs.ArgsSendCommand
 	args.DeviceId = params.DeviceId
 	args.Cmd = string(models.GetInfo)
-	return a.sendCommand(args)
+	err := a.sendCommand(args)
+	if err != nil {
+		return nil, err
+	}
+
+	var newArgs rpcs.ArgsGetStatus
+	newArgs.Id = params.DeviceId
+	var reply rpcs.ReplayInfo
+
+	err = server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetDeviceInfo", newArgs, &reply)
+	if err != nil {
+		server.Log.Errorf("设备状态数据获取失败:%v", err)
+		return nil, err
+	}
+	return gjson.New(reply.Info), nil
 }
 
 // ForceRun 远程控制某个模块强制运行
@@ -268,7 +286,8 @@ func (a deviceservice) SetDeviceId(params models.SendCommandParams) error {
 	args.DeviceId = params.DeviceId
 	args.Cmd = string(models.SetDeviceId)
 	args.Params = map[string]interface{}{
-		"id": params.Id,
+		"id":     params.Id,
+		"prefix": params.Prefix,
 	}
 	return a.sendCommand(args)
 }