遠程配置
阿里云物聯(lián)網(wǎng)平臺提供的遠程配置功能,支持將指定產(chǎn)品的設備配置文件上傳到物聯(lián)網(wǎng)平臺,設備上線后將配置文件下載到設備進行解析與處理。本文介紹通過配置C Link SDK,幫助設備實現(xiàn)遠程配置功能。
前提條件
背景信息
遠程配置功能是從產(chǎn)品維度修改設備配置,即從物聯(lián)網(wǎng)平臺上傳的配置文件對所有設備生效,不可指定對單個設備生效。更多信息,請參見遠程配置。
使用流程
遠程配置功能是從產(chǎn)品維度修改設備配置,即從物聯(lián)網(wǎng)平臺上傳的配置文件對所有設備生效,不可指定對單個設備生效。
如下功能時序圖,以設備的應用程序demos/remote_config_basic_demo.c
為例,介紹遠程配置的使用流程。
步驟一:設備初始化
創(chuàng)建設備句柄,完成設備建連。
static void* demo_device_init(char *product_key, char *device_name, char *device_secret, char *host, uint16_t port) { int32_t res = STATE_SUCCESS; /* 創(chuàng)建設備 */ void *device = aiot_device_create(product_key, device_name); .... .... res = aiot_device_connect(device); .... .... return device; }
設置遠程配置回調(diào)函數(shù)。
/* 設置遠程配置回調(diào)函數(shù) */ aiot_device_rc_set_callback(device, demo_rc_callback, &config_task);
參數(shù)說明
參數(shù)
說明
device
設備句柄。
demo_rc_callback
遠程配置模塊的回調(diào)函數(shù)。
&config_task
回調(diào)的上下文。
步驟二:獲取遠程配置請求
發(fā)送獲取遠程配置請求。
/* 主動請求遠程配置文件 */ aiot_device_rc_request(device);
云端有回復,會調(diào)用以下回調(diào)
demo_rc_callback
。/* 遠程配置回調(diào)處理 */ 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); /* 正在執(zhí)行配置任務的話,直接退出 */ if(task->url != NULL) { return; } .... }
步驟三:云端推送遠程配置
發(fā)起遠程配置推送。
您需在物聯(lián)網(wǎng)平臺控制臺,開啟遠程配置,編輯配置信息。具體操作,請參見場景一:物聯(lián)網(wǎng)平臺推送配置信息給設備端。
設備端接收處理。
在物聯(lián)網(wǎng)平臺控制臺中,開啟遠程配置,編輯配置信息。具體操作,請參見場景二:設備主動請求配置信息。
步驟四:下載遠程配置文件
創(chuàng)建文件下載線程。
文件下載的過程可能比較久,回調(diào)函數(shù)中不能長時間阻塞,所以創(chuàng)建新的線程下載文件。
/* 遠程配置回調(diào)處理 */ 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狀態(tài),用于自動資源回收 */ 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
參數(shù)說明參數(shù)
說明
task->url
需要下載文件的URL。
params
下載的參數(shù)配置。
task->filename
需要保存的文件名。
save_file
寫文件的回調(diào)函數(shù)。
NULL
回調(diào)函數(shù)的上下文。
步驟五:設備端完成配置
文件下載完成后,請您在自己設備端完成相關配置。
步驟六:設備反初始化
/* 斷開設備連接,并回收設備資源 */
demo_device_deinit(device);