You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
5.3 KiB
158 lines
5.3 KiB
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
<link rel="shortcut icon" href="../../image/oss/iot/favicon2.ico" type="image/x-icon" />
|
|
<link rel="stylesheet" href="../../lib/element-ui/index.css" />
|
|
<link rel="stylesheet" href="./css/index.css" />
|
|
<script src="../common/util.js"></script>
|
|
<script src="../../lib/bigscreen/lib/jquery/jquery-1.9.1.min.js"></script>
|
|
<script src="../../lib/bigscreen/js/vue.min.js"></script>
|
|
<script src="../../lib/element-ui/index.js"></script>
|
|
<script type="text/javascript" src="../../lib/layer/layer.js"></script>
|
|
<script type="text/javascript" src="../../lib/mqtt/mqtt.min.js"></script>
|
|
<title>设备远程调试</title>
|
|
</head>
|
|
<body>
|
|
<div id="app" v-cloak>
|
|
<el-row>
|
|
<el-col :span="6">
|
|
<div class="grid-content">
|
|
<div>
|
|
<div>
|
|
<label class="el-form-item__label" style="">连接开关</label>
|
|
</div>
|
|
<div style="text-align: center;">
|
|
<el-button :class="connectMode?'el-button--success':'el-button--info'" @click="onConnect" style="width:80%;">{{connectMode?'关闭':'打开'}}</el-button>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div style="overflow: hidden;">
|
|
<label class="el-form-item__label" style="">收发数据类型</label>
|
|
</div>
|
|
<div style="padding:5px 15px;">
|
|
<el-radio v-model="dataType" @change="changeType" label="1">16进制</el-radio>
|
|
<el-radio v-model="dataType" @change="changeType" label="2">ASCII</el-radio>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</el-col>
|
|
<el-col :span="18"><div class="grid-content">
|
|
<el-input type="textarea" v-model="recedisplay" id="textarea" placeholder="接收区" :rows="10" ></el-input>
|
|
</div></el-col>
|
|
|
|
</el-row>
|
|
<el-row style="margin-top:3px;">
|
|
<el-col :span="6">
|
|
<div class="grid-content">
|
|
<div style="text-align: center;padding: 15px;">
|
|
<el-button @click="sendData" style="width: 70%;height: 70px;">发送</el-button>
|
|
</div>
|
|
</div>
|
|
</el-col>
|
|
<el-col :span="18"><div class="grid-content">
|
|
<el-input type="textarea" v-model="senddisplay" placeholder="发送区" :rows="4" ></el-input>
|
|
</div></el-col>
|
|
</el-row>
|
|
</div>
|
|
<script type="text/javascript">
|
|
var app = new Vue({
|
|
el: '#app' ,
|
|
data: function(){
|
|
return {
|
|
recedisplay: '' , // 接收显示值
|
|
dataType: '1' , // 16进制或者ascII
|
|
senddisplay: '' , // 发送值
|
|
receOrginalData: [] , // 接收原始数据
|
|
connectMode: false , // 连接状态
|
|
client : '' , // mqtt连接状态
|
|
deviceCode: '' , // 设备号
|
|
}
|
|
},
|
|
methods: {
|
|
sendData(){
|
|
// 发送数据点击
|
|
if( this.senddisplay.trim() != '' ){
|
|
this.client.publish('/transmit/device' ,JSON.stringify( { 'messageType':2 , 'dataType': this.dataType ,
|
|
'data':this.senddisplay.trim() ,'deviceCode': this.deviceCode }) );
|
|
}
|
|
},
|
|
changeType(){
|
|
// 切换数据显示
|
|
this.dataDisplay();
|
|
},
|
|
onConnect(){
|
|
// 连接开关点击
|
|
this.connectMode= ! this.connectMode ;
|
|
},
|
|
dataDisplay(){
|
|
this.recedisplay = '' ;
|
|
var valuelist = this.receOrginalData ;
|
|
if( valuelist.length > 300 ){
|
|
valuelist.shift();
|
|
}
|
|
for( var i=0; i< valuelist.length ; i++ ){
|
|
var time = timeStamp2String( valuelist[i].time,'hh:mm:ss' ) ;
|
|
var ascii = valuelist[i].ascii ;
|
|
var byte = valuelist[i].byte ;
|
|
var direction = valuelist[i].direction ;
|
|
this.recedisplay += '['+ time + (direction==1?' 发送 ':' 接收 ') + ']:' + ( this.dataType==1? gdv(byte) : gdv(ascii) ) +"\r\n" ;
|
|
}
|
|
var height=$("#textarea")[0].scrollHeight;
|
|
$("#textarea").scrollTop(height);
|
|
},
|
|
mqttInit(){
|
|
// mqtt 初始化
|
|
var that = this ;
|
|
var client = this.client ;
|
|
const options = {
|
|
connectTimeout: 4000, // 超时时间
|
|
// 认证信息
|
|
clientId: 'brower_' + parseInt(Math.random()/31.1*10000000000),
|
|
username: mqttUserName ,
|
|
password: mqttPassword ,
|
|
}
|
|
client = mqtt.connect('ws://'+document.domain+':8083/mqtt', options) ;
|
|
client.on('reconnect', function(error) {
|
|
console.log("reconnect");
|
|
})
|
|
client.on('error', function(error) {
|
|
console.log('连接失败:', error)
|
|
})
|
|
client.on('message', function(topic, message,s) {
|
|
if( that.connectMode ){
|
|
if( message.toString().indexOf('error') > -1 ){
|
|
layer.msg("设备离线,无法通信");
|
|
}else{
|
|
that.receOrginalData.push( eval('('+ message.toString() +')') ) ;
|
|
that.dataDisplay();
|
|
}
|
|
}
|
|
})
|
|
if( that.deviceCode != ''){
|
|
// 连接
|
|
client.publish('/transmit/device' ,JSON.stringify( { 'messageType':1 , 'deviceCode':that.deviceCode }) );
|
|
client.subscribe("/sys/debug/"+ that.deviceCode );
|
|
setInterval(function(){
|
|
if( that.connectMode ){
|
|
client.publish('/transmit/device' ,JSON.stringify( { 'messageType':1 , 'deviceCode':that.deviceCode }) );
|
|
}
|
|
},2.4*60*1000)
|
|
}
|
|
this.client = client ;
|
|
}
|
|
},
|
|
created(){
|
|
this.deviceCode = getQueryString("devicecode");
|
|
this.mqttInit();
|
|
},
|
|
mounted(){
|
|
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
|