全部产品
云市场

远程配置

更新时间:2019-03-15 17:20:17

服务端可以向设备端主动下推远程配置信息, 设备端也可以向服务端主动查询远程配置信息,设备离线期间服务端如果发布过远程配置信息, 设备端可以通过后者这种方式来获取到更改后的配置信息。

更多COTA相关功能说明可查看远程配置

服务端向设备端主动下推远程配置信息

在与阿里云物联网平台建立连接之前,注册对事件ITE_COTA的处理函数,当云端修改配置之后,SDK将会调用用户注册的处理函数,处理函数需要使用IOT_Linkkit_Query来请求COTA数据。

1. 定义COTA事件回调函数及获取配置数据

下面是回调函数的示例代码,其中使用了IOT_Linkkit_Query来请求COTA数据:

  1. static int user_cota_event_handler(int type, const char *config_id, int config_size, const char *get_type,
  2. const char *sign, const char *sign_method, const char *url)
  3. {
  4. char buffer[128] = {0};
  5. int buffer_length = 128;
  6. user_example_ctx_t *user_example_ctx = user_example_get_ctx();
  7.  
  8. if (type == 0) {
  9. EXAMPLE_TRACE("New Config ID: %s", config_id);
  10. EXAMPLE_TRACE("New Config Size: %d", config_size);
  11. EXAMPLE_TRACE("New Config Type: %s", get_type);
  12. EXAMPLE_TRACE("New Config Sign: %s", sign);
  13. EXAMPLE_TRACE("New Config Sign Method: %s", sign_method);
  14. EXAMPLE_TRACE("New Config URL: %s", url);
  15.  
  16. IOT_Linkkit_Query(user_example_ctx->master_devid, ITM_MSG_QUERY_COTA_DATA, (unsigned char *)buffer, buffer_length);
  17. }
  18.  
  19. return 0;
  20. }

2. 注册COTA事件回调函数

下面是示例代码:

  1. int main(int argc, char **argv)
  2. {
  3. char buffer[128] = {0};
  4. int buffer_length = 128;
  5.  
  6. ...
  7.  
  8. IOT_RegisterCallback(ITE_COTA, user_cota_event_handler);
  9.  
  10. ...
  11.  
  12. memset(&master_meta_info, 0, sizeof(iotx_linkkit_dev_meta_info_t));
  13. memcpy(master_meta_info.product_key, PRODUCT_KEY, strlen(PRODUCT_KEY));
  14. memcpy(master_meta_info.product_secret, PRODUCT_SECRET, strlen(PRODUCT_SECRET));
  15. memcpy(master_meta_info.device_name, DEVICE_NAME, strlen(DEVICE_NAME));
  16. memcpy(master_meta_info.device_secret, DEVICE_SECRET, strlen(DEVICE_SECRET));
  17.  
  18. ...
  19.  
  20. res = IOT_Linkkit_Connect(user_example_ctx->master_devid);
  21. if (res < 0) {
  22. EXAMPLE_TRACE("IOT_Linkkit_Connect Failed\n");
  23. return -1;
  24. }
  25.  
  26. ...
  27. }

设备端向服务端主动查询远程配置信息

对于设备端主动请求COTA的情况,用户仍然需要注册COTA事件的回调函数(相关代码见上面的描述)。当设备连接到阿里云物联网平台后,调用IOT_Linkkit_Query来请求云端下发COTA数据。

下面是示例代码:

  1. int main(int argc, char **argv)
  2. {
  3.  
  4. ...
  5.  
  6. user_example_ctx->master_devid = IOT_Linkkit_Open(IOTX_LINKKIT_DEV_TYPE_MASTER, &master_meta_info);
  7. if (user_example_ctx->master_devid < 0) {
  8. EXAMPLE_TRACE("IOT_Linkkit_Open Failed\n");
  9. return -1;
  10. }
  11. res = IOT_Linkkit_Connect(user_example_ctx->master_devid);
  12. if (res < 0) {
  13. EXAMPLE_TRACE("IOT_Linkkit_Connect Failed\n");
  14. return -1;
  15. }
  16.  
  17. /*告知云端推送COTA数据*/
  18. IOT_Linkkit_Query(user_example_ctx->master_devid, ITM_MSG_REQUEST_COTA, NULL, 0);
  19.  
  20. ...
  21. }

远程配置功能API

函数名 说明
IOT_Linkkit_Open 创建本地资源, 在进行网络报文交互之前, 必须先调用此接口, 得到一个会话的句柄
IOT_Linkkit_Connect 对主设备/网关来说, 将会建立设备与云端的通信. 对于子设备来说, 将向云端注册该子设备(若需要), 并添加主子设备拓扑关系
IOT_Linkkit_Yield 若SDK占有独立线程, 该函数只将接收到的网络报文分发到用户的回调函数中, 否则表示将CPU交给SDK让其接收网络报文并将消息分发到用户的回调函数中
IOT_Linkkit_Close 若入参中的会话句柄为主设备/网关, 则关闭网络连接并释放SDK为该会话所占用的所有资源
IOT_Linkkit_Query 向云端发送存在云端业务数据下发的查询报文, 包括OTA状态查询/OTA固件下载/子设备拓扑查询/NTP时间查询等各种报文

需要实现的HAL