第五章 系統實作及成果展示
5.2 Server端實作及展示
5.2.2 接收使用者連線
當使用者認證通過後則開啟一個Thread來服務使用者所需的服 務,此Thread主要功能是將Client端送來的訊息解密後判斷其格式內 容是否正確,若是有效的訊息就依其訊息內容來處理完成相關的動 作,若訊息格式錯誤則不加以處理,其流程圖和展示圖所示如下:
47
圖 5-4 Server Service Thread 流程圖
服務 Client 端的 thread 等候訊息傳入
將資料訊息解密並檢 驗是否為有效訊息
判斷訊息格式並加以 處理
訊息接收
是
否
訊息驗
正確
錯誤
視為無效的訊息
48
圖 5-5 Server 接收使用者連線
5.2.3 新增移除家電
在Server端可以透過新增啟動鈕來啟動新增視窗,在輸入資料 後透過輸入的資料和資料庫連結更新資料庫的訊息資料,產生新的家 電裝置控制,其流程圖和展示圖所示如下:
49
圖5-6 新增刪除家電流程圖
圖 5-7 新增家電裝置前
執行新增或刪除家電 裝置
修改資料庫新增或刪 除完成 新增刪除
是
否 輸入所要新增或刪除
家電名稱和 ID
關閉此項功能
50
圖 5-8 新增家電裝置後
同樣的在 Server 端可以透過取消停用鈕來啟動移除視窗,在輸 入資料後透過輸入的資料和資料庫連結更新資料庫的訊息資料,移除 此家電裝置控制,其流程圖如圖 5-6,而展示圖所示如下:
圖 5-9 Server 移除家電控制前
51
圖 5-10 Server 移除家電控制後
5.2.4 家電監控功能
Server端藉由一個Thread取得Adam上設定被受監控家電狀態 的訊息,來判斷這些感應型的家電是否偵測到特殊狀況的發生,若有 特殊狀況發生則程式發出聲音以告知Client端,讓此特殊狀況可以馬 上加以處理,以防有任何不幸的事情發生,家電監控流程圖如下圖所 示:
52
圖 5-11 家電監控流程圖
下圖為紅外線偵測器感應到有物體移動時,監控程式提出警告 並發出聲音的展示圖:
監控家電狀態程 式啟動
偵測是否有狀況 發生
判斷紀錄何種狀況並發 出警告聲音通知 Client
監控各項 家電
開啟
裝況發生
是
否
關閉此項監控 並等候開啟 關閉
53
圖 5-12 Server 偵測突發狀況
此外在 Server 端透過家電裝置旁邊的按鈕來啟動 Active 視窗,
透過選擇啟動或關閉不需要產生緊急回應訊息的家電,展示圖如下
圖 5-13 Server 端關閉偵測的功能
54
下圖則顯示透過啟動視窗選擇關閉紅外線偵測器偵測功能後所 作的變化回應,紅外線偵測器顯示為關閉,並透過訊息欄加以告知
圖 5-14 Server 端完成關閉偵測
55
5.3 Client 端
執行 Client 端的連線後,程式會先測試與主機的連線,如果連 線成功,便可輸入帳號密碼,將訊息加密後,送至 Server 驗證資料,
如果成功,則開始取得資料庫裡家電狀態的資料,並可使用程式的功 能。反之,驗證三次不過,程式將自動關閉。下圖為 Client 端之系 統流程圖:
圖 5-15 Client 端之系統流程圖
執行 Client 端 Application
輸入認證資料
資料正確
是
否
取得 Server 端資料庫資 料來初始化
使用 Application 的功能
56
5.3.1 Client程式啟動介面
Client程式啟動介面,展示圖如下圖所示
圖 5-16 Client 端程式介面(使用 Pjee 模擬器)
圖 5-17 Client 端程式介面(透過網頁)
57
5.3.2
認證
要求輸入使用者帳號密碼和登入主機ip,展示圖所示如下:
圖 5-18 認證資料的輸入 5.3.3
Client 端程式初始化
Client 端透過輸入資料取得認證後,系統和 Server 進行資料 庫連結,並回傳家電狀態供 Client 端更新其介面下的家電狀態,展 示圖如下:
圖 5-19 認證後系統更新
58
5.3.4 操控家電
當使用者欲改變某家電狀態,按下功能鈕後,Client 會將訊息加 密後送出,Server 收到訊息解密後,首先辨認訊息格式規則是否正 確,如確認無誤,便根據訊息內容發出訊號給 ADAM 微處理器改變電 器狀態,改變後再向 ADAM 確認狀態有無更改成功,接著根據修改後 的狀態變數更新資料庫,然後回應一內含更新後狀態資訊的訊息給 Client,使得 Client 得以照著此資訊修改操作畫面資訊,回應給使 用者知道。其流程圖和展示圖所示如下:
圖 5-20 操控家電流程圖
Client 端按下 Application 上 的功能鍵
將資料訊息加密並送出至 Server 端處理
接收回應訊息並顯示在訊息 列
59
圖 5-21 Client 端開啟電燈
5.3.5 預約遙控家電
透過 Client 程式中的定時開啟關閉家電功能,Client 可以在設 定的時間開啟或關閉家電裝置,時間設定完成後,即送出訊息給 server,server 端收到訊息後將此資訊送至一預約操控家電 table 中,主程式中會有一執行緒負責檢查啟動時間到達沒,當時間到即依 照命令變更家電狀態及更改資料庫資料,再回傳訊息給 Client。其 流程圖和展示圖如下所示:
圖 5-22 預約遙控家電流程圖
啟動預約開啟或關閉功能
設定家電開啟或關閉時間 等相關資訊
等候設定時間到臨 將資料訊息加密並送出至
Server 端處理
接收回應訊息並顯示在訊 息列
60
圖 5-23 Client 端程式定時啟動功能
5.3.6 系統告知特殊狀況
Server 端偵測到異常狀況〈如:門窗被打開、紅外線偵測到 動靜〉,會主動發一訊息告知 Client 端,圖示如下
圖 5-24 系統告知緊急狀況流程圖
Server 偵測到異常狀況
將資料訊息加密並送 出至 Server 端處理
取得警急訊息並顯示 在訊息列
61
圖 5-25 Client 端接受緊急訊息
5.4 系統資料庫
在MYSQL資料庫中家電的資訊如下圖所示,Code為家電的ID、Name 為家電名稱、O_switch為家電的啟動狀態 I_switch為Adam所得的輸 入狀態、Active則是Adam中的連接埠是否有使用,下表為資料庫各欄 位屬性表和資料庫中家電的資訊
表5-1 資料庫各欄位屬性表 Field Type
Code Int(2) Name Char(20) O_switch Int(2) I_switch Int(2) Active Int(2)
62
圖5-24 MYSQL資料庫中家電的資訊
63
第六章 心得感想與結論
6.1 遭遇到的困難
PDA 上程式的寫作
由於我們使用的 PDA 上免費的 JVM 只有 SUN 出的 PJEE(Personal Java Emulation Environment),只有實作到 JDK1.1.x 所以有很多已 做好的 JAVA 物件都無法使用,如 SWING、加解密套件,所以有很多 是少了 Carriage Return 的符號,最後加上去時發現板子上電器啟動 時,實在感動莫名。
JAVA 程式的寫作
由於以前很少接觸到 thread 的部分,而這次專題很多部分又需 要用到 thread,所以這部分也令我們感到相當的頭痛,所以花了很 多時間再研究這個部分,其中包括請問同學或是上某某 JAVA 論壇發
64
65
66
更為強大且控制更為友善的介面,不用再受限於PDA的軟硬體資源限 制。
至於控制家電方面,由於本系統是採用接線的方式來連結家電裝 置,未來Server可改用無線模組的方式來和各個家電裝置連線並透過 JAVA JINI的技術,實現真正無線的PDA遙控家電。
而且由於技術及硬體上的關係,目前只能夠做到對於家電進行開
67
6.5 甘特圖
下圖為顯示我們專題工作進度的甘特圖
圖6-1 甘特圖
68
[14]Java 教學手冊 / [康派爾]Mary Compione ,[華拉斯]kathy Walrath 原著; 堤香工作室編譯
[15] http://www.jsptw.com/jute/index.html
[16] http://www.cryptix.org/products/jce/index.html
69
[17]http://www.pcnet.idv.tw/pcnet/network/network_ip_tcp.ht m
[18]http://liy.slat.org/study/network/tcp_ip/network_ip_tcp .html
70
附錄 A
l 專題使用之 PDA
圖 附錄-1 PDA
l
專題模擬用之家電板子
圖 附錄-2 家電模擬版子
71
圖 附錄-2-1 家電模擬版子-大門紅外線偵測器、門/窗磁簧開關
圖 附錄-2-2 家電模擬版子-手動電燈開關、家電設備遠端控制
72
圖 附錄-2-3 家電模擬版子-ADAM 裝置、火災
73
附錄 B
l SQL 指令介紹
SQL 是「結構化查詢語言」(Structured Query Language)的 簡稱,是由 IBM 公司於 1970 年代所發展出來,用於關連式資料庫 (Relational Databases) 當中的一種資料庫查詢語言,利用 SQL 可 以用來定義資料庫結構、指定資料庫表格與欄位型態與長度、新增資
SELECT:所接的欄位名稱為待查資料庫的欄位名稱,
各欄位名稱之間以逗號隔開。
FROM:所接的資料表名稱為待查資料庫的資料表名 稱,各資料表名稱之間以逗號隔開。
WHERE:所接的條件式為設定查詢的條件式。
ORDER BY:所接的欄位名稱為欲排序的欄位,可將查 詢的資料加予排序,指定多個欄位時則以欄位名稱 1 排序,若其資料相同則再依欄位名稱 2 排序,依此類 推,各欄位名稱之間以逗號隔開。
74
• 新增資料: 若要新增資料庫的資料,使用的 SQL 指 令是「INSERT」,基本語法如下:
• INSERT INTO 資料表名稱(欄位名稱 1,欄位名稱 2,...)
• VALUES (欄位 1 的資料,欄位 2 的資料,...)
修改資料: 若要修改資料庫的資料,使用的 SQL 指 令是「UPDATE」,基本語法如下:
• UPDATE 資料表名稱
• SET 欄位名稱 1=欄位 1 的資料,欄位名稱 2=欄位 2 的 資料,...
• WHERE 條件式
• 刪除資料: 若要刪除資料庫的資料,使用的 SQL 指 令是「DELETE」,基本語法如下:
• DELETE FROM 資料表名稱
• WHERE 條件式
75
!AATTCCFF(cr):表命令正確,傳回狀態,格式同命令 1
?AA(cr):表非法命令
3. 送出開起/關閉指令:#AABB(data)(cr) AA:機器的 ID 碼
76
BB:有兩種選擇
1.若為 00,表示設定所有 Channel,後面兩個(Data)代表 8 個 bits
2.若第一個字為 1,表示要設定單一 Channel,下個字表示 要設定的 Channel 編號
(Data):表要設定的資料值 回傳:
>(cr):表命令正確
?AA(cr):表非法命令
4. 讀取 DO,DI 狀態:$AA6(cr) AA:機器的 ID 碼
回傳:
!(DataOutput)(DataInput)00(cr):表命令正確
?AA(cr):表非法命令
(前兩 Byte 表 8 個 DO 狀態,後兩 Byte 表 7 個 DI 狀態, 最後兩個則固定為 0)
(cr):在此表示 Carriage Return。