本文提供了一个插座本地倒计时功能的开发案例,开发者可以参考本文,实现任意设备的本地倒计时功能。
背景信息
“本地倒计时”是指,由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倒计时任务执行完毕。