|
@@ -0,0 +1,212 @@
|
|
|
+package xphapi
|
|
|
+
|
|
|
+import (
|
|
|
+ "bytes"
|
|
|
+ "encoding/json"
|
|
|
+ "errors"
|
|
|
+ "fmt"
|
|
|
+ "io/ioutil"
|
|
|
+ "net/http"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+type Xph struct {
|
|
|
+ baseUrl string
|
|
|
+ back map[int][]Entity
|
|
|
+}
|
|
|
+
|
|
|
+func NewXphObject(baseUrl string) *Xph {
|
|
|
+ return &Xph{
|
|
|
+ baseUrl: baseUrl,
|
|
|
+ back: make(map[int][]Entity),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// NewGetToken 获取token
|
|
|
+func (x *Xph) GetToken(username, password string) string {
|
|
|
+ // 超时时间:5秒
|
|
|
+ client := &http.Client{Timeout: 5 * time.Second}
|
|
|
+ loginParam := map[string]string{"username": username, "password": password}
|
|
|
+ jsonStr, _ := json.Marshal(loginParam)
|
|
|
+ resp, err := client.Post(x.baseUrl+"/login", "application/json", bytes.NewBuffer(jsonStr))
|
|
|
+ if err != nil {
|
|
|
+ fmt.Print(err)
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+
|
|
|
+ result, _ := ioutil.ReadAll(resp.Body)
|
|
|
+ var token Token
|
|
|
+ _ = json.Unmarshal(result, &token)
|
|
|
+ return token.Token
|
|
|
+}
|
|
|
+
|
|
|
+// NewGetDevices 获取设备ID
|
|
|
+func (x *Xph) GetDevices(username, token string) []Device {
|
|
|
+ client := &http.Client{Timeout: 5 * time.Second}
|
|
|
+ req, err := http.NewRequest("GET", x.baseUrl+"/user/"+username, nil)
|
|
|
+ if err != nil {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ req.Header.Set("token", token)
|
|
|
+ resp, err := client.Do(req)
|
|
|
+ if err != nil {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ body, _ := ioutil.ReadAll(resp.Body)
|
|
|
+ var user User
|
|
|
+ _ = json.Unmarshal(body, &user)
|
|
|
+ return user.Devices
|
|
|
+}
|
|
|
+
|
|
|
+// NewGetDevices 获取设备ID, 包括虫情
|
|
|
+func (x *Xph) GetAllDevices(username, token string) []CommonDevice {
|
|
|
+ client := &http.Client{Timeout: 5 * time.Second}
|
|
|
+ req, err := http.NewRequest("GET", x.baseUrl+"/user/"+username, nil)
|
|
|
+ if err != nil {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ req.Header.Set("token", token)
|
|
|
+ resp, err := client.Do(req)
|
|
|
+ if err != nil {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ body, _ := ioutil.ReadAll(resp.Body)
|
|
|
+ var user User
|
|
|
+ _ = json.Unmarshal(body, &user)
|
|
|
+
|
|
|
+ var devs []CommonDevice
|
|
|
+ devs = append(devs, user.Pests...)
|
|
|
+ for _, device := range user.Devices {
|
|
|
+ dev := CommonDevice{
|
|
|
+ DeviceID: strconv.Itoa(device.DeviceID),
|
|
|
+ DeviceName: device.DeviceName,
|
|
|
+ DeviceRemark: device.DeviceRemark,
|
|
|
+ SIM: device.SIM,
|
|
|
+ }
|
|
|
+ devs = append(devs, dev)
|
|
|
+ }
|
|
|
+ return devs
|
|
|
+}
|
|
|
+
|
|
|
+func ProcessAbnormalData(entities []Entity, back []Entity) {
|
|
|
+ for index, entity := range entities {
|
|
|
+ value := strings.Split(entity.EValue, ".")
|
|
|
+ v := strings.Join(value, "")
|
|
|
+ if v == "32767" {
|
|
|
+ entities[index] = back[index]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ copy(back, entities)
|
|
|
+}
|
|
|
+func (x *Xph) GetDeviceRealData(facId int) (DataEntity, error) {
|
|
|
+ var dataEntity DataEntity
|
|
|
+ resp, err := http.Get(x.baseUrl + "/intfa/queryData/" + strconv.Itoa(facId))
|
|
|
+ if err != nil {
|
|
|
+ return dataEntity, errors.New("获取实时数据异常:" + err.Error())
|
|
|
+ }
|
|
|
+ result, err := ioutil.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ return dataEntity, errors.New("读取响应 body异常:" + err.Error())
|
|
|
+ }
|
|
|
+ err = json.Unmarshal(result, &dataEntity)
|
|
|
+ if err != nil {
|
|
|
+ return dataEntity, errors.New("解析响应 body异常:" + err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(x.back[facId]) == 0 {
|
|
|
+ x.back[facId] = make([]Entity, 32)
|
|
|
+ copy(x.back[facId], dataEntity.Entity)
|
|
|
+ }
|
|
|
+ ProcessAbnormalData(dataEntity.Entity, x.back[facId])
|
|
|
+
|
|
|
+ return dataEntity, err
|
|
|
+}
|
|
|
+func (x *Xph) GetDeviceRealState(facId int) (CurrentData, error) {
|
|
|
+ var data CurrentData
|
|
|
+
|
|
|
+ resp, err := http.Get(x.baseUrl + "/data/" + strconv.Itoa(facId))
|
|
|
+ if err != nil {
|
|
|
+ return data, errors.New("获取实时数据异常:" + err.Error())
|
|
|
+ }
|
|
|
+ result, err := ioutil.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ return data, errors.New("读取响应 body异常:" + err.Error())
|
|
|
+ }
|
|
|
+ err = json.Unmarshal(result, &data)
|
|
|
+ if err != nil {
|
|
|
+ return data, errors.New("解析响应 body异常:" + err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ return data, err
|
|
|
+}
|
|
|
+
|
|
|
+func (x *Xph) PostControlRelay(id, index, state int, token string) (bool, error) {
|
|
|
+ client := &http.Client{Timeout: 30 * time.Second}
|
|
|
+ relayParam := map[string]int{"deviceId": id, "relayNum": index, "relayState": state}
|
|
|
+ jsonStr, _ := json.Marshal(relayParam)
|
|
|
+ req, err := http.NewRequest("POST", x.baseUrl+"/relay", bytes.NewBuffer(jsonStr))
|
|
|
+ if err != nil {
|
|
|
+ return false, err
|
|
|
+ }
|
|
|
+ req.Header.Set("token", token)
|
|
|
+ req.Header.Set("Content-Type", "application/json")
|
|
|
+ resp, err := client.Do(req)
|
|
|
+ if err != nil {
|
|
|
+ return false, err
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ body, _ := ioutil.ReadAll(resp.Body)
|
|
|
+
|
|
|
+ return string(body) == "true", nil
|
|
|
+}
|
|
|
+
|
|
|
+func (x *Xph) GetDeviceData(id, token string) (data DeviceData, err error) {
|
|
|
+ client := &http.Client{Timeout: 5 * time.Second}
|
|
|
+ req, err := http.NewRequest("GET", x.baseUrl+"/screen/datas?deviceId="+id, nil)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ req.Header.Set("token", token)
|
|
|
+ req.Header.Set("content-type", "application/x-www-form-urlencoded")
|
|
|
+ resp, err := client.Do(req)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ body, _ := ioutil.ReadAll(resp.Body)
|
|
|
+ err = json.Unmarshal(body, &data)
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+type PestImageRespond struct {
|
|
|
+ DataTime string `json:"dataTime"`
|
|
|
+ Image string `json:"image"`
|
|
|
+ Imei string `json:"imei"`
|
|
|
+ Result string `json:"result"`
|
|
|
+ ResultImage string `json:"resultImage"`
|
|
|
+}
|
|
|
+
|
|
|
+func (x *Xph) GetPestImage(id, token string) (image PestImageRespond, err error) {
|
|
|
+ client := &http.Client{Timeout: 5 * time.Second}
|
|
|
+ req, err := http.NewRequest("GET", x.baseUrl+"/pest/image/"+id, nil)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ req.Header.Set("token", token)
|
|
|
+ req.Header.Set("content-type", "application/x-www-form-urlencoded")
|
|
|
+ resp, err := client.Do(req)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ body, _ := ioutil.ReadAll(resp.Body)
|
|
|
+ err = json.Unmarshal(body, &image)
|
|
|
+
|
|
|
+ return
|
|
|
+}
|