收藏
回答

非tarbar页面使用MQTT协议订阅主题,但只能发布不能接收?

我从tarbar页面输入账号密码验证通过后跳转至控制页面,控制页面中按钮可正常点击发送数值到mqtt服务器,但HumdValue那里一直接收不到信息,如果编译模式选择单index的话,console.log还可以输出connected callback ,并且可正常收到HumdValue数据,但是若是普通编译情况下,跳转至控制页面后,没有输出connected callback,并且收不到mqtt服务器端发来的信息,接收信息是使用一个MessageProcess的方法,这个方法与之前输出conneed callback的方法一同放在onLoad下,望大家能给予意见以及建议,谢谢大家,以下是index.js代码
import mqtt from './../../utils/mqtt.js';


//获取应用实例
const app = getApp();


Page({
  data: {
    client: null,
    topic: {
      LEDcontrolTopic: 'control_led',
      NumTopic:'num_car',
    },
    value: {
      Humdlogo: '/pages/images/humd.png',
      HumdValue: 0,
    },
    LEDValue: [{
      LEDlogo: '/pages/images/LED_gray.png',
      ButtonValue: '第一个门开启',
      ButtonFlag: true,
    }],

  onLoad: function() {
    console.log("onload");
    var that = this;
    this.data.client = app.globalData.client;
    that.data.client.on('connect', that.ConnectCallback);
    that.data.client.on("message", that.MessageProcess);
    that.data.client.on("error", that.ConnectError);
    that.data.client.on("reconnect", that.ClientReconnect);
    that.data.client.on("offline", that.ClientOffline);
  },


  onShow: function() {
    console.log("on show"); 
  },


  onHide: function() {
    console.log("on hide");
  },


  onUnload: function() {
    console.log("on unload");
  },


  LedControl: function(e) {
    var that = this;
    
    if (that.data.LEDValue[0].ButtonFlag) {
        that.setData({
          'LEDValue[0].ButtonValue': '第一个门关闭',
          'LEDValue[0].ButtonFlag': false,
          "LEDValue[0].LEDlogo": './../images/LED_red.png',
        })
      that.data.client.publish(that.data.topic.LEDcontrolTopic, "4",{
        qos: 1
      });
    } else {
          that.setData({
            'LEDValue[0].ButtonValue': '第一个门开启',
            'LEDValue[0].ButtonFlag': true,
            "LEDValue[0].LEDlogo": './../images/LED_gray.png',
          })
      that.data.client.publish(that.data.topic.LEDcontrolTopic, "7",{
        qos: 1
      });
    }
  },
  
  MessageProcess: function(topic, payload) {
    var that = this;
    var payload_string = payload.toString();
    if (topic == that.data.topic.NumTopic) {
      that.setData({
        'value.HumdValue': payload_string
      })
      }
  },


  ConnectCallback: function(connack) {
    var that = this;
    console.log("connect callback ");
    for (var v in that.data.topic) {
      that.data.client.subscribe(that.data.topic[v], {
        qos: 1
      });
    }
  },


  ConnectError: function(error) {
    console.log(error)
  },


  ClientReconnect: function() {
    console.log("Client Reconnect")
  },


  ClientOffline: function() {
    console.log("Client Offline")
  }


})
最后一次编辑于  星期四 16:34
回答关注问题邀请回答
收藏
登录 后发表内容
问题标签