vue订阅MQTT

安装

npm install mqtt

引入

import mqtt from 'mqtt'
Vue.prototype.mqtt = mqtt

页面中使用

import mqtt from 'mqtt'
methods:{
  initMQTT() {
      const connectUrl = 'ws://13.60.15.29:8083/mqtt';

      let client = mqtt.connect(connectUrl, {
          clean: true,
          connectTimeout: 4000,
          reconnectPeriod: 1000,
          clientId: 'camellia-web' + Date.now(),
          username: 'camellia-web'
      })

      // 需要订阅的主题
      const subscribe = ['/env_01/data/post', '/leak_01/data/post', '/smoke_01/data/post', '/dtu_01/data/post'];

      //成功连接后触发的回调
      client.on('connect', () => {
          console.log('已经连接成功');
          // 这里可以订阅多个主题
          client.subscribe(subscribe, () => {
              console.log(`订阅了主题 ${subscribe}`)
          })
      });
      let _this = this;
      // 当客户端收到一个发布过来的消息时触发回调
      client.on('message', function (topic, message) {
          // 这里有可能拿到的数据格式是Uint8Array格式,所以可以直接用toString转成字符串
          let data = JSON.parse(message.toString());
          // console.log("返回的数据:", topic);
          // console.log(data);
          if (topic === subscribe[0]) {
              _this.envData.temper = data.temper_1 + "℃";
              _this.envData.humidity = data.humidity_1 + "%RH";
              _this.envData.co = data.co_1 + "ppm";
              _this.envData.co2 = data.co2_1 + "ppm";
              _this.envData.pressure = data.pressure_1 + "pa";
              _this.envData.pm25 = data['pm2.5_1'] + "ug/m³";
              _this.envData.pm10 = data.pm10_1 + "ug/m³";
              _this.envData.noise = data.noise_1 + "dB";
          }
          // if (topic === subscribe[1]){
          //     $("#leak_1").text(data.ex_1 + '%LEL');
          //     $("#leak_2").text(data.ex_2 + '%LEL');
          //     $("#leak_3").text(data.ex_3 + '%LEL');
          //     $("#leak_4").text(data.ex_4 + '%LEL');
          // }
      });

      // 连接断开后触发的回调
      client.on("close", function () {
          console.log("已断开连接")
      });
  },
}

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue 中使用 MQTT,一般需要安装 `paho-mqtt` 库。可以通过 `npm` 进行安装: ``` npm install paho-mqtt --save ``` 接下来,我们可以在 Vue 的组件中使用 `paho-mqtt` 库进行 MQTT 的发布和订阅。 首先,需要创建一个 MQTT 的客户端连接对象,可以在 Vue 组件的 `created` 生命周期中进行创建: ```javascript created() { // 创建 MQTT 客户端连接对象 this.client = new Paho.MQTT.Client("localhost", 8000, "clientId"); // 连接服务器 this.client.connect({ onSuccess: this.onConnect }); }, ``` 其中,`Paho.MQTT.Client` 是 `paho-mqtt` 库提供的 MQTT 客户端连接对象。它的构造函数需要传入三个参数: - `host`:MQTT 服务器的主机名或 IP 地址; - `port`:MQTT 服务器的端口号; - `clientId`:客户端 ID。 接下来,我们可以在 `onConnect` 回调函数中订阅 MQTT 主题: ```javascript onConnect() { // 订阅主题 this.client.subscribe("testTopic"); }, ``` 其中,`this.client.subscribe` 方法用于订阅 MQTT 主题,需要传入一个主题名称作为参数。 当客户端收到 MQTT 消息时,会触发 `onMessageArrived` 回调函数。可以在该函数中处理接收到的消息: ```javascript onMessageArrived(message) { console.log("Received message:", message.payloadString); }, ``` 最后,我们可以在 Vue 组件中定义发布消息的方法: ```javascript methods: { // 发布消息 publishMessage() { const message = new Paho.MQTT.Message("Hello, MQTT!"); message.destinationName = "testTopic"; this.client.send(message); }, }, ``` 其中,`Paho.MQTT.Message` 是 `paho-mqtt` 库提供的 MQTT 消息对象。它的构造函数需要传入一个字符串作为消息内容。接着,我们需要为消息设置目标主题,然后通过 `this.client.send` 方法将消息发送出去。 完整的代码示例如下: ```javascript <template> <div> <button @click="publishMessage">发布消息</button> </div> </template> <script> import Paho from "paho-mqtt"; export default { data() { return { client: null, }; }, created() { // 创建 MQTT 客户端连接对象 this.client = new Paho.MQTT.Client("localhost", 8000, "clientId"); // 连接服务器 this.client.connect({ onSuccess: this.onConnect }); }, methods: { // MQTT 连接成功回调函数 onConnect() { // 订阅主题 this.client.subscribe("testTopic"); }, // MQTT 收到消息回调函数 onMessageArrived(message) { console.log("Received message:", message.payloadString); }, // 发布消息 publishMessage() { const message = new Paho.MQTT.Message("Hello, MQTT!"); message.destinationName = "testTopic"; this.client.send(message); }, }, mounted() { // 注册 MQTT 消息接收回调函数 this.client.onMessageArrived = this.onMessageArrived; }, }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狮子座的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值