// ConvertFieldsDown converts the fields into a payload func (h *handler) ConvertFieldsDown(ctx log.Interface, appDown *types.DownlinkMessage, ttnDown *pb_broker.DownlinkMessage) error { if appDown.PayloadFields == nil || len(appDown.PayloadFields) == 0 { return nil } if appDown.PayloadRaw != nil { return errors.NewErrInvalidArgument("Downlink", "Both Fields and Payload provided") } app, err := h.applications.Get(appDown.AppID) if err != nil { return nil } functions := &DownlinkFunctions{ Encoder: app.Encoder, Logger: functions.Ignore, } message, _, err := functions.Process(appDown.PayloadFields, appDown.FPort) if err != nil { return err } appDown.PayloadRaw = message return nil }
ctx.WithError(err).Fatal("You are providing a valid HEX payload while sending payload in JSON.") } err = json.Unmarshal([]byte(args[1]), &message.PayloadFields) if err != nil { ctx.WithError(err).Fatal("Invalid json string") return } } else { // Payload provided payload, err := types.ParseHEX(args[1], len(args[1])/2) if err != nil { ctx.WithError(err).Fatal("Invalid Payload") } message.PayloadRaw = payload } token := client.PublishDownlink(message) token.Wait() if token.Error() != nil { ctx.WithError(token.Error()).Fatal("Could not enqueue downlink") } ctx.Info("Enqueued downlink") }, } func init() { RootCmd.AddCommand(downlinkCmd) downlinkCmd.Flags().Int("fport", 1, "FPort for downlink") downlinkCmd.Flags().Bool("json", false, "Provide the payload as JSON") }