当前位置: 首页 > news >正文

docker版jxTMS使用指南:device的调整

本文讲解4.2版jxTMS对device的调整,整个系列的文章请查看:docker版jxTMS使用指南:4.2版升级内容

docker版本的使用,请参考docker版jxTMS使用指南

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

为了适应拉取模式、数据源和越来越复杂的各种情况,4.2版jxTMS对device和site做了很多细小的调整,其中有些调整属于内部的调整,没必要赘述;但有些调整的影响比较大,需要进行解说。

site的调整

1、addDevice

之前的addDevice是:

def addDevice(self, devName, d):self._allDev[devName] = d

4.2版调整为:

def addDevice(self, d):self._allDev[d.name()] = d

这是由于笔者用rt-thread基于GD32开发前端串口数据采集器时,MCU上的各种名字,都是写到程序中烧到片子上的,如果要使用设备名来区分的话,那每个站点都需要改程序、重新编译。站点一多,光代码管理就是个问题。

所以呢,最终这些设备是使用各自的类型来打包其采集到的数据的。但这就和之前的addDevice函数有了冲突,所以4.2版jxTMS就调整了addDevice函数。使用MCU来收集数据的站点,就可以通过重载addDevice函数来兼容了:

def addDevice(self, d):self._allDev[d.type()] = d

2、receive

之前版本的jxTMS通过mqtt接收的是ascii字符串,但笔者自己在开发数据采集器时自定义了数据包格式:通过TLV(Type-Length-Value)的方式逐一打到包身中。所以接口机收到的就不再是字符串,而是字节数组。

所以站点的默认receive函数调整为:

def receive(self, bsMsg):s = str(bsMsg,"utf8")...

同时,增加了一个继承自site的解包型site:site_packet,其重载的receive函数是:

def receive(self, bsMsg):#将数据包解码p = packet.unPacket(bsMsg)#数据包中的所有数据,dict格式pau = p.allUnit()#该数据包是哪个数据收集器打包的pn = p.name()if pn == 'stateRep':#MCU发送的系统报告l = pau.get("level",'warn')e = pau.get("event",'stateRep')self.setState(pau.get("source"),l,pau.get("state"),e,pau.get("msg"))else:#pn是设备类型d = self.getDev(pn)d.receive(pau)

同时其addDevice重载为:

def addDevice(self, d):self._allDev[d.type()] = d

3、noSubscribe

站点接收数据的方式现在有了好几种,通过MQTT订阅同名主题只是其中之一,所以给站点属性增加了noSubscribe,如果为True则启动站点时不订阅同名的MQTT主题。

device的调整

device的调整比较多,一些是内部调整,如配合数据源工作的调整,这部分就没必要多说了;还有一些则涉及到外部应用代码,这部分主要包括:

1、构造函数调整为:

def __init__(self, type, name, mySite, conf):

这主要是拉取模式时,各设备需要使用mySite提供的数据源操作接口。同时涉及到很多参数的配置,为了统一,都集中到了conf中。

2、增加了数据保存的控制,这主要是多了两个对象函数:

#设置是否为新数据,True则刚接收到的数据不会保存
def setNewData(self, b)#设置是否保存数据,True则后继的数据都不保存
def notSaveData(self, b)

这部分调整主要是由于存在一条数据被打包为多条消息的情况,如船用AIS,可以同时有10条数据被拆分,这种情况下,就需要通知当前的数据未更新不要保存与处理。

3、主从站之间的数据同步,这主要是多了三个对象函数:

#从站设置需要同步的时间节点
def setListTime(self, dtfrom, dtto, needSave=False):#从站清理同步的时间节点
def clearListTime(self):#根据所设置的同步时间节点获取需同步数据的query
def getQueryByTime(self, limit=15):

这主要是用于两个站点之间的数据同步:采集数据后通过mqtt向主站推送数据。当从站的网络断掉又恢复后,将把中断期间的数据从数据库中读出后再发送给主站。

4、一条数据可以打包到多个消息中;同样,一个消息中也可以捎带多条数据。所以device的receive函数会对接收到的数据进行识别,以支持单条数据【dict】与多条数据【list】的一次性输入

5、可以不配置policy

此前device的配置中需给出policyType,然后设备在初始化时会查找相应的策略类型然后安装相应的策略。

但在某些情况下,如数据源拉取到的数据,已经是dict格式了,此时就没有必要再安装策略进行消息解析、提取与转换了。

所以device就调整为配置了policyType就安装并使用该策略进行消息解析,如果没有则直接将接收到的消息作为数据【dict或list】使用。

policy的调整

上文提到device增加了数据保存的相关函数,同理,policy也要先做出相应的调整以告知device数据解析的情况。

所以policy的receive函数的返回值调整为元组:

(result,newData)result:解析结果newData:是否为有效结果

参考资料:

jxTMS设计思想

jxTMS编程手册

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

如何用jxTMS开发一个功能

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

jxTMS的HelloWorld

相关文章:

docker版jxTMS使用指南:device的调整

本文讲解4.2版jxTMS对device的调整,整个系列的文章请查看:docker版jxTMS使用指南:4.2版升级内容 docker版本的使用,请参考docker版jxTMS使用指南 4.0版jxTMS的说明,请查看:4.0版升级内容 为了适应拉取模…...

AI智能语音机器人的功能和作用都有哪些?

智能语音机器人是一种能够使用自然语言处理技术和人工智能算法,通过声音与用户进行交互的机器人。它可以回答用户提出的问题、处理用户的投诉、提供产品或服务的相关信息等等。 实现一个智能语音机器人需要涉及多个技术领域,包括自然语言处理、语音识别…...

vue3+vite+Ts 基于Antv/x6 绘制流程图

需求效果: 需求: 实现一个流程图,双击可对相应的组件进行一些功能操作; 工具栈: 这里使用antv/x6, 基于vue3vitets进行开发 官网地址: https://x6.antv.antgroup.com/examples/showcase/pra…...

sys V 进程间通信之消息队列

note msgget获取内核消息队列实例 msgctl可以删除内核消息队列实例 msgsnd\msgrcv函数注意struct msgbuf字段的填充 code #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> #include &l…...

Android 报错,闪退(错误)日志保存到手机内存中,以文本文件的形式保存

1.直接贴代码 import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Environment; import android.util.Log;import com.nuotu.atmBookClient.App;import java.io.File; i…...

flutter聊天界面-加号【➕】更多展开相机、相册等操作Panel

flutter聊天界面-加号【➕】更多展开相机、相册等操作Panel 在之前实现了flutter聊天界面的自定义表情的展示&#xff0c;这里记录一下更多操作展开的相机、相册等操作功能实现。 一、查看效果 更多操作展开的相机、相册等操作功能实现。 二、代码实现 展开的操作按钮可能比…...

浅析泵站自动化技术的发展趋势

摘要&#xff1a;基于泵站对我国水利及水务事业的重要性&#xff0c;文章以城市供水行业大型泵站为对象&#xff0c;分析了泵站自动化技术 发展现状&#xff0c;结合泵站自动化技术的发展需求&#xff0c;从管控一体化、系统自诊断、运行信息实时化管理等方面展望了泵 站自动化…...

5.4.1 虚拟专用网VPN

5.4.1 虚拟专用网VPN 我们已经学习了因特网的路由协议&#xff08;5.3.1 因特网的路由协议&#xff08;一&#xff09;、5.3.2 因特网的路由协议&#xff08;二&#xff09;基于距离向量算法的RIP协议、5.3.3 因特网的路由协议&#xff08;三&#xff09;OSPF协议、5.3.4 因特…...

第42节:cesium 火焰效果(含源码+视频)

结果示例: 完整源码: <template><div class="viewer"><!-- :shouldAnimate="true" 添加动画 --><vc-viewer @ready...

MySQL基础篇第5章(排序与分页)

文章目录 1、排序1.1 排序规则1.2 单列排序1.3 多列排序 2、分页2.1 背景2.2 实现规则2.3 拓展 1、排序 1.1 排序规则 使用 ORDER BY 子句排序 ASC&#xff08;ascend&#xff09;: 升序DESC&#xff08;descend&#xff09;:降序 ORDER BY 子句在SELECT语句的结尾。 1.2 …...

​LeetCode解法汇总2679. 矩阵中的和

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 给你一个下标从 0 开始的二维整数数组 nums 。一开始你的分数为 0 。你需要执行…...

flask-apscheduler实现定时任务

秋风阁-北溪入江流 flask-apscheduler是一个支持apscheduler的flask插件&#xff0c;通过flask-apscheduler可以很方便的定义定时任务。 安装flask-apscheduler pip install flask-apschedulerflask-apscheduler组件 apscheduler库包含有组件&#xff1a; triggers&#xf…...

FPGA纯verilog实现UDP协议栈,sgmii接口SFP光口收发,提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、该UDP协议栈性能4、详细设计方案SFPGMII AXIS接口模块AXIS FIFOUDP协议栈1G/2.5G Ethernet PCS/PMA or SGMII 5、vivado工程详解6、上板调试验证并演示准备工作查看ARPUDP数据回环测试 7、福利&#xff1a;工程代码的获取 1、前言 目前网…...

【Python入门系列】第十五篇:Python数据可视化和图表绘制

文章目录 前言一、可视化与绘图常用库二、Matplotlib1、折线图2、散点图3、柱状图&#xff1a; 三、Seaborn1、散点图2、箱线图3、小提琴图4、热力图 四、Plotly1、折线图2、散点图3、条形图 总结 前言 数据可视化是数据分析和数据科学中非常重要的一部分。通过可视化&#xf…...

isBlank函数和isEmpty函数的区别

StrUtil.isBlank(CharSequence)&#xff1a;该方法用于判断字符串是否为空或仅包含空白字符。如果传入的字符串为null、空字符串(“”)或仅包含空白字符&#xff08;如空格、制表符、换行符等&#xff09;&#xff0c;则返回true&#xff1b;否则返回false。 StrUtil.isEmpty(…...

「SQL面试题库」 No_121 The Most Recent Three Orders

&#x1f345; 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起&#xff0c;全员免费参与的SQL学习活动。我每天发布1道SQL面试真题&#xff0c;从简单到困难&#xff0c;涵盖所有SQL知识点&#xff0c;我敢保证只要做完这100道题&#xff0c;不仅能轻松搞定面试&#xff0…...

【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 7 日论文合集)

文章目录 一、检测相关(5篇)1.1 Contextual Affinity Distillation for Image Anomaly Detection1.2 Noise-to-Norm Reconstruction for Industrial Anomaly Detection and Localization1.3 MMNet: Multi-Collaboration and Multi-Supervision Network for Sequential Deepfake…...

直流运算放大器-----仪表放大器(三)

详见 模拟电子技术基础 6.4.1 电路图 计算公式 仿真 电流流向...

【Zookeeper】终端操作常用命令

文章目录 服务端常用命令客户端常用命令 zookeeper版本3.7.1 Zookeeper是一个开源的分布式协调服务。 Zookeeper是Apache软件基金会的一个项目&#xff0c;它提供了分布式应用程序协调的通用服务&#xff0c;如分布式同步、命名服务、集群维护等&#xff0c;以简化分布式应用协…...

leetcode 1110. 删点成林

给出二叉树的根节点 root&#xff0c;树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现&#xff0c;我们就把该节点从树上删去&#xff0c;最后得到一个森林&#xff08;一些不相交的树构成的集合&#xff09;。 返回森林中的每棵树。你可以按任意顺序组织答案…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...