JetLinks物聯網基礎平臺-使用TCP服務網關接入設備

 本文檔使用Packet Sender工具模擬tcp客戶端接入平臺。

創建協議

請參考創建協議

創建設備型號

  1. 選擇 設備管理-->設備型號--> 點擊新建按鈕。

設備型號新增

  1. 在操作列點擊查看,選擇功能定義,點擊添加按鈕添加屬性和事件。
    i. 屬性定義
    屬性定義
    ii. 事件定義
    事件定義
    事件定義
    事件定義
    事件定義
  2. 在操作列點擊發佈按鈕,發佈新增的型號。

設備型號發佈

創建設備實例

  1. 選擇 設備管理-->設備實例--> 點擊新建按鈕。

設備新增

  1. 在操作列點擊激活按鈕,激活新增的設備實例。

設備發佈

創建TCP服務網絡組件

  1. 選擇 網絡組件-->組件管理--> 點擊新增組件按鈕。
    insert-mqtt-client

注意:本文檔使用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開始解析.
        });
  1. 在創建完成的模塊上點擊啓動按鈕。
    mqtt-client-start

創建TCP服務設備網關

  1. 選擇 網絡組件-->設備網關--> 點擊新建按鈕。 insert-mqtt-gateway

注意:和MQTT服務設備網關不同的是,客戶端必須指定消息協議,因爲無法通過消息識別出對應的設備標識. 在消息解碼時也無法通過上下文(MessageDecodeContext)獲取到設備操作接口(DeviceOperator). 此處使用演示協議v1.

  1. 在操作列點擊啓動按鈕啓動網關。
    mqtt-gateway-start

使用tcp工具接入

  1. 下載並安裝Packet Sender

注意:TCP協議以二進制的數據包傳輸數據,此處使用Packet Sender工具將發送的消息先轉成十六進制, 再通過該工具自動轉換成二進制發送到平臺。

  1. 生成所需的十六進制字符串。
    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

  1. 設置參數

    i. 設置基本信息 tcp基本信息設置

    參數 說明
    Name 輸入您的自定義名稱。
    ASCII ASCII碼,輸入下方十六進制字符串後會自動生成。
    HEX 十六進制。
    Address TCP服務地址。
    Port TCP服務端口。
    Persistent TCP 勾選之後可保持長連接。

    注意:設置參數時,請確保參數值中或參數值的前後均沒有空格。

    模式選擇TCP。
    模式選擇

    分別保存上線參數以及事件上報參數。
    參數1
    參數2

  2. 模擬設備上下線

單擊packetsender工具上Send按鈕發起請求。
online-send

平臺中設備狀態變爲上線即爲連接成功

設備上線

在設備日誌模塊可以看到設備上線日誌

設備上線日誌

勾選Persistent TCPpacketsender上請求成功後會大開一個新的已連接頁面。

persistent-tcp

關閉這個新的已連接頁面即可斷開設備與平臺的連接

disconnect-persistent-tcp

平臺中設備狀態變爲離線即爲斷開連接成功

設備離線

在設備日誌模塊可以看到設備離線日誌

設備離線日誌

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章