添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

设备请求共享属性的配置文件讲解

这篇文章只讲解 mqtt.json 配置文件中 attributeRequests 配置,attributeRequests配置如下:

"attributeRequests": [
    "retain": false,
    "topicFilter": "v1/devices/me/attributes/request",
    "topicExpression": "v1/devices/${deviceName}/attributes/response",
    "valueExpression": "{"${attributeKey}":"${attributeValue}"}",
    "deviceNameJsonExpression": "${SerialNumber}",
    "attributeNameJsonExpression": "${sensorModel}"

这几行配置,在配置啥?有什么用呢?

先回到最原始状态,设备想要发送获取共享属性的请求,它肯定使用mqtt发,但发到哪个topic呢?连接器又怎么返回数据给设备呢?连接器又该发到哪个topic呢?

就是这两个问题,怎么发,怎么收的问题,其中再加些参数提取问题。

"retain": false,这行配置可以忽略,这个 retain 是mqttClient.publish()方法的参数,也就是说连接器给设备发回复时,publish()里的参数由你决定。

"topicFilter": "v1/devices/me/attributes/request",这行配置,代表设备发送请求时,需要发送到这个topic。

"topicExpression": "v1/devices/${deviceName}/attributes/response",这行配置,代表连接器给设备回复时,将响应发送到这个topic。

"valueExpression": "{"attributeKey":"{attributeKey}":"

"deviceNameJsonExpression": "${SerialNumber}",这个行配置,告诉连接器,你应该去json负载中提取deviceName, json负载中 SerialNumber字段的值,就是deviceName的值。

"attributeNameJsonExpression": "${sensorModel}",这行配置,告诉连接器,你应该去json负载中提取,我要请求的共享属性key name,json负载中 sensorModel字段的值,就是我要请求的key name。

这几行配置大概讲完了,在这个配置中,我们发现,网关只实现一次只能请求一个共享属性的值,不能一次请求多个属性值。

再讲一个知识点,deviceNameJsonExpression、deviceNameTopicExpression的区别,假设设备发消息给连接器,topic:sensor/SN-002/connect,负载:{SerialNumber: "SN-001"}

"deviceNameJsonExpression": "${SerialNumber}",

"deviceNameTopicExpression": "(?<=sensor/)(.*?)(?=/connect)"

若是使用 deviceNameJsonExpression 配置,则代表,要连接器去json负载中提取deviceName,json负载中SerialNumber的值,就是deviceName的值,所以连接器提取到deviceName的值是 SN-001

若是使用 deviceNameTopicExpression 配置,则代表,要连接器去topic中去提取deviceName,后面的正则表达式,就能提取到deviceName,所以连接器用正则表达式去匹配topic,得到deviceName,deviceName的值就是 SN-002

其它类似,xxxJsonExpression、xxxTopicExpression,都是这个意思。

  •