開(kāi)發(fā)設(shè)備端本地定時(shí)功能
本地定時(shí)相對(duì)云端定時(shí)而言,是指當(dāng)設(shè)備離線(xiàn)時(shí),也能自動(dòng)執(zhí)行定時(shí)任務(wù)。本文提供了一個(gè)插座本地定時(shí)功能的開(kāi)發(fā)示例,您可以根據(jù)本文實(shí)現(xiàn)任意設(shè)備的本地定時(shí)功能。
一、配置控制臺(tái)參數(shù)
- 登錄生活物聯(lián)網(wǎng)控制臺(tái)。
創(chuàng)建一個(gè)項(xiàng)目。更多操作,請(qǐng)參見(jiàn)創(chuàng)建項(xiàng)目。
創(chuàng)建產(chǎn)品并定義功能。更多操作,請(qǐng)參見(jiàn)創(chuàng)建產(chǎn)品并定義功能。
在產(chǎn)品的功能參數(shù)中設(shè)置本地定時(shí)的最大條數(shù)(與設(shè)備端的存儲(chǔ)、性能有關(guān),默認(rèn)為13)。 頁(yè)面,勾選本地定時(shí)的功能,并在
說(shuō)明在此處勾選本地定時(shí)后,會(huì)在產(chǎn)品功能定義頁(yè)面中自動(dòng)添加設(shè)備端上定時(shí)(DeviceTimer)屬性。
單擊保存結(jié)束配置。
二、開(kāi)發(fā)設(shè)備端的本地定時(shí)功能
開(kāi)發(fā)定時(shí)功能。
在控制臺(tái)上定義DeviceTimer的功能屬性后,設(shè)備端可以接收從云端下來(lái)的property set消息,從而獲取定時(shí)任務(wù)的具體信息。詳細(xì)開(kāi)發(fā)步驟如下。
說(shuō)明新版本設(shè)備端SDK默認(rèn)打開(kāi)DeviceTimer的宏開(kāi)關(guān),老版本設(shè)備端SDK需自行打開(kāi)DeviceTimer的宏開(kāi)關(guān)。
獲取V1.3.0生活物聯(lián)網(wǎng)平臺(tái)SDK。更多操作,請(qǐng)參見(jiàn)獲取SDK。
智能插座實(shí)例代碼,位于Products/example/smart_outlet/smart_outlet_main.c
定時(shí)功能的開(kāi)關(guān)配置代碼,位于Products/example/smart_outlet/smart_outlet.mk
基于設(shè)備端SDK開(kāi)發(fā)定時(shí)功能。
確認(rèn)以下宏開(kāi)關(guān)為打開(kāi)狀態(tài)。
GLOBAL_CFLAGS += -DENABLE_LOCALTIMER //老版本本地定時(shí)的宏,默認(rèn)為關(guān)閉狀態(tài)
更改build.sh中的默認(rèn)變量參數(shù)(如下所示,更多介紹請(qǐng)參見(jiàn)README.md)。
產(chǎn)品類(lèi)型:default_type="example" 應(yīng)用名稱(chēng):default_app="smart_outlet" 模組型號(hào):default_board="uno-91h" //根據(jù)實(shí)際型號(hào)配置 連云區(qū)域:default_region=MAINLAND //連接國(guó)外為SINGAPORE 連云環(huán)境:default_env=ONLINE Debug log:default_debug=1 //0:release 1:debug 其他參數(shù):default_args="" //可配置其他編譯參數(shù)
執(zhí)行
./build.sh
編譯生成固件。編譯成功后,即可獲得燒錄所需的固件。
燒錄固件。
各模組的燒錄方式略有差異,請(qǐng)向模組廠(chǎng)商獲取詳細(xì)燒錄方法。
調(diào)試設(shè)備。
設(shè)備收到定時(shí)任務(wù)的屬性時(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; }
設(shè)備端接收到的示例如下。
{ "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數(shù)組格式結(jié)構(gòu),LocalTimer中共有5條定時(shí)記錄(在 頁(yè)面的功能參數(shù)中設(shè)置的值)。每條數(shù)組中的每個(gè)JSON為一個(gè)定時(shí)任務(wù),參數(shù)解釋如下。
標(biāo)識(shí)符
參數(shù)名稱(chēng)
數(shù)值類(lèi)型
是否必選
參數(shù)描述
PowerSwitch
電源開(kāi)關(guān)
布爾
是
產(chǎn)品功能定義頁(yè)面的標(biāo)準(zhǔn)功能
Timer
定時(shí)時(shí)間
字符串
是
用于表示定時(shí)時(shí)間,使用cron格式(參見(jiàn)開(kāi)發(fā)App端的本地定時(shí)功能中的通用說(shuō)明)
Enable
啟用
布爾
是
定義該條定時(shí)任務(wù)是否啟用
IsValid
可執(zhí)行
布爾
是
定義該條定時(shí)任務(wù)是否有效,設(shè)備端會(huì)將所有數(shù)據(jù)傳給App端,App端根據(jù)該字段判定是否給用戶(hù)展示該條定時(shí)任務(wù)
Targets
定時(shí)動(dòng)作
字符串
否
表示當(dāng)次設(shè)置的定時(shí)任務(wù)的具體動(dòng)作,添加Targets屬性可以設(shè)置任意數(shù)量的動(dòng)作,最大值為:2048
TimezoneOffset
時(shí)差
整數(shù)
否
表示本地事件與UTC時(shí)間的差值
單位:秒
取值范圍為:-43200到50400
步長(zhǎng):3600
三、開(kāi)發(fā)App定時(shí)功能
生活物聯(lián)網(wǎng)平臺(tái)提供App基于Native開(kāi)發(fā)定時(shí)功能(靜態(tài)方式) 的開(kāi)發(fā)方式。更多信息,請(qǐng)參見(jiàn)開(kāi)發(fā)App端的本地定時(shí)功能。