Onenet MQTT Client
onenet平台配置
- 在消息队列MQ页面中,创建实例。
- 进入实例页面,此页面中的access-key会配置到airiot平台驱动配置中。点击左侧的topic管理,添加topic。
- 进入topic管理后,可添加topic。点击某个topic的详情,进入topic的配置页面,在topic下,增加订阅名称。
配置说明
- 在系统模型管理界面中选择要配置的模型,右侧选项卡选择设备配置,在设备驱动一栏选择MQTT客户端。无无该选项时,点击右侧的驱动市场按钮在线安装驱动。
- 配置驱动参数
注: (1)通讯监控参数:平台通用配置,当某个资产数据点中的最新上数时间距离当前时间超过此参数时,平台判定资产掉线。 (2)自定义脚本:用户可编写自定义脚本适配不同设备,解析消息和组装要发送的消息内容。
- 根据设备具体情况配置数据点
注:数据点标识将会在脚本返回值中使用。
脚本
脚本格式
脚本语言采用的是JavaScript,一部分为固定格式: 脚本返回值是驱动接收的固定格式,整体为对象数组:[{ id:设备标识, values:数据点标识和值,time:毫秒时间戳 }],可同时返回多个资产的数据。 values为对象,例如:{"d1":100},属性名为数据点标识,值为数据点值。 类型:id为字符串,values为对象,time为number。 数组内每个对象对应单个资产的多个数据值,若没有time字段,驱动将以当前时间为准。
[
{ "id":"965564161", "values":{"d1":100},"time": 1657680448722}
]
ParseHandle = function (topic, package) {
// 处理package
// .......
// 将处理后的数据转为平台接收的格式
let id = "abcd1234" //id是资产编号,平台通过id判断数据和资产的对应关系,必需
let values = {"d1":100} // values是一个对象,key为数据点标识,值就是采集的具体数值,必需
let time = 1644290863000 // 数据点采集时间,UNIX毫秒时间戳,没有time时,默认采用服务器时间
return [ //可返回多个对象,对应多个资产
{ id, values,time } //返回的对象中的key的名字必须为id,values,time
]
}
消息格式
收到的topic为onenet发送消息的topic
package为onenet发送的消息,格式为一个js对象。属性有msgid,data,timestamp,类型均为字符串
例:package = {
'msgid': '13248',
'data': '{"sysProperty":{"messageType":"deviceDatapoint","productId":"531980"},"appProperty":{"deviceId":"965564161","dataTimestamp":1657531586957,"datastream":"3200_0_5750"},"body":"42345678"}',
'timestamp': '1657531586962 '
}
脚本示例
本示例以固定数据点d1为例,实际应用中,应解析协议,再对应数据点。
// 收到的值:
// package = {
// 'msgid': '13248',
// 'data': '{"sysProperty":{"messageType":"deviceDatapoint","productId":"531980"},"appProperty":{"deviceId":"965564161","dataTimestamp":1657531586957,"datastream":"3200_0_5750"},"body":"42345678"}',
// 'timestamp': '1657531586962'
//}
ParseHandle = function (topic, package) {
console.log(package)
let msg = JSON.parse(package.data) // 将package.data解析为js对象
if (msg.sysProperty && msg.sysProperty.messageType && msg.sysProperty.messageType === "deviceDatapoint") {
let id = msg.appProperty.deviceId
let values = { "d1": Number(msg.body) } // 以数据点d1为例,将body的值赋给d1
return [{ id, values }]
}
return []
}