MQTT协议
本文章介绍如何通过MQTT进行遥测和属性数据上传以及RPC控制的实现。
发送属性和遥测数据
设备分直连设备和网关设备, 发送数据方式也有所不同。 telemetry 为 遥测, attributes表示属性,客户端上传的属性在服务器端永远为 ClientSide , 即客户端侧属性。 不推荐在服务端修改。
连接直连设备或者网关
通过 mqtt客户端连接mqtt服务器,用户名填写 token, 密码可以为空。
直连设备发送遥测数据
devices/me/telemetry
devices/me/attributes
MQTT的负载为如下格式
{
"stringvalue":"here is strvalue",
"intvalue":234
}
网关设备发送遥测数据
devices/设备名称/telemetry
devices/{设备名称/attributes
设备名称 则是隶属当前网关设备处理的设备名称。 MQTT的负载为如下格式
{
"stringvalue":"here is strvalue",
"intvalue":234
}
网关子设备的上线与已下线
gateway/connect
gateway/disconnect
注意, 这里直接兼容
v1/gateway/connect
v1/gateway/disconnect
网关设备批量发送设备遥测数据和属性数据
gateway/telemetry
gateway/attributes
注意, 这里直接兼容
v1/gateway/telemetry
v1/gateway/attributes
批量发送数据格式如下:
{
"subdevice1": [
{
"ts": 637834108219892435,
"devicestatus": 0,
"values": {
"string": "this string",
"float": 22.222
}
}
],
"subdevice2": [
{
"ts": 637834108219892435,
"devicestatus": 0,
"values": {
"intvalue": 22
}
}
]
}
这里是一个C#合成批量上传的例子
Dictionary<string, List<Playload>> pairs = new Dictionary<string, List<Playload>>();
var plst = new List<Playload>();
var values = new Dictionary<string, object>();
values.Add("string", "this string");
values.Add("intvalue",22);
plst.Add(new Playload() { DeviceStatus = DeviceStatus.Good, Ticks = DateTime.Now.Ticks, Values = values });
values.Add("float", 22.222);
plst.Add(new Playload() { DeviceStatus = DeviceStatus.Bad, Ticks = DateTime.Now.Ticks, Values = values });
pairs.Add("subdevice1",plst);
pairs.Add("subdevice2", plst);
var str= Newtonsoft.Json.JsonConvert.SerializeObject(pairs);
Console.WriteLine(str);