本地定时相对云端定时而言,是指当设备离线时,也能自动执行定时任务。本文提供了一个插座本地定时功能的开发示例,您可以根据本文实现任意设备的本地定时功能。
一、配置控制台参数
二、开发设备端的本地定时功能
开发定时功能。
在控制台上定义DeviceTimer的功能属性后,设备端可以接收从云端下来的property set消息,从而获取定时任务的具体信息。详细开发步骤如下。
说明新版本设备端SDK默认打开DeviceTimer的宏开关,老版本设备端SDK需自行打开DeviceTimer的宏开关。
获取V1.3.0生活物联网平台SDK。更多操作,请参见获取SDK。
智能插座实例代码,位于Products/example/smart_outlet/smart_outlet_main.c
定时功能的开关配置代码,位于Products/example/smart_outlet/smart_outlet.mk
基于设备端SDK开发定时功能。
确认以下宏开关为打开状态。
GLOBAL_CFLAGS += -DENABLE_LOCALTIMER //老版本本地定时的宏,默认为关闭状态
更改build.sh中的默认变量参数(如下所示,更多介绍请参见README.md)。
产品类型:default_type="example" 应用名称:default_app="smart_outlet" 模组型号:default_board="uno-91h" //根据实际型号配置 连云区域:default_region=MAINLAND //连接国外为SINGAPORE 连云环境:default_env=ONLINE Debug log:default_debug=1 //0:release 1:debug 其他参数:default_args="" //可配置其他编译参数
执行
./build.sh
编译生成固件。编译成功后,即可获得烧录所需的固件。
烧录固件。
各模组的烧录方式略有差异,请向模组厂商获取详细烧录方法。
调试设备。
设备收到定时任务的属性时,在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(); cJSON *root = NULL, *item = NULL; LOG_TRACE("Property Set Received, Devid: %d, Request: %s", devid, request); if ((root = cJSON_Parse(request)) == NULL) { LOG_TRACE("property set payload is not JSON format"); return -1; } if ((item = cJSON_GetObjectItem(root, "PowerSwitch")) != NULL && cJSON_IsNumber(item)) { if (item->valueint == 1) { product_set_switch(ON); } else { product_set_switch(OFF); } } else { #ifdef AOS_TIMER_SERVICE timer_service_property_set(request); #endif } cJSON_Delete(root); res = IOT_Linkkit_Report(user_example_ctx->master_devid, ITM_MSG_POST_PROPERTY, (unsigned char *)request, request_len); LOG_TRACE("Post Property Message ID: %d", res); return 0; }
设备端接收到的示例如下。
{ "LocalTimer": [ { "PowerSwitch": 1, "Timer": "5 4 1,2,3", "TimezoneOffset": 43200, "Enable": 1, "Targets": "PowerSwitch", "IsValid": 1 }, { "PowerSwitch": 0, "Timer": "", "TimezoneOffset": 43200, "Enable": 0, "Targets": "", "IsValid": 0 }, { "PowerSwitch": 0, "Timer": "", "TimezoneOffset": 43200, "Enable": 0, "Targets": "", "IsValid": 0 }, { "PowerSwitch": 0, "Timer": "", "TimezoneOffset": 43200, "Enable": 0, "Targets": "", "IsValid": 0 }, { "PowerSwitch": 0, "Timer": "", "TimezoneOffset": 43200, "Enable": 0, "Targets": "", "IsValid": 0 } ] }
以上示例为JSON数组格式结构,LocalTimer中共有5条定时记录(在 页面的功能参数中设置的值)。每条数组中的每个JSON为一个定时任务,参数解释如下。
标识符
参数名称
数值类型
是否必选
参数描述
PowerSwitch
电源开关
布尔
是
产品功能定义页面的标准功能
Timer
定时时间
字符串
是
用于表示定时时间,使用cron格式(参见开发App端的本地定时功能中的通用说明)
Enable
启用
布尔
是
定义该条定时任务是否启用
IsValid
可执行
布尔
是
定义该条定时任务是否有效,设备端会将所有数据传给App端,App端根据该字段判定是否给用户展示该条定时任务
Targets
定时动作
字符串
否
表示当次设置的定时任务的具体动作,添加Targets属性可以设置任意数量的动作,最大值为:2048
TimezoneOffset
时差
整数
否
表示本地事件与UTC时间的差值
单位:秒
取值范围为:-43200到50400
步长:3600
三、开发App定时功能
生活物联网平台提供App基于Native开发定时功能(静态方式) 的开发方式。更多信息,请参见开发App端的本地定时功能。