docker版jxTMS使用指南:python服务之设备与站点

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

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

4.0版的jxTMS中python服务是一个采集前端数据的接口机,所以device模块是其关键部件,用来对设备进行管理。

device的主要任务是:

1、解析数据

设备在创建时会根据设备类型获取到本设备的数据解析策略,等接收到数据时,使用该策略将接收到的文本信息解析为dict的内部数据

2、保存数据

将正确解析后的数据保存到数据库,根据配置,可以全部保存还是以一定的时间间隔保存

3、设备状态

跟踪设备工作状态,参见前面的内置自动机一章

引用:

from jx.device import device

device说明:

class device(SMInstance):
    @classmethod
    def New(cls,type,name,params,saveDataInterval=15, timeOut=180, timeOutCheckInterval=1):
        #根据type创建一个设备
        #type:设备类型
        #name:设备名
        #params:参数
        #saveDataInterval:保存设备数据的间隔分钟数,0则接收的数据都保存
        #timeOut:没接收到设备数据的超时秒数
        #timeOutCheckInterval:检测超时的间隔分钟数

    @classmethod
    def register(cls,type, newFunc):
        #注册type类型的设备创建函数
        #type:设备类型
        #newFunc:设备创建函数
        #newFunc的签名是:
        #New(name,params,saveDataInterval, timeOut, timeOutCheckInterval)

    @classmethod
    def getDevByName(cls, devName):
        #根据设备名获取设备
        #devName:设备名

    def __init__(self, type, name, saveDataInterval, timeOut, timeOutCheckInterval):
        #设备的初始化函数
        #type:设备类型
        #name:设备名
        #saveDataInterval:保存设备数据的间隔分钟数,0则接收的数据都保存
        #timeOut:没接收到设备数据的超时秒数
        #timeOutCheckInterval:检测超时的间隔分钟数
	
    def setWarnType(self, wty):
        #设置设备的告警类型
        #wty:告警类型,初始为test,打印到日志;设置为ok则通过告警策略告警

    def warnType(self):
        #返回设备的告警类型

    def warn(self, event, title, msg):
        #告警
        #event:诱发事件
        #title:如果是告警到钉钉,则为消息标题
        #msg:消息内容

    def onClose(self):
        #设备关闭时触发的事件,默认无动作

    def close(self):
        #关闭设备

    def onInit(self):
        #设备完成初始化时触发的事件,默认无动作

    def setParam(self,paramName,value):
        #设置设备参数,默认无动作
        #paramName:参数名
        #value:参数值

    def state(self):
        #获取设备的当前状态,dict:
        #logTime
        #logState
        #logEvent
        #logMsg

    def type(self):
        #获取设备的类型

    def site(self):
        #获取设备所属站点
	
    def channel(self):
        #获取设备的通道号

    def fullname(self):
        #获取设备全名:{站点名}.{设备名}

    def name(self):
        #获取设备名
	 
    def ormObj(self):
        #获取本设备的ORM对象

    def data(self):
        #获取本设备所接收到的最新数据

    def onReceive(self):
        #本设备接收到新数据后,正确解析并完成保存、received事件触发后,触发本事件
        #默认无动作
站点

设备是基础,但jxTMS管理的单位却是站点,因为业务逻辑上不可能单独部署一台设备,而是要开通一个站点,哪怕这个站点其实就一台设备。

站点的工作逻辑主要有两点:

1、站点开通后,要以站点名为主题向mqtt订阅所有发往该主题的消息

2、站点接收到前端发送过来的消息后,要对其进行解析,将其拆解为【channel:msg】的值对,然后按channel查找到本站点的相应设备,然后将msg递交给该设备进一步处理

所以,默认的站点就是单设备型站点,接收到的消息直接递交该设备处理即可。但其它类型的设备,就需要基础site类,然后以站点类型来注册创建该类型站点的函数。

引用:

from jx.site import site

site说明:

class site:
    @classmethod
    def New(cls,type,name):
        #创建一个新的站点
        #type:站点类型,如果该type没有用registerSiteType注册过
        #那返回的就是基础的site【单设备型站点,该设备发出的数据就是site收到的数据】
        #name:站点名

    @classmethod
    def register(cls,type, newFunc):
        #注册type类型站点的site创建函数
        #type:站点类型
        #newFunc:生成一个该类型的站点对象
		#  newFunc(siteName)

    @classmethod
    def init(cls):
        #加载本地存储中的通过jxTMS平台下发的所有site的配置
        #这些配置不但包括site的类型,还包括该站点各设备的信息
        #site.init在pyService初始化函数的最后一步自动调用

    @classmethod
    def stopSite(cls, siteName):
        #关停站点,同时从本地存储中清除该站点,以避免重启后仍被加载
        #siteName:站点名

    @classmethod
    def setWarnType(cls, siteName, warnType):
        #设置站点的告警类型
        #siteName:站点名
        #warnType:告警类型

    def onClose(self):
        #关闭事件,本站点被关闭后被触发,默认无动作

    def receive(self, str):
        #默认的site是单设备无多串口卡,设备上传数据直接透传到MQTT
        #其它类型的站点要继承后并重写receive
        #str:从mqtt以站点名为主题接收到的字符串

    def type(self):
        #返回站点类型

    def name(self):
        #返回站点名

参考资料:

jxTMS设计思想

jxTMS编程手册

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

如何用jxTMS开发一个功能

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

jxTMS的HelloWorld

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值