guifei zhu
2024-11-27 6017f46b762663b9393cdae8422e0de1ed3db218
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<template>
    <view>
    </view>
</template>
 
<script>
 
    export default {
        name: 'MqttView',
        data() {
            return {
 
            }
        },
        onReady() {
             
        },
        methods: {
            initMqtt(){
                uni.getSystemInfo({
                    success: (res) => {
                        let deviceId = res.deviceId
                        if (!deviceId) {
                            deviceId = 'mobile-' + this.tenantId + '-' + Date.parse(new Date())
                        }
                        uni.setStorageSync(this.$constant.DEVICE_ID, 'mobile-' + this.tenantId + '-' + res.deviceId);
                    }
                })
                    this.startConnect();
            },
             /* 连接MQTT */
             async startConnect() {
                 var _this = this
                 const account = uni.getStorageSync('account');
                 const deviceid = uni.getStorageSync(this.$constant.DEVICE_ID);
             
                 if (!account) {
             
                     return false
                 }
                 let opts = {
                     // #ifdef H5
                     url: 'ws://' + this.$api.mqttBaseUrl + ':8083/mqtt',
                     // #endif
                     // #ifdef APP-PLUS
                     url: 'wx://' + this.$api.mqttBaseUrl + ':8083/mqtt',
                     // #endif
                     clientId: deviceid,
                     username: account.username,
                     password: account.password
                 }
                 if (!this.$mqttTool.client) {
                     var client = await this.$mqttTool.connect(opts);
                 }
                 //订阅查询设备状态返回数据
                 this.$mqttTool.subscribe({
                     topic: this.$constant.SERVICE_DOWN + '/' + deviceid + '/#',
                     qos: 0
                 }).then(res => {
                     console.error(res)
                 })
              
                 //订阅设备故障广播(广播不在乎客户端id,发送给租户下所有在线的设备)
                 this.$mqttTool.subscribe({
                     topic: this.$constant.SERVICE_BROADCAST_TENANT_REAL_FAULT.replace('%s', this.tenantId),
                     qos: 0
                 }).then(res => {
                     console.error(res)
                 })
                 //订阅发送指令返回结果
                 // this.$mqttTool.subscribe({
                 //     topic: this.$constant.SERVICE_RES_EQU_CMD,
                 //     qos: 0
                 // }).then(res => {
                 //     console.error(res)
                 // })
                 // if (!client) {
                 //     return false
                 // }
                let that = this
             
                 client.on('connect', function(res) {
                     console.error('连接成功')
                 })
                 client.on('reconnect', function(res) {
                     console.error('重新连接')
                 })
                 client.on('error', function(res) {
                     console.info('连接错误')
                 })
                 client.on('close', function(res) {
             
                     console.error('关闭成功')
             
                 })
                 client.on('message', function(topic, message, buffer) {
                    that.$eventBus.$emit(that.$constant.MQTT_TOPIC_MESSAGE, message);
                     console.info(message)
                
                 })
             },
        },
        computed: {
            tenantId() {
                const userinfo = uni.getStorageSync('userinfo');
                const tenantid = userinfo.loginTenantId
                return tenantid;
            }
 
        }
    }
</script>
 
<style>
 
</style>