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.