Definire un pacchetto di protocollo Semtech UDP: è una buona idea usare il protobuf di google

0

Nel tentativo di creare un simulatore di nodi LoraWan utilizzando node.js: link

Ma ho difficoltà a definire un pacchetto in modo simile al protocollo UDP semtech: link

Lo faccio con la seguente funzione:

const constructSemtechLoRaDataPayload=function(loraPacket,gatewayIdentifier){

  //Random Token
  const randomToken=crypto.randomBytes(2);

  //Allocating Bytes for address
  gatewayIdentifier=new Buffer(gatewayIdentifier,'hex');

  //Semtech JSON Payload
  const date = new Date();
  const packet=loraPacket.getPHYPayload();

  let retPacket= {
    "stat":{
      "time":date.toISOString(),
      "lati":0.0,
      "long":0.0,
      "alti":0,
      "rxnb":0,
      "rxok":0,
      "rxfw":0,
      "ackr":0.0,
      "dwnb":0,
      "txnb":0,
      "pfrm":"Single Channel Gateway",
      "mail":"",
      "desc":""
    },
    'rxpk':[{
        "time":date.toISOString(),
        "tmst":date.getTime(),
        "chan":2,
        "rfch":0,
        "freq":866.349812,
        "stat":1,
        "modu":"LORA",
        "datr":"SF7BW125",
        "codr":"4/6",
        "rssi":-35,
        "lsnr":5.1,
        "size": packet.length,
        "data": packet.toString('base64')
    }]
  };

   retPacket=new Buffer(JSON.stringify(retPacket),'utf8');

   //Putting all together
   const finalPacket=Buffer.concat([new Buffer('0x02','hex'),randomToken,new Buffer('0x00','hex'),gatewayIdentifier,retPacket]);
   return finalPacket;
}

Nel tentativo di creare un pacchetto come definito nel protocollo Semtech UDP:

Bytes  | Function
:------:|---------------------------------------------------------------------
 0      | protocol version = 2
 1-2    | random token
 3      | PUSH_DATA identifier 0x00
 4-11   | Gateway unique identifier (MAC address)
 12-end | JSON object, starting with {, ending with }, see section 4

Ma mentre stavo facendo un altro lavoro mi sono imbattuto in protobuf e specialmente in questo file: link

Anche se la tecnologia protcol non è correlata, la compro come una definizione di pacchetto, ad esempio la sezione:

message WhisperMessage {
  optional bytes  ephemeralKey    = 1;
  optional uint32 counter         = 2;
  optional uint32 previousCounter = 3;
  optional bytes  ciphertext      = 4; // PushMessageContent
}

Quindi posso definire i campi del protocold e la lunghezza di ogni campo per un blob binario. Quindi è una buona idea usare protobuf o dovrei eseguire il debug e ripensare un modo per generare il blob richiesto con un pezzo di codice "personalizzato"?

La mia preoccupazione principale è che il pacchetto non verrà costruito in modo tale da definire il protocollo udp Semtech.

    
posta Dimitrios Desyllas 16.05.2018 - 21:22
fonte

0 risposte

Leggi altre domande sui tag