すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:データ圧縮

最終更新日:Mar 22, 2025

IoT Platform のデータ圧縮機能を使用すると、IoT Platform とデバイス間で圧縮データを送信できます。送信するメッセージを圧縮して、デバイストラフィックを削減し、送信速度を向上させることができます。このトピックでは、データ圧縮機能の使用方法について説明します。

前提条件

制限事項

データ圧縮機能は、排他的 Enterprise Edition インスタンス標準 Enterprise Edition インスタンスでのみ使用できます。詳細については、「Enterprise Edition インスタンスを購入する」をご参照ください。

背景情報

多くの IoT デバイスはセルラーネットワークを使用しており、トラフィックコストが高くなります。データ圧縮機能を使用して、送信するデータを圧縮することで、トラフィックとコストを削減できます。

データの圧縮および送信方法の詳細については、「データ圧縮」をご参照ください。

直接接続デバイス

圧縮および展開のトピックを指定する

次のサンプルコードでは、以下のとおりです。

  • compTopicList: サーバーがデバイスにメッセージを配信するために使用するトピックを指定します。サーバーはデータを圧縮し、デバイスはデータを展開します。

  • decompTopicList: デバイスがサーバーにメッセージを送信するために使用するトピックを指定します。デバイスはデータを圧縮し、サーバーはデータを展開します。hit data compression case デバッグログはデバイス上に生成されます。

重要
  • 設定された圧縮および展開のリレーションシップはサーバーに保存されます。トピックの圧縮および展開操作をキャンセルするには、デバイス SDK で圧縮および展開をキャンセルする必要があります。

    サーバーで圧縮および展開操作が無効になっていない状態で、デバイスがデータ圧縮をサポートしていない SDK を使用して IoT Platform に接続すると、サーバーとデバイス間の通信に問題が発生する可能性があります。

  • compTopicList パラメーターに /sys/${productKey}/${deviceName}/thing/dsltemplate/get_reply トピックを指定することはできません。指定すると、デバイス SDK が初期化に失敗する可能性があります。

  • データの圧縮および展開にワイルドカード文字を含むトピックを指定することはできません。

// サーバーがデータを圧縮し、デバイスがデータを展開するときに使用されるトピックを指定します。
String compTopic =  "/" + deviceInfoData.productKey + "/" + deviceInfoData.deviceName + "/user/get";
List<String> compTopicList = new ArrayList<>();
compTopicList.add(compTopic);

// デバイスがデータを圧縮し、サーバーがデータを展開するときに使用されるトピックを指定します。
String decompTopic = "/sys/" + deviceInfoData.productKey + "/" + deviceInfoData.deviceName + "/thing/event/property/post";
List<String> decompTopicList = new ArrayList<>();
decompTopicList.add(decompTopic);

ICompressor compressor = LinkKit.getInstance().getCompressor();
compressor.setCompressTopics(compTopicList, decompTopicList, new IConnectSendListener() {
    @Override
    public void onResponse(ARequest aRequest, AResponse aResponse) {

        // プロパティのレポートなど、カスタムビジネスロジックを設定します。
    }

    @Override
    public void onFailure(ARequest aRequest, AError aError) {

    }
});
重要

setCompressTopics メソッドでは、以下のとおりです。

  • 最初のパラメーターは、サーバーがデータを圧縮し、デバイスがデータを展開するときに使用されるトピックを指定します。値は null にすることができます。

  • 2 番目のパラメーターは、デバイスがデータを圧縮し、サーバーがデータを圧縮するときに使用されるトピックを指定します。値は null にすることができます。

圧縮と展開を無効にする

ICompressor compressor = LinkKit.getInstance().getCompressor();
compressor.setCompressTopics(null, null, new IConnectSendListener() {
    @Override
    public void onResponse(ARequest aRequest, AResponse aResponse) {

        //TODO: 独自のロジック
    }

    @Override
    public void onFailure(ARequest aRequest, AError aError) {

    }
});

ゲートウェイとサブデバイス

圧縮および展開のトピックを指定する

次のサンプルコードでは、以下のとおりです。

  • compTopicList: サーバーがデバイスにメッセージを配信するために使用するトピックを指定します。サーバーはデータを圧縮し、デバイスはデータを展開します。

  • decompTopicList: デバイスがサーバーにメッセージを送信するために使用するトピックを指定します。デバイスはデータを圧縮し、サーバーはデータを展開します。hit data compression case デバッグログはデバイス上に生成されます。

重要
  • 設定された圧縮および展開のリレーションシップはサーバーに保存されます。トピックの圧縮および展開操作をキャンセルするには、デバイス SDK で圧縮および展開をキャンセルする必要があります。

    サーバーで圧縮および展開操作が無効になっていない状態で、デバイスがデータ圧縮をサポートしていない SDK を使用して IoT Platform に接続すると、サーバーとデバイス間の通信に問題が発生する可能性があります。

  • データの圧縮および展開にワイルドカード文字を含むトピックを指定することはできません。

  • ゲートウェイとそのサブデバイスは、同時に圧縮と展開を実装することはできません。

// サブデバイスが IoT Platform に接続した後にのみデータを圧縮します。
final DeviceInfo info = new DeviceInfo(); 
// info パラメーターを、IoT Platform に接続されているサブデバイスの説明に設定します。
// info = userSubDev.get(index);

// サーバーがデータを圧縮し、デバイスがデータを展開するときに使用されるトピックを指定します。
String compTopic =  "/" + info.productKey + "/" + info.deviceName + "/user/get";
List<String> compTopicList = new ArrayList<>();
compTopicList.add(compTopic);

// デバイスがデータを圧縮し、サーバーがデータを展開するときに使用されるトピックを指定します。
String decompTopic = "/sys/" + info.productKey + "/" + info.deviceName + "/thing/event/property/post";
List<String> decompTopicList = new ArrayList<>();
decompTopicList.add(decompTopic);
String detopic2 = "/" + info.productKey + "/" + info.deviceName + "/user/update";
decompTopicList.add(detopic2);

LinkKit.getInstance().getGateway().gatewaySubDeviceSetCompressTopics(info, compTopicList, decompTopicList, new ISubDeviceActionListener() {
    @Override
    public void onSuccess() {
        // サブデバイスが IoT Platform に送信するメッセージ (デバイスプロパティなど) を指定します。
    }

    @Override
    public void onFailed(AError aError) {

    }
});

圧縮と展開を無効にする

LinkKit.getInstance().getGateway().gatewaySubDeviceSetCompressTopics(info, null, null, new ISubDeviceActionListener() {
    @Override
    public void onSuccess() {
        // サブデバイスが IoT Platform に送信するメッセージ (デバイスプロパティなど) を指定します。
    }

    @Override
    public void onFailed(AError aError) {

    }
});