1.0 MQTT
1.1 MQTT基础
MQTT是一种轻量级的发布-订阅消息传递协议,它可能最适合各种物联网设备,物联网平台服务器支持QoS级别0(最多一次)和QoS级别1(至少一次)以及一组预定义主题的MQTT代理。
1.2 MQTT连接
我们将在本文中使用令牌凭据对进行设备访问,这些凭证稍后将称为$ACCESS_TOKEN应用程序需要发送用户名包含$ACCESS_TOKEN的MQTT CONNECT消息。
连接状态码说明:
0x00 连接成功 - 成功连接
0x04 连接失败 - 用户名或密码错误。
0x05 连接未授权 - -用户名包含无效的 $ACCESS_TOKEN。
1.3 MQTT客户端
你可以在网上找到大量的MQTT客户端库或者模拟软件,本文中的示例将基于mqttfx客户端模拟软件进行演示
1.4 物联网平台创建设备
MQTT示例设备已提前创建好,ACCESS_TOKEN已实际准备为准
1.5 mqttfx创建连接
设置MQTT基本属性
Broker Address:iot.relaper.com
Broker Port:9001
User Name(Access Token):使用实际设备凭证
Password:无需填写
客户端连接物联网平台成功后,基于API进行通信。
1.6 Key-value格式
物联网平台支持以JSON格式的key-value字符串,值可以是string、bool、float、long或者二进制格式的序列化字符串。
例如:
{
"stringKey":"value1",
"booleanKey":true,
"doubleKey":42.0,
"longKey":73,
"jsonKey": {
"someNumber": 42,
"someArray": [1,2,3],
"someNestedObject": {"key": "value"}
}
}
2.0 遥测上传API
发布遥测数据到服务端必须PUBLISH消息发送到下面主题:
v1/devices/me/telemetry
支持最简单的数据格式是:
{
"key1": "value1",
"key2": "value2"
}
或者
[
{
"key1": "value1"
},
{
"key2": "value2"
}
]
请注意 在这种情况下服务端时间戳将分配给上传的数据!
如果您的设备能够获得客户端时间戳,则可以使用以下格式:
{
"ts": 1639714332000,
"values": {
"key1": "value1",
"key2": "value2"
}
}
在上面的示例中我们假设“1639714332000”是具有毫秒精度的Unix时间戳。
例如:值’1639714332000’对应于’2021-12-17 12:12:12’
示例:
物联网平台可通过设备详情的最新遥测数据模块查看:
3.0 属性API
物联网平台属性API能够使设备具备如下功能:
- 将客户端设备属性上传到服务端
- 从服务端请求客户端和共享属性
- 从服务端订阅共享属性
- 通过服务端发布客户端属性
3.1 通过服务端发布客户端属性
通过服务端发布客户端属性必须PUBLISH消息到下面主题:
支持的数据格式:v1/devices/me/attributes
示例:{
"attribute1": "value1",
"attribute2": true,
"attribute3": 42.0,
"attribute4": 73,
"attribute5": {
"someNumber": 42,
"someArray": [1,2,3],
"someNestedObject": {"key": "value"}
}
}
物联网平台可以通过设备详情的客户端属性查看:3.2 通过服务端获取属性值
通过服务端获取客户端属性或共享属性必须PUBLISH消息到下面主题:
其中$request_id表示整数的请求标识符。v1/devices/me/attributes/request/$request_id
在发送带有请求的PUBLISH消息之前客户端需要订阅下面主题:v1/devices/me/attributes/response/+
3.2.1 操作步骤演示
步骤一:设置订阅主题
步骤二:发布获取属性值主题
$request_id设置为1,保证整数的不重复性。
注意事项:需要设置一个空JSON格式数据
步骤三:订阅主题收到客户端属性3.3 通过服务端订阅属性
通过服务端订阅共享属性必须SUBSCRIBE消息到下面主题:
如果服务端组件(例如REST API或规则链)更改了共享属性时客户端就会收到对应属性值:v1/devices/me/attributes
{
"key1": "value1"
}
3.3.1 操作步骤演示
步骤一:订阅共享属性主题
步骤二:平台更改共享属性
平台可点击新增功能更改属性值
订阅主题接收到响应4.0 RPC API(远程指令下发)
4.1 服务端RPC
客户端订阅服务端RPC命令必须SUBSCRIBE消息发送下面主题:
订阅后客户端会收到一条命令作为对相应主题的PUBLISH命令:v1/devices/me/rpc/request/+
$request_id表示请求的整型标识符。v1/devices/me/rpc/request/$request_id
客户端PUBLISH下面主题进行响应:v1/devices/me/rpc/response/$request_id
4.1.1 操作步骤演示
步骤一:客户端订阅服务端RPC命令
步骤二:通过平台API进行远程指令下发
请求接口:基于账户/密码登录获取访问token
请求地址:【POST】http://iot.relaper.com/api/auth/login
请求数据:{
"username": "test@relaper.com",
"password": "123456"
}
请求接口:远程控制指令下发
注意事项:远程控制下发是双向的,当客户端响应成功,接口才会提示成功,否则提示为超时未响应。
请求地址:【POST】http://iot.relaper.com/api/plugins/rpc/twoway/**{{deviceId}}**
Header设置:增加token凭证
key:X-Authorization
value(Bearer后携带1个空格):”Bearer “ + 登录获取的token
请求token:Bearer eyJhbGciOiJIUzUxMiJ9.*
远程指令下发JSON格式数据:
请求地址{{deviceId}}通过物联网平台获取:{
"method": "SET",
"service": "",
"uri": "",
"params": {
"LED":"false"
}
}
点击设备详情,复制设备ID获取
设置X-Authorization token凭证:
远程控制指令下发:
步骤三:客户端PUBLISH主题进行响应
订阅收到对应远程指令
客户端响应