docker版jxTMS使用指南:使用jxTMS采集数据之三

本文是如何用jxTMS进行数据采集的第三部分,整个系列的文章请查看:docker版jxTMS使用指南:4.4版升级内容

docker版本的使用,请查看:docker版jxTMS使用指南

4.0版jxTMS的说明,请查看:4.0版升级内容

4.2版jxTMS的说明,请查看:4.2版升级内容

新增一个站点要做的工作

1、确定现场的数据采集方案以及如何传递回后端的jxTMS

笔者在这些文章中罗列了很多,但依然只会是很少很少的一部分,所以这一部分工作内容,docker版jxTMS大部分情况下是无法覆盖到的,需要由开发者自行完成。

目前,docker版jxTMS主要以MQTT进行现场与后端的数据传输,其优势包括:

  • 很多DTU现在都支持MQTT

  • MQTT还具有一定的QoS能力

  • 在不影响生产的情况下,通过再分出一路数据,就可执行故障排查、测试、调试等工作

  • 相比DTU普遍拥有的TCP/UDP等直接的数据传输模式,MQTT将现场与后端进行了解耦合,大大提高了系统的弹性、伸缩性和灵活性,也方便了双方的调试工作

DTU的MQTT使用方式大多采取串口透传模式,可以直接将RS232或RS485接口收到的数据以固定的主题【jxTMS默认为站点名】直接发送到MQTT服务端。

docker版jxTMS演示了三种现场采集+MQTT传输,如果大家的现场环境类似,可直接采用:

  • 单设备通过串口主动发送,则通过DTU连接后直接推送到MQTT,可参考【app/vrs20】目录,其实就是啥都不需要做,只要配置站点时指定相应的设备类型就可以了

  • 现场modbus采集然后通过本地网络推送到MQTT,可参考【app/sinosoarSP30H】目录下的sp30h_slave.py,其通过datasource来采集现场的modbus设备的数据,然后创建一个jx.mqtt.mqttClient,并通过该mqttClient来发布数据

  • 多设备通过MQTT采集,可参考【app/sinosoarSP30H】目录下的sp30h_master.py,其就是采集现场的sp30h_slave.py发布的json型数据

2、设备解码与数据处理

参考【app/vrs20】目录下的policy.py,如果前端采集到的数据有其特殊格式,则需定义一个数据解析策略,然后注册到jxTMS中。

在注册时,如果明确知道本策略就是专用给某型设备的,可以直接用该设备的类型进行注册,如【app/vrs20】目录下的policy.py中所演示的。

如果本策略可能会用于一系列各型设备,如ais设备的解码,就是通用于所有ais设备的。那就需要给本策略起一个专用名,然后以此专用名进行注册,然后在设备初始化时在配置参数时以该策略名设置policyType参数即可。

如果需要对解析后的数据进行处理,则如【app/vrs20】目录下的device.py中所演示的,重载onReceive函数并完成相应的数据处理。

3、保存设备数据

参考【app/data】目录下的vrs20.py,按java侧的data文件中相应的数据类,来定义python中对应的数据类。然后进行注册:

  • ORM.register,将相应的数据类注册到jxTMS中。如果不使用python侧的任何查询能力,可以不注册,但为了万一需要日后的能力升级时不出问题,建议注册

  • Device.register,将创建数据对象的函数注册到Device数据类中,以在需要时创建设备数据对象

和数据解析策略一样,如果该数据类专用于某型设备,则可直接用该设备类型进行Device.register注册,否则就以本数据类对应的数据表名进行Device.register注册,然后在设备初始化时在配置参数时以该策略名设置dataType参数即可。

如果设备数据需要实时保存,则在设备配置参数中将saveDataInterval设为0,此时只要收到新数据【解析正确】,就会立刻将其保存到数据库中。如果saveDataInterval大于0,则jxTMS会每隔saveDataInterval分钟保存一次新收到的实时数据。

注:saveDataInterval默认是15分钟

jxTMS的device基类还自带超时检测能力:如果timeOut秒未收到新数据,则认为该设备失联;同时如果timeOutCheckInterval参数大于0,则每timeOutCheckInterval分钟就会执行一次超时检测。

所以,如果需要执行超时检测,则应设置timeOutCheckInterval与timeOut两参数,由于只要检测到超过timeOut秒尚未收到新数据就会报超时失联,所以timeOut应设为数据发送间隔的3倍左右,而timeOutCheckInterval一般则可以比数据发送间隔稍大一点,因为短了没必要,太长又会影响对超时失联的反应灵敏性。

注:timeOutCheckInterval默认是3分钟,timeOut默认是600秒

如果设备数据所保存到的数据表需要分表,主站最好是在java侧的data文件中定义java中的数据类时指定rename属性,从站则可如【app/data】目录下的DieselGenerator.py所演示的,定义建表语句,并在注册时指定renameType:

ORM.registerSQL_createTable('DieselGenerator',_sql_createTable,renameType='day')

但jxTMS默认是不执行分表操作的,所以还需要在main.py文件中手动启动分表的调度器:

from jx.jxMysql import ORM
ORM.startRenameTableScheduler()

4、告警处理

jxTMS内部的默认告警策略是通过钉钉发送告警信息,参考【module/warnPolicy_dingding.py】文件。

目前jxTMS的告警在新版本中已经调整到站点进行,在站点初始化时,自动创建一个全局的默认告警策略,就是【module/warnPolicy_dingding.py】中注册的default策略。

而使用钉钉告警,需要【在新版本中,嗯,当前版本忘了:(】执行:

  • 先创建一个钉钉群,如:故障告警

  • 然后在钉钉后台为申请该群webhook的token和secret

  • 并在jxTMS中设置token和secret,快捷栏【安全管理->增加钉钉群组】

如果需要其它告警策略,则先要按【module/warnPolicy_dingding.py】中写自己的告警策略,然后注册为default,最后将自己的告警策略代码模块,copy到module目录下,并在【module/__init__.py】中引用自己的代码文件。

注:为确保自己的告警策略能覆盖掉warnPolicy_dingding模块中的告警策略,则应在【module/__init__.py】中注释掉warnPolicy_dingding的引用,或将自己的代码文件的引用放到warnPolicy_dingding之后

5、业务联动

参考上篇文章中的数据联动章节,以及【本地数据总线】一文,通过jxLocalDataBus.registerTarget注册感兴趣的设备的数据,则可实现当该设备接收并处理保存完毕新数据后,抄收处理后的实时数据来实现需要的业务功能。

参考资料:

jxTMS设计思想

jxTMS编程手册

下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:

如何用jxTMS开发一个功能

下面的系列文章讲述了jxTMS的一些基本开发能力:

jxTMS的HelloWorld

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

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

相关文章

LeetCode 2682. 找出转圈游戏输家

【LetMeFly】2682.找出转圈游戏输家 力扣题目链接:https://leetcode.cn/problems/find-the-losers-of-the-circular-game/ n 个朋友在玩游戏。这些朋友坐成一个圈,按 顺时针方向 从 1 到 n 编号。从第 i 个朋友的位置开始顺时针移动 1 步会到达第 (i …

照耀国产的星火,再度上新!

国产之光,星火闪耀 ⭐ 新时代的星火⭐ 多模态能力⭐ 图像生成与虚拟人视频生成⭐ 音频生成与OCR笔记收藏⭐ 助手模式更新⭐ 插件能力⭐ 代码能力⭐ 写在最后 ⭐ 新时代的星火 在这个快速变革的时代,人工智能正迅猛地催生着前所未有的革命。从医疗到金融…

使用老北鼻AI免费GPT对话解决gun make安装和解析iso9660的问题

在学习解析ISO9660镜像文件时,使用了GPT来了解相关的库和gun make编译器的相关知识。这个过程可真是一言难尽,每个问题的回答都模棱两可都需要去证实,不能直接复制粘贴,也不能说GPT的回答一点用也没有,至少GPT给出了一…

自然语言处理从入门到应用——LangChain:记忆(Memory)-[聊天消息记录]

分类目录:《自然语言处理从入门到应用》总目录 Cassandra聊天消息记录 Cassandra是一种分布式数据库,非常适合存储大量数据,是存储聊天消息历史的良好选择,因为它易于扩展,能够处理大量写入操作。 # List of contact…

Android 学习笔记:SharedPreferences实现数据的保存和读取

一、概述 1.键值对方式存储 SharedPreferences 是使用键值对的方式来存储数据的。也就是说,当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。 2.支持多种不同的数据类型存储…

使用Vue和jsmind如何实现思维导图的历史版本控制和撤销/重做功能?

思维导图是一种流行的知识图谱工具,可以帮助我们更好地组织和理解复杂的思维关系。在开发基于Vue的思维导图应用时,实现历史版本控制和撤销/重做功能是非常有用的。以下为您介绍如何使用Vue和jsmind插件来实现这些功能。 安装依赖 首先,我们…

day-17 代码随想录算法训练营(19)二叉树 part04

110.平衡二叉树 分析:判断每个节点的左右子树的高度差小于等于1;所以首先需要求左右子树高度,再在父节点进行判断,故此采用后序遍历。 思路:后序遍历二叉树,从底部递归回来时加上高度 class Solution { …

【管理运筹学】第 5 章 | 整数规划 (1,问题提出与分支定界法)

文章目录 引言一、整数规划问题的提出1.1 整数规划的数学模型1.2 整数规划问题的求解 二、分支定界法2.1 分支与定界2.2 基本求解步骤(一)初始化(二)分支与分支树(三)定界与剪枝(四)…

SpringBoot之HandlerInterceptor拦截器的使用

😀前言 本篇博文是关于拦截器-HandlerInterceptor的使用,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动…

SQL 复习 03

函数与关键字 用法说明round(x, n)四舍五入,x为浮点数,n为保留的位数ceil(x)向上取整floor(x)向下取整truncate(x, n)截断x,n为保留的位,该位之后的数值置零,位数表示示例:321.123,其中小数点前…

Linux 多进程

目录 0x01 linux中特殊的进程 0x02 进程的标识 0x03 创建子进程 0x01 linux中特殊的进程 0号进程:idle进程,系统启动加载的进程1号进程:systemd进程,系统初始化,是所有进程的祖先进程 init2号进程:kthre…

YOLOv5白皮书-第Y6周:模型改进

📌本周任务:模型改进📌 注:对yolov5l.yaml文件中的backbone模块和head模块进行改进。 任务结构图: YOLOv5s网络结构图: 原始模型代码: # YOLOv5 v6.0 backbone backbone:# [from, number, module, args]…

每日汇评:黄金在 200 日移动平均线附近似乎很脆弱,关注美国零售销售

1、金价预计将巩固其近期跌势,至 6 月初以来的最低水平; 2、对美联储再次加息的押注继续限制了贵金属的上涨; 3、金融市场现在期待美国零售销售报告带来一些有意义的推动; 周二金价难以获得任何有意义的牵引力,并在…

Mac RN环境搭建

IOS RN ios android原生环境搭建有时候是真恶心,电脑环境不一样配置也有差异。 我已经安装官网的文档配置了ios环境 执行 npx react-nativelatest init AwesomeProject 报错 然后自己百度查呀执行 gem update --system 说是没有权限,执行失败。因…

POSTGRESQL 关于安装中自动启动的问题 详解

开头还是介绍一下群,如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis ,SQL SERVER ,ORACLE,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 &…

OpenSSH 远程升级到 9.4p1

OpenSSH 远程升级到 9.4p1 文章目录 OpenSSH 远程升级到 9.4p1背景升级前提1. 升级 OpenSSL2. 安装并启用Telnet 升级OpenSSH 背景 最近的护网行动,被查出来了好几个关于OpenSSH 的漏洞。这是因为服务器系统安装后,直接使用了系统自带版本的OpenSSH &am…

2023-08-15 linux mipi 屏幕调试:有一个屏幕开机时候不显示,开机后按power 按键休眠唤醒就可以显示。原因是reset gpio 被复用

一、现象:今天更新了一个新版本的buildroot linux sdk ,调试两个mipi 屏幕,这两个屏幕之前在其他的sdk都调好了的,所有直接把配置搬过来。但是有一个屏幕可以正常显示,有一个屏幕开机时候不显示,开机后按po…

CentOS防火墙操作:开启端口、开启、关闭、配置

一、基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 : systemctl enable firewalld systemctl是…

angular注入方法providers

在Angular中有很多方式可以将服务类注册到注入器中: Injectable 元数据中的providedIn属性 NgModule 元数据中的 providers属性 Component 元数据中的 providers属性 创建一个文件名叫名 hero.service.ts叫 hero 的服务 hero.service.ts import { Injectable } from angular…

C语言,结构体,结构体大小,

1、结构体: 用于存储不同数据类型的多个相关变量,从而形成一个具有独立性的组合数据类型。 结构体的声明: struct 结构体类型名{ 数据类型 成员1; 数据类型 成员2; 数据类型 成员3; ……… }&#xff1…