天天看點

阿裡雲物聯網消息透傳裝置端payLoad設定問題

概述

由于低配置且資源受限,或者對網絡流量有要求的裝置,不适合直接構造JSON資料與物聯網平台通信,可将原資料透傳到物聯網平台。本文主要針對文檔中未對裝置端payLoad的設定進行介紹,初次使用容易出錯,結合官方示例對payLoad對象的處理進行介紹。

測試步驟

1、參考

官方示例

進行設定測試。

2、實體型的定義截圖;

阿裡雲物聯網消息透傳裝置端payLoad設定問題

3、測試驗證

0x00002233441232013fa00000           
阿裡雲物聯網消息透傳裝置端payLoad設定問題

4、發送端payLoad處理,注意傳入的是byte[]對象,不是String對象。

String hexString = "00002233441232013fa00000";
byte[] payLoad = hexToByteArray(hexString);
request.payloadObj = payLoad;           
  • hexToByteArray方法實作:
/**
     * hex字元串轉byte數組
     * @param inHex 待轉換的Hex字元串
     * @return  轉換後的byte數組結果
     */
    public static byte[] hexToByteArray(String inHex){
        int hexlen = inHex.length();
        byte[] result;
        if (hexlen % 2 == 1){
            //奇數
            hexlen++;
            result = new byte[(hexlen/2)];
            inHex="0"+inHex;
        }else {
            //偶數
            result = new byte[(hexlen/2)];
        }
        int j=0;
        for (int i = 0; i < hexlen; i+=2){
            result[j]=hexToByte(inHex.substring(i,i+2));
            j++;
        }
        return result;
    }

    /**
     * Hex字元串轉byte
     * @param inHex 待轉換的Hex字元串
     * @return  轉換後的byte
     */
    public static byte hexToByte(String inHex) {
        return (byte) Integer.parseInt(inHex, 16);
    }           

5、裝置運作狀态:

阿裡雲物聯網消息透傳裝置端payLoad設定問題

參考連結

資料解析使用示例 Java 十六進制(Hex)與byte數組之間的轉換