设备上传事件notice
当需要从设备端发起业务流程、事件时,可以通过设备上传事件到中台,中台再将其转发到应用软件中。例如:充电桩完成充电后,发出结束指令,触发充电桩平台的结算逻辑。

1.设备使用Topic notify/dev/{productKey}/{sn}
发出事件消息, method
为notice
,消息格式如下:
{
"msgid": 567,
"method": "notice",
"sn": "123456",
"timestamp": 1638869890,
"payload": {
"sn": "567890",
"noticeType": [
"SOE",
"START_CHARGING"
],
"SOE": {
// 内部属性取决于业务场景
},
"START_CHARGING": {
// 内部属性取决于业务场景
}
}
}
参数 | 说明 |
---|
payload
| 设备上报自身属性,其中的属性属于业务层协议的范畴。 |
2.中台使用Topic notify/dev/{productKey}/{sn}
进行响应, method
为notice
。
{
"msgid": 567,
"method": "notice",
"sn": "123456",
"res": 1,
"timestamp": 1638869990
}
3.用户可以在中台配置数据流转,将事件推送到应用软件,触发业务流程。
设备报警alert
新增了 method: "alert",将所有报警信息储存在固定的alerts属性中,结构为JSON数组。
同时,使用报警编码code,每个code代表一个报警,报警对应的等级、分类等信息都保存在中台数据库中,设备只需要上报编码即可。
复位编码 (见AlarmCode中的电参量分组和复位说明)
{
"msgid": 568,
"timestamp": 1638869890,
"sn": "1234567890123",
"method": "alert",
"payload": {
"alerts": [
// 遥测报警格式
{
"addr": "a123",
"endpoint": "METER",
"code": "UaHIGH1",
"settingValue": "242",
"currentValue": "245.988",
"description": "A相电压越限"
},
// 遥信报警格式
{
"addr": "a123",
"endpoint": "METER",
"code": "T16FauSta_ALERT",
// 为了保持数据结构的一致性,遥测也上传settingValue和currentValue
"settingValue": "0",
"currentValue": "0",
"description": {
"en_US": "T16 broken line",
"zh_CN": "温度16断线"
}
}
]
}
}
参数 | 说明 |
---|
payload.alerts
| 报警信息,数组。 |
payload.alerts[i].addr
| 网关SN / 仪表SN / 仪表addr |
payload.alerts[i].endpoint
| 报警位置,METER-仪表 / GATEWAY-网关,无endpoint属性时,平台默认为METER |
payload.alerts[i].code
| 报警编码,每种报警场景对应唯一的报警编码AlertCode,需要在报警编码表中查询相应的编码 详见下方AlertCode说明。 |
payload.alerts[i].settingValue
| 设置的报警值,值支持对象,例如: { "Ua":"220.0", "Ub":"220.1", "Uc":"220.2" } |
payload.alerts[i].currentValue
| 当前值,值支持对象,例如: { "Ua":"220.0", "Ub":"220.1", "Uc":"220.2" } |
payload.alerts[i].description
| 报警描述信息,值支持对象,例如: {"en_US": "Phase A overvoltage warning", "zh_CN": "A相过压预警"} ,当标准编码表中无法找到code中的报警码时,会根据此属性生成记录 |
AlertCode
AlertCode标准编码表中保存所有报警编码,如果需要新增标准编码,请联系中台开发人员。
如果需要使用标准编码表之外的报警编码,当复位时需要上报一条 code="RESET"
来复位
AlertCode基本结构如下, 每个电参量可以包含多个报警编码和1个复位编码。
例如,param=Ua可以包含UaHigh1、UaHigh2、UaLow1、UaLow2这4个报警编码,以及唯一的复位编码UaReset,在设备内设置报警时,可以按照如下规则:
当出现报警时:
报警编码 | 电参量 | 需要复位 | 是复位编码 | 说明 |
---|
UaHIGH1 | Ua | 是 | | 高压越限 |
UaLOW1 | Ua | 是 | | 低压越限 |
UaRESET | Ua | | ✓ | 电压复位 |
T16FauSta_ALERT | T16FauSta | 是 | | 温度16断线 |
T16FauSta_RESET | T16FauSta | | ✓ | 温度16断线复位 |
OPEN_DOOR | OPEN_DOOR | | | 开门 |
CLOSE_DOOR | CLOSE_DOOR | | | 关门 |
报警编码
由中台统一管理,每个报警编码对应的报警含义全局唯一。
电参量
表示报警编码对应的是哪个遥测/遥信量,即对报警编码进行了分组,每个遥测/遥信量可以对应多个报警编码和一个复位编码。
需要复位
是否需要复位,为否时平台只需要生成报警记录,不需要变更设备的报警状态
是复位编码
是否为复位编码,每一个电参量对应的一组报警编码中,只有一个复位编码
设备报警alarm
当需要在近设备端进行报警,或者应用软件中不具备报警功能时,可以通过中台进行报警。

1.设备使用Topic notify/dev/{productKey}/{sn}
发出报警消息, method
为alarm
或gwalarm
,使用场景如下:
消息格式如下:
// 网关或设备的网关层报警
{
"msgid": 568,
"method": "gwalarm",
"timestamp": 1638869890,
"sn": "1234567890123",
"payload": {
"sn": "1234567890123",
"alarmType": [
"UaHIGH",
"DISWITCH"
],
// 遥测
"UaHIGH": {
// 电参量
"id": "Ua",
// HIGH-高限 / LOW-低限 / EQUAL-等于 / NOTEQUAL-不等于 / CHANGE-数值改变 / 复位-RESET
"alarmType": "HIGH",
// 高限、高高限、低限、低低限的阈值等级
"level": "1",
// 当前值,值支持对象,例如:{ "Ua":"220.0", "Ub":"220.1", "Uc":"220.2" }
"currentValue": "245.988",
// 设置的报警值
"settingValue": "242"
},
// 遥信
"DISWITCH": {
"id": "DI",
// SWITCH-状态变更
"alarmType": "SWITCH",
// 1-开 / 0-关
"currentValue": "1"
}
}
}
// 子设备或设备的业务子模块报警
{
"msgid": 568,
"method": "alarm",
"timestamp": 1638869890,
"sn": "1234567890123",
"payload": {
"sn": "54321",
"alarmType": [
"UaHIGH",
"DISWITCH"
],
// 遥测
"UaHIGH": {
// 电参量
"id": "Ua",
// HIGH-高限 / LOW-低限 / EQUAL-等于 / NOTEQUAL-不等于 / CHANGE-数值改变 / 复位-RESET
"alarmType": "HIGH",
// 高限、高高限、低限、低低限的阈值等级
"level": "1",
// 当前值,如果当前值包含多个,可以采用对象方式传递,例如:{ "Ua":"245.998", "Ub":"220.0", "Uc":"220.0" }
"currentValue": "245.988",
// 设置的报警值
"settingValue": "242"
},
// 遥信
"DISWITCH": {
"id": "DI",
// SWITCH-状态变更
"alarmType": "SWITCH",
// 1-开 / 0-关
"currentValue": "1"
}
}
}
参数 | 说明 |
---|
payload
| 设备上传报警相关的信息,其中有部分属性属于保留字: sn - 如果是网关或者设备的网关层报警,则为网关或设备的sn,与payload 外的sn 属性一致 alarmType - 报警的索引信息,表示此报文中包含哪几种报警场景。其中的每个元素,在下方必须有一个同名key, 具体的报警内容中, id - 报警的遥测/遥信,用来对报警状态进行分组,同一个遥测/遥信同时只能有一种报警状态,以最后上报的一条报警消息中的alarmType和level为准; alarmType - 表示报警类型,包括遥测高限HIGH、遥测低限LOW、遥测复位RESET、遥信状态变更SWITCH。 其中,RESET仅用于遥测报警,并且不区分报警等级level,表示将id中声明的电参量的报警状态清除;level - 表示阈值等级,仅用于遥测报警,例如:1表示高限,2表示高高限等,RESET时不区分等级。 currentValue - 报警的实际值,当遥信报警时,1表示报警,0表示取消报警,而不采用RESET取消报警。 settingValue - 设置的报警阈值,仅用于遥测报警。 示例中,可以看到Ua 和DI 这两个报警,分别示例了遥测和遥信两种类型。 |
2.中台使用Topic notify/dev/{productKey}/{sn}
进行响应, method
为alarm
或gwalarm
。
{
"msgid": 568,
"method": "alarm",
"sn": "1234567890123",
"res": 1,
"timestamp": 1638869990
}
3.中台会将设备投影中的设备状态改为报警态。用户可以在中台配置报警策略来通知相应的人员,也可以通过配置数据流转,将报警消息推送到应用软件,触发业务层的报警流程。
报警分级示例
{
"msgid": 568,
"method": "alarm",
"timestamp": 1638869890,
"sn": "1234567890123",
"payload": {
"sn": "54321",
"alarmType": [
"UaHIGH1"
],
"UHIGH1": {
// 注意此处的U,表示这个遥测量发生预警
"id": "U",
"alarmType": "HIGH",
"level": "1",
"currentValue": "241.988",
"settingValue": "241"
}
}
}
{
"msgid": 568,
"method": "alarm",
"timestamp": 1638869890,
"sn": "1234567890123",
"payload": {
"sn": "54321",
"alarmType": [
"UaHIGH2"
],
"UHIGH2": {
// 仍旧是遥测量U发生报警,此时中台会用level2覆盖之前的level1报警等级
"id": "U",
"alarmType": "HIGH",
"level": "2",
"currentValue": "245.988",
"settingValue": "243"
}
}
}
{
"msgid": 568,
"method": "alarm",
"timestamp": 1638869890,
"sn": "1234567890123",
"payload": {
"sn": "54321",
"alarmType": [
"UaHIGH1"
],
"UHIGH1": {
// 此时遥测量U的报警等级会被覆盖为level1
"id": "U",
"alarmType": "HIGH",
"level": "1",
"currentValue": "241.988",
"settingValue": "241"
}
}
}
// 下面这个是**错误**的报文
{
"msgid": 568,
"method": "alarm",
"timestamp": 1638869890,
"sn": "1234567890123",
"payload": {
"sn": "54321",
"alarmType": [
"UaHIGH1",
"UHIGH2"
],
"UHIGH1": {
"id": "U",
"alarmType": "HIGH",
"level": "1",
"currentValue": "241.988",
"settingValue": "241"
},
// 下面的内容是不该传的,因为同一个遥测量的报警状态是互相覆盖的,以最后一次上报的状态为准;
// 同一条报文中,不应该存在2个相同的id,这会导致后面的报警状态把前面的覆盖掉,
// 中台收到下面这条遥测量U的RESET报文后,会将U的报警状态取消掉,回归正常状态,
// 上面的UHIGH1就被失效了,遥测量U没能被置为预警状态。
"UHIGH2": {
"id": "U",
"alarmType": "RESET",
"level": "2"
}
}
}
报警状态保存在多个寄存器的示例
一些设备的level1预警和level2报警状态被保存在不同寄存器中,网关抄表时,无法将多个寄存器中的值合并为一个遥测量进行报警,可以通过下列方式进行上报。
{
"msgid": 568,
"method": "alarm",
"timestamp": 1638869890,
"sn": "1234567890123",
"payload": {
"sn": "54321",
"alarmType": [
"UaHIGH1"
],
"UHIGH1": {
// 注意此处的U1,表示这个遥测量发生预警
"id": "U1",
"alarmType": "HIGH",
"level": "1",
"currentValue": "241.988",
"settingValue": "241"
}
}
}
{
"msgid": 568,
"method": "alarm",
"timestamp": 1638869890,
"sn": "1234567890123",
"payload": {
"sn": "54321",
"alarmType": [
"UaHIGH1",
"UHIGH2"
],
// 此时需要将预警位置为RESET
"UHIGH1": {
"id": "U1",
"alarmType": "RESET"
},
// 然后上报U2报警,实际上是将U1和U2分为了2个遥测量,分别进行管理
"UHIGH2": {
"id": "U2",
"alarmType": "HIGH",
"level": "2",
"currentValue": "245.988",
"settingValue": "243"
}
}
}
{
"msgid": 568,
"method": "alarm",
"timestamp": 1638869890,
"sn": "1234567890123",
"payload": {
"sn": "54321",
"alarmType": [
"UaHIGH1",
"UHIGH2"
],
// 再次上报U1预警
"UHIGH1": {
"id": "U1",
"alarmType": "HIGH",
"level": "1",
"currentValue": "241.988",
"settingValue": "241"
},
// 需要重置U2报警状态,此时2个id不同,所以不会发生覆盖的情况
"UHIGH2": {
"id": "U2",
"alarmType": "RESET"
}
}
}