首页 » 智能科技 » Qt编写物联网治理平台44-告警邮件转发

Qt编写物联网治理平台44-告警邮件转发

深圳市名雕装饰股份通讯 2025-04-16 0

扫一扫用手机浏览

文章目录 [+]

大约在2013年旁边就做过类似的功能,利用的也是标准的POP3邮件发送协议,实在便是tcp通信,按照标准协议解析和应答,然后将邮件内容和附件一起发出去,最开始做的很粗糙,后面随着真实项目的运用需求不断变革,该组件也在不断的迭代发展,比如多线程发送邮件,多个收件人,多个附件,html格式的邮件内容。
这个富文本格式的邮件内容,可以直接将报警信息组合成表格形式的内容,这样用户连附件都不用打开,直接内容便是table表格的形式,用起来其实方便。

本系统支持邮件转发,条件是对应的邮箱账号须要开通 POP3/SMTP 等做事,按照图示开启即可,一样平常开启后会设置独立的管理密码,记得在系统设置那边的邮件转发,填写密码的时候要填的是独立管理密码,而不是邮箱号的密码,这个机制和任何第三方邮箱管理软件都一样。

Qt编写物联网治理平台44-告警邮件转发 Qt编写物联网治理平台44-告警邮件转发 智能科技

二、功能特点2.1 软件模块设备监控模块,包括数据监控(表格形式展示)、设备面板(面板形式展示)、舆图监控(舆图形式展示)、曲线监控(曲线形式展示)。
数据查询模块,包括报警记录、运行记录、操作记录。
系统设置模块,包括基本设置、端口管理、掌握器管理、探测器管理、报警联动、类型设置等。
其他设置模块,包括用户管理、舆图管理、位置调度、组态设计、设备调试等。
2.2 根本功能设备数据采集,支持串口、网络,串口可设置串口号、波特率,网络可设置IP地址、通讯端口。
每个端口支持采集周期韶光,默认1秒钟一个设备。
支持设置通讯超时次数,默认3次。
支持最大重连韶光,用于重新读取离线的设备。
掌握器信息,能够添加掌握器名称,选择掌握器地址、掌握器型号,设置该掌握器下面的探测器数量。
探测器信息,能够添加位号、探测器型号、气体种类、气体符号、高报值、低报值、缓冲值、清零值、是否启用、报警声音、背景舆图、存储周期、数值换算小数点位数、报警延时时间、报警的类型(HH,LL,HL)等。
类型管理可配置掌握器型号、探测器型号、气体种类、气体符号等。
舆图支持导入和删除,所有的探测器在舆图上的位置可自由拖动保存。
端口信息、掌握器信息、探测器信息、类型信息、用户信息等,都支持导入、导出、导出到excel、打印。
运行记录、报警记录、操作记录,都支持多条件组合查询,比如韶光段、掌握器、探测器等,所有记录支持导出到excel/pdf和打印。
运行记录、报警记录、操作记录都可删除指定时间范围内的数据。
系统设置可选择对应表最大保存记录数,自动清理早期数据,留出足够的空间存储主要的数据。
报警短信转发,支持多个吸罢手机号码,可设定发送间隔,比如即时发送或者6个小时发送一次所有的报警信息,短信内容过长,自动拆分多条短信。
报警邮件转发,支持多个吸收邮箱,可设定发送间隔,比如即时发送或者6个小时发送一次所有的报警信息,支持附件发送。
设置软件的中文标题、英文标题、logo路径、版权所有等。
开关设置开机运行、报警声音、自动登录、记住密码等。
报警声音可设置播放次数,界面风格样式供应18套皮肤文件选择。
用户管理,包括用户权限配置,不同用户可以有不同模块的权限。
用户登录和用户退出,可以记住密码和自动登录,超过三次报错提示并关闭程序。
四种监控模式,设备面板监控、舆图监控、表格数据监控、曲线数据监控,可自由切换,四种模式下都实时展示采集到的数据,报警闪烁等。
报警继电器联动,一个位号可以跨串口联动多个模块和继电器号,支持多对多。
2.3 特色功能通信协议支持modbus_com、modbus_tcp_rtu,后期拓展mqtt等协议。
数据源除了真实的硬件设备采集,还可选数据库采集,这样用户可以安排其他程序员比如java程序员将前端采集好的数据放到数据库,本系统直接从数据库采集即可。
数据库采集模式可以作为通用的系统利用,更适宜多人多系统协作。
智能跳过超时的设备,加快对在线设备的采集速率,当设备数量很多的时候尤其有用。
对智能跳过的超时的设备,在设定的重连韶光自动采集一次,以便探测设备是否又重新上线。
每个探测器可控是否启用,不启用则不会采集,也不会在界面显示,相称于运行阶段临时关闭。
探测器可设置缓冲值和报警延时时间,在该值附近颠簸产生的报警,不计入报警,只有持续处于报警值且超过报警延时时间才算真正报警,这样可以规避很多颠簸导致的误报。
探测器可设置存储周期,按照设定的韶光来存储一条运行记录,可以按照主要程度对主要性高的设定存储周期短一些,不主要的设定大一些,这样可以节省不少的存储空间,也担保了主要的数据及时存储。
探测器可设置清零值,在一些高精度高灵敏的设备可能出厂的时候默认值未必是0,须要设定清零值来表示初始值。
探测器可设置小数点,用于打算后的真实数据掌握小数点点位显示,相称于除以10、除以100、除以1000,这样大部分的探测器数据直接通过小数点位设置掌握真实换算后的值,极个别的须要分外转换的可以在通信协议中约定。
探测器报警的类型支持多种,有些设备是高于某个值高报,低于某个值低报,而有些设备是在最小值最大值范围内是高报,低于最小值低报,高于最大值正常。
这样可以分情形处理,涵盖各种报警类型。
原创数据导入、导出、打印机制,跨平台不依赖任何组件,瞬间导出数据。
导出到excel的记录支持所有excel、wps等表格文件版本,不依赖excel等软件。
高报颜色、低报颜色、正常颜色、默认值颜色等,都可以自由设置。
支持云端数据同步,将本地采集到的数据实时同步到云端。
支持网络转发和网络吸收,网络吸收开启后,软件从udp吸收数据进行解析。
网络转发支持多个目标IP,这样就实现了本地采集的软件,自由将数据转到客户端,随时查看采集到的数据。
自动记住用户末了勾留的界面以及其他配置信息,重启后自动运用。
报警自动切换到对应的舆图,探测器按钮闪烁,表格数据对应颜色显示。
双击探测器图标,弹出对应探测用具体信息,可以根据须要定制回控操作。
数据库支持多种,包括sqlite、mysql、sqlserver、postgresql、oracle、人大金仓等。
本地设备采集到的数据实时上传到云端,以便手机APP或者web等其他办法提取。
自带设备仿照工具,支持不同型号的多个设备数据仿照,同时还带数据库数据仿照,以便在没有设备的时候测试数据。
标准modbus协议,各种掌握器类型、探测器类型、种类、符号等全部自定义,非常灵巧和强大,通信协议示例数据非常完全,通用各种modbus协议系统,适用于各种运用处景接入。
同时集成了串口通信、网络通信、数据库通信、数据导入导出打印、通信协议解析、界面UI、全局换肤等浩瀚组件和知识点,非常适宜新手入门和进阶。
支持xp、win7、win10、、win11、linux、mac、各种国产系统(UOS、中标麒麟、银河麒麟等)、嵌入式linux等系统。
注释完全,项目构造清晰,超级详细完全的利用开拓手册,精确到每个代码文件的功能解释,不断持续迭代版本。
三、体验地址海内站点:https://gitee.com/feiyangqingyun国际站点:https://github.com/feiyangqingyun个人主页:https://blog.csdn.net/feiyangqingyun知乎主页:https://www.zhihu.com/people/feiyangqingyun产品主页:https://blog.csdn.net/feiyangqingyun/article/details/97565652在线文档:https://feiyangqingyun.gitee.io/qwidgetdemo/iotsystem/体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_iotsystem.zip。
文章导航:https://qtchina.blog.csdn.net/article/details/121330922四、效果图

五、干系代码

void SendEmailThread::run(){ while (!stopped) { int count = contents.count(); if (count > 0) { mutex.lock(); QString content = contents.takeFirst(); QString fileName = fileNames.takeFirst(); mutex.unlock(); QString result; QStringList list = sendEmailAddr.split("@"); QString tempSMTP = list.at(1).split(".").at(0); int tempPort = 25; //***邮箱端口号为465,必须启用SSL协议. if (tempSMTP.toUpper() == "***") { tempPort = 465; } SmtpClient smtp(QString("smtp.%1.com").arg(tempSMTP), tempPort, tempPort == 25 ? SmtpClient::TcpConnection : SmtpClient::SslConnection); smtp.setUser(sendEmailAddr); smtp.setPassword(sendEmailPwd); //构建邮件主题,包含发件人收件人附件等. MimeMessage message; message.setSender(new EmailAddress(sendEmailAddr)); //逐个添加收件人 QStringList receiver = receiveEmailAddr.split(';'); for (int i = 0; i < receiver.size(); ++i) { message.addRecipient(new EmailAddress(receiver.at(i))); } //构建邮件标题 message.setSubject(emialTitle); //构建邮件正文 MimeHtml text; text.setHtml(content); message.addPart(&text); //构建附件-报警图像 if (fileName.length() > 0) { QStringList attas = fileName.split(";"); foreach (QString tempAtta, attas) { QFile file = new QFile(tempAtta); if (file->exists()) { message.addPart(new MimeAttachment(file)); } } } if (!smtp.connectToHost()) { result = "邮件做事器连接失落败"; } else { if (!smtp.login()) { result = "邮件用户登录失落败"; } else { if (!smtp.sendMail(message)) { result = "邮件发送失落败"; } else { result = "邮件发送成功"; } } } smtp.quit(); if (!result.isEmpty()) { emit receiveEmailResult(result); } msleep(1000); } msleep(100); } stopped = false;}void SendServer::checkEmail(){ int count = listEmail.count(); if (count == 0) { return; } //邮件内容,无论多长都可以拼在一起发送,<br>用来换行显示 QStringList listContent, listFileName; for (int i = 0; i < count; ++i) { QString str = listEmail.takeFirst(); if (str.contains("|")) { QStringList list = str.split("|"); QString content = list.at(0); QString fileName = list.at(1); if (!content.isEmpty()) { listContent << content; } if (!fileName.isEmpty()) { listFileName << fileName; } } else { listContent.append(str); } } //构建html字符串 QStringList html; if (listContent.count() > 0) { //将字符串转换为表格形式,先取出字段名,然后取出内容 //位号: AT-40002 掌握器: 1#调度室掌握器 探测器: 2#阀站CO 触发值: 78.7 %LEL 类型: 浓度上限报警 韶光: 2019-02-24 21:01:30<br> //位号: AT-40003 掌握器: 1#调度室掌握器 探测器: 3#阀站CO 触发值: 57 %VOL 类型: 浓度下限报警 韶光: 2019-02-24 21:01:30<br> //位号: AT-40004 掌握器: 1#调度室掌握器 探测器: 4#阀站CO 触发值: 88 PPM 类型: 浓度下限报警 韶光: 2019-02-24 21:01:30 //先取出字段名 QString str = listContent.first(); QStringList list = str.split(" "); QStringList columnNames; foreach (QString str, list) { columnNames << str.split(": ").first(); } //字段宽度 QList<int> columnWidth; columnWidth << 150 << 200 << 180 << 130 << 160 << 200; //再遍历取出所有数据 QList<QStringList> rowContents; foreach (QString str, listContent) { QStringList list = str.split(" "); QStringList rowContent; foreach (QString temp, list) { rowContent << temp.split(": ").last(); } rowContents << rowContent; } //表格开始 html.append("<table border='1' cellspacing='0' cellpadding='3'>"); //标题字段名称 QString title; for (int i = 0; i < columnNames.count(); ++i) { title += QString("<td width='%1' bgcolor='lightgray' align='center' style='vertical-align:middle;'>%2</td>") .arg(columnWidth.at(i)).arg(columnNames.at(i)); } html.append(QString("<tr>%1</tr>").arg(title)); //内容 for (int j = 0; j < rowContents.count(); j++) { QString row; QStringList rowContent = rowContents.at(j); for (int i = 0; i < rowContent.count(); ++i) { row += QString("<td width='%1' align='center' style='vertical-align:middle;'>%2</td>") .arg(columnWidth.at(i)).arg(rowContent.at(i)); } html.append(QString("<tr>%1</tr>").arg(row)); } //表格结束 html.append("</table>"); } //将邮件内容和附件链接追加到发送报警邮件线程中 SendEmailThread::Instance()->setSendEmailAddr(AppConfig::SendEmailAddr); SendEmailThread::Instance()->setSendEmailPwd(AppConfig::SendEmailPwd); SendEmailThread::Instance()->setReceiveEmailAddr(AppConfig::ReceiveEmailAddr); SendEmailThread::Instance()->append(html.join(""), listFileName.join(";")); //SendEmailThread::Instance()->append(listContent.join("<br>"), listFileName.join(";"));}

Qt编写物联网治理平台44-告警邮件转发 Qt编写物联网治理平台44-告警邮件转发 智能科技
(图片来自网络侵删)

相关文章

陕西理工大年夜学宣告招聘启事!

陕西理工大学创建于1958年,先后历经汉中大学、汉中师范学院与北京大学汉等分校、陕西工学院等发展阶段。2001年,汉中师范学院与陕...

智能科技 2025-04-16 阅读0 评论0