<kbd id="oxr9l8xb"></kbd><address id="oxr9l8xb"><style id="oxr9l8xb"></style></address><button id="oxr9l8xb"></button>

              <kbd id="6ec19686"></kbd><address id="6ec19686"><style id="6ec19686"></style></address><button id="6ec19686"></button>

                      <kbd id="ya4exuiz"></kbd><address id="ya4exuiz"><style id="ya4exuiz"></style></address><button id="ya4exuiz"></button>

                              <kbd id="esm1ifgg"></kbd><address id="esm1ifgg"><style id="esm1ifgg"></style></address><button id="esm1ifgg"></button>

                                      <kbd id="p83iaiau"></kbd><address id="p83iaiau"><style id="p83iaiau"></style></address><button id="p83iaiau"></button>

                                              <kbd id="p7xwu1cb"></kbd><address id="p7xwu1cb"><style id="p7xwu1cb"></style></address><button id="p7xwu1cb"></button>

                                                      <kbd id="4r2cooqd"></kbd><address id="4r2cooqd"><style id="4r2cooqd"></style></address><button id="4r2cooqd"></button>

                                                          
                                                          首頁 > 服務中心 > 晶控課堂 >

                                                          KC868-H8_H32智能家居控制盒通信協議詳解

                                                          2018-12-23 16:32
                                                          分享到:
                                                          通過閱讀第一期文章——《第一個打開/關閉電燈的Hello World小程序》,相信你已經可以通過電腦寫個簡單的PC程序來控制一個燈泡的開與關 ,一定很興奮了吧。恭喜,你已經跨入物聯網的第一道大門,今天我們將對KC868-H8智能控制盒的通信協議做一下全面的分析與學習 ,這樣 ,你就可以充分發揮自己的想象力 ,對控制盒進行本地、遠程、智能化的控制甚至是聯動控制,真正接觸到他的強大所在 ,給你絕對的DIY靈活度。

                                                            物聯網將萬物進行互聯,在整個系統中 ,有云端,有客戶端,有硬件底層端 ,之前我們之前是獨立存在的  ,互相之間就是彼此陌生的,只要大家遵循統一的標準,這樣每個局部都可以聽懂得對方,甚至可以進行交流 。比如:咱們各地的人當地的方言,外地的聽不懂,這時候如果大家都講普通話,所有的人都可以明白大家想表達的意思了 。通信協議在整個體系中,就起到了標準化的關鍵作用 ,從而讓所有的設備能夠懂對方。

                                                            下面,我們來一起學習一下KC868-H8智能控制盒的通信協議,看看他是如何和其它設備進行交流的。注:通信協議中有出現KC868-H8和KC868-H32兩種型號 ,KC868-H8是帶8路繼電器開關的智能控制盒 ;KC868-H32是帶32路繼電器開關的智能控制盒 ,這是兩種不同配置的產品 ,不同的繼電器路數可以適用不同的使用場景。

                                                          kc868-h8
                                                          KC868-H8 外形圖片

                                                          32路繼電器板
                                                          KC868-H32 外形圖片

                                                            首先 ,我們列出所有的通信協議內容,以下所有的內容 ,當智能控制盒通過以太網配置工具,把自己設置成“TCP服務器”模式下,均可通過客戶端  ,如PC端進行命令的收發實現交互通信,控制盒默認的IP和端口參數是IP地址:192.168.1.200,端口:4196
                                                            通信協議的學習與調試 ,我們可以使用網絡調試助手軟件 ,也可以從杭州晶控電子官網進行下載使用。
                                                          網絡配置

                                                          1.查詢智能控制盒設備型號:
                                                          發送:RELAY-SCAN_DEVICE-NOW
                                                          返回:RELAY–SCAN_DEVICE–CHANNEL_8/CHANNEL_32,OK/ERROR
                                                           
                                                            這是一條查詢設備類型的指令 ,我們想獲得當前連接的設備類型時 ,可以發送以上參數。目前智能控制盒有兩種不同配置的型號,即命令下發後,如果獲取成功會返回:“RELAY–SCAN_DEVICE–CHANNEL_8,OK” 或 “RELAY–SCAN_DEVICE–CHANNEL_32,OK”這兩種類型的字符串。返回值最後面的數字“8”代表該控制類型爲KC868-H8  ,“32”代表該控制類型爲KC868-H32。

                                                          智能家居通信協議

                                                          2.智能控制盒服務器工作模式開啓:
                                                          發送:RELAY-TEST-NOW
                                                          返回:RELAY-TEST-START
                                                           
                                                            這是一條智能控制盒的初始化命令,當控制盒處於“TCP服務器”模式時 ,需要發送這條初始化命令讓控制盒進入工作狀態,該工作模式開啓後,後續所有通信協議中的“包序號”參數均可使用固定的數值即可  ,我們在後面的協議解析中會再說明一下。

                                                          智能家居協議

                                                          3.KC868-H8設備初始化命令集:
                                                          發送:RELAY–SCAN_DEVICE–NOW
                                                          發送:RELAY-TEST-NOW
                                                           
                                                            這是作爲智能控制盒的初始化命令集 ,每一次設備上電或重新上電後,必須首先發送這兩條命令來進行設備的初始化工作 ,具體命令的返回值,前面已講。待“RELAY-TEST-NOW”這條命令發送後,有返回“RELAY-TEST-START
                                                          ”字符串後 ,我們就可以進行自由地使喚控制盒了 。
                                                           
                                                          4.單獨控制某一路繼電器的開與關:
                                                          發送:RELAY-SET-x(1字節pack_num),x(1字節繼電器序號),x(1字節動作0/1)
                                                          返回:RELAY-SET-x(1字節pack_num),x(1字節繼電器序號),x(1字節動作0/1),OK/ERROR

                                                            這條命令是我們在第一期文章中所介紹到的核心指令 ,也是最讓人興奮的一條硬件版的Hello World指令,它可以控制某一路繼電器的打開或關閉  ,指令非常簡單 ,通俗易懂 。首先 ,第一個參數pack_num ,我們已經有前面講到過,當控制盒在“TCP服務器”模式下 ,該參數已經沒有意義,比如:我們可以設置成數字“1”固定不變 。但你可能會問 ,既然沒有用的參數,爲什麼還要放在指令中作爲參數呢,那不是挺麻煩?呵呵 ,“包序號”的真正意義將會在遠程控制模式中體現出來 ,只是我們的教程現在還沒有講到 ,我們將會在後期的“遠程控制模式”教程中使用到它 。協議中的第3個字節參數——“動作0/1”的意義在於 ,“0”表示“關閉” ;“1”表示“打開” 。我們舉個例子來看一下 ,比如:我們要打開第1路繼電器 ,我們可以發送命令“RELAY-SET-1,1,1” ,第1個參數“1”表示固定的包序號;第2個參數的“1”表示第1路繼電器,第三個參數“1”表示“打開”  。如果我們要關閉第1路繼電器,我們可以發送命令“RELAY-SET-1,1,0”,第1個參數“1”表示固定的包序號;第2個參數的“1”表示第1路繼電器 ,第三個參數“0”表示“關閉” 。如果我們要打開第2路繼電器,我們可以發送命令“RELAY-SET-1,2,1” ,第1個參數“1”表示固定的包序號;第2個參數的“2”表示第2路繼電器 ,第三個參數“1”表示“打開”。看到這裏 ,你應該感覺控制繼電器原來是那麼容易吧。略有點小成就感吧:)

                                                          智能家居通信協議

                                                          硬件控制电灯

                                                          5.單獨查詢某一路繼電器當前開關狀態:
                                                          發送:RELAY-READ-x(1字節pack_num),x(1字節繼電器序號)
                                                          返回:RELAY-READ-x(1字節pack_num),x(1字節繼電器序號),x(1字節狀態0/1),OK/ERROR
                                                           
                                                            當我們時不時控制繼電器的“打開”、“關閉”、再“打開”、再“關閉”........ ,等時間久了  ,我們可能已經不知道控制盒上繼電器當前的工作狀態了 ,有時候我們在做控制之前,還是需要知道他們的當前設備的 ,目前是“打開”的,還是“關閉”的。這時候,我們便可以使用繼電器的查詢命令來進行查詢了  。比如:我們要查詢第1路繼電器現在是處於“打開”還是“關閉”狀態,我們可以發送:“RELAY-READ-1,1” ,第1個參數“1”表示固定的包序號;第2個參數“1”表示需要查詢的路數。此時,查詢成功後,控制盒會返回“RELAY-READ-1,1,OK” ,第2個參數“1”表示現在的狀態爲“打開”狀態,如果是“0”表示現在的狀態爲“關閉”狀態。想查詢第幾路繼電器 ,直接將路數參數更改即可 。

                                                          智能家居二次開發

                                                          6.查詢觸發輸入端狀態:
                                                          發送:RELAY-GET_INPUT-x(1字節pack_num)
                                                          返回:RELAY-GET_INPUT-x(1字節pack_num),x(1字節狀態),OK/ERROR
                                                           
                                                          注:當控制盒觸發輸入端被觸發時 ,會主動上報一條命令,格式爲:RELAY-ALARM-X,X代表被觸發的路數 。
                                                           
                                                            觸發輸入端是控制盒用來接開關量傳感器的輸入端子 ,如圖中控制盒的一側  ,由高位和低位組合成一組開關量輸入端,他有多元化的實際應用方式 ,比如:你可以接手動開關,軟件中可以定義好,當手動按下開關後 ,輸出端的繼電器會執行哪些動作;當有線開關量的傳感器信號接入時,軟件中可以定義好,當傳感器被觸發時,輸出端的繼電器會執行哪些動作,這就是我們通常說的智能聯動,也是智能家居中最廣泛的應用方法之一 。聯動的自動化控制過程中 ,第一步就需要我們去獲得觸發事件的狀態,即什麼時候被觸發 ,哪路傳感器被觸發  。此時,我們可以使用觸發輸入端的查詢命令發給控制合  ,如:“RELAY-GET_INPUT-1”,查詢成功後,控制盒會返回:“RELAY-GET_INPUT-1,255,OK” ,第2個參數“255”即是8路觸發端的狀態字節 。我們用8位二進制來表示8路輸入端狀態 。用“0”表示“觸發”,用“1”表示“未觸發”。如果當前8路狀態全部是“未觸發”的話,那麼8路輸入端的狀態爲 11111111,注意,這是二進制的8個“1” ,然後我們將其轉換爲十進制數  ,爲“255” 。如果當前8路狀態全部是“觸發”的話,那麼8路輸入端的狀態爲 00000000,注意 ,這是二進制的8個“0”,然後我們將其轉換爲十進制數,爲“0”。如果當前8路狀態是1-4路是“未觸發”,5-8路爲“觸發”的話 ,那麼8路輸入端的狀態爲 00001111,注意  ,這是二進制的“00001111” ,然後我們將其轉換爲十進制數,爲“15” 。在程序中,我們不需要不斷的循環去查詢狀態  ,可以利用觸入端被觸發器的主動上報命令進行配合而進行查詢 ,當觸發信號產生時,客戶端接收到“RELAY-ALARM-X”的指令串時 ,再發送一條“RELAY-GET_INPUT-x”進行查詢。如下圖所示 ,當我們用鑷子手動短接第一路的輸入端時 ,則控制盒會主動上報字符串“RELAY-ALARM-1”到PC客戶端 ,這時 ,我們發送查詢第1路輸入端的命令後,返回字符串“RELAY-GET_INPUT-1,254,OK”,我們將數字十進制數“254”轉換爲二進制數爲“11111110”,所以可以得知第1路輸入端被觸發。

                                                          智能家居調試

                                                          智能家居開發

                                                          十進制數

                                                          二進制數

                                                          7.查詢智能控制盒序列號:
                                                          發送:RELAY-HOST-NOW
                                                          返回:HOST-CHKLIC-8a2af927888793c9a22280b8(返回控制盒序列號)
                                                           
                                                            每一臺控制盒設備都有一個唯一的標識符,類似於每個人的身份證號碼一樣,爲了做好設備的維護和管理工作,也不例外,如發送:“RELAY-HOST-NOW”命令後,將返回“HOST-CHKLIC-8a2af927888793c9a22280b8” ,其中最後一個“-”後面的一長串數字、字母的組合 ,即爲設備的序列號,“8a2af927888793c9a22280b8”是設備的序列號 ,序列號將用於後期關於遠程控制的教程中使用。同時 ,這也是一條設備繼電器的測試命令,如果發送此命令給控制盒,控制盒的第1-8路繼電器會依次打開,然後第1-8路繼電器再依次關閉,作爲一條簡單的繼電器測試命令 。

                                                          智能家居系統

                                                          8.一次控制多路繼電器的開與關:
                                                           
                                                          KC868-H8:
                                                          發送:RELAY-SET_ALL-x(1字節pack_num),D0
                                                          返回:RELAY-SET_ALL-x(1字節pack_num),D0,OK/ERROR
                                                           
                                                          KC868-H32:
                                                          發送:RELAY-SET_ALL-x(1字節pack_num),D3,D2,D1,D0
                                                          返回:RELAY-SET_ALL-x(1字節pack_num),D3,D2,D1,D0,OK/ERROR
                                                           
                                                            之前所介紹的通信協議中 ,我們已經可以分別對每一個繼電器進行“打開”和“關閉”的操作了 ,這裏,我們再介紹一條多路繼電器同時進行控制的指令 ,他們是區別在哪裏呢?前面我們所講的控制繼電器都是針對某一個的 ,如果要控制多個繼電器開關,就是需要發送多條控制命令 ,需要若干時間去執行。這裏 ,我們介紹的指令,可以實現一次性控制多路繼電器開關,如“全開”、“全關”,或者某幾路“打開”  ,某幾路“關閉”的操作,只需要一條指令 ,多路控制速度非常快 。我們可以看到命令中 ,除了“包序號”參數之外,只有一個字節的參數了 ,這一個字節就代表了8路繼電器想進行控制的狀態設置  ,用“1”表示“打開” ,用“0”表示“關閉”,同樣 ,也是用8位二進制來表示各路繼電器的狀態 ,再轉成十進制數。如:我們要將8路繼電器全部打開,則可以發送命令“RELAY-SET_ALL-1,255”,我們要將8路繼電器全部關閉 ,則可以發送命令“RELAY-SET_ALL-1,0” ,如果要將1-4路繼電器打開 ,5-8路繼電器關閉,那麼參數是這樣定義的,二進數表示:00001111 ,轉換爲十進制數爲“15”,最終發送命令爲“RELAY-SET_ALL-1,15”。在協議內容中 ,我們看到還有KC868-H32型號的控制盒,即他有32路繼電器可以讓我們進行控制 ,所以 ,他是用4個字節來表示所有繼電器的狀態的,1-8路繼電器用D0字節表示;9-16路繼電器用D1字節表示 ;17-24路繼電器用D2字節表示 ;25-32路繼電器用D3字節表示,每一個字節的含義和KC868-H8控制盒的表達方式一樣,只是將32路劃分成4個字節 ,多了幾個參數。

                                                          智能家居二次開發

                                                          9.一次讀取多個繼電器當前開關狀態:
                                                          發送:RELAY-STATE-x(1字節pack_num)
                                                          返回:
                                                          KC868-H32:RELAY-STATE-x(1字節pack_num),D0,OK/ERROR
                                                          KC868-H8:RELAY-STATE-x(1字節pack_num),D3,D2,D1,D0,OK/ERROR
                                                           
                                                            同樣的情況 ,前面我們已經看了查詢繼電器狀態的通信協議 ,那是按某一路進行查詢的 。我們也可以進行一次讀取多個繼電器狀態的方式來進行查詢 。比如:發送“RELAY-STATE-1” ,那麼根據控制盒不同型號的情況 ,會有兩種返回狀態的字符串,如果控制盒是KC868-H8的型號 ,那會返回“RELAY-STATE-1,255,OK” ,“255”則表示控制盒8路繼電器的當前狀態 ,將十進制數“255”轉成二進制數爲“11111111” ,“1”表示“打開”狀態 ,前面我們已經提到過 ,所以 ,這8路繼電器的當前狀態均爲“打開”。同樣,如果得到的數轉成二進制後,某一位是數字“0”的話,那麼代表該路的繼電器當關的狀態爲“關閉”狀態 。

                                                          讀繼電器狀態

                                                            到止,我們已經全面學習並掌握了智能控制盒的輸出和輸入資源的控制與狀態獲取,是不是感覺一下子有很多資源可以來使用了,不僅可以控制繼電器開關,也可以進行一些傳感器狀態的獲取,這樣就可以發揮自己的創意來實現一些定時、自動或具有AI人工智能方面的應用了。具體的功能是什麼,如何去實現 ,可以解決哪些生活及工具應用場景的痛點問題,就看你的程序代碼來怎麼寫了。我們對通信協議的本地化調用,已經給大家做了全面的介紹 ,在今後的連載教程中 ,我們還會爲大家介紹到如何突破本地局域網內控制的地理範圍限制,真正實現Internet級的無距離限制的遠程控制方法,相信會激起大家足夠強烈的興趣感 。