阿里云物联网平台提供的远程配置功能,支持将指定产品的设备配置文件上传到物联网平台,设备上线后将配置文件下载到设备进行解析与处理。本文介绍通过配置C Link SDK,帮助设备实现远程配置功能。
前提条件
背景信息
远程配置功能是从产品维度修改设备配置,即从物联网平台上传的配置文件对所有设备生效,不可指定对单个设备生效。更多信息,请参见远程配置。
使用流程
远程配置功能是从产品维度修改设备配置,即从物联网平台上传的配置文件对所有设备生效,不可指定对单个设备生效。
如下功能时序图,以设备的应用程序demos/remote_config_basic_demo.c
为例,介绍远程配置的使用流程。
步骤一:设备初始化
创建设备句柄,完成设备建连。
static void* demo_device_init(char *product_key, char *device_name, char *device_secret, char *host, uint16_t port) { int32_t res = STATE_SUCCESS; /* 创建设备 */ void *device = aiot_device_create(product_key, device_name); .... .... res = aiot_device_connect(device); .... .... return device; }
设置远程配置回调函数。
/* 设置远程配置回调函数 */ aiot_device_rc_set_callback(device, demo_rc_callback, &config_task);
参数说明
参数
说明
device
设备句柄。
demo_rc_callback
远程配置模块的回调函数。
&config_task
回调的上下文。
步骤二:获取远程配置请求
发送获取远程配置请求。
/* 主动请求远程配置文件 */ aiot_device_rc_request(device);
云端有回复,会调用以下回调
demo_rc_callback
。/* 远程配置回调处理 */ static void demo_rc_callback(void *device, const aiot_rc_msg_t *rc_msg, void *userdata) { demo_config_task_t *task = (demo_config_task_t *)userdata; int32_t res = STATE_SUCCESS; pthread_t config_process_thread; if(device == NULL || rc_msg == NULL) { return; } printf("file size %d, url :%s\r\n", rc_msg->config_size, rc_msg->url); /* 正在执行配置任务的话,直接退出 */ if(task->url != NULL) { return; } .... }
步骤三:云端推送远程配置
发起远程配置推送。
您需在物联网平台控制台,开启远程配置,编辑配置信息。具体操作,请参见场景一:物联网平台推送配置信息给设备端。
设备端接收处理。
在物联网平台控制台中,开启远程配置,编辑配置信息。具体操作,请参见场景二:设备主动请求配置信息。
步骤四:下载远程配置文件
创建文件下载线程。
文件下载的过程可能比较久,回调函数中不能长时间阻塞,所以创建新的线程下载文件。
/* 远程配置回调处理 */ static void demo_rc_callback(void *device, const aiot_rc_msg_t *rc_msg, void *userdata) { demo_config_task_t *task = (demo_config_task_t *)userdata; .... .... res = pthread_create(&config_process_thread, NULL, demo_remote_config_process_thread, task); if (res < 0) { free(task->url); free(task->sign); printf("pthread_create demo_rc_callback failed: %d\n", res); return; } else { /* 设置线程为detach状态,用于自动资源回收 */ pthread_detach(config_process_thread); } }
下载远程配置文件。
/* 下载远程配置文件,并更新设置 */ static void *demo_remote_config_process_thread(void *args) { demo_config_task_t *task = (demo_config_task_t *)args; int32_t res = STATE_SUCCESS; http_download_params_t params = HTTP_DOWNLOAD_PARAMS_DEFAULT(); /* 下载文件 */ res = core_http_download_request(task->url, params, task->filename, save_file, NULL); if(res != STATE_SUCCESS) { printf("core_http_download_request failed\r\n"); return NULL; } printf("remote config file %s download success\r\n", task->filename); /* 资源回收退出 */ free(task->url); free(task->sign); return NULL; }
core_http_download_request
参数说明参数
说明
task->url
需要下载文件的URL。
params
下载的参数配置。
task->filename
需要保存的文件名。
save_file
写文件的回调函数。
NULL
回调函数的上下文。
步骤五:设备端完成配置
文件下载完成后,请您在自己设备端完成相关配置。
步骤六:设备反初始化
/* 断开设备连接,并回收设备资源 */
demo_device_deinit(device);
文档内容是否对您有帮助?