时控策略
全量覆盖
全量覆盖时,设备端需要停止执行并清空原有的全部策略,然后开始执行报文中下发的策略。
{
"msgid": 628131887239491584,
"method": "schedule",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"cmd": "SET",
"tasks": [
{
// 任务ID,由平台统一生成,避免设备端生成后还需要通知平台的问题
"taskId": "123",
// 任务状态,1-启用,0-禁用
"enable": 1,
// 任务优先级,默认为1,
// 如果存在更高优先级的任务为启用状态,则所有优先级较低的都禁用。
// 例如:存在10个任务优先级为1,5个任务优先级为2,1个任务优先级为3,则在优先级为3的任务生效期间,另外15个任务全部不执行。
// 任务生效的意思是,当前时间在startTime和endTime之间,并且enable=1
"priority": 1,
// 生效时间,为空表示立刻生效
"startTime": 1710957600,
// 过期时间,为空表示永不过期,过期后网关需要将enable改为0
"endTime": 1729447200,
"cycle": {
// simple-简单模式,cron-cron表达式,trigger-触发模式
"mode": "simple",
// 是否随夏令时偏移
"dstEnable": 1,
// sunrise-日升,sunset-日落,10:00:00-时间点
"time": "10:00:00",
// once-执行一次,day-按天循环,week-按星期循环,month-按月循环
"period": "week",
// cycle=week时需要设置
"weekday": [1, 3, 4, 6, 7],
// cycle=month时需要设置
"monthday": [1, 15, 25]
},
// 操作指令数组,依次执行各条命令
"actions": [{
"method": "operate",
"payload": {
"method": "FORCESWITCH",
"ForceSwitch": 0,
"groupid": "3_1"
}
}, {
"method": "operate_raw",
"payload": {
"addr": "1_1",
"portid": "1",
"meteraddr": "1",
"functionid": "Switch",
"value": 1
}
}]
},
{
"taskId": "124",
"enable": 1,
"priority": 1,
"startTime": 1710957600,
"endTime": 1729447200,
"cycle": {
"mode": "cron",
"dstEnable": 1,
// cron表达式
"cron": "0 0/15 * * * ?"
},
"actions": [{
"method": "operate_raw",
"payload": {
"addr": "1_1",
"portid": "1",
"meteraddr": "1",
"functionid": "Switch",
"value": 1
}
}]
},
{
"taskId": "125",
"enable": 1,
"priority": 1,
"startTime": 1710957600,
"endTime": 1729447200,
"cycle": {
// 触发模式
"mode": "trigger",
"dstEnable": 1,
// 触发器,详见下面说明
"trigger": { ... }
"period": "week",
"weekday": [1, 3, 4, 6, 7],
"monthday": [1, 15, 25]
},
"actions": [{ ... }]
}
]
}
}
一级属性 | 二级属性 | 三级属性 | 四级属性 | 说明 | 备注 |
---|
payload | | | | 对象,报文内容 | |
| cmd | | | SET - 全量设置策略 ADD - 新增策略 DELETE - 删除策略 UPDATE - 修改策略 ENABLE_ALL - 全部启用/禁用 ENABLE - 启用/禁用指定策略 CLEAR - 清空策略 READ_ALL - 读取全部策略 READ - 读取指定策略 | |
| tasks | | | 数组,策略内容 | |
| | taskId | | 字符串,任务ID,由平台生成和下发,以保证平台和设备的数据一致性, 避免设备设备生成taskId后还要告知平台的问题。 | |
| | enable | | 数值,1-启用,0-禁用 | |
| | priority | | 任务优先级,当高优先级任务生效时,所有较低优先级的任务都失效 | |
| | startTime | | 数值,策略生效时间戳,为空表示立刻生效 | |
| | endTime | | 数值,策略过期时间戳,为空表示永不过期 | |
| | cycle | | 对象,定时任务周期设置 | |
| | | mode | 字符串,设置模式 ”simple” - 简单模式 “cron” - cron模式
| |
| | | dstEnable | 数值,执行时间点是否随夏令时偏移 1 - 是 0 - 否 | |
| | | time | 字符串,执行时间 ”sunrise” - 日升 ”sunset” - 日落 ”10:00:00” - 时间点 | simple模式 |
| | | trigger | 对象,触发条件 | trigger模式 |
| | | period | 字符串,循环模式 once - 执行一次 day - 按天循环 week - 按周循环 month - 按月循环
| simple/trigger模式 |
| | | weekday | 数组,周几执行,1表示周一,7表示周日,period=week时必填 | simple/trigger模式 + week循环 |
| | | monthday | 数组,每月几号执行,1表示当月第1天,period=month时必填 | simple/trigger模式 + month循环 |
| | | cron | 字符串,cron表达式 | cron模式 |
| | actions | | 数组,需要执行的动作,内容参照操作指令operate/operate_raw/transport | |
触发条件trigger
通过多级and / or嵌套来设置触发条件。(此处借鉴了MongoDB的查询脚本语法)
and / or:数组,数组内的各条件取和/取或
addr / groupid:用来定位子设备的ID
prop:属性名,其中$是固定占位符,表示当前时间
op:操作符,GT-大于,GTE-大于等于,LT-小于,LTE-小于等于,NE-不等于,EQ-等于,EX-存在,NEX-不存在
value:值
"trigger": {
"or": [
{
"and": [
{ "addr": "1_1", "op": "GT", "prop": "Ua", "value": 220 },
{ "groupid": 1, "op": "LT", "prop": "Ua", "value": 250 }
]
},
{
"and": [
{"op": "GT", "prop": "${time}", "value": "10:00:00"},
{"op": "LT", "prop": "${time}", "value": "18:00:00"}
]
}
]
}
新增策略
{
"msgid": 628131887239491584,
"method": "schedule",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"cmd": "ADD",
"tasks": [
{
"taskId": "124",
"enable": 1,
"priority": 1,
"startTime": 1710957600,
"endTime": 1729447200,
"cycle": { ... }
"actions": [ ... ]
},
{
"taskId": "125",
"enable": 1,
"priority": 1,
"startTime": 1710957600,
"endTime": 1729447200,
"cycle": { ... }
"actions": [ ... ]
}
]
}
}
删除策略
{
"msgid": 628131887239491584,
"method": "schedule",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"cmd": "DELETE",
"tasks": [
{
"taskId": "125"
},
{
"taskId": "126"
}
]
}
}
修改策略
{
"msgid": 628131887239491584,
"method": "schedule",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"cmd": "UPDATE",
"tasks": [
{
"taskId": "124",
"enable": 1,
"priority": 1,
"startTime": 1710957600,
"endTime": 1729447200,
"cycle": { ... }
"actions": [ ... ]
},
{
"taskId": "125",
"enable": 1,
"priority": 1,
"startTime": 1710957600,
"endTime": 1729447200,
"cycle": { ... }
"actions": [ ... ]
}
]
}
}
启用/禁用策略
{
"msgid": 628131887239491584,
"method": "schedule",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"cmd": "ENABLE_ALL",
// 1-启用,0-禁用
"enable": 1
}
}
{
"msgid": 628131887239491584,
"method": "schedule",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"cmd": "ENABLE",
"tasks": [
{
"taskId": "124",
"enable": 0
},
{
"taskId": "125",
"enable": 1
}
]
}
}
清空策略
{
"msgid": 628131887239491584,
"method": "schedule",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"cmd": "CLEAR"
}
}
读取策略
{
"msgid": 628131887239491584,
"method": "schedule",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"cmd": "READ_ALL"
}
}
{
"msgid": 628131887239491584,
"method": "schedule",
"sn": "1234567890123",
"timestamp": 1638869990,
"payload ": {
"cmd": "READ",
"tasks": [
{
"taskId": "124"
},
{
"taskId": "125"
}
]
}
}
上报执行结果
设备端在执行任务后,需要通过event将执行结果上报给平台。
{
"msgid": 567,
"method": "event",
"sn": "123456",
"timestamp": 1638869890,
"payload": {
"events": [
{
// 事件编码,固定为schedule,表示定时任务执行结果
"code": "schedule",
// 网关SN / 仪表SN / 仪表addr
"addr": "a123",
// 事件发生位置,METER-仪表 / GATEWAY-网关,
// 无endpoint属性时,平台默认为METER
"endpoint": "METER",
// 执行结果
"payload": {
// 1-成功,0-失败
"res": 0,
// 错误编码参考在线文档
// http://101.37.151.118:20003/docs/appendix/errcode.html
"errcode": "1001",
// 设备端执行的任务详情快照,避免平台端策略修改导致无法追溯。
"task": {
"taskId": "124",
"enable": 1,
"priority": 1,
"startTime": 1710957600,
"endTime": 1729447200,
"cycle": { ... }
"actions": [ ... ]
}
}
}
]
}
}
错误编码
以下仅列出文档中用到的错误码,更多错误码参考在线文档: 中台协议错误码清单
{
"msgid": 123,
"method": "schedule",
"sn": "1234567890123",
"res": 0,
"errcode": "5009",
"timestamp": 1638869890
}
{
"msgid": 123,
"method": "schedule",
"sn": "1234567890123",
"res": 0,
"errcode": "5010",
"timestamp": 1638869890
}
Last modified: 18 四月 2025