package iot import ( "errors" "fmt" "time" "speech-nlu-parse/global" "speech-nlu-parse/pkg/util" jsoniter "github.com/json-iterator/go" "github.com/parnurzeal/gorequest" ) // TODO 在使用前,请在结构体struct中手动添加 json 注解 // 有注释的地方为json注解的固定内容,其他为默认内容 var json = jsoniter.ConfigCompatibleWithStandardLibrary var packUrl = global.InternalRemoteSetting.IOT.IotHost + global.InternalRemoteSetting.IOT.SendDevPack // 设备状态请求数据 type devStatus struct { Mac string PackStr string //packStr } // 解密后的数据格式 type decryptData struct { R int Msg string T string Mac string Cols []string Dat []interface{} } // 获取设备状态 func GetDevStatus(mac, key string, fields []string) (map[string]interface{}, error) { ec1 := struct { // TODO 此处也需要增加json注解 T string Cols []string }{ T: "status", Cols: fields, } encryptContent, err := json.Marshal(&ec1) if err != nil { return nil, err } pack, err := util.EncryptAESByECB(encryptContent, key) if err != nil { return nil, err } packStr := fmt.Sprintf("{\"t\": \"pack\", \"i\": 0, \"uid\": 0, \"cid\": \"app\", \"tcid\": \"%v\", \"pack\": \"%v\"}", mac, pack) ds := devStatus{Mac: mac, PackStr: packStr} req := gorequest.New().Timeout(3 * time.Second) _, body, errs := req.Post(packUrl).Send(ds).EndBytes() if len(errs) > 0 { global.Logger.Errorf("get device status information interface error: %v", errs) return nil, err } r := json.Get(body, "r").ToString() if r != "200" && r != "" { global.Logger.Errorf("r is no 200, mac=%v, msg=%v", mac, json.Get(body, "msg").ToString()) return nil, errors.New(json.Get(body, "msg").ToString()) } pack = json.Get(body, "pack").ToString() decryptDataByte, err := util.DecryptAESByECB(pack, key) if err != nil { return nil, err } global.Logger.Debugf("decryptData: %v", string(decryptDataByte)) var dD decryptData err = json.Unmarshal(decryptDataByte, &dD) if err != nil { return nil, err } stat := make(map[string]interface{}) for i, v := range dD.Cols { stat[v] = dD.Dat[i] } return stat, nil }