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

IoT Platform:例:

最終更新日:Apr 09, 2025

このトピックでは、Link SDK for CのAPI操作を呼び出して、デバイスのrevert-RPC (RRPC) 機能を実装する方法について説明します。 この例では、demos/mqtt_rrpc_demo.cという名前のサンプルコードファイルが使用されています。

背景情報

  • RRPC機能の詳細については、「概要」をご参照ください。

  • RRPC機能は、MQTT (Message Queuing Telemetry Transport) を介してIoT Platformに接続されているデバイスでのみ使用できます。 機能を設定するためのMQTT接続関連コードの詳細については、「概要」をご参照ください。

手順

  1. クライアントを初期化します。

    詳細については、「手順1: クライアントの初期化」をご参照ください。

  2. 必要な機能を設定します。

    詳細については、「手順2: 機能の設定」をご参照ください。

  3. 接続を確立します。

    詳細については、「手順3: 接続の確立」をご参照ください。

  4. RRPCメッセージを受信する。

    1. デバイスがIoT Platformに接続された後、IoT PlatformのRRpc操作を呼び出して、RRPCコマンドをデバイスに送信できます。 次のトピックを使用できます。

    2. デバイスは、RRPCメッセージを受信するためにaiot_mqtt_recv関数を呼び出す。 次に、RRPCメッセージを処理するためにコールバック関数が呼び出される。

      この例では、demo_mqtt_default_recv_handlerという名前のコールバック関数が使用されます。

    3. RRPCメッセージを処理するコールバック関数を定義します。

      重要

      デバイスがリクエストを受信したら、8秒以内にレスポンスを送信する必要があります。 それ以外の場合、IoT Platformは、デバイスがリクエストを受信したかどうかに関係なく、呼び出しが失敗したと判断します。

      コールバックの処理ロジックを指定する場合は、次の項目に注意してください。

      • トピック形式に基づいて、メッセージがRRPCメッセージであるかどうかを確認します。

        • RRPC固有のトピックを使用する場合、デバイスはトピックをサブスクライブする必要はありません。

          トピック形式: /sys/${YourProductKey}/${YourDeviceName}/rrpc/request/${messageId} 詳細については、「RRPC固有のトピックの使用」をご参照ください。

        • カスタムトピックを使用する場合、デバイスはトピックをサブスクライブする必要があります。 トピックをサブスクライブする方法の詳細については、「手順6: トピックをサブスクライブする」をご参照ください。

          カスタムトピックを使用してメッセージを送信すると、対応するRRPC-requestトピックを使用してメッセージがデバイスに送信されます。 RRPCリクエストトピックの形式: /ext/rrpc/${messageId}/${topic} 詳細については、「カスタムトピックの使用 (推奨) 」をご参照ください。

      • コールバックの処理ロジックを指定する: デバイスがRRPCメッセージを受信すると、デバイスはコマンドを処理してIoT Platformに応答を送信します。

      • この例では、RRPCメッセージが印刷され、payloadパラメーターがpongに設定されている応答がIoT Platformに返されます。

      void demo_mqtt_default_recv_handler(void * handle, const aiot_mqtt_recv_t * packet, void * userdata)
      {
          switch (packet->type) {
              ……
              ……
              ケースAIOT_MQTTRECV_PUB: {
                  printf("pub, qos: % d, topic: %.* s\n", packet->data.pub.qos, packet->data.pub.topic_len, packet->data.pub.topic);
                  printf("pub, payload: %.* s\n", packet->data.pub.payload_len, packet->data.pub.payload);
      
                  /* TODO: サーバーによって送信されるビジネスメッセージを処理するためのロジックを定義します。 */  */
                  /* 次のサンプルコードは、RRPCレスポンスのサンプルを示しています。 */        
                  {
                      char * payload = "pong";
                      char resp_topic[256];
                      if(packet->data.pub.topic_len > 256) {
                          break;
                      }
      
                      memset(resp_topic, 0, sizeof(resp_topic));
                      memcpy(resp_topic、packet->data.pub.topic、packet->data.pub.topic_len);
      
                      aiot_mqtt_pub(handle, resp_topic, (uint8_t *)payload, (uint32_t)strlen(payload), 0);
                  } 
              }
              break;
      
              ……
              ……       
      
              default: {
      
              }
          }
      }
  5. 接続を閉じます。

    詳細については、「手順8: IoT Platformからデバイスを切断する」をご参照ください。

  6. プログラムを終了します。

    詳細については、「ステップ9: プログラムを終了する」をご参照ください。

次のステップ

  • サンプルコードファイルを設定したら、ファイルをコンパイルして実行可能ファイルを生成します。 この例では、。/output/mqtt-rrpc-demo実行ファイルが生成されます。

    詳細については、「環境の準備」をご参照ください。

  • 実行結果の詳細については、「ログの表示」をご参照ください。