iot(3)--設備上報數據

設備上報數據

在 rt-thread 提供的 aliot-kit 的軟件包中,有提供例程,使能例程並且進行了正確的配置後,設備就可以成功上雲

如果有更加複雜的需求,比如獲取設備端的數據,就需要進一步的開發了

詳談

首先將目光放到軟件包提供的例程中,可以看到例程主要的工作都是在 mqtt_client 這個函數中完成的

mqtt_client 中,首先是初始化 MQTT 鏈接相關的參數,比如超時時間、發送接收緩存大小等等;初始化 MQTT 後,就是通過 IOT_MQTT_Subscribe 訂閱服務器端的 topic ,下面列出我的設備的 topic 列表

在這裏插入圖片描述

在程序中具體的訂閱的代碼如下

#define ALINK_SERVICE_SET_SUB            "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/thing/service/property/set"
...
IOT_MQTT_Subscribe(pclient, ALINK_SERVICE_SET_SUB, IOTX_MQTT_QOS1, _demo_message_arrive, NULL);

訂閱成功之後就可以進行數據的上傳了,數據的上傳需要通過 IOT_MQTT_Publish 這個接口完成,將需要上傳的數據放到 msg_pub 中,比如我這裏需要上傳 LockState CurrentHumidity CurrentTemperature 三個數據,具體實現如下

#define ALINK_PROPERTY_POST_PUB          "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/thing/event/property/post"

/* Initialize topic information */
memset(msg_pub, 0x0, sizeof(msg_pub));

snprintf(msg_pub, sizeof(msg_pub), 
        "{\"id\" : \"%d\",\"version\":\"1.0\",\"params\" : "
        "{\"LockState\" : %d,"
        "\"CurrentHumidity\":\"%d\%\%\"," /* double \% just show one */
        "\"CurrentTemperature\":\"%d\℃\"},"
        "\"method\":\"thing.event.property.post\"}",
        (++pub_msg_cnt)%10000, lock_status, humi, temp);

memset(&topic_msg, 0x0, sizeof(iotx_mqtt_topic_info_t));
topic_msg.qos = IOTX_MQTT_QOS1;
topic_msg.retain = 0;
topic_msg.dup = 0;
topic_msg.payload = (void *)msg_pub;
topic_msg.payload_len = strlen(msg_pub);

IOT_MQTT_Publish(pclient, ALINK_PROPERTY_POST_PUB, &topic_msg);

運行完這段程序就可以在雲端查看到設備上傳數據了,下圖是使用虛擬設備推送的數據

在這裏插入圖片描述

發佈了70 篇原創文章 · 獲贊 101 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章