全部产品
Search
文档中心

阿里云物联网平台:使用示例

更新时间:Jul 07, 2023

本文以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

    更多信息,请参见编译与运行

  • 关于运行结果的详细说明,请参见运行日志