SimonLiu的ESP8266与AliOS Things 学习教程系列之十五:AliOS Things 2.1.0 linkkitapp 之属性设置请求处理和属性上报

欢迎加入交流群:ESP8266 AliOS Things 群 号: 107723112
所有教程请看 AliOS Things 入门教程系列
此教程在SimonLiu的CSDN博客同步更新。

AliOS Things 2.1.0 的linkkitapp和旧版本相比有了很大的改变,linkkitapp是最重要的一个例程,所有实际联网的产品基本都是基于linkkitapp。现在你就跟随SimonLiu一起来看一下linkkitapp如何进行属性设置请求处理和属性上报。

  1. 首先你要在智能生活平台创建产品并添加测试设备。假设产品有一个属性为PowerSwitch
  2. 根据SimonLiu的ESP8266与AliOS Things 学习教程系列之十一来基于linkkit app新建自己的一个项目。
  3. 修改linkkit_example_solo.c源码。
    3.1 修改设备的三元组。
    3.2 源码中注册了如下回调:
    /* Register Callback */
    IOT_RegisterCallback(ITE_CONNECT_SUCC, user_connected_event_handler);
    IOT_RegisterCallback(ITE_DISCONNECTED, user_disconnected_event_handler);
    IOT_RegisterCallback(ITE_RAWDATA_ARRIVED, user_down_raw_data_arrived_event_handler);
    IOT_RegisterCallback(ITE_SERVICE_REQUST, user_service_request_event_handler);
    IOT_RegisterCallback(ITE_PROPERTY_SET, user_property_set_event_handler);
    IOT_RegisterCallback(ITE_PROPERTY_GET, user_property_get_event_handler);
    IOT_RegisterCallback(ITE_REPORT_REPLY, user_report_reply_event_handler);
    IOT_RegisterCallback(ITE_TRIGGER_EVENT_REPLY, user_trigger_event_reply_event_handler);
    IOT_RegisterCallback(ITE_TIMESTAMP_REPLY, user_timestamp_reply_event_handler);
    IOT_RegisterCallback(ITE_INITIALIZE_COMPLETED, user_initialized);
    IOT_RegisterCallback(ITE_FOTA, user_fota_event_handler);
    IOT_RegisterCallback(ITE_COTA, user_cota_event_handler);

3.3 属性设置请求在user_property_set_event_handler()中,默认代码是把下发到属性设置请求原样上报:

static int user_property_set_event_handler(const int devid, const char *request, const int request_len)
{
    int res = 0;
    user_example_ctx_t *user_example_ctx = user_example_get_ctx();
    EXAMPLE_TRACE("Property Set Received, Devid: %d, Request: %s", devid, request);

    res = IOT_Linkkit_Report(user_example_ctx->master_devid, ITM_MSG_POST_PROPERTY,
                             (unsigned char *)request, request_len);
    EXAMPLE_TRACE("Post Property Message ID: %d", res);

    return 0;
}

3.4 我们跑一跑代码,然后从网页调试或者云智能进行PowerSwitch的属性改变,就可以看到PowerSwitch属性设置请求如下:

␛[0m[626700] Publish Result: 0
[626700] Receive Message Type: 15
[626710] Receive Message: {"devid":0,"payload":{"PowerSwitch":0}}
␛[1;32;40muser_property_set_event_handler.183: Property Set Received, Devid: 0, Request: {"PowerSwitch":0}␛[0m

收到的内容就是{"PowerSwitch":0}

3.5 我们只需要解析{"PowerSwitch":0}即可:

    cJSON *root = NULL, *item_PowerSwitch = NULL;
    root = cJSON_Parse(request);
    item_PowerSwitch = cJSON_GetObjectItem(root, "PowerSwitch");
        if (item_PowerSwitch != NULL)
        {
            if(item_PowerSwitch->valueint)
            {
                printf("\r\n Turn on power \r\n"); 
            }
            else
            {
                printf("\r\n Turn off power \r\n"); 
            }
        }

3.6 属性上报在user_post_property(void)中,里面给出了正确和错误的案例。简单版本:

    static int example_index = 0;
   int res = 0;
   user_example_ctx_t *user_example_ctx = user_example_get_ctx();
   char *event_id = "Error";
   char *event_payload = "NULL";
  property_payload = "{\"LightSwitch\":0}";
 /* 属性payload准备好以后, 使用如下接口进行上报 */
IOT_Linkkit_Report(devid, ITM_MSG_POST_PROPERTY, payload, strlen(payload));

3.7 不同类型的属性上报:

/* 整型数据 */
c har *paylo ad = "{ \"Br i ght ne ss\":50} ";
/* 浮点型数据上报 */
char *payload = "{\"Temperature\":11.11}";
/* 枚举型数据上报 */
char *payload = "{\"WorkMode\":2}";
/* 布尔型数据上报, 在物模型定义中, 布尔型为整型, 取值为0或1, 与JSON格式的整型不同 */
char *payload = "{\"LightSwitch\":1}";
/* 字符串数据上报 */
char *payload = "{\"Description\":\"Amazing Example\"}";
/* 时间型数据上报, 在物模型定义中, 时间型为字符串 */
char *payload = "{\"Timestamp\":\"1252512000\"}";
/* 复合类型属性上报, 在物模型定义中, 符合类型属性为JSON对象 */
c har *paylo ad = "{\"RGBColor:{\"Red\":11,\"Green\":22,\"Blue\":33} \"}";
/* 多属性上报, 如果需要上报以上各种数据类型的所有属性, 将它们放在一个JSON对象中即可 */
char *payload = "{\"Brightness\":50,\"Temperature\":11.11,\"WorkMode\":2,\"LightSwitch\":1};

属性的设置和上报我们就都完成了。其实并不复杂。

你可能感兴趣的:(SimonLiu的ESP8266与AliOS Things 学习教程系列之十五:AliOS Things 2.1.0 linkkitapp 之属性设置请求处理和属性上报)