本文檔使用Packet Sender工具模擬tcp客戶端接入平臺。
創建協議
請參考創建協議
創建設備型號
- 選擇
設備管理
-->設備型號
--> 點擊新建
按鈕。
- 在操作列點擊
查看
,選擇功能定義,點擊添加
按鈕添加屬性和事件。
i. 屬性定義
ii. 事件定義 - 在操作列點擊
發佈
按鈕,發佈新增的型號。
創建設備實例
- 選擇
設備管理
-->設備實例
--> 點擊新建
按鈕。
- 在操作列點擊
激活
按鈕,激活新增的設備實例。
創建TCP服務網絡組件
- 選擇
網絡組件
-->組件管理
--> 點擊新增組件
按鈕。
注意:本文檔使用javascript自定義腳本的方式解析消息。
自定義腳本:
var BytesUtils = org.jetlinks.core.utils.BytesUtils;
parser.fixed(5) //1. 固定5字節爲報文頭,0字節爲類型,1-4字節爲消息長度(低字節位在前).
.handler(function(buffer){
var len = BytesUtils.leToInt(buffer.getBytes(),1,4);//2. 獲取消息長度.
parser
.fixed(len)//3. 設置下一個包要讀取固定長度的數據.
.result(buffer); //4. 設置當前解析的結果
})
.handler(function(buffer){
parser.result(buffer) //5. 收到了新的包,則爲消息體,設置到結果中,完成後將與步驟4的數據合併爲完整的數據包.
.complete(); //6. 完成解析(消息將進入協議中進行解析(DemoTcpMessageCodec)),重置解析器,下一個數據包將從步驟1開始解析.
});
- 在創建完成的模塊上點擊
啓動
按鈕。
創建TCP服務設備網關
- 選擇
網絡組件
-->設備網關
--> 點擊新建
按鈕。
注意:和MQTT服務設備網關不同的是,客戶端必須指定消息協議,因爲無法通過消息識別出對應的設備標識. 在消息解碼時也無法通過上下文(
MessageDecodeContext
)獲取到設備操作接口(DeviceOperator
). 此處使用演示協議v1
.
- 在操作列點擊
啓動
按鈕啓動網關。
使用tcp工具接入
- 下載並安裝Packet Sender。
注意:TCP協議以二進制的數據包傳輸數據,此處使用Packet Sender工具將發送的消息先轉成十六進制, 再通過該工具自動轉換成二進制發送到平臺。
- 生成所需的十六進制字符串。
i. 檢出協議代碼
ii. 執行測試包org.jetlinks.demo.protocol.tcp下DemoTcpMessageTest的test方法生成設備認證所需的十六進制字符串
代碼如下:
@Test
void test() {
DemoTcpMessage message = DemoTcpMessage.of(MessageType.AUTH_REQ, AuthRequest.of(1000, "admin"));
byte[] data = message.toBytes();
System.out.println(Hex.encodeHexString(data));
DemoTcpMessage decode = DemoTcpMessage.of(data);
System.out.println(decode);
Assertions.assertEquals(message.getType(), decode.getType());
Assertions.assertArrayEquals(message.getData().toBytes(), decode.getData().toBytes());
}
結果:000d000000e80300000000000061646d696e
注意:AuthRequest.of(deviceId,key) 第一個參數爲設備id,第二參數爲設備型號中配置的TCP認證配置。
iii. 在測試類中執行如下代碼生成事件上報所需的十六進制字符串:
@Test
void encodeEvent() {
DemoTcpMessage demoTcpMessage = DemoTcpMessage.of(MessageType.FIRE_ALARM,
FireAlarm.builder()
.point(ThreadLocalRandom.current().nextInt())
.lat(36.5F)
.lnt(122.3F)
.deviceId(1000)
.build());
byte[] data = demoTcpMessage.toBytes();
System.out.println(demoTcpMessage);
System.out.println(Hex.encodeHexString(data));
}
結果:0614000000e8030000000000009a99f4420000124222b7c94c
-
設置參數
i. 設置基本信息
參數 說明 Name 輸入您的自定義名稱。 ASCII ASCII碼,輸入下方十六進制字符串後會自動生成。 HEX 十六進制。 Address TCP服務地址。 Port TCP服務端口。 Persistent TCP 勾選之後可保持長連接。 注意:設置參數時,請確保參數值中或參數值的前後均沒有空格。
模式選擇TCP。
分別保存上線參數以及事件上報參數。
-
模擬設備上下線
單擊packetsender工具上Send
按鈕發起請求。
平臺中設備狀態變爲上線即爲連接成功
在設備日誌模塊可以看到設備上線日誌
勾選Persistent TCP
packetsender上請求成功後會大開一個新的已連接頁面。
關閉這個新的已連接頁面即可斷開設備與平臺的連接
平臺中設備狀態變爲離線即爲斷開連接成功
在設備日誌模塊可以看到設備離線日誌