您现在的位置是:首页 >学无止境 >docker版jxTMS使用指南:python服务之设备策略网站首页学无止境

docker版jxTMS使用指南:python服务之设备策略

jxandrew 2024-09-25 00:01:03
简介docker版jxTMS使用指南:python服务之设备策略

本文讲解4.0版的jxTMS中python服务的设备策略,整个系列的文章请查看:docker版jxTMS使用指南:4.0版升级内容

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

jxTMS实现的接口机对设备的数据采集与处理采取的是框架组装模式。

即jxTMS定义了一整套的设备数据采集、处理、查询/访问的工作机制,然后只需要针对新类型的设备、不同用户、不同的操作需求、不同的服务等级进行定制,然后一一注册到该框架中即可。

加上jxTMS的python服务还支持动态升级,所以jxTMS实现了动态的、简单的、灵活的升级与伸缩能力。

接口机python服务提供的可以动态升级的能力有:

1、新类型设备如何解析、处理数据

定义该类型设备的数据处理策略,然后用policy.registerPolicy注册即可。

类似app/policy_vrs20.py,然后动态加载【loadNewPy】这样的py文件即动态增加了对新类型设备的数据解析能力。

注:app.policy_vrs20模块在app/device_vrs20.py中被引用

2、新类型设备如何保存数据

定义该类型设备的数据类,然后用Device.register注册即可。

类似app/data_vrs20.py,然后动态加载【loadNewPy】这样的py文件即动态增加了对新类型设备的数据保存能力。

注:app.data_vrs20模块在main.py中被引用

3、新类型设备的特殊处理与生成

继承device类,然后针对性处理,然后用device.registerDevType注册即可。

类似app/device_vrs20.py,然后动态加载【loadNewPy】这样的py文件即动态增加了对新类型设备的处理能力。

注:app.device_vrs20模块在main.py中被引用

4、新的操作

定义对应的操作函数,然后用auth.registerOP注册即可。

类似app/op_getDevData.py,然后动态加载【loadNewPy】这样的py文件即动态增加了对新的操作。

注1:app.op_getDevData模块在main.py中被引用

注2:新增的操作必须在相应的资源(组)的权限管理中追加操作才能被执行,通过【操作权限查询】,按【资源(组)】进行条件查询,然后对该权限执行【修改操作】。如果没有相应资源(组)的权限配置,则新增相应的资源配置。权限配置完毕,要对影响到的资源(组)做权限下发,新的操作才会被相应的用户有权操作

5、给操作后得到的数据增加SLA【服务水平,如不同的精度、不同的粒度、不同的范围等等】

完成操作后,根据数据类型和用户的不同,可以提供针对性的SLA。只需要针对不同的SLA分别定义对应的数据处理函数,然后将这些数据处理函数以数据类型、角色用dataPolicy.register注册跟即可。

类似app/dualResult_vrs20.py,然后动态加载【loadNewPy】这样的py文件即动态增加了对新数据类型、新的角色提供的操作后过滤能力。

注1:app.dualResult_vrs20模块在main.py中被引用

注2:未注册的数据类型直接返回原数据;注册了数据类型时,按用户名、用户角色、默认这三个顺序依次搜索,找到就交其处理,未找到则返回原数据

SLA只是数据策略的一个应用,在jxTMS中,数据策略称为数据的后处理。即设备所接收到的数据有三次处理机会:

  • 设备接收到的数据会交给设备所配置的数据处理策略进行解析、处理、保存等

  • 当用户发起操作并通过授权检验后,jxTMS会调用相应的操作函数来执行该操作。虽然我们示例的操作就是读取设备的实时数据,但也不排除根据需要对数据进行加工处理

  • 当用户操作完毕,取得操作后的数据时,jxTMS会检查是否有合适的数据转换策略,如果有则调用该策略对获取到的数据进行转换后再递交用户,否则直接将数据递交用户

注:数据策略使用dataPolicy.register进行注册:

引用:

from jx.dataPolicy import dataPolicy

dataPolicy.register函数说明:

register(cls, type, dual, target=‘default’)

注册一个数据转换策略

参数:
	type:数据类型
	dual:处理函数
	target:期望匹配的目标,应该是角色名,默认是default,即该类型数据的默认转换策略
返回值:
	无
说明:
	1、同一数据类型,数据转换策略的搜索顺序是:用户名、用户的各角色、default,先找到哪个就用哪个;没找到就返回原数据
	2、dual函数的签名是:
		dual(data)
			data:当前数据

6、mqtt接收到不同的主题如何处理【参考后继的mqqt讲解】

定义对应的处理函数,然后用mqttClient.registerDual注册即可。

main.py中注册了default的topic,即处理所有未指明的topic消息

7、增加新的rest接口来执行操作【参考后继的web讲解】

有两种方案:

a web服务尚未启动前

定义继承自UserRouter的相应的uri处理类,然后用web.register在web服务启动前注册即可。

类似app/web.py,但其中所增加的uri【/api/getDeviceData】只能在web服务启动前添加,无法被动态加载。

b web服务已经启动

增加一个新的操作【需授权】,然后通过/api/access访问即可。即,本方法或说/api/access是将权限、操作、SLA进行了深度融合后的产物,只需要增加新的操作并授权,即可通过/api/access访问。

注:/api/access实质上只是将user.access暴露给了web访问,给user.access提供了web访问通道

8、增加新的告警方式

定义继承warnPolicy的告警策略,然后重写dual对象函数后,然后创建一个该策略的实例用warnPolicy.register注册即可。

类似app/warnPolicy_dingding.py,然后动态加载【loadNewPy】这样的py文件即动态增加了新的告警方式。

注:app.warnPolicy_dingding模块在main.py中被引用

warnPolicy.register的函数签名:

register(cls, type, wp, purpose=None)
type:使用告警策略对象的类型
wp:告警策略实例
purpose:如果一种类型需要更详细的告警策略区分,则用purpose来辅助区分

结语

本文一共讲述了8种动态扩展,加上上篇文章中的注册新型站点,所以jxTMS的python服务一共提供了9种动态扩展能力:

接口机动态升级能力

笔者在main.py中做了说明:本示例一共用到了8种动态注册,本文讲述的这8种动态扩展都使用到了【7b的web服务启动后添加access动作未示例】,只有site.register没被用到。

参考资料:

jxTMS设计思想

jxTMS编程手册

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

如何用jxTMS开发一个功能

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

jxTMS的HelloWorld

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。