欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-04 09:59:23
...

设备上报数据

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

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

详谈

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

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

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

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

#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)--设备上报数据

相关标签: Iot