func GetDeviceCurrentStatus(device *models.Device, config *productconfig.ProductConfig, urlparams martini.Params, r render.Render) { server.Log.Printf("ACTION GetDeviceCurrentStatus, identifier:: %v", device.DeviceIdentifier) statusargs := rpcs.ArgsGetStatus{ Id: uint64(device.ID), } statusreply := rpcs.ReplyGetStatus{} err := server.RPCCallByName("controller", "Controller.GetStatus", statusargs, &statusreply) if err != nil { server.Log.Errorf("get devie status error: %v", err) r.JSON(http.StatusOK, renderError(ErrSystemFault, err)) return } status, err := config.StatusToMap(statusreply.Status) if err != nil { r.JSON(http.StatusOK, renderError(ErrWrongRequestFormat, err)) return } result := DeviceStatusResponse{ Data: status, } r.JSON(http.StatusOK, result) return }
func SendCommandToDevice(device *models.Device, config *productconfig.ProductConfig, urlparams martini.Params, req *http.Request, r render.Render) { timeout := req.URL.Query().Get("timeout") server.Log.Printf("ACTION SendCommandToDevice, identifier:: %v, request: %v, timeout: %v", device.DeviceIdentifier, req.Body, timeout) var args interface{} decoder := json.NewDecoder(req.Body) err := decoder.Decode(&args) if err != nil { r.JSON(http.StatusOK, renderError(ErrWrongRequestFormat, err)) return } m, ok := args.(map[string]interface{}) if !ok { r.JSON(http.StatusOK, renderError(ErrWrongRequestFormat, err)) return } command, err := config.MapToCommand(m) if err != nil { r.JSON(http.StatusOK, renderError(ErrWrongRequestFormat, err)) return } cmdargs := rpcs.ArgsSendCommand{ DeviceId: uint64(device.ID), SubDevice: uint16(command.Head.SubDeviceid), No: uint16(command.Head.No), WaitTime: uint32(defaultTimeOut), Params: command.Params, } cmdreply := rpcs.ReplySendCommand{} err = server.RPCCallByName("controller", "Controller.SendCommand", cmdargs, &cmdreply) if err != nil { server.Log.Errorf("send devie command error: %v", err) r.JSON(http.StatusOK, renderError(ErrSystemFault, err)) return } r.JSON(http.StatusOK, Common{}) return }
func SetDeviceStatus(device *models.Device, config *productconfig.ProductConfig, urlparams martini.Params, req *http.Request, r render.Render) { server.Log.Printf("ACTION GetDeviceCurrentStatus, identifier:: %v,request: %v", device.DeviceIdentifier, req.Body) var args interface{} decoder := json.NewDecoder(req.Body) err := decoder.Decode(&args) if err != nil { r.JSON(http.StatusOK, renderError(ErrWrongRequestFormat, err)) return } m, ok := args.(map[string]interface{}) if !ok { r.JSON(http.StatusOK, renderError(ErrWrongRequestFormat, err)) return } status, err := config.MapToStatus(m) if err != nil { r.JSON(http.StatusOK, renderError(ErrWrongRequestFormat, err)) return } statusargs := rpcs.ArgsSetStatus{ DeviceId: uint64(device.ID), Status: status, } statusreply := rpcs.ReplySetStatus{} err = server.RPCCallByName("controller", "Controller.SetStatus", statusargs, &statusreply) if err != nil { server.Log.Errorf("set devie status error: %v", err) r.JSON(http.StatusOK, renderError(ErrSystemFault, err)) return } r.JSON(http.StatusOK, Common{}) return }