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

欢迎加入交流群: ESP8266 AliOS Things 群 号: 107723112
系列文章目录:
SimonLiu的ESP8266与AliOS Things 学习教程系列目录

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

  1. 首先你要在智能生活平台创建产品并添加测试设备。假设产品有一个属性为PowerSwitch
  2. 根据SimonLiu的这篇博文SimonLiu的ESP8266与AliOS Things 学习教程系列之十一:AliOS Things 2.1.0之自定义项目来基于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]<I> Publish Result: 0
[626700]<I> Receive Message Type: 15
[626710]<I> 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 = "{ \"Brightness\":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}";

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值