設備上報數據
在 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);
運行完這段程序就可以在雲端查看到設備上傳數據了,下圖是使用虛擬設備推送的數據