MQTT 主题设计:物模型
- 参考:腾讯云物模型协议
- 参考:什么是物模型-阿里云物联网平台
- 参考:设备属性、事件、服务-阿里云物联网平台
思路
参考:
$thing/up/property/{ProductID}/{DeviceName}
/message/property/report
上传下载
- up
- down
物模型消息类型
- 属性:property
- 功能:action
- 事件:event
- 服务:service
主题设计
系统名字/up(上传还是下载)/property(物模型消息类型)/产品ID/设备ID/消息一级分类/消息二级分类
关于测点和主题的映射关系
| 测点ID | 主题 |
|---|---|
| 测点ID-001 | 系统名字-up-property-产品ID-设备ID-消息一级分类-消息二级分类-参数名字01 |
| 测点ID-002 | 系统名字-up-property-产品ID-设备ID-消息一级分类-消息二级分类-参数名字02 |
| 测点ID-003 | 系统名字-up-property-产品ID-设备ID-消息一级分类-消息二级分类-参数名字03 |
| 测点ID-004 | 系统名字-up-property-产品ID-设备ID-消息一级分类-消息二级分类-参数名字04 |
系统先加载配置表,然后再使用通配符订阅主题。
等到消息到来就方便解析了
属性
内容参考腾讯云物模型协议,我觉两层数据格式简洁
示例
设备属性上行请求 Topic: $thing/up/property/{ProductID}/{DeviceName}
请求
{
"method":"report",
"clientToken":"123",
"timestamp":1628646783,
"values":{
"power_switch":1,
"color":1,
"brightness":32
}
}
请求参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| method | String | report 表示设备属性上报。 |
| clientToken | String | 用于上下行消息配对标识。 |
| timestamp | Integer | 属性上报的时间,格式为 UNIX 系统时间戳,不填写该字段表示默认为当前系统时间。单位为毫秒。 |
| values | JSON | JSON 结构内为设备上报的属性值。 |
关于接收端是否响应问题,我的观点是不响应,不过可以先记录一下
设备属性下行响应 Topic: $thing/down/property/{ProductID}/{DeviceName}
响应
{
"method":"report_reply",
"clientToken":"123",
"code":0,
"status":"some message where error"
}
响应参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| method | String | report_reply 表示云端接收设备上报后的响应报文。 |
| clientToken | String | 用于上下行消息配对标识。 |
| code | Integer | 0表示云端成功收到设备上报的属性。 |
| status | String | 当 code 非0的时候,提示错误信息。 |
功能
应用调用设备行为 Topic: $thing/down/action/{ProductID}/{DeviceName}
示例
请求
应用端发起设备行为调用报文示例:
{
"method": "action",
"clientToken": "20a4ccfd-d308-****-86c6-5254008a4f10",
"actionId": "openDoor",
"timestamp": 1212121221,
"values": {
"userid": "323343"
}
}
请求参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| method | String | action 表示是调用设备的某个行为。 |
| clientToken | String | 消息 Id,回复的消息将会返回该数据,用于请求响应消息的对比。 |
| actionId | String | actionId 是物模型中的行为标识符,由开发者自行根据设备的应用场景定义。 |
| timestamp | Integer | 行为调用的当前时间,不填写则默认为调用行为的当前系统时间,单位为毫秒。 |
| values | String | 行为的调用参数,在物模型的行为中定义。 |
设备响应行为执行结果 Topic: $thing/up/action/{ProductID}/{DeviceName}
响应
响应消息格式:
{
"method": "action_reply",
"clientToken": "20a4ccfd-d308-11e9-86c6-5254008a4f10",
"code": 0,
"status": "some message where error",
"response": {
"Code": 0
}
}
响应参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| method | String | action_reply 表示是设备端执行完指定的行为向云端回复的响应。 |
| clientToken | String | 消息 Id,回复的消息将会返回该数据, 用于请求响应消息的对比。 |
| code | Integer | 行为执行结果,0表示成功。 |
| status | String | 行为执行失败后的错误信息描述。 |
| response | JSON | 设备行为中定义的返回参数,设备行为执行成功后,向云端返回执行结果。 |
事件
设备事件上行请求 Topic: $thing/up/event/{ProductID}/{DeviceName}
示例
请求
设备端请求报文示例:
{
"method":"event_post",
"clientToken":"123",
"eventId":"PowerAlarm",
"type":"fault",
"timestamp":1212121221,
"values":{
"Voltage":2.8,
"Percent":20
}
}
请求参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| method | String | event_post 表示事件上报。 |
| clientToken | String | 消息 ID,回复的消息将会返回该数据, 用于请求响应消息的对比。 |
| eventId | String | 事件的 Id,在物模型事件中定义。 |
| type | String | 事件类型。info:信息。alert:告警。fault:故障。 |
| values | String | 事件的参数,在物模型事件中定义。 |
| timestamp | Integer | 事件上报的时间,不填写该字段表示默认为当前系统时间。单位为毫秒。 |
设备事件下行响应 Topic: $thing/down/event/{ProductID}/{DeviceName}
响应
响应消息格式:
{
"method": "event_reply",
"clientToken": "123",
"code": 0,
"status": "some message where error",
"data": {}
}
响应参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| method | String | event_reply 表示是云端返回设备端的响应。 |
| clientToken | String | 消息 Id,回复的消息将会返回该数据,用于请求响应消息的对比。 |
| code | Integer | 事件上报结果,0表示成功。 |
| status | String | 事件上报结果描述。 |
| data | JSON | 事件上报返回的内容。 |
需要编写一个事件ID的表格
| 事件ID | 含义 |
|---|---|
| 事件ID的名字 | 事件含义 |
| 事件ID的名字 | 事件含义 |
| 事件ID的名字 | 事件含义 |
| 事件ID的名字 | 事件含义 |
事件属于某个系统内的发布订阅

浙公网安备 33010602011771号