本文提供了一個插座本地倒計時功能的開發案例,開發者可以參考本文,實現任意設備的本地倒計時功能。
背景信息
“本地倒計時”是指,由App頁面向設備端下發“開始倒計時”的任務后,設備端開始根據本地時鐘,執行倒計時任務。
要實現本地倒計時的效果,設備端和APP端需要按照本文推薦的方式進行實現。
設備端:按照平臺標準數據格式,實現倒計時任務的增刪改。
APP端:在云智能App中,或平臺給自定義App提供的設備界面中,如“燈”“開關”,可以直接使用倒計時功能。
與單路倒計時不同的是,多路倒計時可以同時對多個設備上的布爾值設定本地倒計時任務,如多路插座。
操作步驟
在控制臺13個)。 處,勾選本地定時功能,并在功能參數中設置本地定時的最大條數(與設備端的存儲、性能有關,最大為
說明平臺會在功能定義中自動插入一個設備端上定時的標準功能(DeviceTimer),并支持多個定時任務。
基于設備端SDK開發時,需確認Products/example/smart_outlet/smart_outlet.mk文件中以下宏開關的打開與關閉狀態。
GLOBAL_CFLAGS += -DENABLE_COUNTDOWN_LIST //老版本本地倒計時的宏,默認為關閉狀態
數據結構說明如下。
功能名稱:倒計時列表
標識符:CountDownList
類型:JSON
CountDownList: { Target: "PowerSwitch"(string,當次設置操作指定的布爾值的identifier), Contents: "PowerSwitch-1-1-123-1535644800000,LightSwitch-0-1-456-1535644800000"(string,該設備的所有倒計時任務字符串,具體格式說明見下方) XXX1:0(bool,該產品已有的布爾類型標準屬性), XXX2:0(bool,該產品已有的布爾類型標準屬性) }
CountDownList是可選的標準屬性,其中Target和Contents為CountDownList的必選屬性二者都是string類型(最大長度為2048字節)。
XXX1和XXX2為當前產品已有的標準布爾屬性,可以由開發者隨意增刪,默認值為0。
說明功能定義里如果含有CountDownList,則CountDownList里除了Target和Contents外,還需要含有其他的布爾屬性,否則運行會報錯。
參數名稱
類型
屬性名
是否必選
長度
解釋
Target
string
操作對象
是
2048
當次操作的布爾值類型的標準屬性,用于表示倒計時的地點位置。
Contents
string
倒計時命令
是
2048
當同時設置多個布爾值屬性的倒計時任務,且當前沒有數組類型的數據,需采用該參數來存放設備的所有倒計時任務。
功能設計。
設計倒計時功能。
如果當前產品的功能定義里有CountDownList屬性,那么此時走新的倒計時列表邏輯,在當前組件展示倒計時列表相關界面。
如果當前產品的功能定義里沒有CountDownList屬性,但是有CountDown屬性,那么則走以前的倒計時插件邏輯。
撤銷某個倒計時任務。
App刪除Contents字段里對應identifier的任務,同時設置Target為這個identifier,上報云端,下發給設備端。
設備端收到新的CountDownList屬性,發現Target指定了一個identifier,但是Contents里卻沒有這個identifier,那么刪除正在執行的identifier對應的倒計時任務,不影響其余的倒計時任務。
場景舉例如下。
說明整個插件和設備端上報云端的過程中,CountDownList里的XXX1和XXX2等布爾屬性可以設置為任意符合布爾屬性的值。
單擊倒計時按鈕。
檢查TSL,發現CountDownList里還有額外的XXX1,XXX2屬性。
倒計時列表彈層展示XXX1、XXX2的中文名稱列表。
選擇其中一個屬性,例如PowerSwitch,展示設置時間和動作界面,設定好時間(1000s)和動作(打開)。
設置
Target: "PowerSwitch"
和Contents: "PowerSwitch-1-1-1000-1535644800000"
,下發給云端。設備端收到CountDown后,解析Contents和Target內容,設置實際的定時任務。
設置了第二個屬性XXX2。Contents為:
PowerSwitch-1-1-1000-1535644800000,XXX2-0-1-2000-1535644800000
,Target為:XXX2。
1000s到了之后,第一個PowerSwitch倒計時任務結束,設備端刪除Contents里PowerSwitch這一條任務,同時設置Target為PowerSwitch,將整個CnountDownList屬性上報到云端,插件側查詢CountDown屬性,發現Contents里沒有Target指定的布爾屬性,代表PowerSwitch倒計時任務已執行,進而提示PowerSwitch倒計時任務執行完畢。