模拟简单的iOT工作流
没有实际接触过iOT的流程,应该实际使用比这个接口返回要复杂,只是演示~希望能参与实际的接口接入,而不是只展示个假数据。
启动RabbitQ
使用的是3.8.5 启动命令
账号:guest 密码:guest
查看命令:rabbitmq-plugins list
1883端口已开
MQTT模拟收发
模拟IoT设备发送
import mqtt from 'mqtt'
const options = {username:"guest",password:"guest"
}var client = mqtt.connect("mqtt://localhost:1883", options);function sendTemperature() {// 生成一个0到40之间的随机温度值const temperature = Math.floor(Math.random() * 40);const now = new Date();const hours = now.getHours();const minutes = now.getMinutes();const seconds = now.getSeconds();const ioTdata = `Time:${hours}:${minutes}:${seconds},temperature:${temperature}`console.log(`Sending iOTData: ${ioTdata}`); client.publish('sensor/temperature', ioTdata);}// 连接成功
client.on('connect', function () {console.log('Connected');setInterval(sendTemperature, 1000);
});// 连接失败
client.on('error', function (err) {console.log('Connection error: ', err);
});
模拟存储设备接收
import mqtt from 'mqtt'
import * as fs from 'fs'const options = {username:"guest",password:"guest"
}var client = mqtt.connect("mqtt://localhost:1883", options);// 连接成功
client.on('connect', function () {console.log('Connected');// 订阅主题 client.subscribe('sensor/temperature', function (err) {if (!err) {console.log('Subscribed');}});});// 接收消息
client.on('message', function (topic, message) {// message is Buffer console.log(message.toString());recordTemperature(message)//client.end(); // 接收完消息后断开连接
});// 连接失败
client.on('error', function (err) {console.log('Connection error: ', err);
});// 连接关闭
// client.on('close', function () {
// console.log('Connection closed');
// });function recordTemperature(data){fs.appendFile("./record.txt",data+"\n",(err)=>{if (err) {console.error(err);return;}})
}
后端起服务读取本地信息
import express from 'express'
import * as fs from 'fs'
import cors from 'cors'const app = express();
const port = 5000;app.use(cors());app.get('/v1/iotdataDemo', (req, res) => {let data="";try {data = fs.readFileSync('./record.txt', 'utf8'); } catch (err) {console.error(err);} if(data.length === 0) return;res.json({ iotData: data.split("\n") });
});app.listen(port, () => {console.log(`Server running on http://localhost:${port}`);
});
前端eChart展示
相关文章:

模拟简单的iOT工作流
没有实际接触过iOT的流程,应该实际使用比这个接口返回要复杂,只是演示~希望能参与实际的接口接入,而不是只展示个假数据。 启动RabbitQ 使用的是3.8.5 启动命令 RabbitMQ Service - start RabbitMQ Command Prompt rabbitmqctl start_app …...
C++学习0.2: RAII
引用: 【代码质量】RAII在C编程中的必要性_raii 在c中的重要性-CSDN博客 C RAII典型应用之lock_guard和unique_lock模板_raii lock-CSDN博客 前言: 常用的线程间同步/通信(IPC)方式有锁(互斥锁、读写锁、自旋锁)、…...

k8s,进一步理解Pod
比如,凡是调度、网络、存储,以及安全相关的属性,基本上是Pod 级别的。 这些属性的共同特征是,它们描述的是“机器”这个整体,而不是里面运行的“程序”。比如,配置这个“机器”的网卡(即&#…...

MFC图形函数学习13——在图形界面输出文字
本篇是图形函数学习的最后一篇,相关内容暂告一段落。 在图形界面输出文字,涉及文字字体、大小、颜色、背景、显示等问题,完成这些需要系列函数的支持。下面做简要介绍。 一、输出文本函数 原型:virtual BOOL te…...

【Canvas与雷达】点鼠标可暂停金边蓝屏雷达显示屏
【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>点鼠标可暂停金边蓝屏雷达显示屏 Draft1</title><style typ…...
React第十二节组件之间通讯之发布订阅模式(使用pubsub-js插件)
组件之间通讯常用方案 1、通过props 2、通过context 3、通过发布订阅模式 4、通过Redux 后面会有专栏介绍 1、安装 pubsub-js 插件 yarn add pubsub-js 常用的事件 a、发布事件:传入一个自定义事件名称(name),以及要发布的消息内…...

Vue3安装 运行教程
本文是综合了所有vue安装教程而成 更细化 更简略 希望对各位读者有所帮助! Vue安装 1. Vue-cli脚手架安装 安装vue的方式有很多 我们这里选择npm方式安装vue npm方式 npm方式安装vue,详细介绍见下文。 1.node.js安装和配置 安装npm 需要安装note.js&…...
MySQL:约束constraint
约束就是表中数据的限制条件. 表在设计的时候加入约束的目的是为了保证表中记录的完整性和有效性,如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复。 主键约束(primary key) PK MySQL主…...
使用Rufus制作Ubuntu需要注意
在使用Rufus制作Ubuntu启动盘并进行BIOS设置时,需要注意以下几点: 关闭RST(英特尔 快速存储技术):在BIOS设置中,如果电脑启用了RST功能,需要将其关闭。因为Ubuntu可能无法检测到硬盘&a…...
探索Go语言的高级特性:性能分析与安全性
Go语言性能分析与安全性 引言 Go语言因其高效的并发特性、简洁的语法和强大的工具链而受到广泛欢迎。在实际开发中,性能分析和安全性是需要特别关注的两个方面。本文将深入探讨Go语言中的性能分析工具和安全性考虑,帮助开发者编写高效、安全的Go应用程…...
SearchSploit配合gcc的使用
渗透测试中,SearchSploit是一个非常有用的工具,用于在Exploit数据库中搜索漏洞利用代码。其使用方法如下: 安装SearchSploit:首先确保你的系统中已经安装了Kali Linux,因为SearchSploit是Kali Linux的一部分。如果没有…...

无人机设计:云台挂载!
一、无人机云台挂载设置 安装与固定 将云台固定到无人机的挂载点上,通常需要使用专用的固定架和螺丝等工具。 确保云台与无人机之间的连接牢固,避免在飞行过程中出现松动或脱落的情况。 连接与调试 将云台与无人机之间的连接线缆(如电源…...
Spring Native适用场景、代理使用及测试部署策略
文章目录 1. Spring Native 适用的应用程序2. 在 Spring Native 中使用代理3. 测试和部署 Spring Native 应用测试部署 1. Spring Native 适用的应用程序 微服务:微服务架构中每个服务都相对独立,快速启动时间和较低的资源消耗对于提高部署效率和服务响…...

LeetCode—11. 盛最多水的容器(中等)
题目描述: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:…...
第一部分:入门准备 1.欢迎来到新手村 --[JavaScript 新手村:开启编程之旅的第一步]
为什么学习 JavaScript? 学习 JavaScript 有多个重要的理由,它在现代 Web 开发中扮演着不可或缺的角色。以下是几个关键原因: 1. 广泛的应用 JavaScript 是唯一可以在浏览器端直接运行的编程语言,几乎所有的网站和Web应用都使用…...
BERT的中文问答系统50
我们将对BERT的中文问答系统48-1代码进行以下改进: 1.增加时间日期和日历功能:在GUI中增加显示当前时间和日期的功能,并提供一个日历组件。 2.增加更多模型类型:增加娱乐、电脑、军事、汽车、植物、科技、历史(朝代、皇帝)、名人、生活(出行、菜品、菜谱、居家),法律、…...
深入解析CMake中的find_package命令:用法、特性及版本依赖问题
深入解析CMake中的find_package命令:用法、特性及版本依赖问题 在现代软件开发中,CMake作为一个强大的构建系统,广泛应用于跨平台项目的管理与编译。find_package是CMake中一个核心命令,用于查找并配置项目所依赖的外部库或包。本…...

【OpenDRIVE_Python】使用python脚本输出OpenDRIVE数据中含有隧道tunnel的道路ID和隧道信息
示例代码说明: 遍历OpenDRIVE数据中每条道路Road,若Road中存在隧道tunnel属性,则将该道路ID和包含的所有隧道信息输出到xml文件中。 import xml.dom.minidom from xml.dom.minidom import parse from xml.dom import Node import sys import os # 读取…...
SIP系列五:HTTP(SIP)鉴权
我的音视频/流媒体开源项目(github) SIP系列目录 目录 一、基本认证(basic) 二、摘要认证(digest) 1、摘要认证(digest) RFC 2069 2、摘要认证(digest) RFC 2617 2.1、未定义qop字段或值为"(空) 2.2、qop值为"auth" 2.3、qop值为"auth-int&quo…...
mysql json整数数组去重 整数数组精确查找并删除相应数据
都是针对整数数组 。低版本可用。懒得去查找资料的可以参考下。 json整数数组查找具体数据修改或者删除: update saas_new_tms.eda_logistics_limit set service_attribute json_remove(service_attribute,json_unquote(json_search(replace(service_attribute,…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...

6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...