一、描述
事件上报适用设备状态变化通知、埋点事件记录等场景。当设备发生了预定义的事件时,设备会将事件信息上报给云端平台。主要有以下几个示例场景:
实时监测和预测维护:通过物模型事件上报,设备可以实时监测自身的状态和性能指标。这使得设备能够及时检测到潜在的故障或异常情况,并提前采取措施进行维护。通过监测关键参数,设备可以预测性地进行维护,避免设备故障和停机时间的增加,从而提高设备的可靠性和性能。
报警和告警通知:物模型事件可以用于报警、告警、错误信息通知的触发。当设备检测到特定的事件或条件时,例如安全传感器探测到入侵或火灾报警器探测到烟雾,设备可以生成相应的事件并将其上报给云端平台。云端平台可以根据这些事件触发警报通知,通知相关的用户、管理员或其他系统。
二、数据交互图
三、通讯协议
3.1 通讯方式
传输方式 | MQTT |
---|---|
序列化方式 | JSON |
编码格式 | UTF-8 |
3.2 Topic定义
Topic名称 | 描述 |
---|---|
/${productId}/${deviceId}/thing/event/up | 物模型事件上行消息,物模型服务订阅此Topic获取事件消息 |
/${productId}/${deviceId}/thing/event/up/reply | 物模型事件上行消息回复,设备订阅该消息获取结果 |
3.3 method 枚举
method名称 | 描述 |
---|---|
reported | 上报事件触发 |
getFrequency | 获取事件频率 |
四、场景示例
示例以门锁设备为例,事件为门锁的开关,定义事件名为switch, 输出属性名为 type ,值有 fingerprint、password等值。
4.1 设备上报事件触发
1. 上报物模型事件触发
设备事件触发,上报到物模型服务,使用Topic: /${productId}/${deviceId}/thing/event/up
上报,发送的JSON格式如下:
{
"method":"reported",
"messageId":"157889065984",
"eventIdentifier":"switch",
"module":"default",
"output":{
"type":"fingerprint"
},
"time":1686540549041
}
字段说明:
字段名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
method | String | 是 | 表示设备请求物模型属性的操作类型 ,reported 表示上报事件触发 |
messageId | String | 是 | 消息ID,最长为64位字符,标识该消息的唯一ID,发送端生成进行定位消息使用 |
output | Object | 是 | 表示事件的输出信息 |
output.key | String | 否 | 表示事件的输出信息的属性Key |
output.value | Object | 否 | 表示事件的输出信息的属性值 |
eventIdentifier | String | 是 | 表示事件的标识符 |
eventIdentifier | String | 是 | 表示事件所属模块 |
time | Long | 否 | 事件上报的时间戳,类型为UTC毫秒级时间。如不传则使用服务器接收上报时间戳 |
2. 校验事件信息后保存事件
物模型服务接收到事件上报消息后,会根据物模型的TSL文件进行校验事件的输出参数等,如校验通过,则进行保存,不通过则响应错误信息。
3. 返回上报物模型事件结果
物模型服务处理上报物模型消息后,发送结果到Topic:/${productId}/${deviceId}/thing/event/up/reply
1)若成功保存,发送到该Topic的JSON格式如下:
{
"messageId":"157889065984",
"method":"reported",
"payload":{
"code":0
}
}
2)若保存失败,发送到该Topic的消息为:
{
"messageId":"157889065984",
"method":"reported",
"payload":{
"code": ${errorcode},
"msg": "${errormessage}"
}
}
字段说明:
字段名称 | 类型 | 是否必须 | 说明 |
---|---|---|---|
messageId | String | 是 | 应用程序或设备上报消息时的消息ID,最长为64位字符,物模型服务下发时将原值发送 |
method | String | 是 | 表示物模型服务响应method,与请求参数的method相同 |
payload | Object | 是 | 表示物模型服务响应的内容 |
payload.code | Int | 是 | 表示物模型处理该请求的状态,为0表示正常,不为0为异常,异常错误码请看错误码枚举 |
payload.msg | String | 是 | 表示物模型服务处理该请求的错误消息 |
4. 查询设备事件上报记录
应用程序通过 获取设备事件 接口获取设备事件上报的记录。
5. 返回设备事件上报记录结果
物模型服务查询设备的事件上报记录返回到应用程序。
4.2 获取事件上报频率
1. 发送获取属性值消息
设备在获取物模型属性的最新上报频率时,可发送消息到Topic:/${productId}/${deviceId}/thing/property/up
,发送的JSON格式如下:
{
"method":"getFrequency",
"messageId":"157889065989",
"events": {
"default":[
"switch"
]
}
}
字段说明:
字段名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
method | String | 是 | 表示设备或者应用程序请求物模型属性的操作类型 ,getFrequency 表示获取属性频率信息 |
messageId | String | 是 | 消息ID,最长为64位字符,标识该消息的唯一ID,发送端进行定位消息使用 |
events | 是 | Object | 事件对象 |
events.{module} |
是 | List(string) | 表示要获取的模块和事件标识符(Identifier)列表,如果事件标识符列表为空列表,则返回模块下所有事件频率信息 |
2. 下发获取属性频率信息
物模型服务在进行校验属性物模型之后,发送结果到Topic:/${productId}/${deviceId}/thing/property/up/reply
中。
1)若成功获取,发送到该Topic的JSON格式如下:
{
"method":"getFrequency",
"messageId":"157889065989",
"payload":{
"code":0,
"default":{
"switch":5
}
}
}
2)若获取失败,发送到该Topic的消息为:
{
"messageId":"157889065989",
"method":"getFrequency",
"payload":{
"code": ${errorcode},
"msg": "${errormessage}"
}
}
字段说明:
字段名称 | 类型 | 是否必须 | 说明 |
---|---|---|---|
messageId | String | 是 | 应用程序或设备上报消息时的消息ID,最长为64位字符,物模型服务下发时将原值发送 |
method | String | 是 | 表示物模型服务响应method,与请求参数的method相同 |
payload | Object | 是 | 表示物模型服务响应的内容 |
payload.code | Int | 是 | 表示物模型服务处理该请求的状态,为0表示正常,不为0为异常,异常错误码请看 错误码枚举 |
payload.msg | String | 是 | 表示物模型服务处理该请求的错误消息 |
payload.{module} |
String | 是 | 传入的模块标识符 |
payload.{module} .{propertyIdentifier} |
Int | 是 | 传入的事件标识符,如存在,则返回对应的上报频率,单位秒 |
五、错误码
errorCode | errorMessage |
---|---|
910001 | 不正确的JSON格式。 |
910002 | 缺少method信息 |
910004 | method是无效的方法。 |
910008 | 消息ID不存在 |
910009 | 消息ID长度不符合 |
910014 | 时间格式错误 |
910101 | 缺少eventIdentifier信息 |
910102 | 事件不符合物模型 |
910103 | 事件字段不存在 |
910104 | 缺少module信息 |
910104 | 缺少module信息 |
500 | 服务端处理异常。 |
最后编辑:admin 更新时间:2024-10-18 16:29