使用示例
本文以C Link SDK中的demos/mqtt_rrpc_demo.c為例,介紹如何調(diào)用Link SDK的API,展示設(shè)備的RRPC功能。
背景信息
配置流程
初始化。
詳細(xì)內(nèi)容,請(qǐng)參見MQTT接入的初始化。
配置功能。
詳細(xì)內(nèi)容,請(qǐng)參見MQTT接入的配置功能。
請(qǐng)求連接。
詳細(xì)內(nèi)容,請(qǐng)參見MQTT接入的請(qǐng)求連接。
接收RRPC消息。
設(shè)備與物聯(lián)網(wǎng)平臺(tái)建立連接后,您可以調(diào)用物聯(lián)網(wǎng)平臺(tái)云端API RRpc,通過以下類型的Topic,向設(shè)備發(fā)送RRPC指令。
設(shè)備端調(diào)用aiot_mqtt_recv,接收到信息。RRPC的消息觸發(fā)回調(diào)函數(shù),設(shè)備執(zhí)行對(duì)應(yīng)處理。
本文示例代碼中,回調(diào)函數(shù)為
demo_mqtt_default_recv_handler
。定義RRPC消息的回調(diào)函數(shù),編寫處理邏輯。
重要接收同步服務(wù)消息后,請(qǐng)?jiān)?秒內(nèi)做出應(yīng)答。否則,即使設(shè)備端已收到消息,也視其失敗。
您可以參考以下內(nèi)容,編寫回調(diào)函數(shù)的處理邏輯:
通過收到消息的Topic格式,辨別消息是否為RRPC消息。
如果使用RRPC通信相關(guān)Topic,無需訂閱Topic。
其格式為:
/sys/${YourProductKey}/${YourDeviceName}/rrpc/request/${messageId}
。更多信息,請(qǐng)參見調(diào)用RRPC通信相關(guān)Topic。如果使用自定義Topic,發(fā)送RRPC前,您需訂閱該Topic。訂閱Topic的具體操作,請(qǐng)參見MQTT接入的訂閱Topic。
通過該Topic發(fā)送消息后,消息經(jīng)由RRPC請(qǐng)求的Topic,發(fā)送至設(shè)備。RRPC請(qǐng)求的Topic格式為:
/ext/rrpc/${messageId}/${topic}
。更多信息,請(qǐng)參見調(diào)用自定義Topic(推薦)。
回調(diào)函數(shù)的處理邏輯建議:設(shè)備接收RRPC消息后,根據(jù)業(yè)務(wù)需要,執(zhí)行消息指令,然后向物聯(lián)網(wǎng)平臺(tái)發(fā)回應(yīng)答報(bào)文。
示例代碼中回調(diào)函數(shù)的處理邏輯:打印了RRPC消息,并同步向物聯(lián)網(wǎng)平臺(tái)返回了一條payload的值為
pong
的應(yīng)答消息。
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: 處理服務(wù)器下發(fā)的業(yè)務(wù)報(bào)文。 */ /* 下面是一個(gè)RRPC的應(yīng)答示例 */ { 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: { } } }
斷開連接。
詳細(xì)內(nèi)容,請(qǐng)參見MQTT的斷開連接。
退出程序。
詳細(xì)內(nèi)容,請(qǐng)參見MQTT的退出程序。
后續(xù)步驟
例程文件配置完成后,需進(jìn)行編譯,生成可執(zhí)行文件./output/mqtt-rrpc-demo。
更多信息,請(qǐng)參見編譯與運(yùn)行。
關(guān)于運(yùn)行結(jié)果的詳細(xì)說明,請(qǐng)參見運(yùn)行日志。