MQTT是ThingJS平台支持的四种数据对接方式之一。MQTT,也称为消息队列遥测传输,是一个ISO标准(ISO/IECPRF20922),基于发布或订阅范式的消息协议可以被视为“数据传输的桥梁”。MQTT是一种轻量级协议。使用MQTT协议的中心是broker(服务器/代理),客户端通过订阅和发布消息与数据进行交互。MQTT方法的使用步骤如下:1.直接连接MQTT服务器(需要websocket接入,Mosquitto支持websocket配置可以自行百度)。2.引用第三方mqtt库。3.MQTT数据连接。一个简单的例子如下:功能:通过MQTT读取数据,并将数据附加到对象(car01)上。当温度>30°C时,car01变为红色。变种应用程序;//应用程序对象varcar;//加载数据的叉车//导入样式文件THING.Utils.dynamicLoad(['https://www.thingjs.com/static/lib/stomp.min.js','/guide/examples/css/measure/panel.css'],function(){app=newTHING.App({url:'https://www.thingjs.com/static/models/storehouse'});app.on('load',function(){//设置摄像机位置和目标点app.camera.position=[44.38316010361372,22.256383671664036,37.42310488848945];app.camera.target=[19.488379488180318,0.17527928595920675,5.827049588512047];car=app.query('car01')[0];//在对象上创建一个monitorData对象,用于存储动态监控数据car.monitorData={'temperature':''};varmqclass=newMQConnection();//创建mq服务类newTHING.widget.Button('打开连接',function(){mqclass.initConnection();});newTHING.widget.Button('关闭连接',function(){mqclass.disconnection();});createHtml();initThingJsTip("MQTT是一个轻量级的协议,使用MQTT协议的中心是代理(server/broker),客户端通过订阅和发布消息与数据交互。
点击【打开阅读】可以读取数据,读取到的数据会显示在数据详情面板中。当温度值大于30℃时,车辆会设置红色效果,点击【关闭读数】停止数据读取!");})})classMQConnection{/***Constructor*/constructor(){this.init();}/***初始化*/init(){//数据推送的URL,可修改到自己的服务地址this.socketUrl='wss://www.3dmmd.cn:8086';//connectthis.stompClient=null;//this.initConnection();}/***初始化连接*/initConnection(){var_this=this;if(_this.stompClient!=null)return;_this.stompClient=Stomp.client(_this.socketUrl);varsuccess=function(){_this.successCallback();}varerror=function(error){_this.errorCallback(error);}_this.stompClient.connect({},success,error);_this.stompClient.debug=null;//如果需要打印Stomp日志,注释掉这行代码}/***连接成功回调,订阅主题*/successCallback(data){var_this=this;console.log('连接成功,订阅主题!');_this.stompClient.subscribe('/topic/monitor/temperature/one',function(message){if(message.body){让数据=message.body;缺点ole.log('接收温度数据:'+data);更新状态(数据);}else{console.log('没有数据推送!');}});}/***关闭连接*/disconnection(){console.log('连接已关闭!');this.stompClient.disconnect();}/***连接失败后的回调*/errorCallback(error){console.log('Connectionfailed!');控制台日志(错误);}}/***收到推送数据后更新状态*/functionupdateState(data){car??.setAttribute("monitorData/temperature",data);现在日期时间();如果(($('.empty').length)){$('.empty').remove();}if(!($('.tj-group').length)){lettbody=`
