DC3 Mqtt 驱动模块 #

位置:iot-dc3\dc3-driver\dc3-driver-mqtt

依赖服务(参考 Idea 开发环境启动即可):dc3-mysql、dc3-mongo、dc3-redis、dc3-rabbitmq、dc3-center-register、dc3-center-manager、dc3-center-data、dc3-center-auth、dc3-center-gateway、iot-dc3-web

开源工具:Spring Cloud

Mqtt:基于客户端-服务器的消息发布/订阅传输协议。MQTT 协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

配置文件 #

位置:iot-dc3\dc3-driver\dc3-driver-mqtt\src\main\resources\application.yml

1. mqtt 服务器连接配置 #

mqtt 用于配置连接一个 Mqtt 服务所需要的基本参数

mqtt:
    # 用户名
    username: dc3
    # 密码
    password: dc3
    # Mqtt 服务URL
    url: tcp://dc3-rabbitmq:1883
    receive-topics:
      - qos: 1
        name: data
    default-send-topic:
      qos: 1
      name: command
    keep-alive: 15
    completion-timeout: 3000
    batch:
      speed: 100
      interval: 5

2. driver.point-attribute #

point-attribute 用于配置读取一个 Mqtt 点位值所需要的基本参数

读取一个 Mqtt 服务的点位值需要:指令 Topic、指令 Qos,那么 dc3-mqtt 驱动模块此处的 point-attribute 就应该如下:

point-attribute:
    - displayName: 指令Topic
      name: commandTopic
      type: string
      value: commandTopic
      description: 测点/设备接收下行指令的Mqtt主题
    - displayName: 指令Qos
      name: commandQos
      type: int
      value: 2
      description: 测点/设备接收下行指令的Mqtt主题的Qos

3. driver.schedule #

schedule 用于设置 读 和 自定义方法的调度

read:用于配置周期性调用 iot-dc3\dc3-driver\dc3-driver-mqtt\src\main\java\com\dc3\driver\service\impl\DriverCustomServiceImpl.java (read 方法)

custom:用于配置周期性调用 iot-dc3\dc3-driver\dc3-driver-mqtt\src\main\java\com\dc3\driver\service\impl\DriverCustomServiceImpl.java(schedule 方法)

enable:是否启动

corn:corn 表达式,用于设置调度规则

schedule:
    read:
        enable: true
        corn: '0/30 * * * * ?'

小试牛刀 #

1. 启动依赖服务 #

  • 参考 Idea 开发环境启动 dc3-mysql、dc3-mongo、dc3-redis、dc3-rabbitmq、dc3-center-register、dc3-center-manager、dc3-center-data、dc3-center-auth、iot-dc3-web
  • 启动 dc3-driver-mqtt

2. 启动 Mqtt 调试工具 #

安装并启动 Mqtt.fx 软件

MQTTX版本

下载链接:百度云盘 Mqtt.fx (opens new window)

验证码:wona

3. 驱动 #

切换到 ''驱动" 菜单,当前 Mqtt 启动启动成功,并处于 在线 状态

4. 模板 #

切换到 “模板” 菜单,新建一个Mqtt数据模板 ,如下

5. 位号 #

点击编辑,下一步,切换到 “模板位号配置” 菜单,为刚刚新建的 模板 配置待读取的 位号,这里以一个 Float 类型的为例,如下

6. 设备 #

切换到 “设备” 菜单,新建一个设备,绑定模板,绑定驱动如下

7. 位号配置 #

提示:如果不需要控制设备,该位号配置可以不用配置

点击编辑,下一步切换到 “位号配置” 菜单,为新建的 设备 ,配置 位号 的的 属性值,从而是 dc3-mqtt 模块能下发控制指令到 Mqtt.fx 软件,如下

  • 指令 Topic:用于向设备发送控制指令的 topic,例如: dc3/mqtt/commad/device_1

  • 指令 Qos:用于向设备发送控制指令的 topic 的 qos,例如:0

8. Mqtt.fx 设置 #

9. 数据 #

切换到 “数据” 菜单,在 Mqtt.fx 中 publish 就会采集到一条数据

发送数据:

Public Topic 填写 dc3/default/dc3-driver-mqtt/data

请务必替换设备 ID 和位号 ID,点击设备标题和位号标题能获取到对应的ID。

{
  "deviceId":"1647845409185337346",
  "pointId":"1647845983742070785",
  "value":20.0,
  "createTime": "2022-03-17 14:39:36.000"
}

13. 下发控制指令到设备 #

Mqtt.fx 配置如下:

使用 接口调用指令下发,向设备端写入数据

请注意,设备 ID(deviceId)和位号 ID(pointId),如实际数据库中的数据为准,以下为例子:

Mqtt.fx 中收到发送过来的控制指令,如图:

上次更新: 2023/5/19 00:04:27