Web组态数据联动

1. 通过get/post获取设备列表信息

2. websocket连接mqtt服务器,接收json报文信息

3. 通过Alpine进行数据联动

4. 封装svg对象,更新属性值

index.html

<!DOCTYPE html>  
<html lang="en">  
<head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title>组态数据联动</title>
</head>  <body x-data="mqttApp()" x-init="initDevices()">  <ul><li><span>Web组态数据联动</span></li> <li><span>1. 通过get/post获取设备列表信息</span></li> <li><span>2. websocket连接mqtt服务器,接收json报文信息</span></li> <li><span>3. 通过Alpine进行数据联动</span></li> <li><span>4. 封装svg对象,更新属性值</span></li>  <li><span>MQTT测试指令</span></li> <li><span>{ "id": "ZP710", "value": "running" } </span></li> <li><span>{ "id": "ZP711", "value": "warning" } </span></li><li><span>{ "id": "ZP712", "value": "error" } </span></li></ul> <button @click="fetchGet">Http Get测试</button><button @click="fetchPost">Http Post测试</button><br/><svg-component id="workshop1" svg-url="svg/workshop1.svg"></svg-component>  <br/><!-- 设备列表 -->  <ul>  <template x-for="device in devices" :key="device.id">  <li>ID: <span x-text="device.id"></span>, 名称: <span x-text="device.name"></span>, 状态: <span x-text="device.status"></span></li>  </template>  </ul>  <script src="./js/jquery.min.js"></script><script src="./js/alpine.min.js" defer></script>  <script src="./js/mqtt.min.js"></script>  <script src="./js/svg-component.js"></script> <script>  function mqttApp() {  return {  ZP710: { value: '无数据' },  devices: [], // 设备列表数据模型  mqttClient: null,  workshop1: null,async fetchGet() {  fetch('http://localhost:8081/api/version/info', {  method: 'GET', // 默认就是 GET,其实可以省略这一行  headers: {   'Authorization': 'Bearer ' + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOiIyIiwiVXNlckFjY291bnQiOiJhZG1pbiIsIm5iZiI6MTcyOTA0MTY0NiwiZXhwIjoxNzI5MTI4MDQ2LCJpc3MiOiJsSkVsdFJ1ayIsImF1ZCI6ImxKRWx0UnVrIn0.q7GfL15a0N6YEEQ6aNfPr4O5YnyZ2wMzs3UVT8CjqoA'}  })  .then(response => {  if (!response.ok) {  throw new Error('Network response was not ok ' + response.statusText);  }  return response.json(); // 或者 response.text()、response.blob() 等,取决于你期望的响应类型  })  .then(data => {  alert(JSON.stringify(data));   // 处理响应数据  })  .catch(error => {  console.error('There has been a problem with your fetch operation:', error);  });},async fetchPost() { // 创建一个 FormData 对象  const formData = new FormData();  formData.append('account', 'admin');  formData.append('password', 'admin'); // const jsonData = JSON.stringify({ //   account: 'admin',  //   password: 'admin'  // });  fetch('http://localhost:8081/api/user/login', {  method: 'POST',  headers: {'Authorization': 'Bearer ' + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOiIyIiwiVXNlckFjY291bnQiOiJhZG1pbiIsIm5iZiI6MTcyOTA0MTY0NiwiZXhwIjoxNzI5MTI4MDQ2LCJpc3MiOiJsSkVsdFJ1ayIsImF1ZCI6ImxKRWx0UnVrIn0.q7GfL15a0N6YEEQ6aNfPr4O5YnyZ2wMzs3UVT8CjqoA'},  body: formData})  .then(response => {  if (!response.ok) {  throw new Error('Network response was not ok ' + response.statusText);  }  return response.json(); // 处理响应  })  .then(data => {   alert(JSON.stringify(data));  })  .catch(error => {  console.error('There has been a problem with your fetch operation:', error);  });},initDevices() {  // 使用模拟数据初始化设备列表  this.devices = [  { id: 'ZP710', name: '设备1', status: '' },  { id: 'ZP711', name: '设备2', status: '' },  { id: 'ZP712', name: '设备3', status: '' }  ];  // 初始化 MQTT 客户端(保持原样)  const url = 'ws://127.0.0.1:5001/mqtt';  const clientId = 'mqweb_' + Math.random().toString(16).substr(2, 8); // 生成唯一客户端 IDconst options = {  clientId: clientId,  username: 'admin',  password: '123456', clean: true, // 设置为 true 以便在断开时清除会话  keepalive: 60, // 将 KeepAlive 设置为 60秒  reconnectPeriod: 1000, // 如果连接丢失,1秒后重连  connackWaitTimeout: 60 * 1000 ,// 连接确认等待超时,设置为 60秒};  this.mqttClient = mqtt.connect(url, options);  this.mqttClient.on('connect', () => {  console.log('MQTT 连接成功');  this.mqttClient.subscribe('iot/data');  });  this.mqttClient.on('error', (err) => {  console.error('连接错误:', err);  });  this.mqttClient.on('close', () => {  console.log('连接关闭');  });  this.mqttClient.on('disconnect', (packet) => {  console.log('断开连接:', packet);  });  this.mqttClient.on('message', (topic, message) => {  const data = JSON.parse(message.toString());  if (data.id && data.value) {  // 更新文本信息let device = this.devices.find(d => d.id === data.id);  if (device) {  device.status = data.value;   }  // 更新svg动画var color;switch (data.value) {  case 'running': color = 'green';  break;  case 'warning': color = 'yellow'; break;  case 'error': color = 'red'; break;  default: color = 'gray'; break;  }  this.workshop1.setAttribute(data.id, 'fill', color); }  }); this.workshop1 = document.getElementById('workshop1');  },  };  }  </script>  
</body>  
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wavelet Convolutions for Large Receptive Fields

大感受野的小波卷积 论文链接&#xff1a;https://arxiv.org/abs/2407.05848v2 项目链接&#xff1a;https://github.com/BGU-CS-VIL/WTConv Abstract 近年来&#xff0c;人们一直试图增加卷积神经网络&#xff08;CNN&#xff09;的核大小&#xff0c;以模拟Vision Transfo…

基于深度学习的车辆车型检测识别系统(YOLOV5)

界面图&#xff1a; 项目简介&#xff1a; 网络&#xff1a;深度学习网络 yoloV5 软件&#xff1a;PycharmAnaconda 环境&#xff1a;python3.8 opencv PyQt5 torch1.9 文件&#xff1a;训练集8000张图片 测试集1000张图片 系统包含所有文件夹 环境文件 UI文件 功能&a…

Zookeeper快速入门:部署服务、基本概念与操作

文章目录 一、部署服务1.下载与安装2.查看并修改配置文件3.启动 二、基本概念与操作1.节点类型特性总结使用场景示例查看节点查看节点数据 2.文件系统层次结构3.watcher 一、部署服务 1.下载与安装 下载&#xff1a; 一定要下载编译后的文件&#xff0c;后缀为bin.tar.gz w…

PE结构之导出表

导出表结构中各种值的意义 ​​​​​​ 根据函数地址表遍历函数名称RVA表,和上面的图是逆过程 //函数地址表 和当前内存中的位置DWORD AddressOfFunctionsFOA RVAToFOA(LPdosHeader, LPexprotDir->AddressOfFunctions);PDWORD LPFunctionsAddressInMemary (PDWORD)((cha…

ssm基于VUE的图书馆管理系统的设计与实现+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 目 录 III 第1章 绪论 1 1.1 课题背景 1 1.2 课题意义 1 1.3 研究内容 2 第2章 开发环境与技术 3 …

Android终端GB28181音视频实时回传设计探讨

技术背景 好多开发者&#xff0c;在调研Android平台GB28181实时回传的时候&#xff0c;对这块整体的流程&#xff0c;没有个整体的了解&#xff0c;本文以大牛直播SDK的SmartGBD设计开发为例&#xff0c;聊下如何在Android终端实现GB28181音视频数据实时回传。 技术实现 Andr…

基于ESP32的灌溉系统

精准灌溉优化与高效水资源利用&#xff1a;基于IoT的农业解决方案 引言 传统农业实践缺乏实时监控和高效操作&#xff0c;导致效率低下和产量不高。本项目旨在利用物联网&#xff08;IoT&#xff09;技术和低成本通信协议&#xff0c;设计一个解决方案来解决这一问题。提出的…

Docker实践与应用举例

目录 1. 引言 2. Docker的基本概念 2.1 什么是Docker容器 2.2 Docker镜像 2.3 Docker架构 3. Docker的应用场景 3.1 开发与测试环境的隔离 3.2 持续集成与持续交付&#xff08;CI/CD&#xff09; 3.3 微服务架构 4. Docker的实践案例 4.1 部署Nginx反向代理 4.2 使用…

研发线上事故风险解读之缓存篇

专业在线打字练习平台-巧手打字通&#xff0c;只输出有价值的知识。 一 前言 本文继续基于《线上事故案例集》&#xff0c;进一步深入梳理线上事故缓存使用方面的问题点&#xff0c;重点关注缓存在使用和优化过程中可能出现的问题&#xff0c;旨在为读者提供具有实践指导意义的…

学习如何将Spring Boot Jar包注册成Windows服务

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 在开发Spring Boot应用时&#xff0c;我们通常通过命令行或IDE手动启动项目。然而&#xff0c;在生产环境中&#xff0c;为了提升效率和稳定性&#xff0c;我们更希望应用能够自动启动&#xff0c;并且作为Wi…

OpenCV高级图形用户界面(5)获取指定滑动条(trackbar)的当前位置函数getTrackbarPos()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 返回滑动条的位置。 该函数返回指定滑动条的当前位置。 cv::getTrackbarPos() 函数用于获取指定滑动条&#xff08;trackbar&#xff09;的当前…

【H2O2|全栈】JS入门知识(二)

目录 JS 前言 准备工作 运算符 算数运算符 比较运算符 自增、自减运算符 逻辑运算符 运算符的优先级 分支语句 if-else语句 switch语句 三元表达式 结束语 JS 前言 本系列博客主要分享JavaScript的基础语法知识&#xff0c;本期为第二期&#xff0c;包含一些简…

Linux基础命令系列一小白必掌握

前言 为了有一个大概的复习框架所以先给出总的思维导图&#xff0c;如图&#xff1a; 目录 1.Linux的目录结构&#xff1f;Linux命令与命令行是什么&#xff1f;Linux命令基础格式&#xff1f; 2.ls命令 3.cd命令 4.mkdir命令 5.touch命令 6.cat命令 7.cp命令 8.mv命令…

大数据开发电脑千元配置清单

大数据开发电脑配置清单 电脑型号HUANANZHI 台式电脑操作系统Windows 11 专业版 64位&#xff08;Version 23H2 / DirectX 12&#xff09;处理器英特尔 Xeon(至强) E5-2673 v3 2.40GHz主板HUANANZHI X99-P4T&#xff08;P55 芯片组&#xff09;显卡NVIDIA GeForce GT 610 ( 2…

深入剖析递归算法:原理、特点、应用与优化策略

在上一篇文章&#x1f449;【剖析十大经典二叉树题目】中&#xff0c;运用到了大量的递归算法&#xff0c;故本文将解析递归算法。 目录 &#x1f4af;引言 &#x1f4af;递归算法的定义与原理 ⭐定义 ⭐原理 &#x1f4af;递归算法的特点 ⭐简洁性 ⭐可读性 ⭐通用性 …

linux下编译鸿蒙版boost库

我在上一篇文章中介绍了curl和openssl的编译方式&#xff08;linux下编译鸿蒙版curl、openssl-CSDN博客&#xff09;&#xff0c;这篇再介绍一下boost库的编译。 一.环境准备 1.鸿蒙NDK 下载安装方式可以参考上篇文章&#xff0c;完毕后NDK的路径为&#xff1a;/home/ubuntu…

Java学习Day47:戏耍黑手道人(项目记录)

1.项目背景 2.技术选择 3.环境搭建 1.创建空项目 创建health_parent父文件用来控制依赖&#xff0c;类型为quickStart 打包方式为&#xff0c;pom&#xff1a;用在父级工程或聚合工程中&#xff0c;用来做jar包的版本控制&#xff0c;必须指明这个聚合工程的打包方式为pom。…

信息抽取数据集处理——RAMS

引言 RAMS数据集&#xff08;RAMS&#xff1a;Richly Annotated Multilingual Schema-guided Event Structure&#xff09;由约翰斯霍普金斯大学于2020年发布&#xff0c;是一个以新闻为基础的事件抽取数据集。它标注了9,124个事件&#xff0c;涵盖了139种不同的事件类型和65种…

服务端技术架构演进之路

服务端技术架构演进之路 目录 服务端技术架构演进之路 0.架构中常见概念及理解 1.单机架构 2.应用数据分离架构 3.应用服务器集群架构 4.读写分离/主从分离架构 5.冷热分离架构 6.垂直分库架构 7.微服务架构 8.容器编排架构 本文以一个 " 电子商务 " 应…

Android 未来可能支持 Linux 应用,Linux 终端可能登陆 Android 平台

近日&#xff0c;根据 android authority 的消息&#xff0c;Google 正在开发适用于 Android 的 Linux 终端应用&#xff0c;而终端应用可以通过开发人员选项启用&#xff0c;并将 Debian 安装在虚拟机中。 在几周前&#xff0c;Google 的工程师开始为 Android 开发新的 Termi…