fix:解决设备运行状态无法显示问题https://gitee.com/beecue/fastbee/issues/IAW9KE

This commit is contained in:
Ming
2024-11-28 05:12:59 +08:00
parent c12352ffea
commit 5abe95f617

View File

@@ -420,6 +420,9 @@ export default {
/* Mqtt回调处理 */ /* Mqtt回调处理 */
mqttCallback() { mqttCallback() {
this.$mqttTool.client.on('message', (topic, message, buffer) => { this.$mqttTool.client.on('message', (topic, message, buffer) => {
if (message instanceof Uint8Array) {
message = new TextDecoder().decode(message);
}
let topics = topic.split('/'); let topics = topic.split('/');
let productId = topics[1]; let productId = topics[1];
let deviceNum = topics[2]; let deviceNum = topics[2];
@@ -442,29 +445,29 @@ export default {
if (topics[4] == 'reply') { if (topics[4] == 'reply') {
this.$modal.notifySuccess(message); this.$modal.notifySuccess(message);
} }
if (topic.endsWith('ws/service')) { if (topic.endsWith('ws/service') || topics[3] == 'monitor') {
console.log('接收到【物模型】主题1', topic); console.log('接收到【物模型】主题1', topic);
console.log('接收到【物模型】内容:', message); console.log('接收到【物模型】内容:', message);
// 更新列表中设备的属性 // 更新列表中设备的属性
if (this.deviceInfo.serialNumber == deviceNum) { if (this.deviceInfo.serialNumber == deviceNum) {
for (let j = 0; j < message.message.length; j++) { for (let j = 0; j < message.length; j++) {
let isComplete = false; let isComplete = false;
// 设备状态 // 设备状态
for (let k = 0; k < this.deviceInfo.thingsModels.length && !isComplete; k++) { for (let k = 0; k < this.deviceInfo.thingsModels.length && !isComplete; k++) {
if (this.deviceInfo.thingsModels[k].id == message.message[j].id) { if (this.deviceInfo.thingsModels[k].id == message[j].id) {
// 普通类型(小数/整数/字符串/布尔/枚举) // 普通类型(小数/整数/字符串/布尔/枚举)
if (this.deviceInfo.thingsModels[k].datatype.type == 'decimal' || this.deviceInfo.thingsModels[k].datatype.type == 'integer') { if (this.deviceInfo.thingsModels[k].datatype.type == 'decimal' || this.deviceInfo.thingsModels[k].datatype.type == 'integer') {
this.deviceInfo.thingsModels[k].shadow = Number(message.message[j].value); this.deviceInfo.thingsModels[k].shadow = Number(message[j].value);
} else { } else {
this.deviceInfo.thingsModels[k].shadow = message.message[j].value; this.deviceInfo.thingsModels[k].shadow = message[j].value;
} }
isComplete = true; isComplete = true;
break; break;
} else if (this.deviceInfo.thingsModels[k].datatype.type == 'object') { } else if (this.deviceInfo.thingsModels[k].datatype.type == 'object') {
// 对象类型 // 对象类型
for (let n = 0; n < this.deviceInfo.thingsModels[k].datatype.params.length; n++) { for (let n = 0; n < this.deviceInfo.thingsModels[k].datatype.params.length; n++) {
if (this.deviceInfo.thingsModels[k].datatype.params[n].id == message.message[j].id) { if (this.deviceInfo.thingsModels[k].datatype.params[n].id == message[j].id) {
this.deviceInfo.thingsModels[k].datatype.params[n].shadow = message.message[j].value; this.deviceInfo.thingsModels[k].datatype.params[n].shadow = message[j].value;
isComplete = true; isComplete = true;
break; break;
} }
@@ -473,11 +476,11 @@ export default {
// 数组类型 // 数组类型
if (this.deviceInfo.thingsModels[k].datatype.arrayType == 'object') { if (this.deviceInfo.thingsModels[k].datatype.arrayType == 'object') {
// 1.对象类型数组,id为数组中一个元素,例如array_01_gateway_temperature // 1.对象类型数组,id为数组中一个元素,例如array_01_gateway_temperature
if (String(message.message[j].id).indexOf('array_') == 0) { if (String(message[j].id).indexOf('array_') == 0) {
for (let n = 0; n < this.deviceInfo.thingsModels[k].datatype.arrayParams.length; n++) { for (let n = 0; n < this.deviceInfo.thingsModels[k].datatype.arrayParams.length; n++) {
for (let m = 0; m < this.deviceInfo.thingsModels[k].datatype.arrayParams[n].length; m++) { for (let m = 0; m < this.deviceInfo.thingsModels[k].datatype.arrayParams[n].length; m++) {
if (this.deviceInfo.thingsModels[k].datatype.arrayParams[n][m].id == message.message[j].id) { if (this.deviceInfo.thingsModels[k].datatype.arrayParams[n][m].id == message[j].id) {
this.deviceInfo.thingsModels[k].datatype.arrayParams[n][m].shadow = message.message[j].value; this.deviceInfo.thingsModels[k].datatype.arrayParams[n][m].shadow = message[j].value;
isComplete = true; isComplete = true;
break; break;
} }
@@ -492,8 +495,8 @@ export default {
for (let m = 0; m < this.deviceInfo.thingsModels[k].datatype.arrayParams[n].length; m++) { for (let m = 0; m < this.deviceInfo.thingsModels[k].datatype.arrayParams[n].length; m++) {
let index = n > 9 ? String(n) : '0' + k; let index = n > 9 ? String(n) : '0' + k;
let prefix = 'array_' + index + '_'; let prefix = 'array_' + index + '_';
if (this.deviceInfo.thingsModels[k].datatype.arrayParams[n][m].id == prefix + message.message[j].id) { if (this.deviceInfo.thingsModels[k].datatype.arrayParams[n][m].id == prefix + message[j].id) {
this.deviceInfo.thingsModels[k].datatype.arrayParams[n][m].shadow = message.message[j].value; this.deviceInfo.thingsModels[k].datatype.arrayParams[n][m].shadow = message[j].value;
isComplete = true; isComplete = true;
} }
} }
@@ -505,8 +508,8 @@ export default {
} else { } else {
// 整数、小数和字符串类型数组 // 整数、小数和字符串类型数组
for (let n = 0; n < this.deviceInfo.thingsModels[k].datatype.arrayModel.length; n++) { for (let n = 0; n < this.deviceInfo.thingsModels[k].datatype.arrayModel.length; n++) {
if (this.deviceInfo.thingsModels[k].datatype.arrayModel[n].id == message.message[j].id) { if (this.deviceInfo.thingsModels[k].datatype.arrayModel[n].id == message[j].id) {
this.deviceInfo.thingsModels[k].datatype.arrayModel[n].shadow = message.message[j].value; this.deviceInfo.thingsModels[k].datatype.arrayModel[n].shadow = message[j].value;
isComplete = true; isComplete = true;
break; break;
} }
@@ -518,15 +521,15 @@ export default {
for (let k = 0; k < this.deviceInfo.chartList.length; k++) { for (let k = 0; k < this.deviceInfo.chartList.length; k++) {
if (this.deviceInfo.chartList[k].id.indexOf('array_') == 0) { if (this.deviceInfo.chartList[k].id.indexOf('array_') == 0) {
// 数组类型匹配,例如array_00_gateway_temperature // 数组类型匹配,例如array_00_gateway_temperature
if (this.deviceInfo.chartList[k].id == message.message[j].id) { if (this.deviceInfo.chartList[k].id == message[j].id) {
// let shadows = message.message[j].value.split(","); // let shadows = message[j].value.split(",");
this.deviceInfo.chartList[k].shadow = message.message[j].value; this.deviceInfo.chartList[k].shadow = message[j].value;
// 更新图表 // 更新图表
for (let m = 0; m < this.monitorChart.length; m++) { for (let m = 0; m < this.monitorChart.length; m++) {
if (message.message[j].id == this.monitorChart[m].data.id) { if (message[j].id == this.monitorChart[m].data.id) {
let data = [ let data = [
{ {
value: message.message[j].value, value: message[j].value,
name: this.monitorChart[m].data.name, name: this.monitorChart[m].data.name,
}, },
]; ];
@@ -543,15 +546,15 @@ export default {
} }
} else { } else {
// 普通类型匹配 // 普通类型匹配
if (this.deviceInfo.chartList[k].id == message.message[j].id) { if (this.deviceInfo.chartList[k].id == message[j].id) {
this.deviceInfo.chartList[k].shadow = message.message[j].value; this.deviceInfo.chartList[k].shadow = message[j].value;
// 更新图表 // 更新图表
for (let m = 0; m < this.monitorChart.length; m++) { for (let m = 0; m < this.monitorChart.length; m++) {
if (message.message[j].id == this.monitorChart[m].data.id) { if (message[j].id == this.monitorChart[m].data.id) {
isComplete = true; isComplete = true;
let data = [ let data = [
{ {
value: message.message[j].value, value: message[j].value,
name: this.monitorChart[m].data.name, name: this.monitorChart[m].data.name,
}, },
]; ];