package nvcs import ( "encoding/json" "fmt" "gat1400Exchange/pkg" "net/http" "strings" "time" "gat1400Exchange/config" "gat1400Exchange/pkg/logger" "github.com/gin-gonic/gin" ) /* A2 款 数据上报格式 { "id": "10c8a1b0051607361c", "State": { "Floor": "-1", "Floor_flag": "已校准", "JZ_flag": "已校准,", "JZ_i": 7, "Pressure": "99766", "Speed": "0.000", "Status": "停止1", "TFloor": 7, "T_acc": "0.062", "X_acc": "1.175", "Y_acc": "-1.129", "Z_acc": "8.344" } */ type a2ElevatorData struct { Id string `json:"id"` State struct { Floor string `json:"Floor"` Status string `json:"Status"` TFloor int64 `json:"TFloor"` Speed string `json:"Speed"` } `json:"State"` } type a2ElevatorConfig struct { FloorData []string `json:"floordata"` } var a2TopFloor string var a2BottomFloor string func getA2ElevatorConfig() { url := "http://192.168.10.253/cgi-bin/liftnum.cgi" payload := []byte("{\"display\":1}") header := map[string]string{ "Cookie": "eyJuYW1lIjoiYWRtaW4iLCAicGFzZCI6ImFkbWluMTIzIn0=", } rsp, err := pkg.HttpPost(url, header, payload) if err != nil { logger.Warn("Get A2 floor data failure,%s", err.Error()) return } var configData a2ElevatorConfig err = json.Unmarshal(rsp, &configData) if err != nil { logger.Warn("Unmarshal A2 floor data failure,%s", err.Error()) return } if len(configData.FloorData) > 0 { a2BottomFloor, a2TopFloor = configData.FloorData[0], configData.FloorData[len(configData.FloorData)-1] } logger.Info("A2 floor config total:%d, bottomFloor:%s, topFloor:%s", len(configData.FloorData), a2BottomFloor, a2TopFloor) } func a2WebServer() { // 先获取总楼层数, 记录最高层 //GetA2ElevatorConfig() r := gin.Default() r.POST("/", func(c *gin.Context) { var req a2ElevatorData var iRunState int err := c.BindJSON(&req) if err != nil { c.JSON(http.StatusBadRequest, nil) return } logger.Debug("Received A2 report data %+v", req) // 记录电梯运行状态 if strings.Contains(req.State.Status, "上") { iRunState = RunUp } else if strings.Contains(req.State.Status, "下") { iRunState = RunDown } var runState = ElevatorRunData{ Device: req.Id, Timestamp: time.Now().Unix(), Floor: req.State.Floor, RunState: iRunState, } queue.put(runState) c.JSON(http.StatusOK, "ok") }) err := r.Run(fmt.Sprintf(":%s", config.NVCSConf.Port)) if err != nil { logger.Warn("Start NVCS WebServer error, %s", err.Error()) } }