版本号 | 发布/更新日期 | 更新人员(部门/职位) | 重要变更内容 |
V1.0 | 2018年11月21日 | 人工智能实验室-W实验室-IOT技术研发 | 编辑并发布初版 |
V2.0 | 2019年3月14日 | 人工智能实验室-W实验室-IOT技术研发 | 更新定时协议至V2 |
V2.01 | 2019年3月26日 | 人工智能实验室-W实验室-IOT技术研发 | 新增时区属性 |
V2.02 | 2019年7月4日 | 人工智能实验室-W实验室-IOT技术研发 | 新增对时设置 |
一.定时功能
定时功能需要包含以下模块:
- UNIX时间模块
- 定时&周期计划模块
模块都基于Vendor Model Server(0x01A80000)实现,设备需能存储40条定时信息。
二.UNIX时间
1 model & opcode
| 下行(天猫精灵->mesh设备) | 上行(mesh设备->天猫精灵) | ||
Opcode | Attr Type | Opcode | Attr Type | |
设置时间 | 0xD101A8 | 0xF01F | 0xD301A8 | 0xF01F |
查询时间 | 0xD001A8 | 0xF01F | ||
设置时区 | 0xD101A8 | 0xF01E | 0xF01E | |
查询时区 | 0xD001A8 | 0xF01E | ||
设置对时参数 | 0xD101A8 | 0xF01D | 0xF01D | |
查询对时参数 | 0xD001A8 | 0xF01D |
| 上行(mesh设备->天猫精灵) | 下行(天猫精灵->mesh设备) | ||
Opcode | Attr Type | Opcode | Attr Type | |
请求更新时间 | 0xDE01A8 | 0xF01F | 0xDF01A8 | 0xF01F |
2 数据示例
注:所有数据示例中的TID仅做为参考,天猫精灵发送的每条消息的TID均与上一条不同,设备回复的的TID为设置或查询指令中的TID;如果是设备主动发送的消息,则TID由设备自行生成管理。
2.1 设置时间(下行)
0xD1 | 0xA8 | 0x01 | 0x01 | 0x1F | 0xF0 | 0x00 | 0x3D | 0x2A | 0x5C |
Opcode | TID | Attr Type | u32_time | ||||||
0xD101A8 | 0x01 | UNIX时间:0xF01F | UNIX时间:0x5C2A3D00 2019/1/1 00:00:00 |
2.2 查询时间(下行)
0xD0 | 0xA8 | 0x01 | 0x02 | 0x1F | 0xF0 |
Opcode | TID | Attr Type | |||
0xD001A8 | 02 | UNIX时间:0xF01F |
2.3 时间信息(上行)
0xD3 | 0xA8 | 0x01 | 0x03 | 0x1F | 0xF0 | 0x00 | 0x3D | 0x2A | 0x5C |
Opcode | TID | Attr Type | u32_time | ||||||
0xD301A8 | 03 | UNIX时间:0xF01F | UNIX时间:0x5C2A3D00 2019/1/1 00:00:00 |
2.4 设置对时参数(下行)
0xD1 | 0xA8 | 0x01 | 0x01 | 0x1D | 0xF0 | 0xB4 | 0x00 | 0x0A | 0x0A |
Opcode | TID | Attr Type | uint16 period_time | uint8 retry_delay | uint8 retry_times | ||||
0xD101A8 | 0x01 | 对时参数:0xF01D | 每隔180分钟进行一次对时请求 | 对时请求失败后10分钟后重试 | 对时请求重试次数不超过10次(包含第一次) |
2.5 查询对时参数(下行)
0xD0 | 0xA8 | 0x01 | 0x02 | 0x1D | 0xF0 |
Opcode | TID | Attr Type | |||
0xD001A8 | 0x02 | 对时参数:0xF01D |
2.6 对时参数(上行)
0xD3 | 0xA8 | 0x01 | 0x03 | 0x1D | 0xF0 | 0xB4 | 0x00 | 0x0A | 0x0A |
Opcode | TID | Attr Type | uint16 period_time | uint8 retry_delay | uint8 retry_times | ||||
0xD301A8 | 0x03 | 对时参数:0xF01D | 每隔180分钟进行一次对时请求 | 对时请求失败后10分钟后重试 | 对时请求重试次数不超过10次(包含第一次) |
2.7 设置时区(下行)
0xD1 | 0xA8 | 0x01 | 0x01 | 0x1E | 0xF0 | 0x08 |
Opcode | TID | Attr Type | s8_timezone | |||
0xD101A8 | 0x01 | 时区:0xF01E | 时区:-12~12 |
2.8 查询时区(下行)
0xD0 | 0xA8 | 0x01 | 0x02 | 0x1E | 0xF0 |
Opcode | TID | Attr Type | |||
0xD001A8 | 02 | 时区:0xF01E |
2.9 时区信息(上行)
0xD3 | 0xA8 | 0x01 | 0x03 | 0x1E | 0xF0 | 0x08 |
Opcode | TID | Attr Type | s8_timezone | |||
0xD301A8 | 03 | 时区:0xF01E | 时区:-12~12 |
2.10 请求更新时间(上行)
0xDE | 0xA8 | 0x01 | 0x04 | 0x1F | 0xF0 |
Opcode | TID | Attr Type | |||
0xDE01A8 | 04 | UNIX时间:0xF01F |
设备在设置时间后,每隔12~36小时主动发起一次时间更新请求。
2.11 更新时间(下行)
0xDF | 0xA8 | 0x01 | 0x05 | 0x1F | 0xF0 | 0x00 | 0x3D | 0x2A | 0x5C |
Opcode | TID | Attr Type | u32_time | ||||||
0xDF01A8 | 05 | UNIX时间:0xF01F | UNIX时间:0x5C2A3D00 2019/1/1 00:00:00 |
三.定时&周期定时
1. model & opcode
| 下行(天猫精灵->mesh设备) | 上行(mesh设备->天猫精灵) | ||
Opcode | Attr Type | Opcode | Attr Type | |
查询定时 | 0xD001A8 | 0xF010 | 0xD301A8 | 0xF010 |
设置定时 | 0xD101A8 | |||
设置周期定时 | 0xD101A8 | 0xF011 | 0xF011 | |
删除定时 | 0xD101A8 | 0xF012 | 0xF012 |
2. 数据示例
2.1 查询定时(下行)
0xD0 | 0xA8 | 0x01 | 0x01 | 0x10 | 0xF0 | 0x01 | 0x02 |
Opcode | TID | Attr Type | index1 | index2 | |||
0xD001A8 | 01 | 定时:0xF010 | 索引1 | 索引2 |
注1:每条定时查询指令可包含1个或多个需查询定时索引
注2:index = 0xFF表示查询所有定时
2.2 设置定时(下行)
0xD1 | 0xA8 | 0x01 | 0x02 | 0x10 | 0xF0 | 0x01 | 0x01 | 0x3D | 0x2A | 0x5C | 0x00 | 0x01 | 0x00 | 0x02 | 0x00 | 0x3D | 0x2A | 0x5C | 0x00 | 0x01 | 0x00 |
Opcode | TID | Attr Type | index | u32 time | attr_type | attr_para | index | u32_time | attr_type | attr_para | |||||||||||
0xD101A8 | 02 | 定时:0xF010 | 索引1 | UNIX时间:0x5C2A3D01 2019/1/1 00:00:00 | 开关:0x0100 | 关闭:0x00 | 索引2 | UNIX时间:0x5C2A3D00 2019/1/1 00:00:00 | 开关:0x0100 | 关闭:0x00 | |||||||||||
|
|
| 定时1 | 定时2 |
u32 time:
定时为精度到分钟到时间,故该数据到秒数部分(<60秒)表示该定时执行的操作码数量。
如上表数据0x5C2A3D01,对应十进制1546272001,计算1546272001/60取整25771200,25771200*60 = 154627200,对应时间为2019/1/1 00:00:00。
1546272001 mod 60 = 1,表示只有1组操作(开关)。
注:每条定时设置指令可包含1个或多个定时设置
2.3 定时信息(上行)
0xD3 | 0xA8 | 0x01 | 0x03 | 0x10 | 0xF0 | 0x01 | 0x00 | 0x3D | 0x2A | 0x5C | 0x00 | 0x01 | 0x00 | 0x02 | 0x00 | 0x3D | 0x2A | 0x5C | 0x00 | 0x01 | 0x00 |
Opcode | TID | Attr Type | index | u32_time | attr_type | attr_para | index | u32_time | attr_type | attr_para | |||||||||||
0xD301A8 | 03 | 定时:0xF010 | 索引 | UNIX时间:0x5C2A3D00 2019/1/1 00:00:00 | 开关:0x0100 | 关闭:0x00 | 索引2 | UNIX时间:0x5C2A3D00 2019/1/1 00:00:00 | 开关:0x0100 | 关闭:0x00 | |||||||||||
|
|
| 定时1 | 定时2 |
注:每条定时信息可包含1个或多个定时信息
2.4 设置周期定时(下行)
0xD1 | 0xA8 | 0x01 | 0x04 | 0x11 | 0xF0 | 0x01 | 0xE0 | 0x11 | 0x06 | 0x00 | 0x01 | 0x00 | 0x02 | 0xE0 | 0x01 | 0x06 | 0x00 | 0x01 | 0x00 |
Opcode | TID | Attr Type | index | u16_time | schedule | attr_type | attr_para | index | u16_time | schedule | attr_type | attr_para | |||||||
0xD101A8 | 04 | 周期定时:0xF011 | 索引1 | 24H时间:0x01E0 每天早上8:00 操作码数量:1组 | bit 0-6对应周一-周日 每周二、周三 | 开关:0x0100 | 关闭:0x00 | 索引2 | 24H时间:0x01E0 每天早上8:00 | bit 0-6对应周一-周日 每周二、周三 | 开关:0x0100 | 关闭:0x00 | |||||||
|
|
| 定时1 | 定时2 |
u16_time:
bit 0-11:表示24小时的分钟数,如上表数据0x11E0,低12位为0x01E0,对应十进制480,表示时间为早上8:00。
bit 12-15:表示该定时执行的操作码数量,如上表数据0x11E0,高4位为0x01,表示只有1组操作(开关)。
注:每条周期定时设置指令可包含1个或多个周期定时设置
2.5 周期定时信息(上行)
0xD3 | 0xA8 | 0x01 | 0x05 | 0x11 | 0xF0 | 0x01 | 0xE0 | 0x11 | 0x06 | 0x00 | 0x01 | 0x00 | 0x02 | 0xE0 | 0x01 | 0x06 | 0x00 | 0x01 | 0x00 |
Opcode | TID | Attr Type | index | u16_time | schedule | attr_type | attr_para | index | u16_time | schedule | attr_type | attr_para | |||||||
0xD301A8 | 05 | 周期定时:0xF011 | 索引1 | 24H时间:0x01E0 每天早上8:00 操作码数量:1组 | bit 0-6对应周一-周日 每周二、周三 | 开关:0x0100 | 关闭:0x00 | 索引2 | 24H时间:0x01E0 每天早上8:00 | bit 0-6对应周一-周日 每周二、周三 | 开关:0x0100 | 关闭:0x00 | |||||||
|
|
| 定时1 | 定时2 |
注:每条周期定时信息可包含1个或多个定时信息,其他属性参照3.2.4
2.6 删除定时(下行)
0xD3 | 0xA8 | 0x01 | 0x07 | 0x12 | 0xF0 | 0x01 | 0x02 |
Opcode | TID | Attr Type | index1 | index2 | |||
0xD301A8 | 07 | 删除定时:0xF012 | 索引1 | 索引2 |
注1:每条定时取消信息可包含1个或多个定时取消索引
2.8 定时完成消息(上行)
0xD4 | 0xA8 | 0x01 | 0x08 | 0x09 | 0xF0 | 0x11 | 0x01 |
Opcode | TID | Attr Type | Event | index | |||
0xD401A8 | 08 | 事件上报:(0xF009) | 定时完成 | 定时索引 |
2.9 错误消息(上行)
0xD3 | 0xA8 | 0x01 | 0x09 | 0x00 | 0x00 | 0x10 | 0xF0 | 0x80 | 0x01 |
Opcode | TID | Attr Type | Attr Type | Error Code | index | ||||
0xD301A8 | 09 | 错误码:(0x0000) | 定时:0xF010 | 错误类型 | 定时索引 |
Error Code表:
Attr Type | Error Code | 错误说明 |
0xF01F | 0x80 | UNIX时间未设置 |
0xF010 | 0x80 | UNIX时间未设置 |
0x82 | 不支持的属性操作 | |
0x83 | 属性操作参数错误 | |
0x84 | 定时时间小于当前时间 | |
0x85 | 未找到需要查询的定时索引 | |
0x86 | 定时数量已满 | |
0xF011 | 0x80 | UNIX时间未设置 |
0x82 | 不支持的属性操作 | |
0x83 | 属性操作参数错误 | |
0x85 | 未找到需要查询的定时索引 | |
0x86 | 定时数量已满 | |
0x87 | 周期定时格式错误 | |
0xF012 | 0x85 | 未找到需要删除的定时索引 |
2.10 定时冲突覆盖规则
如果存在多个定时的时间点存在冲突,后下发的定时指令生效。
比如本来存在一个每天8点关闭的定时;此时新增一个明天8点打开的定时,则明天8点执行打开操作,之后每天依然执行关闭操作。
反之比如本来存在一个明天8点打开的定时,此时新增一个每天8点关闭的定时,则之后每天执行关闭操作。
在该情况下只需上报具体被执行到到定时事件。