我有點晚了,但我希望它可以幫助你:
之前發送您的lighton要求你必須發送到獲得第一個請求時,無線橋接器會話。您還需要根據您的請求來計算Milight稱爲「校驗和」的內容。
你也確定你有什麼樣的燈泡,是WW燈泡還是CW燈泡?我被困了好幾天,因爲我發送錯誤的請求..
我做了一個實現,它是在PHP中,但你可以在Objective-C中以相同的方式使用它。
檢查出來:https://github.com/winosaure/MilightAPI
UPDATE:
據limitlessled 「文檔」(http://www.limitlessled.com/dev/),這是一個請求是如何組成:
UDP十六進制發送格式:80 00 00 00 11 {WifiBridgeSessionID1} {WifiBridgeSessionID2} 00 {序列號} 00 {命令} {區號} 00 {校驗和}
這就是爲什麼您必須首先獲得wifibridge會話,然後您需要計算校驗和。
讓我舉一個關於如何打開燈光的例子。
文檔說:
31 00 00 08 04 01 00 00 00 =光ON
31 00 00 08 04 01 00 00 00參照{COMMAND}上方。
到目前爲止,完整的請求必須是:
80 00 00 00 11 {WifiBridgeSessionID1} {WifiBridgeSessionID2} 00 {SequenceNumber} 00 31 00 00 08 04 01 00 00 00 {ZONE NUMBER} 00 {Checksum}
現在,讓我們的Wifibridge會議。該文件說:
以獲得WifiBridgeSessionID1和WifiBridgeSessionID2發送此 命令UDP。
SEND十六進制字節:20 00 00 00 16 02 62 3A D5 ED A3 01 AE 08 2D 46 61 41 A7 F6 DC AF(D3 E6)00 00 1E < - 發送給的所述IP地址 無線網橋V6
這就是爲什麼我這樣做:
private function getWifiBridgeSession()
{
$command = array (
0x20,0x00, 0x00,
0x00, 0x16, 0x02,
0x62, 0x3A, 0xD5,
0xED, 0xA3, 0x01,
0xAE, 0x08, 0x2D,
0x46, 0x61, 0x41,
0xA7, 0xF6, 0xDC,
0xAF, 0xD3, 0xE6,
0x00, 0x00, 0x1E);
return $this->sendCommand($command);
}
一旦你發送一個UDP請求用這個命令,你會得到一個結果。 Wifi Bridge session1指向響應的第20個字節,WifiBridge Session2指向第21個字節的響應(不要忘記我們開始從0開始計數,因此您必須採取類似於「響應[19]」和「響應[20]「)。
比方說,發送此請求後,我得到這樣的迴應:
28 00 00 00 11 00 02 AC CF 23 F5 7A D4 69 F0 3C 23 00 01 05 00
所以我的「WifiBridgesession1」爲0x05和「Wifibridgesession2」爲0x00
所以現在我們的要求,「打開」的光線:
80 00 00 00 11 0x05 0x00 00 {SequenceNumber} 00 31 00 00 08 04 01 00 00 00 {ZONE NUMBER} 00 {Checksum}
所以現在我們需要找出{的SequenceNumber} {區號碼}和{}校驗
什麼是「序列號」?
的醫生說:
連續字節只是保持命令以正確的順序, 幫助,它可以幫助忽略已經收到重複的數據包。每個新命令的這個字節增加 。
因此,把你想要的和增加這個值爲1爲每個請求。 (Personnally我總是發送0x01)。
「區號」是指您同步燈的區域。
有效列表爲{ZONE NUMBER} 0×00全0×01 1區2區0×02×03 3區0×04 zone4中
比方說,我們的 「區」 爲0x01。
幾乎完成。我們現在只需要計算「校驗和」。
的醫生說:
取9個字節的命令,並且所述區的1個字節,並添加0 =校驗=(校驗&爲0xFF)例如SUM((31 00 00 08 04 01 00 00 00)(命令)01(區)00)= 3F(CHKSUM)
所以對於我們的命令校驗: 31 + 00 + 00 + 08 + 04 + 01 + 00 + 00 + 00 + 01 + 00 = 0x54
我添加的命令的所有字節(打開)+ 0×01爲+ 0×00
所以現在我們所擁有的一切和完整的請求區打開燈:
就是這樣。
注意:不要只是複製和粘貼請求,我根據示例計算值,開啓燈光的請求將根據您將要計算的內容每次更改。
也許你已經注意到我寫了「00 31 00 00 08 04 01 00 00 00」做「打開」命令,這隻適用於CW燈泡。本文件並不指定... 武威燈泡相同的命令是00 31 00 00 07 03 01 00 00 00 所以對於WW燈泡整個命令將是:
80 00 00 00 11 05 00 00 01 00 31 00 00 07 03 01 00 00 00 01 00 54
之間有什麼區別CW和WW燈泡? 我可以說CW是指「冷白」,而WW是指「暖白」。但由於我不是「led燈泡」方面的專家,我無法解釋更多,我不知道爲什麼我們需要爲兩者寫出不同的要求。
無論如何,我希望我足夠清楚。 讓我知道事情是如何工作的。
永遠不要遲到!仍在研究這個項目!我所有的燈泡都是WW Wheres的區別?在你的代碼中你也使用WW,所以我可以正確使用它們嗎?你能解釋更多嗎?我如何獲得Bridgesession以及爲什麼需要校驗和,即所有接收字節的總和!? – kuemme01
我更新了我的評論,以更詳細地解釋我做了什麼。 – wilfleaji
男人你這樣一個好人!這很完美!我還沒有解決它,因爲我必須弄清楚如何使用我正在使用的UDP庫接收數據,我認爲它不可能,所以我必須搜索另一個。我會盡快更新你的!非常感謝!它不能被更好地解釋! – kuemme01