iot(3)--设备上报数据

设备上报数据

在 rt-thread 提供的 aliot-kit 的软件包中,有提供例程,使能例程并且进行了正确的配置后,设备就可以成功上云

如果有更加复杂的需求,比如获取设备端的数据,就需要进一步的开发了

详谈

首先将目光放到软件包提供的例程中,可以看到例程主要的工作都是在 mqtt_client 这个函数中完成的

mqtt_client 中,首先是初始化 MQTT 链接相关的参数,比如超时时间、发送接收缓存大小等等;初始化 MQTT 后,就是通过 IOT_MQTT_Subscribe 订阅服务器端的 topic ,下面列出我的设备的 topic 列表

iot(3)--设备上报数据_第1张图片

在程序中具体的订阅的代码如下

#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);

运行完这段程序就可以在云端查看到设备上传数据了,下图是使用虚拟设备推送的数据

iot(3)--设备上报数据_第2张图片

你可能感兴趣的:(Iot)