文档

本地倒计时功能开发实践

更新时间:

本文提供了一个插座本地倒计时功能的开发案例,开发者可以参考本文,实现任意设备的本地倒计时功能。

背景信息

“本地倒计时”是指,由App页面向设备端下发“开始倒计时”的任务后,设备端开始根据本地时钟,执行倒计时任务。

要实现本地倒计时的效果,设备端和APP端需要按照本文推荐的方式进行实现。

  • 设备端:按照平台标准数据格式,实现倒计时任务的增删改。

  • APP端:在云智能App中,或平台给自定义App提供的设备界面中,如“灯”“开关”,可以直接使用倒计时功能。

倒计时

与单路倒计时不同的是,多路倒计时可以同时对多个设备上的布尔值设定本地倒计时任务,如多路插座。

多路倒计时

操作步骤

  1. 在控制台人机交互 > 自动化和定时处,勾选本地定时功能,并在功能参数中设置本地定时的最大条数(与设备端的存储、性能有关,最大为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是可选的标准属性,其中TargetContentsCountDownList的必选属性二者都是string类型(最大长度为2048字节)。

    XXX1XXX2为当前产品已有的标准布尔属性,可以由开发者随意增删,默认值为0。

    说明

    功能定义里如果含有CountDownList,则CountDownList里除了TargetContents外,还需要含有其他的布尔属性,否则运行会报错。

    参数名称

    类型

    属性名

    是否必选

    长度

    解释

    Target

    string

    操作对象

    2048

    当次操作的布尔值类型的标准属性,用于表示倒计时的地点位置。

    Contents

    string

    倒计时命令

    2048

    当同时设置多个布尔值属性的倒计时任务,且当前没有数组类型的数据,需采用该参数来存放设备的所有倒计时任务。

  2. 功能设计。

    • 设计倒计时功能。

      • 如果当前产品的功能定义里有CountDownList属性,那么此时走新的倒计时列表逻辑,在当前组件展示倒计时列表相关界面。

      • 如果当前产品的功能定义里没有CountDownList属性,但是有CountDown属性,那么则走以前的倒计时插件逻辑。

    • 撤销某个倒计时任务。

      • App删除Contents字段里对应identifier的任务,同时设置Target为这个identifier,上报云端,下发给设备端。

      • 设备端收到新的CountDownList属性,发现Target指定了一个identifier,但是Contents里却没有这个identifier,那么删除正在执行的identifier对应的倒计时任务,不影响其余的倒计时任务。

    场景举例如下。

    说明

    整个插件和设备端上报云端的过程中,CountDownList里的XXX1XXX2等布尔属性可以设置为任意符合布尔属性的值。

    1. 单击倒计时按钮。

    2. 检查TSL,发现CountDownList里还有额外的XXX1XXX2属性。

    3. 倒计时列表弹层展示XXX1XXX2的中文名称列表。

    4. 选择其中一个属性,例如PowerSwitch,展示设置时间和动作界面,设定好时间(1000s)和动作(打开)。

    5. 设置Target: "PowerSwitch"Contents: "PowerSwitch-1-1-1000-1535644800000",下发给云端。

    6. 设备端收到CountDown后,解析Contents和Target内容,设置实际的定时任务。

    7. 设置了第二个属性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倒计时任务执行完毕。