MType Proprietary

Hi All,

From LoRaWan specification 1.1 section page 17 section 4.2.1 Message type (MType bit field), MType 111b are Proprietary.
Does LoRaServer support this Message Type ?
I would like to be find a way to send data from a selected gateway to a device using proprietary format.
I guess that I can directly publish a MQTT message to this particular gateway, but the NS may be short-circuited and this may cause some isssues if the NS also needs to use this gateway to downlink message.

In UpLink scenario, I would like to know how to get proprietary 111b payload from device.



I read the source code of LoRa App Server and find this:

// HandleProprietaryUplink handles proprietary uplink payloads.
func (a *ApplicationServerAPI) HandleProprietaryUplink(ctx context.Context, req *as.HandleProprietaryUplinkRequest) (*as.HandleProprietaryUplinkResponse, error) {
	err := gwping.HandleReceivedPing(req)
	if err != nil {
		errStr := fmt.Sprintf("handle received ping error: %s", err)
		return nil, grpc.Errorf(codes.Internal, errStr)

	return &as.HandleProprietaryUplinkResponse{}, nil

It seems that the proprietary 111b payload has been defined as gateway ping

Please note that the proprietary MType messages do not implement addressing (unless you implement this yourself), so you can not depend on any LoRaWAN stack when you would like to use this to send data to a device.

What is exactly your use-case?


I will implement a proprietary MAC format to add at least addressing and some other stuffs.
I know that I will have to manage my self SF, BW, Frequency, timestamps, but that’s not a problem.
The thing I want to know is : is there an API for the NS to give all these informations (SF, BW, Frequency, timestamp/gateway ID). ?
The reason I am doing this is that neither Class A, B nor C can satisfy my requirement.


Please see:


Hi @brocaar

Thanks for this information, that’s excalty what I was looking for.
One last thing is missing for the DL message (from AS to device).
From the proto message, I’ve found the following

message SendProprietaryPayloadRequest {
// MACPayload of the proprietary LoRaWAN frame.
bytes mac_payload = 1;

// MIC of the proprietary LoRaWAN frame (must be 4 bytes).
bytes mic = 2;

// Gateway MAC address(es) to use for transmitting the LoRaWAN frame.
repeated bytes gateway_macs = 3;

// Set to true for sending as a gateway, or false for sending as a node.
// In the latter case the frame will be received by other gateways.
bool polarization_inversion = 4;

// Frequency (Hz) to use for the transmission.
uint32 frequency = 5;

// Data-rate to use for the transmission.
uint32 dr = 6;

How can I set the force the Gateway MAC address to use for transmitting the LoRaWAN frame timestamp ?

My proprietary protocol requires controlled timestamps for DL (such as in Class B).



That is not implemented. However, maybe it is easier to only use the LoRa Gateway Bridge and schedule (and receive) the payloads directly using MQTT. Then you have all TX related parameters available.



“use the LoRa Gateway Bridge” was my initial first idea, but I was afraid to use a gateway scheduled by the NS.

I will perform like this waiting for a new feature :wink: