监测数据采集物联网应用解决方案

监测数据采集物联网应用解决方案

       本方案主要应用于数据采集、传输、及平台展示一体化解决方案中软件技术框架部分。本方案软件技术框架具有以下特点:开发时间短、效率高、兼容性强、部署简单。本方案软件技术框架涉及两大部分:平台接收及数据展示和物联网设备数据采集端;

       平台端开发:java+mysql

      设备端开发:python3.6+sqlite3

技术联系方式:QQ(591033633)

       微信(15858293899)

目录

1. 前言描述 3

2. 技术方案总体架构 4

3. 平台接收及数据展示 5

3.1. 技术特点 6

3.2. 接口定义步骤流程图 8

3.3. 代码调用案例 11

3.3.1. 用户登录接口 11

3.3.2. 获取用户信息 13

3.4. 接口展示界面 14

3.4.1. 登陆及首页 14

3.4.2. 数据源配置 15

3.4.3. 接口名称 18

3.4.4. 输入参数 23

3.4.5. 输出参数 25

3.4.6. 返回值 25

3.4.7. 应用平台信息 27

3.4.8. 应用平台授权 28

3.4.9. 平台用户信息 29

3.4.10. 平台用户授权 31

3.4.11. APP应用模板 32

3.4.12. APP应用模板明细 34

3.4.13. 系统参数配置 35

3.4.14. TCP长连接socket通讯模式 36

3.4.15. 延时数据请求模式 37

3.5. 错误信息 39

3.6. 压力测试报告 42

3.6.1、 测试报告一 42

3.6.2、 测试报告二 43

3.7. 业务展示web应用案例 44

4. 物联网设备数据采集 47

4.1. 技术特点 47

4.2. 运行环境 49

4.3. 设计说明 49

 

 

 

 

  1. 前言描述

本方案主要应用于数据采集、传输、及平台展示一体化解决方案中软件技术框架部分。本方案软件技术框架具有以下特点:开发时间短、效率高、兼容性强、部署简单。

本方案软件技术框架涉及两大部分:平台接收及数据展示和物联网设备数据采集端;

2.技术方案总体架构

3.平台接收及数据展示

本平台技术框架作为关系型数据库接口配置管理系统,可通过图形化界面配置各类数据接口,无需编写任何后台java或.net代码,实现可视化配置即结果模式,易于扩展;可将程序开发人员的重复接口定义工作从繁琐的重复性后台代码中解脱出来,让程序开发人员更专注于数据业务的分析和理解。使用该系统人员需要对数据库具有一定应用基础知识,熟练掌握各类数据库SQL语句及存储过程编写能力。

该系统程序部署简单,分为轻量级应用部署和重量级应用部署;

轻量级应用部署:

程序简小,不包含jar包,程序文件大小约为 30M


程序包含文件见上图:

CenterDataRunNode_lib 支持java程序运行的jar包

Chrome 免安装版google浏览器

jre7_32 免安装版jre7(32位)

web、center_data、CenterDataRunNode.jar、dbconfig.properties 为程序文件

 

windows操作系统服务器程序运行:双击run_jar.bat

linux操作系统服务器命令运行:

java -jar CenterDataRunNode.jar &

程序运行界面:

重量级应用部署:

部署于tomcat下运行;

3.1技术特点

1)支持多数据源(最多9个)数据库接入;(sql server2005及以上版本、Oracle10g及以上版本、MYSQL5.0及以上版本、Sqlite桌面型数据库、Access桌面型数据库);

2)数据接口定义完全图形化操作,无需编写任何开发代码;便于后期无限接口业务扩展;

3)接口数据调用权限化管理,包含接口调用期限,次数限值,IP绑定等接口权限管理功能;

4) 支持前端Javascript跨域获取数据操作,支持java、C#等主流开发语言后端获取数据或传递数据模式;

5)调用方式为web page(get、post均支持)方式,返回结果以json数据格式展示,支持基于html5的前端展示系统的数据接入;特殊字段采用url编码格式进行特殊字符编码转义处理;

6) 支持双权限认证模式(sub_code和sub_usercode);

7)用户接口时效性认证;

8)支持TCP长连接socket通讯方式获取数据; 

 9)针对运算复杂数据接口支持延迟获取数据请求模式(初次请求数据命令,延时5分钟或10分钟请求数据结果);

 10)支持动态配置数据传输编码格式(UTF-8,GBK, iso-8859-1 ..);

 11)支持插件式接口扩展开发,满足不同业务数据接口需求;


3.2接口定义步骤流程图

接口参数描述:

http://xx.xx.x.x:xxxx/CenterData?sub_code=xxxxxx&sub_usercode=xxxxxx¶m_name=A01_xxxxx¶m_value1=13xxxxx¶m_value2=xxxxx

sub_code :见3.7应用平台code

sub_usercode :见3.9平台用户code

param_name :见3.3接口名称

param_value1 :见3.4输入参数,按顺序输入

param_value2   :同上

......


在线测试案例:

http://xx.xx.x.xx:8080/CenterData/getdata.jsp?sub_code=FF0731CC39614C90A5D474BC17253713&sub_usercode=114A6DB3BBE6419DA3768E6E25127310¶m_name=D01_select_tb1¶m_value1=50

 

JS调用测试代码:

 

<script type="text/javascript">

$.ajax({

type: "POST",

async: false,

url: "http://xx.x.x.xx:8080/CenterData/getdata.jsp?sub_code=FF0731CC39614C90A5D474BC17253713&sub_usercode=114A6DB3BBE6419DA3768E6E25127310",

data:{param_name:"D01_select_tb1"

,param_value1:"50"},

//跨域请求的URL

dataType: "jsonp",

jsonp: "jsoncallback",

jsonpCallback: "data_result",

success: function(data) {

},

error: function() {

if(confirm("网络故障,请刷新网络"))

window.location.reload();

},

// 请求完成后的回调函数 (请求成功或失败之后均调用)

complete: function(XMLHttpRequest, textStatus) {

}

});

 

function data_result(input_data)

{

alert(JSON.stringify(input_data));

}

</script>

3.3代码调用案例

3.3.1用户登录接口

接口url:

http://xx.xx.x.x:xxxx/CenterData/getdata.jsp?sub_code=xxxxxxxxxxx&sub_usercode=xxxxxxxxxx

 

提交方法(UTF-8编码):

post、get

 

提交参数:

param_name=A01_xxxxxx 接口名称

param_value1=136DD00D2E 用户手机号

param_value2=DD00D2E3 用户密码

 

提交案例:

http://xx.xx.x.x:xxxx/CenterData?sub_code=xxxxxx&sub_usercode=xxxxxx¶m_name=A01_xxxxx¶m_value1=13xxxxx¶m_value2=xxxxx

 

返回参数:

s_result /*成功或失败 0:失败 1:成功*/

error_desc /*失败原因*/

login_id /*用户登录账号*/

nickname /*用户名称*/

session_id /*用户session_id*/

 

测试成功结果demo:

{"A01_xxxxxx":[{"s_result":"1","error_desc":"","login_id":"136xxxx","nickname":"xxxx"}]}

 

测试失败结果demo:

{"A01_ xxxxxx ":[{"s_result":"0","error_desc":"错误,登陆账号或密码错误","login_id":"","nickname":""}]}

 

3.3.2获取用户信息

接口url:

http://xx.xx.x.x:xxxx/CenterData/getdata.jsp?sub_code=xxxxxxxxxxx&sub_usercode=xxxxxxxxxx

 

提交方法(UTF-8编码):

post、get

 

提交参数:

param_name=A01_xxxx 接口名称

param_value1=136xxxx 用户登录手机号

session_id=xxxxx

 

提交案例: http://xx.xx.x.x:xxxx/CenterData?sub_code=xxxxxx&sub_usercode=xxxxxx¶m_name=A01_xxxxx¶m_value1=13xxxxx&session_id=xxxxx

 

返回参数:

login_id /*用户注册手机号*/

nickname /*用户姓名*/

 

测试成功结果demo:

{"A01_xxxx":[{"login_id":"136xxx,"nickname":"xxxxx"}]}

 

测试失败结果demo:

{"A01_xxxx":[]}

{'A01_xxxx':[{'session_id':'','s_result':'0','error_desc':'用户未登陆,请登陆'}]}

3.4接口展示界面

3.4.1登陆及首页


3.4.2数据源配置

清除冗余数据按钮:系统自动清除配置信息中冗余数据为系统进行瘦身,建议一年执行一次;

读取全局变量信息按钮:添加、修改或删除数据源时触发此按钮以进行系统自动加载缓存信息;

添加数据源界面见下图:


子系统名称:随便填写

子系统驱动:

SqlServer2005

com.microsoft.jdbc.sqlserver.SQLServerDriver

SqlServer2008

com.microsoft.sqlserver.jdbc.SQLServerDriver

MySql

com.mysql.jdbc.Driver

Oracle10g

oracle.jdbc.driver.OracleDriver

Access

sun.jdbc.odbc.JdbcOdbcDriver

sqlite

org.sqlite.JDBC

子系统url:

SqlServer2005

jdbc:microsoft:sqlserver://x.x.x.x:1433;DatabaseName=DB_Name

SqlServer2008

jdbc:sqlserver://xx.xx.xx.xx:1433;DatabaseName=DB_Name

Oracle10g

jdbc:oracle:thin:@x.x.x.x:1521:orcl

MySql

jdbc:mysql://x.x.x.x:3306/DB_Name?autoReconnect=true

&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

Access

jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\..\\..\\DB_Name.mdb

Sqlite

dbc:sqlite:D:\\......\\DbName.db

子系统登录账号:填写正确的账号(本测试界面中以*显示)

子系统登录密码:填写正确的密码(本测试界面中以*显示)

子系统版本号:随便填写

子系统编码:随便填写

 

3.4.3接口名称


添加接口名称见下图:


子系统主键:选择对应数据源子系统(见5.2)

接口中文名称:随便填写

接口英文名称:英文(区分大小写)+下滑线+数字,不要有特殊字符

SQL语句:对应接口SQL语句,如:select SID,VALUE1 from tb_1 where SID = ? and VALUE1 = ?

insert into tb_1(SID,VALUE1) values(?,?)

类型:选择"SQL语句"或"存储过程",当选择"SQL语句"时,填写的SQL语句生效,当选择"存储过程"时,填写的SQL语句无效,同时接口英文名称必须与存储过程名一致;

备注:随便填写

url中参数param_name

 

3.4.3.1.接口调试

 

建议阅读完3.4.3--3.4.10后进行接口调试;

 

见接口名称中的“接口调试”按钮


选中要调试的接口列表记录


选中应用平台列表记录


选中平台用户列表记录


点击调试按钮


输入参数,点测试接口

 

3.4.4输入参数


添加输入参数见下图:


接口名称:选择对应接口(见3.4.3)

接口输入参数中文名称:随便输入

接口输入参数英文名称:随便输入

接口输入参数值类型:INT STRING。。类型

接口输入参数大小:默认50

 

接口输入参数顺序与3.4.3接口中参数一致,如:

insert into tb_1(SID,VALUE1) values(?,?)这个接口SQL语句中,先定义输入参数:SID,在定义输入参数VALUE1,否则系统参数会错乱;

 

url中参数以param_value1,param_value2,Param_value3,…………

 

3.4.5输出参数

 

输出参数一般针对接口为存储过程类型接口具有输出参数模式;

返回值或输出参数需与SQL语句或存储过程值一致(区分大小写)

3.4.6返回值


返回值或输出参数需与SQL语句或存储过程值一致(区分大小写)

 

3.4.7应用平台信息


url中参数sub_code

3.4.8应用平台授权

3.4.9平台用户信息

3.4.10平台用户授权


Url中参数sub_usercode

 

3.4.11APP应用模板

 

3.4.11.1摸板调试

3.4.12 APP应用模板明细


页面对应输入参数:页面url参数与该子项接口输入参数对应值。

如:页面参数起始序号丛2开始,页面有参数(param_value2、param_value3、param_value4),其中接口1对应输入参数有2个对应页面参数分别为(param_value2、param_value3),接口2对应输入参数有2个对应页面参数分别为(param_value4、param_value2),接口3对应输入参数有1个对应页面参数为(param_value3);

接口1页面对应输入参数:param_value2,param_value3

接口2页面对应输入参数:param_value4,param_value2

接口3页面对应输入参数:param_value3


3.4.13系统参数配置

各类系统参数配置。

3.4.14TCP长连接socket通讯模式

测试通讯服务器IP及端口信息

xx.x.x.xxx:8090

 

 

数据协议案例:

 

@##ST=04&DATATIME=20190409101900&sub_code=FF0731CC39614C90A5D474BC17253713&sub_usercode=114A6DB3BBE6419DA3768E6E25127310¶m_name=D01_select_tb1¶m_value1=50##@

 

 

3.4.15延时数据请求模式

 

http://xx.x.x.xx:8080/CenterData/getdata.jsp?sub_code=FF0731CC39614C90A5D474BC17253713&sub_usercode=114A6DB3BBE6419DA3768E6E25127310¶m_name=xxxxxx¶m_value1=34&delay_code=76FA05F0B1AB4ECDB0A0DC74C0EEA798&delay_data=0

 

delay_code 随机生成32位GUID

delay_data 0:请求数据 1:获取数据结果

请求命令成功:

{"s_result":"1","error_desc":"请求延时数据成功,请稍候获取数据"}

 

http://xx.x.x.xx:8080/CenterData/getdata.jsp?sub_code=FF0731CC39614C90A5D474BC17253713&sub_usercode=114A6DB3BBE6419DA3768E6E25127310¶m_name=xxxxxx&delay_code=76FA05F0B1AB4ECDB0A0DC74C0EEA798&delay_data=1

 

获取延时数据结果:

{"D01_select_tb1":[{"SID":1,"VALUE3":"正确","VALUE2":"速度","VALUE1":"测试"},{"SID":2,"VALUE3":"正确","VALUE2":"速度","VALUE1":"测试"},{"SID":3,"VALUE3":"正确","VALUE2":"速度","VALUE1":"测试"},{"SID":25,"VALUE3":"cc","VALUE2":"bb","VALUE1":"aa"},{"SID":27,"VALUE3":"cc","VALUE2":"bb","VALUE1":"测试"},{"SID":28,"VALUE3":"正确","VALUE2":"速度","VALUE1":"测试"}]}

 

 

 

3.5错误信息


错误提示:数据库主键冲突,输入数据主键不唯一;


错误提示:数据库主键冲突,输入数据主键不唯一;


错误提示:输入参数字符串"a3"错误,(定义3.4.4章节)此输入参数为INT或FLOAT类型,请检查输入参数类型;


错误提示:sub_code错误,(定义3.4.7、3.4.8、3.4.9、3.4.10章节)或应用平台未授权该接口权限;


错误提示:(定义3.4.3章节)接口未定义或输入错误param_name;


错误提示:(定义3.4.4章节)输入参数个数超过sql语句参数;


错误提示:sql语句缺少(定义6.4章节)参数或输入参数未定义;


错误提示:sql语句中某个返回值为STRING类型,(定义3.4.6章节)但定义返回值却为INT型;


错误提示:(定义6.6章节)返回值"s4"未发现,确认返回值字段"s4"与sql语句中返回字段是否一致


错误提示:(定义3.4.10)该接口超过调用次数限制;

 

 

3.6压力测试报告

3.6.1测试报告一

 

测试部署描述

参考值

备注

程序部署环境

个人PC

 

运行方式

桌面jar双击运行

Sqlite配置库

并发访问线程数

80个

2台PC测试机,本地网络访问

压力测试用时

18小时

 

请求数据接口类型

Select语句

 

线程访问频率

随机5--15秒/次

 

总请求接口次数

375939

 

请求成功次数

375926

 

请求失败次数

13

 

数据请求成功率

99.99%

 

结论:

满足并发数80个要求

 

 

 

 

 

3.6.2测试报告二

 

测试部署描述

参考值

备注

程序部署环境

云服务器

 

运行方式

tomcat服务运行

Mysql配置库

并发访问线程数

500个

2台PC测试机,公网网络访问

压力测试用时

12

 

请求数据接口类型

Insert语句

 

线程访问频率

随机5--15秒/次

 

总请求接口次数

7061833

 

请求成功次数

7061817

 

请求失败次数

16

 

数据请求成功率

99.99%

 

结论:

满足并发数500个要求

 

 

3.7业务展示web应用案例

4物联网设备数据采集

物联网设备数据采集程序主框架基于Python3.6开发,静态配置库采用Sqlite3桌面型数据库配置。支持ARM架构或X86架构主板设备,操作系统支持Linux操作系统及windows操作系统。

可通过图形化界面配置各类数据接口,实现可视化配置即结果模式,易于扩展;各类接口协议扩展采用插件式模式,方便快捷进行各类扩展性开发。 

程序简小,程序文件大小约为 30M

windows操作系统服务器程序运行:双击e9goRun.bat

linux操作系统服务器命令运行:

python e9gomain.pyc &

 

4.1技术特点

1)数据接口定义完全图形化操作,无需编写任何开发代码;便于后期无限接口业务扩展;

2)接口数据调用权限化管理,包含接口调用期限,次数限值,IP绑定等接口权限管理功能;

3) 支持前端Javascript跨域获取数据操作,支持java、C#等主流开发语言后端获取数据或传递数据模式;

4)调用方式为web page(get、post均支持)方式,返回结果以json数据格式展示,支持基于html5的前端展示系统的数据接入;特殊字段采用url编码格式进行特殊字符编码转义处理;

5) 支持双权限认证模式(sub_code和sub_usercode);

6)用户接口时效性认证;

7)支持TCP长连接socket通讯方式获取数据; 

8)针对运算复杂数据接口支持延迟获取数据请求模式(初次请求数据命令,延时5分钟或10分钟请求数据结果);

9)支持动态配置数据传输编码格式(UTF-8,GBK, iso-8859-1 ..);

10)支持插件式接口扩展开发,满足不同业务数据接口需求;

11)支持版本自动更新,减少大量设备程序部署更新运维操作;  12)支持设备数据一点多发;

13)支持业务数据web展示;

14)支持远程web模式进行debug调试;

15)支持设备远程重起;

接口定义及配置参见:3.4

4.2运行环境

硬件环境:X86架构工业控机、ARM架构工控机

操作系统:winodws操作系统、Linux操作系统

运行环境:Python3、Sqlite3

基础组件库:pycryptodome、pyserial-3.4

 

4.3设计说明

 

4.4设备界面效果图

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章