本文讲解4.4版jxTMS中如何通过web访问站点数据,整个系列的文章请查看
:[docker版jxTMS使用指南:docker版jxTMS使用指南:4.4版升级内容
docker版本的使用,请查看:docker版jxTMS使用指南
4.0版jxTMS的说明,请查看:4.0版升级内容
4.2版jxTMS的说明,请查看:4.2版升级内容
我们以新增的app/sinosoarSP30H/site_master.py中所定义的sp30h_master站点为例来演示如何通过REST接口来获取jxTMS中的数据。
web用户获取数据需要经过如下的步骤:
登录
鉴权,用户是否有对指定资源执行相应操作的权限
对指定资源执行相应的操作
对操作所获得的数据执行策略性处理
将处理后的数据返回用户
鉴权部分我们合并到后面的文章中进行解说。本文主要讲解如何添加操作与后处理。
除去授权部分,增加外部数据访问需要两个步骤:增加操作、增加操作后处理。
分为两步:定义操作、注册。
定义,我们增加一个操作函数:
def op_getSiteData(user, siteName, params):
s = site.getSite(siteName)
if s is None:
return None,None,404,f'站点[{siteName}]不存在'
else:
return s.type(),s.data(),200,None
该操作函数是根据所给出的站点名来查询站点,并返回站点类型和站点数据。
我们打算演示的操作是sp30h_slave型的站点。所以我们看一下【app/sinosoarSP30H/site_slave.py】文件,可以发现其重载了newOrmData函数:
def newOrmData(self):
return SP30H()
大家可以再去看一下上篇文章的讲解,其中说到newOrmData返回一个数据对象,则站点就会在数据回送时为其准备数据,如果返回None则不保存数据。
site_slave由于没有重载onReceive函数,所以jxTMS会从回送数据中为SP30H准备数据,这些数据可以通过data()对象函数获得。
所以,op_getSiteData函数所返回的s.data(),就是site_slave的实时数据。
则,当op_getSiteData的参数是一个site_slave类型的站点名时,会返回其站点类型和根据SP30H数据类中的属性定义从起下属各设备的回送数据中进行综合后的实时数据。
注册一个操作非常简单,在定义好操作函数后,执行:
auth.registerOP('getSiteData', op_getSiteData)
就将操作函数注册为操作:getSiteData。
注册后,当用户access时,只要给出参数【op:getSiteData】,如果通过了授权,jxTMS就会调用op_getSiteData函数。
op_getSiteData的定义和注册可查看:app/sinosoarSP30H/op_getSiteData.py
当操作执行完毕后,jxTMS会用其所返回的第一个结果:数据类型【op_getSiteData函数返回的是站点类型】来请求数据策略【dataPolicy】进行后处理。
如果我们为这个结果类型注册了相应的数据策略策略的话,jxTMS就会将操作所返回的第二个结果【数据】递交给改策略进行加工处理。
数据策略同样包括定义和注册两个步骤:
1、定义数据策略
def resultTrans_sp30h_slave(data):
rd = {}
rd['VoltageA'] = date.get('VoltageA')
rd['VoltageB'] = data.get('VoltageB')
rd['VoltageC'] = data.get('VoltageC')
rd['DG1_VoltageAB'] = date.get('DG1_VoltageAB')
#rd['DG1_VoltageBC'] = data.get('DG1_VoltageBC')
#rd['DG1_VoltageCA'] = data.get('DG1_VoltageCA')
rd['SOC1'] = date.get('SOC1')
rd['SOC2'] = date.get('SOC2')
rd['SOC3'] = date.get('SOC3')
rd['timestamp'] = data.get('timestamp')
return rd
resultTrans_sp30h_slave只演示了最简单的数据加工:从各设备的回送数据data中搬运自己感兴趣的数据返回给用户。
需要注意的是:站点的回送数据来自下属的各站点,所以其综合后的数据每次只是其中的一小部分。
2、注册数据策略
注册数据策略同样非常简单,执行:
dataPolicy.register('sp30h_slave',resultTrans_sp30h_slave,target='webServer')
数据策略在注册时有一个target参数,其指示的是用户名或角色名,我们这里的webServer是角色名,即所有角色为webServer的用户,当其操作后的数据是sp30h_slave类型时,需要调用resultTrans_sp30h_slave执行后处理。
默认的target是default,当注册了default的后处理,则当该类型的数据匹配不到其它target时就会使用default的后处理,如果该类型连default都未注册,则直接返回原始数据。
所以,当某类型的数据需要数据策略来做后处理时,一定要先定义一个最小精度的default的后处理策略来兜底。
sp30h_slave的数据后处理策略的定义和注册可查看:app/sinosoarSP30H/dualResult.py
参考资料:
jxTMS设计思想
jxTMS编程手册
下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:
如何用jxTMS开发一个功能
下面的系列文章讲述了jxTMS的一些基本开发能力:
jxTMS的HelloWorld