監測數據採集物聯網應用解決方案
本方案主要應用於數據採集、傳輸、及平臺展示一體化解決方案中軟件技術框架部分。本方案軟件技術框架具有以下特點:開發時間短、效率高、兼容性強、部署簡單。本方案軟件技術框架涉及兩大部分:平臺接收及數據展示和物聯網設備數據採集端;
平臺端開發:java+mysql
設備端開發:python3.6+sqlite3
技術聯繫方式:QQ(591033633)
微信(15858293899)
目錄
本方案主要應用於數據採集、傳輸、及平臺展示一體化解決方案中軟件技術框架部分。本方案軟件技術框架具有以下特點:開發時間短、效率高、兼容性強、部署簡單。
本方案軟件技術框架涉及兩大部分:平臺接收及數據展示和物聯網設備數據採集端;
2.技術方案總體架構
本平臺技術框架作爲關係型數據庫接口配置管理系統,可通過圖形化界面配置各類數據接口,無需編寫任何後臺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下運行;
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>
接口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":""}]}
接口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':'用戶未登陸,請登陸'}]}
清除冗餘數據按鈕:系統自動清除配置信息中冗餘數據爲系統進行瘦身,建議一年執行一次;
讀取全局變量信息按鈕:添加、修改或刪除數據源時觸發此按鈕以進行系統自動加載緩存信息;
添加數據源界面見下圖:
子系統名稱:隨便填寫
子系統驅動:
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 |
子系統登錄賬號:填寫正確的賬號(本測試界面中以*顯示)
子系統登錄密碼:填寫正確的密碼(本測試界面中以*顯示)
子系統版本號:隨便填寫
子系統編碼:隨便填寫
添加接口名稱見下圖:
子系統主鍵:選擇對應數據源子系統(見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--3.4.10後進行接口調試;
見接口名稱中的“接口調試”按鈕
選中要調試的接口列表記錄
選中應用平臺列表記錄
選中平臺用戶列表記錄
點擊調試按鈕
輸入參數,點測試接口
添加輸入參數見下圖:
接口名稱:選擇對應接口(見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,…………
輸出參數一般針對接口爲存儲過程類型接口具有輸出參數模式;
返回值或輸出參數需與SQL語句或存儲過程值一致(區分大小寫)
返回值或輸出參數需與SQL語句或存儲過程值一致(區分大小寫)
url中參數sub_code
Url中參數sub_usercode
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
各類系統參數配置。
測試通訊服務器IP及端口信息
xx.x.x.xxx:8090
數據協議案例:
@##ST=04&DATATIME=20190409101900&sub_code=FF0731CC39614C90A5D474BC17253713&sub_usercode=114A6DB3BBE6419DA3768E6E25127310¶m_name=D01_select_tb1¶m_value1=50##@
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":"測試"}]}
錯誤提示:數據庫主鍵衝突,輸入數據主鍵不唯一;
錯誤提示:數據庫主鍵衝突,輸入數據主鍵不唯一;
錯誤提示:輸入參數字符串"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)該接口超過調用次數限制;
測試部署描述 |
參考值 |
備註 |
程序部署環境 |
個人PC |
|
運行方式 |
桌面jar雙擊運行 |
Sqlite配置庫 |
併發訪問線程數 |
80個 |
2臺PC測試機,本地網絡訪問 |
壓力測試用時 |
18小時 |
|
請求數據接口類型 |
Select語句 |
|
線程訪問頻率 |
隨機5--15秒/次 |
|
總請求接口次數 |
375939 |
|
請求成功次數 |
375926 |
|
請求失敗次數 |
13 |
|
數據請求成功率 |
99.99% |
|
結論: |
滿足併發數80個要求 |
測試部署描述 |
參考值 |
備註 |
程序部署環境 |
雲服務器 |
|
運行方式 |
tomcat服務運行 |
Mysql配置庫 |
併發訪問線程數 |
500個 |
2臺PC測試機,公網網絡訪問 |
壓力測試用時 |
12 |
|
請求數據接口類型 |
Insert語句 |
|
線程訪問頻率 |
隨機5--15秒/次 |
|
總請求接口次數 |
7061833 |
|
請求成功次數 |
7061817 |
|
請求失敗次數 |
16 |
|
數據請求成功率 |
99.99% |
|
結論: |
滿足併發數500個要求 |
物聯網設備數據採集程序主框架基於Python3.6開發,靜態配置庫採用Sqlite3桌面型數據庫配置。支持ARM架構或X86架構主板設備,操作系統支持Linux操作系統及windows操作系統。
可通過圖形化界面配置各類數據接口,實現可視化配置即結果模式,易於擴展;各類接口協議擴展采用插件式模式,方便快捷進行各類擴展性開發。
程序簡小,程序文件大小約爲 30M
windows操作系統服務器程序運行:雙擊e9goRun.bat
linux操作系統服務器命令運行:
python e9gomain.pyc &
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
硬件環境:X86架構工業控機、ARM架構工控機
操作系統:winodws操作系統、Linux操作系統
運行環境:Python3、Sqlite3
基礎組件庫:pycryptodome、pyserial-3.4
4.4設備界面效果圖