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

IoT Platform:デバイスジョブ

最終更新日:Mar 22, 2025

IoT Platform は、プロダクト、デバイス、またはグループ別にセグメント化された複数のデバイスにわたるタスクの開始を可能にするデバイスジョブ機能を提供します。このトピックでは、カスタムタスクを受信し、デバイスジョブを実行し、タスクステータスを更新するように Android Link SDK を構成する手順の概要を説明します。

前提条件

背景情報

ステップ 1:タスク管理の初期化

LinkKit.getInstance().getTask().TaskBootsUp();

ステップ 2:デバイスが IoT Platform からプッシュされたデバイスジョブ通知を受信する

IoT Platform は、/sys/{productKey}/{deviceName}/thing/job/notify というトピックを介してタスク通知をデバイスにプッシュします。

IoT Platform からのタスク通知をキャプチャするには、次のリスナーを設定します。構成の詳細については、「認証と接続」をご参照ください。

IConnectNotifyListener notifyListener = new IConnectNotifyListener() {
    @Override
    public void onNotify(String connectId, String topic, AMessage aMessage) {
        // IoT Platform からのダウンストリームデータのコールバック。
        // connectId パラメーターは接続タイプを指定し、topic パラメーターは IoT Platform からのダウンストリームトピックを指定し、aMessage パラメーターは IoT Platform からのダウンストリームデータを指定します。
        // データを解析する pushData という名前の関数を定義します。
        //String pushData = new String((byte[]) aMessage.data);
        // pushData の例:  {"method":"thing.service.test_service","id":"123374967","params":{"vv":60},"version":"1.0.0"}
        // method パラメーターはサービスタイプを指定し、params パラメーターはプッシュするデータの内容を指定します。    
   }
    @Override
    public boolean shouldHandle(String connectId, String topic) {
        // IoT Platform からのトピックのダウンストリームデータを処理するかどうかを指定します。
        // トピックが処理されない場合、onNotify リスナーは IoT Platform からのトピックのダウンストリームデータを受信できません。
        return true; // ビジネスシナリオに基づいて値を指定します。
    }
    @Override
    public void onConnectStateChange(String connectId, ConnectState connectState) {
        // 対応する接続タイプの接続状態変更のコールバック。接続状態については、SDK の ConnectState の説明を参照してください。
        // ネットワークの状態が悪いなどの理由で SDK がデバイスと IoT Platform の接続を切断した場合、SDK は 2 の n 乗秒(n は 0 ~ 7 の整数)の間隔でデバイスと IoT Platform の再接続を自動的に試行します。最大間隔は 128 秒です。間隔が 128 秒に達すると、SDK はデバイスが接続されるまで 128 秒の間隔でデバイスと IoT Platform の再接続を試行します。
    }
}
// 持続的接続のステータスや IoT Platform からのダウンストリームデータなど、ダウンストリームデータをリッスンするリスナーを登録します。
LinkKit.getInstance().registerOnPushListener(notifyListener);
// ダウンストリームデータをリッスンするリスナーの登録を解除します。登録解除するリスナーが、登録したリスナーと同じであることを確認してください。
// LinkKit.getInstance().unRegisterOnPushListener(notifyListener);
            
説明

デフォルトでは、onNotify コールバック関数は UI スレッドでダウンストリームデータを送信するために呼び出されます。lp-iot-linkkit V1.7.3 以降では、PersistentConnect.mNotifyReceivedMsgOnMainThread パラメーターを false に設定して、UI スレッド以外のスレッドでダウンストリームデータを送信できます。ダウンストリームメッセージが頻繁に送信される場合、または UI スレッドが過負荷になっている場合は、PersistentConnect.mNotifyReceivedMsgOnMainThread パラメーターを false に設定することをお勧めします。

ステップ 3:デバイスがタスクを取得する

次のタスクを取得する

LinkKit.getInstance().getTask().TaskGetNext(mConnectSendListener);

// デバイスからクラウドに送信されたリクエストのコールバック関数。送信が成功したかどうかを判断します。
IConnectSendListener mConnectSendListener = new IConnectSendListener() {
        @Override
        public void onResponse(ARequest aRequest, AResponse aResponse) {
            AppLog.d(TAG, "onResponse() called with: aRequest = [" + aRequest + "], aResponse = [" + (aResponse == null ? null : aResponse.data) + "]");
        }

        @Override
        public void onFailure(ARequest aRequest, AError aError) {
            AppLog.d(TAG, "onFailure() called with: aRequest = [" + aRequest + "], aError = [" + aError + "]");
        }
    };

タスクリストを取得する

LinkKit.getInstance().getTask().TaskGetList(IConnectSendListener mConnectSendListener);

指定されたタスクの詳細を取得する

LinkKit.getInstance().getTask().TaskGetDetail(String taskId, IConnectSendListener  mConnectSendListener);

ステップ 4:デバイスがタスクステータスを更新する

タスクをローカルで実行した後、ユーザーはタスクの実行ステータス(成功、失敗、放棄など)と進捗率を IoT Platform クラウドに更新できます。

ITask.TaskDesc taskDesc = new ITask.TaskDesc();
taskDesc.setTaskId(taskId);  // 必須
taskDesc.setProgress(50);    // 進捗率、オプション
taskDesc.setStatus(ITask.TASK_STATUS.IN_PROGRESS);  // 必須、タスクステータス
LinkKit.getInstance().getTask().TaskUpdateProgress(taskDesc);