欢迎使用CSDN-markdown编辑器

本文档介绍了JTT808解析服务器的使用方法,包括运行环境配置、服务器配置、简单使用教程和二次开发。内容涵盖创建虚拟环境、安装Python库、配置服务器监听IP及端口,以及如何查询终端属性和响应终端数据。
摘要由CSDN通过智能技术生成

欢迎使用JTT808解析服务器

简单介绍JTT808原理及使用方式:

  • 配置要求
  • 工作原理
  • 使用教程
  • 共同开发
  • 代码托管

目录

运行环境配置

1 创建虚拟运行环境

pip install virtualenv
mkdir jtt808
cd jtt808
virtualenv . 
source ./bin/activate

2 安装必要python库


pip install tongue 
pip install sqlalchemy
pip install mysql-python

3 建立开发目录

用于存放开发源代码

mkdir src
cd src

4 各个python包的简单概述

  • app
    这里是你可以扩展的部分,你需要做的通常只是继承父类,然后重载一些属性,即可以解析大部分协议。这里还是你编写ORM模型的地方,你可以选择保存那些数据到你的数据库里。

  • conf
    这里只是简单配置,包含了协议配置。和服务器运行相关参数配置,例如数据库的名字及密码等。还有你需要监听的端口等~

  • core
    这是整个框架解析的核心,包含了一个强大的基类,如果你没有理解透这里代码运行的原理。不推荐轻易修改!

  • docs
    这个部分,目前尚未编写文档,目前只是预留。

  • process_signal
    信号处理部分,为了与终端实时交换。我们可以在没有完全编写完整个终端设备管理系统的情景下,通过命令的方式与终端设备交换。例如,你可以按下CTRL+Z即可以进入交互模式。交互模式相对比较人性化,通常你只需输入选项前的数字即代表你的命令,系统内部会产生应答数据回复终端。你完全可以在这里查询终端的设备信息。不过,你需要记住一点,这个调试模式运行时会阻塞所有当前事务。

  • receiver
    这里是数据的入口部分,也是决定服务器吞吐量的关口,目前设计了两种实现方案,一种是早期的suck_block_mode方式,这种方式主要是简单易于实现,不支持同时连接两个客户端,因此,其主要用于调试。第二种为suck_asyn_mode方式。这种方式能够同时支持多个连接,居然并发的能力!

  • shortcuts
    这里包含了自动回复终端设备的模板机制,相当于打包数据。注意,其内部会调用tongue.Code对打包好的数据进行编码,然后发送产生的二进制数据到终端设备。

  • simulate
    目前还未开发,主要用于模拟终端设备的运行。方便开发高并发的调试。

  • utils
    提供了多种函数,用于计算数据的完整性,加密性以及产生鉴权码等等。

  • visual
    终端视觉部分,主要提供各种不同颜色的提示方式,以区别不同数据以及错误提示等等。

服务器配置

1 服务器监听IP及端口配置

你可以在这里配置你接收数据的IP及端口号,还可以在这里配置你的数据库,等等!

cd jtt808/conf/
vim settings.py

配置好,就让咱们运行吧!

python suck_block_mode.py

2 解析的协议配置

这里是定义你需要解析的协议

vim /conf/protocols.py

例如,当我们使用的是JTT808-2013版的协议时,我们的协议定义如下表:
这里写图片描述

则我们在配置协议时可以这样配置,如下所示:

MSG_ID_ORIGINAL = pattern(
        ('0x0100', 'ter_reg_req'),
        ('0x8100', 'ser_reg_rsp'),
        ('0x0102', 'ter_aut_req'),
        ('0x8001', 'ser_com_rsp'),
        ('0x0200', 'position'),
        ('0x8104', 'get_ter_info'),
        ('0x0104', 'get_ter_info_rsp'),
        ('0x8107', 'get_ter_attr'),
        ('0x0107', 'get_ter_attr_rsp')
)

简单使用教程

假设我们需要查询我们终端属性

查表得知
消息ID: 0x8107
查询终端属性消息体为空

1 配置查询终端属性协议

vim /conf/protocols.py

添加如下

MSG_ID_ORIGINAL = pattern(
    # Rest of Code ...
    ('0x8107', 'get_ter_attr'),
)

2 配置终端属性应答

我们下发终端查询属性的指令后,终端设备会回复我们,所以我们需要识别这个消息。因此我们接下来是配置这个终端属性应答。

MSG_ID_ORIGINAL = pattern(
         # Rest of Code ...
        ('0x8107', 'get_ter_attr'),
        ('0x0107', 'get_ter_attr_rsp')
)

3 编写我们的视图函数

vim /app/views.py

添加代码如下:

def get_ter_attr(terminal_request):
    template = 'get_ter_attr|sys_fixed_msg_attr2|client_dev_id|sys_product|'
    return render(terminal_request, template)
详解所有名词
  • get_ter_attr
    当然就是函数名了,你也可取其他名字,不过最好遵python命名规则。

  • terminal_request
    是一个字典,它包含了终端的所有当前上传的信息。例如template里面的client_dev_id就是我们从客户上传上来的数据中获得的。

  • template
    定义一个安装管道分割的字符串,你可以发现,它包含了 很容易理解的名字。这些都是为了让系统去查询相关的字典获取到数据后,组合起来。

  • get_ter_attr
    还记得吧!我们自己定义的get_ter_attr消息id它对应的就是0x8107

  • sys_fixed_msg_attr2
    这个是系统已经定义好的,其实你也可以自己定义。这个只是为了调试。它的意思是固定的系统消息属性。因为查询终端属性这条指令的消息体是空的,所以我们会看到(conf/protocols.py)里面定义的sys_fixed_msg_attr2为(0,0)所以协议中定义如下:

SYSTEM_CMD = pattern(
        # Rest of C
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值