Пример #1
0
// 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
}
Пример #2
0
				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")
}