全部產品
Search
文件中心

:使用樣本

更新時間:Jun 30, 2024

本文以C Link SDK中的demos/mqtt_rrpc_demo.c為例,介紹如何調用Link SDK的API,展示裝置的RRPC功能。

背景資訊

  • RRPC功能的更多資訊,請參見概述

  • RRPC功能基於MQTT接入,開發過程中涉及MQTT接入的代碼說明,請參見MQTT接入

配置流程

  1. 初始化。

    詳細內容,請參見MQTT接入的初始化

  2. 配置功能。

    詳細內容,請參見MQTT接入的配置功能。

  3. 請求串連。

    詳細內容,請參見MQTT接入的請求串連。

  4. 接收RRPC訊息。

    1. 裝置與物聯網平台建立串連後,您可以調用物聯網平台雲端API RRpc,通過以下類型的Topic,向裝置發送RRPC指令。

    2. 裝置端調用aiot_mqtt_recv,接收到資訊。RRPC的訊息觸發回呼函數,裝置執行對應處理。

      本文範例程式碼中,回呼函數為demo_mqtt_default_recv_handler

    3. 定義RRPC訊息的回呼函數,編寫處理邏輯。

      重要

      接收同步服務訊息後,請在8秒內做出應答。否則,即使裝置端已收到訊息,也視其失敗。

      您可以參考以下內容,編寫回呼函數的處理邏輯:

      • 通過收到訊息的Topic格式,辨別訊息是否為RRPC訊息。

        • 如果使用RRPC通訊相關Topic,無需訂閱Topic。

          其格式為:/sys/${YourProductKey}/${YourDeviceName}/rrpc/request/${messageId}。更多資訊,請參見調用RRPC通訊相關Topic

        • 如果使用自訂Topic,發送RRPC前,您需訂閱該Topic。訂閱Topic的具體操作,請參見MQTT接入的訂閱Topic

          通過該Topic發送訊息後,訊息經由RRPC請求的Topic,發送至裝置。RRPC請求的Topic格式為:/ext/rrpc/${messageId}/${topic}。更多資訊,請參見調用自訂Topic(推薦)

      • 回呼函數的處理邏輯建議:裝置接收RRPC訊息後,根據業務需要,執行訊息指令,然後向物聯網平台發回應答報文。

      • 範例程式碼中回呼函數的處理邏輯:列印了RRPC訊息,並同步向物聯網平台返回了一條payload的值為pong的應答訊息。

      void demo_mqtt_default_recv_handler(void *handle, const aiot_mqtt_recv_t *packet, void *userdata)
      {
          switch (packet->type) {
              ……
              ……
              case 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. 中斷連線。

    詳細內容,請參見MQTT的中斷連線

  6. 退出程式。

    詳細內容,請參見MQTT的退出程式

後續步驟

  • 常式檔案配置完成後,需進行編譯,產生可執行檔./output/mqtt-rrpc-demo

    更多資訊,請參見編譯與運行

  • 關於運行結果的詳細說明,請參見作業記錄