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客户端模拟软件进行演示
image.png

1.4 物联网平台创建设备

MQTT示例设备已提前创建好,ACCESS_TOKEN已实际准备为准
设备直连 - 图2
image.png
image.png

1.5 mqttfx创建连接

设置MQTT基本属性
Broker Address:iot.relaper.com
Broker Port:9001
User Name(Access Token):使用实际设备凭证
Password:无需填写
image.png
客户端连接物联网平台成功后,基于API进行通信。
image.png

1.6 Key-value格式

物联网平台支持以JSON格式的key-value字符串,值可以是string、bool、float、long或者二进制格式的序列化字符串。
例如:

  1. {
  2. "stringKey":"value1",
  3. "booleanKey":true,
  4. "doubleKey":42.0,
  5. "longKey":73,
  6. "jsonKey": {
  7. "someNumber": 42,
  8. "someArray": [1,2,3],
  9. "someNestedObject": {"key": "value"}
  10. }
  11. }

2.0 遥测上传API

发布遥测数据到服务端必须PUBLISH消息发送到下面主题:

  1. v1/devices/me/telemetry

支持最简单的数据格式是:

  1. {
  2. "key1": "value1",
  3. "key2": "value2"
  4. }

或者

  1. [
  2. {
  3. "key1": "value1"
  4. },
  5. {
  6. "key2": "value2"
  7. }
  8. ]

请注意 在这种情况下服务端时间戳将分配给上传的数据!
如果您的设备能够获得客户端时间戳,则可以使用以下格式:

  1. {
  2. "ts": 1639714332000,
  3. "values": {
  4. "key1": "value1",
  5. "key2": "value2"
  6. }
  7. }

在上面的示例中我们假设“1639714332000”是具有毫秒精度的Unix时间戳。
例如:值’1639714332000’对应于’2021-12-17 12:12:12’
示例:
image.png
物联网平台可通过设备详情的最新遥测数据模块查看:
image.png

3.0 属性API

物联网平台属性API能够使设备具备如下功能:

  • 将客户端设备属性上传到服务端
  • 从服务端请求客户端和共享属性
  • 从服务端订阅共享属性
  • 通过服务端发布客户端属性

    3.1 通过服务端发布客户端属性

    通过服务端发布客户端属性必须PUBLISH消息到下面主题:
    1. v1/devices/me/attributes
    支持的数据格式:
    1. {
    2. "attribute1": "value1",
    3. "attribute2": true,
    4. "attribute3": 42.0,
    5. "attribute4": 73,
    6. "attribute5": {
    7. "someNumber": 42,
    8. "someArray": [1,2,3],
    9. "someNestedObject": {"key": "value"}
    10. }
    11. }
    示例:
    image.png
    物联网平台可以通过设备详情的客户端属性查看:
    image.png

    3.2 通过服务端获取属性值

    通过服务端获取客户端属性或共享属性必须PUBLISH消息到下面主题:
    1. v1/devices/me/attributes/request/$request_id
    其中$request_id表示整数的请求标识符。
    在发送带有请求的PUBLISH消息之前客户端需要订阅下面主题:
    1. v1/devices/me/attributes/response/+

    3.2.1 操作步骤演示

    步骤一:设置订阅主题
    image.png
    步骤二:发布获取属性值主题
    $request_id设置为1,保证整数的不重复性。
    注意事项:需要设置一个空JSON格式数据
    image.png
    步骤三:订阅主题收到客户端属性
    image.png

    3.3 通过服务端订阅属性

    通过服务端订阅共享属性必须SUBSCRIBE消息到下面主题:
    1. v1/devices/me/attributes
    如果服务端组件(例如REST API或规则链)更改了共享属性时客户端就会收到对应属性值:
    1. {
    2. "key1": "value1"
    3. }

    3.3.1 操作步骤演示

    步骤一:订阅共享属性主题
    image.png
    步骤二:平台更改共享属性
    平台可点击新增功能更改属性值
    image.png
    image.png
    订阅主题接收到响应
    image.png

    4.0 RPC API(远程指令下发)

    4.1 服务端RPC

    客户端订阅服务端RPC命令必须SUBSCRIBE消息发送下面主题:
    1. v1/devices/me/rpc/request/+
    订阅后客户端会收到一条命令作为对相应主题的PUBLISH命令:
    1. v1/devices/me/rpc/request/$request_id
    $request_id表示请求的整型标识符。
    客户端PUBLISH下面主题进行响应:
    1. v1/devices/me/rpc/response/$request_id

    4.1.1 操作步骤演示

    步骤一:客户端订阅服务端RPC命令
    image.png
    步骤二:通过平台API进行远程指令下发
    请求接口:基于账户/密码登录获取访问token
    请求地址:【POST】http://iot.relaper.com/api/auth/login
    请求数据:
    1. {
    2. "username": "test@relaper.com",
    3. "password": "123456"
    4. }
    image.png
    请求接口:远程控制指令下发
    注意事项:远程控制下发是双向的,当客户端响应成功,接口才会提示成功,否则提示为超时未响应。
    请求地址:【POST】http://iot.relaper.com/api/plugins/rpc/twoway/**{{deviceId}}**
    Header设置:增加token凭证
    key:X-Authorization
    value(Bearer后携带1个空格):”Bearer “ + 登录获取的token
    请求token:Bearer eyJhbGciOiJIUzUxMiJ9.*
    远程指令下发JSON格式数据:
    1. {
    2. "method": "SET",
    3. "service": "",
    4. "uri": "",
    5. "params": {
    6. "LED":"false"
    7. }
    8. }
    请求地址{{deviceId}}通过物联网平台获取:
    点击设备详情,复制设备ID获取
    image.png
    设置X-Authorization token凭证:
    image.png
    远程控制指令下发:
    image.png
    步骤三:客户端PUBLISH主题进行响应
    订阅收到对应远程指令
    image.png
    客户端响应
    image.png