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的名字 事件含义

事件属于某个系统内的发布订阅

posted @ 2023-11-22 16:22  ioufev  阅读(607)  评论(0)    收藏  举报