没有网站可以做seo吗,手机网页图片,网站建设到一半想换一家,机场网站建设本文讲解4.2版jxTMS对device的调整#xff0c;整个系列的文章请查看#xff1a;docker版jxTMS使用指南#xff1a;4.2版升级内容
docker版本的使用#xff0c;请参考docker版jxTMS使用指南
4.0版jxTMS的说明#xff0c;请查看#xff1a;4.0版升级内容
为了适应拉取模…本文讲解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] d4.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()] d2、receive
之前版本的jxTMS通过mqtt接收的是ascii字符串但笔者自己在开发数据采集器时自定义了数据包格式通过TLVType-Length-Value的方式逐一打到包身中。所以接口机收到的就不再是字符串而是字节数组。
所以站点的默认receive函数调整为
def receive(self, bsMsg):s str(bsMsg,utf8)...同时增加了一个继承自site的解包型sitesite_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()] d3、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, needSaveFalse):#从站清理同步的时间节点
def clearListTime(self):#根据所设置的同步时间节点获取需同步数据的query
def getQueryByTime(self, limit15):这主要是用于两个站点之间的数据同步采集数据后通过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