監測數據採集物聯網應用解決方案

監測數據採集物聯網應用解決方案

       本方案主要應用於數據採集、傳輸、及平臺展示一體化解決方案中軟件技術框架部分。本方案軟件技術框架具有以下特點:開發時間短、效率高、兼容性強、部署簡單。本方案軟件技術框架涉及兩大部分:平臺接收及數據展示和物聯網設備數據採集端;

       平臺端開發: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設備界面效果圖

 

 

 

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