1、概念
窄帶物聯網(Narrow Band Internet of Things, NB-IoT),NB-IoT構建于蜂窩網路,只消耗大約180KHz的帶寬,使用License頻段,可采取帶內、保護帶或獨立載波等三種部署方式,與現有網路共存,可直接部署于GSM網路、UMTS網路或LTE網路,以降低部署成本、實作平滑升級,
2、NBIOT的特點和目標
(1)超強覆寫:相對GPRS來說,增加20db的信號增益,
(2)超低功耗:對于終端功耗的目標是:基于AA(5000mAh)電池,使用壽命可超過10年,
(3)超大連接:一個扇區能夠支持數萬個連接,支持低延時敏感度、超低的設備成本、低設備功耗和優化的網路架構,
(4)超低成本:NB-IoT無需重新建網,射頻和天線基本上都是復用的,
二、NB-IoT要點概括
1、為解決傳統2G/3G/4G(GPRS)網路不能滿足物聯網終端設備低功耗、低成本的問題;
2、對比GPRS,減少了一些信令,尋呼周期加長,增加PSM狀態,降低功耗(用實時性換取續航);
3、終端資料通過運營商基站接入核心網,匯入運營商的物聯網專網,經IoT平臺與用戶的平臺進行資料互動
三、NB-IoT的作業狀態:
NB-IoT在默認狀態下,存在三種作業狀態,三種狀態會根據不同的配置引數進行切換,筆者認為這三種狀態較深刻地影響了NB-IoT的特性,如其對比傳統GPRS的低功耗特性,均可以從中獲得解釋,同時在后續對NB-IoT的使用和相關程式的設計時,也需要根據開發的需求與產品特性對這三種作業狀態進行合適的定制,
四.測驗天翼云nb-iot通過mq方式獲取資料引入依賴
<dependency>
<groupId>com.ctiot.aep</groupId>
<artifactId>mq-msgpush-sdk</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
五.資料采集,通過mq,base轉base64
package com.ctiot.aep.mq.msgpush.demo;
import java.util.Base64;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;
import com.ctiot.aep.mqmsgpush.sdk.IMsgConsumer;
import com.ctiot.aep.mqmsgpush.sdk.IMsgListener;
import com.ctiot.aep.mqmsgpush.sdk.MqMsgConsumer;
/**
* Aep MQ訊息推送接收Demo
*/
public class Demo {
public static void main(String[] args) {
String server = "nb-iot地址"; //訊息服務地址
String tenantId = "";//租戶ID
String token = "";//身份認證token串
String certFilePath = ""; //直接填空字串,CA證書,JDK已經內置相關根證書,無需指定
//創建訊息接收Listener
IMsgListener msgListener = new IMsgListener() {
@Override
public void onMessage(String msg) {
Map<String, Object> payloadMap = JSONObject.parseObject(msg);
if (payloadMap.containsKey("payload")) {
Map<String, Object> varMap1 = JSONObject.parseObject(payloadMap.get("payload").toString());
String appData = varMap1.get("APPdata").toString();
analysisRadar(appData);
}
//為了提高效率,建議對訊息進行異步處理(使用其它執行緒、發送到Kafka等)
}
};
//創建訊息接收類
IMsgConsumer consumer = new MqMsgConsumer();
try {
//初始化
/**
* @param server 訊息服務server地址
* @param tenantId 租戶Id
* @param token 用戶認證token
* @param certFilePath 證書檔案路徑
* @param topicNames 主題名串列,如果該串列為慷訓null,則自動消費該租戶所有主題訊息
* @param msgListener 訊息接收者
* @return 是否初始化成功
*/
consumer.init(server, tenantId, token, certFilePath, null, msgListener);
//開始接收訊息
consumer.start();
//程式退出時,停止接收、銷毀
//consumer.stop();
//consumer.destroy();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("exit");
}
public static void analysisRadar(String radarData) {
byte[] decoded = Base64.getDecoder().decode(radarData);
String sixteenBaseSystemData = toHex(decoded);
String[] sixteenBaseSystemDataDivision = sixteenBaseSystemData.split("7c");
System.out.println("---------------雷達原資料" + sixteenBaseSystemDataDivision[1]);
//決議雷達
System.out.println("---------------雷達實際資料" + Integer.parseInt(sixteenBaseSystemDataDivision[1].replace("3", "")));
}
private static final char[] DIGITS
= {'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
public static final String toHex(byte[] data) {
final StringBuffer sb = new StringBuffer(data.length * 2);
for (int i = 0; i < data.length; i++) {
sb.append(DIGITS[(data[i] >>> 4) & 0x0F]);
sb.append(DIGITS[data[i] & 0x0F]);
}
return sb.toString();
}
}
六:我這邊獲取了一個測驗的雷達資料的,通過base轉換后,再通過分隔符截取到雷達資料
base64原資料:
{"upPacketSN":-1,"upDataSN":-1,"topic":"v1/up/ad","timestamp":1639617553508,"tenantId":"2000030821","serviceId":"","protocol":"lwm2m","productId":"15038227","payload":{"APPdata":"AAAAAAAAAAAAfDAwMDB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAHwAAAAAAAAAAAAAfAHHfAB8AAAAAHwAAA=="},"messageType":"dataReport","deviceType":"","deviceId":"e920a1b8499e446bbcd4a99f7b2847fb","assocAssetId":"","IMSI":"undefined","IMEI":"862177042290711"}
拿到具體的設備資料Appdata里面的:
AAAAAAAAAAAAfDAwMDB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAHwAAAAAAAAAAAAAfAHHfAB8AAAAAHwAAA==
16進制:
類似:
ff86000000050000757c303030307c00000000000000000000007c000000000000000000007c000000000000000000007c01f37c007c000000007c0000
獲取到真實雷達資料:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/382962.html
標籤:其他
