當(dāng)前位置:全球資源網(wǎng) > 技術(shù)中心 > 所有分類
目錄
星縱物聯(lián)LoRaWAN®網(wǎng)關(guān)內(nèi)置網(wǎng)絡(luò)服務(wù)器Network Server,支持通過(guò)MQTT / HTTP(S)轉(zhuǎn)發(fā)傳感器數(shù)據(jù)到第三方服務(wù)器。為提高上報(bào)內(nèi)容的可讀性,可使用網(wǎng)關(guān)自帶的解析上報(bào)內(nèi)容。本文主要描述如何在網(wǎng)關(guān)上使用載荷編。
登錄網(wǎng)關(guān)配置界面,進(jìn)入“Network Server > 載荷編” 界面,可對(duì)編進(jìn)行配置與管理。
星縱物聯(lián)LoRaWAN®網(wǎng)關(guān)程序內(nèi)置載荷編解碼庫(kù),為所有星縱物聯(lián)終端節(jié)點(diǎn)設(shè)備提供編解碼示例。內(nèi)置載荷編解碼庫(kù)支持兩種獲取方式:
若需要對(duì)第三方終端節(jié)點(diǎn)設(shè)備進(jìn)行編解碼,可點(diǎn)擊自定義編解碼函數(shù)。
然后在解碼函數(shù)功能框?qū)懭虢K端節(jié)點(diǎn)設(shè)備對(duì)應(yīng)的解碼函數(shù),點(diǎn)擊保存。
當(dāng)您在網(wǎng)關(guān)“Network Server > 設(shè)備” 界面添加終端節(jié)點(diǎn)設(shè)備時(shí),可在載荷編位置選擇所需的編解碼。
如下以EM300-TH設(shè)備為例,列舉三種數(shù)據(jù)轉(zhuǎn)發(fā)的情景供參考。
注意:
保存配置后,在網(wǎng)關(guān)“Network Server > 數(shù)據(jù)流” 界面,點(diǎn)擊上報(bào)數(shù)據(jù)流詳情信息,可以看到解碼后的JSON數(shù)據(jù)。
網(wǎng)關(guān)收到EM300-TH數(shù)據(jù)后將會(huì)轉(zhuǎn)發(fā)如下數(shù)據(jù)
{
"temperature": 30.8,
"humidity": 50.5,
}
星縱物聯(lián)LoRaWAN®網(wǎng)關(guān)支持通過(guò)LoRaObject語(yǔ)句,在原始轉(zhuǎn)發(fā)內(nèi)容上篩選需要的字段。假如需要轉(zhuǎn)發(fā)DevEUI,RSSI,SNR等屬性包及原始數(shù)據(jù)至服務(wù)器,可以在解碼函數(shù)功能框輸入如下內(nèi)容:
function Decode(fPort, bytes) {
var decoded = {};
decoded.devEUI = LoRaObject.devEUI;
decoded.rssi = LoRaObject.rxInfo[0].rssi;
decoded.snr = LoRaObject.rxInfo[0].loRaSNR;
decoded.data = LoRaObject.data;
return decoded;
}
將會(huì)收到如下格式數(shù)據(jù)
{
"devEUI":24e1611234567890
"rssi": -5,
"snr": 11,
"data": AXVkA2cgAQRoeg==
}
若想要轉(zhuǎn)發(fā)解析數(shù)據(jù)并附帶設(shè)備DevEUI信息到第三方服務(wù)器,可將EM300-TH復(fù)制粘貼到解碼函數(shù)功能框中,并添加LoRaObject內(nèi)容。
注意:當(dāng)需要在解析數(shù)據(jù)中添加所有信息,可使用decoded.obj= LoRaObject;來(lái)實(shí)現(xiàn)。點(diǎn)擊獲取所有屬性包。
function Decode(fPort, bytes) {
var decoded = {};
//Data decoder
for (var i = 0; i < bytes.length;) {
var channel_id = bytes[i++];
var channel_type = bytes[i++];
//BATTERY
if (channel_id === 0x01 && channel_type === 0x75) {
decoded.battery = bytes[i];
i += 1;
}
//TEMPERATURE
else if (channel_id === 0x03 && channel_type === 0x67) {
decoded.temperature = readInt16LE(bytes.slice(i, i + 2)) / 10;
i += 2;
}
//HUMIDITY
else if (channel_id === 0x04 && channel_type === 0x68) {
decoded.humidity = bytes[i] / 2;
i += 1;
} else {
break;
}
}
decoded.devEUI = LoRaObject.devEUI;
return decoded;
}
/* ******************************************
* bytes to number
********************************************/
function readUInt16LE(bytes) {
var value = (bytes[1] << 8) + bytes[0];
return value & 0xffff;
}
function readInt16LE(bytes){
var ref = readUInt16LE(bytes);
return ref > 0x7fff ? ref - 0x10000 : ref;
}
將轉(zhuǎn)發(fā)如下數(shù)據(jù)
{
"battery": 92,
"temperature": 30.8,
"humidity": 50.5,
"devEUI":24e1611234567890
}