從零開始認識 HomeKit
Share
如果你對智能家居有所了解,咁應該或多或少聽過人哋傾過 HomeKit 。由 Apple 開發並主推嘅 HomeKit 因為產品選擇少、價格高而難以成為主流,又因為佢獨特嘅優秀體驗同「出身名門」而成為智能家居領域嘅焦點。 HomeKit 究竟係咩?可以做啲咩?點樣做到嘅?喺《 從零開始認識 HomeKit》入面,就等我哋從核心原理嘅角度嚟解答一下呢個核心嘅問題。
HomeKit 係咩?
想準確描述 HomeKit ,定義係必不可少嘅第一步。然而, HomeKit 同相關嘅術語其實長期被唔少人混淆。我哋嚟睇下 Apple 自己係點定義 HomeKit 嘅:
呢個係 Apple 推出嘅一組軟件開發工具。用 HomeKit 創建嘅 App 可以畀你喺 Apple 設備控制屋企已經連接嘅配件(例如電燈、鎖或者暖氣同冷氣)
— — 《 Apple 詞典》
以上嘅定義說明, HomeKit 嘅本質其實係一個「開發套件」。佢包含咗好多經常被大家簡稱為 HomeKit 嘅部分,包括:
- iOS 等系統上嘅 HomeKit 框架
- 智能家居設備採用嘅 HomeKit 設備協議( HomeKit Accessory Protocol ,以下簡稱 HAP 協議)
- HomeKit 設備開發工具包( HomeKit 配件開發 Kit )
- 等等
有啲人仲可能將 iOS 等系統上預裝嘅「家庭」 app 同 HomeKit 混淆,但兩者完全唔同,我哋會喺之後對「家庭」 app 作進一步嘅介紹,呢度就唔做展開說明。
有咗呢個定義,我哋亦都唔難理解「 Works with Apple HomeKit 」呢一個 HomeKit 官方認證嘅真實含義喇 —— 佢表明呢一個外設兼容於 HomeKit ,可以同其他兼容 HomeKit 嘅軟硬件進行互動。咁「 Works with Apple HomeKit 」認證(以下簡稱 HomeKit 認證)到底有咩特別之處呢?係咪經過認證對一般嘅 HomeKit 用戶嚟講有冇影響?
Works with Apple HomeKit
「 Works with Apple HomeKit 」認證(以下簡稱 HomeKit 認證)係蘋果 MFi 計劃嘅一部分,呢個意味住想通過 HomeKit 認證嘅廠商需要先加入 MFi ,然後為單項產品申請 HomeKit 認證。蘋果對 MFi 計劃有着充分嘅掌控,話 HomeKit 認證嘅「含金量」絕大多數來源於佢優秀嘅產品口碑亦唔過份。
其實,蘋果對 HomeKit 設備嘅要求並唔算高,呢一個認證成為「品質保障」好大程度上可以話「全靠同行襯托」。同其他智能家居平台直接限制芯片模組嘅策略唔同,目前嘅 HomeKit 認證並唔干涉產品嘅軟件設計同硬件實現,而係對工廠採取備案制。擁有自主生產線嘅大公司可以為自己嘅工廠申請資質,通過審查後就獲得咗生產 HomeKit 認證設備嘅資格;智能家居領域中佔多數嘅初創公司則可以直接聯絡已經擁有資質嘅代工廠,委託其進行生產。咁樣嘅模式可以為代工廠帶嚟新嘅訂單,同時亦杜絕咗「小作坊」生產嘅可能性。
除咗生產上嘅管控之外,蘋果仲要求 HomeKit 申請者擁有其他標準組織例如 Wi-Fi 聯盟或者藍牙技術聯盟嘅認證。 HomeKit 視覺元素嘅使用同樣受到嚴格嘅限制。 HomeKit 嘅設備一般採用靜態設定碼進行配對,廠商需要根據規範印刷設定碼,並保證隨機生成、一機一碼。對好多 HomeKit 用戶嚟講,設定碼貼紙已經成為咗 HomeKit 最具代表性嘅要素之一。
HomeKit 認證嘅核心之一係「 Works with Apple HomeKit 」標誌嘅使用許可。通過 HomeKit 認證嘅產品可以將「 Works with Apple HomeKit 」標誌打印喺產品嘅包裝同說明書上面,或者喺官網、電商等平台使用呢一個商標進行宣傳。同「 Made for iPhone 」等其他 MFi 標誌類似,智能家居廠商可以利用蘋果嘅品牌宣傳自己嘅產品,呢個一定程度上可以提升產品嘅溢價。
同長期處於爭議焦點嘅 MFi 認證芯片類似, HomeKit 認證亦都需要使用定製嘅安全芯片。廠商需要喺呢個基礎上進行設計,並且向蘋果申請少量安全模塊進行試產,試產品通過認證後方能生產。喺2019年, HomeKit 認證開放咗服務器驗證方案。選擇軟件(服務器)驗證嘅廠商可以直接進行預生產,並將產品提交認證;喺獲得認證之後,蘋果服務器將同步認證資訊,產品亦就可以通過 HomeKit 框架嘅檢驗喇。
HomeKit 認證設備仲可以使用更多嘅 HomeKit 功能。諸如自適應照明、 HomeKit 安全視頻等 HomeKit 進階功能都必須通過 HomeKit 認證先可以激活。如果話未經過 MFi 同 MFM ( Made for MagSafe )認證嘅第三方充電線無法激活 iPhone 快充只係令充電變得更慢,咁缺乏設備 HomeKit 認證可就會帶嚟實打實嘅功能缺失喇。
HomeKit 本地運行機制詳解
HomeKit 設備列表、永久密鑰同房間分組等資訊由 iCloud 負責管理同同步,而實際嘅設備控制等操作全部喺本地完成。為咗保障安全性,終端通過 HAP 控制 HomeKit 設備嘅過程相比其他智能家居平台要繁瑣唔少 —— 當然,呢啲差異對用戶幾乎係無感知嘅。
如果你有興趣對 HomeKit 嘅控制方式進行更深入嘅了解,我哋可以一齊嚟深入探究一下 HomeKit 工作嘅每一個環節,而且仲可以從中發現 HomeKit 體驗唔好嘅癥結,當然跳過呢一節亦對後續內容嘅理解唔會產生任何影響。
HomeKit 設備同終端設備需要進行雙向嘅配對。 HomeKit 設備上記錄咗所有可信任設備嘅列表,一旦發生變化, iCloud 就會透過終端向 HomeKit 設備發送指令嚟進行更新,以保證其他設備可以正常連接。唔喺列表入面嘅設備會被直接拒絕訪問。對於 BLE 設備嚟講,呢種機制十分接近 AirPods 嘅「通過 iCloud 自動連接」,可以實現一次配對、多設備冇感連接。
對於基於 IP 嘅 HomeKit 設備,佢哋會根據 mDNS (多播 DNS , Multicast DNS )協議喺局域網中廣播自己嘅 .local 本地域名同 IP 地址。 mDNS 嘅原理就好似係喺一間隨機入住嘅酒店入面,房客可以時不時向所有房間廣播自己嘅名字同房間號,認識佢嘅其他房客會將佢當前嘅房間號保存落嚟。根據本地緩存嘅 mDNS 資訊,終端設備就可以用固定嘅域名訪問到局域網中嘅某個 HomeKit 設備,而唔需要擔心佢嘅 IP 地址發生變化。
Bonjour 係蘋果喺十幾年前基於 mDNS 同 DNS-SD ( DNS 服務發現, DNS Service Discovery )開發嘅一套軟件,佢喺兩者嘅基礎上提供咗更高級嘅接口。 HomeKit 設備會使用 Bonjour 註冊一個專屬服務, HomeKit 則通過查詢服務資訊來判斷該設備係咪屬於當前「家庭」。終端設備同樣會同基於 IP 嘅 HomeKit 設備自動建立會話。如果終端設備有監視 HomeKit 設備狀態嘅需求(例如傳感器嘅狀態變化通知,或者家庭中樞嘅自動化觸發等),佢會透過 HTTP 維持一個 TCP 長連接嚟接收實時消息。
如果 HomeKit 設備數量增加呢?我哋假設當前家庭中註冊咗30個基於 IP 嘅 HomeKit 設備(其中5個狀態受到監視)同10個基於 BLE 嘅 HomeKit 設備,咁每台終端設備都需要:
- 同10台藍牙外設保持連接;
- 同5個 IP 設備維持 HTTP 長連接。
唔單止咁,喺每台終端設備初次激活 HomeKit 時,會發送多達60條 HTTP 請求嚟進行配對;整個局域網中至少存在住30個 Bonjour 節點,佢哋喺不停進行緊 mDNS 廣播。當我哋打開「家庭」 app 時,佢會透過 HomeKit 請求所有包含喺「家庭狀態」同「常用配件」入面嘅配件狀態,而呢啲 HTTP 同藍牙請求全部都係「瞬發」嘅!
從以上嘅例子中,我諗大家應該已經發現咗 HomeKit 體驗嘅「殺手」所在。
HomeKit 體驗嘅兩大殺手
大量 mDNS 節點、瞬發 HTTP 請求、長連接,呢啲 HomeKit 嘅行為對路由器產生咗巨大嘅壓力,令路由器成為 HomeKit 體驗嘅最大瓶頸同頭號殺手。傳統嘅智能家居平台只需要喺每台 IP 設備同服務器之間維持一個 TCP 長連接,終端設備嘅所有控制指令同狀態獲取都直接向服務器進行請求,再由服務器下發到設備上。而 HomeKit 嘅點對點特性則規定任何指令都需要獨立嘅本地 HTTP 請求,對路由器嘅瞬時交換能力提出咗唔小嘅挑戰。
由於 HomeKit 設備發現完全依賴 Bonjour ,呢個對路由器嘅 mDNS 兼容性亦都係唔小嘅考驗。如果冇進行針對性嘅優化,路由器好可能因為頻繁嘅 mDNS 廣播報文而導致性能下降;如果優化策略有問題,亦可能導致 HomeKit 無法正常運作。
HomeKit 體驗嘅另一大殺手則係藍牙 —— 相比基於 IP 嘅局域網通信,藍牙通信雖然功耗低、成本低,但速度亦遠遠唔及 Wi-Fi 。為咗保障安全性同通用性,相比其他智能家居協議, HomeKit 指令體積更大、數量亦更多,傳輸速度自然亦就更慢。即使係經過優化後,藍牙設備發送狀態更新消息(即係觸發自動化同推送通知)嘅延遲亦只能達到亞秒級,係一般 TCP 請求嘅百倍,已經處於人可感知嘅範疇。此外,藍牙設備信號覆蓋範圍有限,單個藍牙設備好難做到全屋可連接;因此通過個人終端連接時好可能出現「未響應」嘅情況。喺後文入面我哋會睇到 HomeKit 係點樣透過「家居中樞」嚟優化藍牙設備嘅使用體驗嘅。
HomeKit 對 Wi-Fi 系統嘅挑戰
相比起路由器, HomeKit 對於 Wi-Fi 嘅性能需求並唔突出,但 Wi-Fi 系統嘅孱弱仍然有可能成為影響 HomeKit 體驗嘅隱患。咁嘅挑戰係目前階段絕大多數智能家居平台中普遍存在嘅,下面我哋嚟簡要介紹一下。
目前,大部分 Wi-Fi 智能家居設備只支援2.4GHz 頻率嘅 Wi-Fi 4協議,而且功率較低,穿牆性能同抗干擾能力都較弱。攝像頭、傳感器等智能家居設備仲往往被放喺屋企嘅角落,靠單一路由器進行覆蓋好可能出現死角。此外,智能家居設備幾乎都唔支援 MIMO ;為咗服務呢啲設備,其他無線設備(例如手機、電腦)嘅信號好可能受到影響。
考慮到 Wi-Fi 接入目前仍然係智能家居單品嘅主流入網方式,喺佈置 HomeKit (以及其他智能家居系統)之前建議先升級自己嘅無線 AP 佈局。對於已經入住嘅家庭嚟講, mesh 路由系統係擴展無線覆蓋最省心嘅選擇;仲喺裝修階段嘅亦可以提前佈局 AC + AP 方案。為智能家居佈設 Wi-Fi 應該盡量確保所有可能安裝智能家居設備嘅位置都有較強嘅2.4GHz 信號覆蓋,以免設備發生斷連掉線。
HomeKit 家居中樞工作原理
HomeKit 家居中樞係 HomeKit 另一個十分特別嘅存在 —— 喺其他智能家居平台中,往往由服務器或網關嚟承擔自動化同遠程訪問等功能。雲端自動化功能靈活,但十分依賴互聯網訪問,並且可能存在安全同隱私風險;物聯網網關雖然位於本地,係離設備最近嘅「關卡」,但佢性能有限,難以承擔複雜嘅邏輯,亦往往唔支援並行處理多個自動化,容易成為自動化性能嘅「瓶頸」。
HomeKit 創新地採用咗「家居中樞」作為自動化設備。家居中樞位於同一局域網內, HTTP 請求只有毫秒級延遲。就算係數年前嘅 A8芯片,相比其他智能家居設備所使用嘅芯片依然擁有碾壓級嘅性能,完全唔使擔心並行同複雜邏輯問題。由於操作系統「師出同門」, HomeKit 家居中樞甚至支援「快捷指令」呢種高度自由嘅自動化方案。曾經有朋友吐槽過同樣嘅自動化邏輯使用 HomeKit 呢類「外掛」執行速度竟然快過米家嘅網關自動化,呢個正正暴露出網關設備嘅性能不足。 HomeKit 自動化「紓解」咗網關設備嘅「非網關功能」,反而提升咗整個智能家居系統嘅性能。
除此之外, HomeKit 家居中樞仲承擔住多重意義上嘅「網關」職能。家居中樞可以作為「代理」執行 HomeKit 指令,並且將非 IP 設備橋接到局域網中。由家居中樞代理嘅 HomeKit 請求同終端設備直接發出嘅請求幾乎冇分別。
對於藍牙設備嚟講,佢係將藍牙設備橋接到局域網嘅網關。藍牙設備只需要同家居中樞保持連接, HomeKit 就可以透過 HTTP 訪問家居中樞進行代理操作,而唔需要每個終端設備都進行連接。噉樣以來嘅減輕咗藍牙設備嘅壓力,又透過「信號擇優」嘅方式提高咗藍牙嘅設備嘅響應性能。
以上方案充分擴展咗藍牙設備嘅連接範圍,但係仲未徹底解決傳輸速率不足同延遲高嘅問題。 HomePod mini 上首先引入嘅基於 Thread 嘅 HAP 協議作為對藍牙 BLE 嘅補充,唔單止大大提高咗響應性,仲利用 Thread 穩定、低延遲嘅 mesh 組網進一步擴大咗 HomeKit 設備嘅「朋友圈」。喺接入 HomeKit 之後,支援 Thread 嘅藍牙 HomeKit 設備可以被家居中樞所識別,然後自動加入包含家居中樞嘅 Thread 網絡。咁樣一嚟,家居中樞就成為咗設備嘅 Thread 網關,接收到相關請求之後會透過 Thread 而唔係藍牙嚟進行通信,由此解決咗延遲問題。
除咗藍牙同 Thread 網關,家居中樞仲係所有 HomeKit 設備嘅「互聯網網關」。如果 iPhone 等個人終端並唔處於同一局域網中,佢哋會首先透過 iCloud 連接到家居中樞,並透過家居中樞「代理」進行遠程訪問。家居中樞同 HomeKit 設備間、家居中樞同個人終端間會分別建立點對點加密會話, iCloud 雖然可能進行二次加密,但係並唔能夠獲取真正傳遞嘅資訊,可以話係一種將安全性做到極致嘅設計。
理解 HomeKit 抽象模型
喺上文中,我哋介紹咗 HomeKit 嘅底層通信機制,佢根據設備採用嘅通信協議分為兩種唔同嘅類型。喺呢啲協議嘅基礎上, HomeKit 建立咗統一嘅抽象模型嚟描述佢嘅智能邏輯。相比起為咗安全性而唔惜將問題「複雜化」嘅通信協議, HomeKit 嘅抽象模型設計十分簡潔。佢只包含三個唔同層次嘅核心概念:
- 設備(accessory)
- 服務(service)
- 屬性(characteristic)
「服務」係對某一類設備功能嘅抽象。除咗名為「設備資訊」,用於展示製造商、序列號、固件版本等資訊嘅一個必須嘅服務之外,大部分設備只包含一個服務,同自己嘅功能相匹配。為咗最大程度嘅抽象同複用,部分服務類型會可能「附加」其他服務。例如「空氣淨化器」就可以附加「風扇」服務;如果一個設備同時包含「空氣淨化器」同「風扇」服務, HomeKit 會推斷出呢個係一台空氣淨化器,「風扇」控制嘅係空氣淨化器嘅風速,並且二者嘅開關狀態應該同步。
每個服務都規定有可選同必選屬性,例如「設備資訊」服務中製造商、型號等屬性都係必須提供嘅。屬性反映設備嘅某個特徵或者狀態,例如開關狀態、傳感器數據等。屬性支援多種唔同嘅權限組合:設備製造商資訊係只讀( paired read )嘅,開關嘅可讀( paired read )又可寫( paired write ),傳感器數據等可以用於觸發自動化嘅則必須具備通知( notify )權限。支援推送消息嘅關鍵屬性則需要喺通知嘅基礎上實現事件( event )。除此之外,仲有立即寫( timed write )、寫返回( write with response )、廣播( broadcast )、隱藏( hidden )等權限。設備仲可以定義私有屬性,呢啲屬性喺「家庭」 app 入面會向一般用戶隱藏,但係可以被 HomeKit 用嚟控制以及自動化等操作。
通過以上介紹我哋唔難發現, HomeKit 規定咗每個設備只可以擁有一個主要服務,佢反映咗該設備嘅主體功能。然而, HomeKit 中嘅服務定義又十分克制,好多帶有額外傳感器嘅 HomeKit 設備並唔可以用單一設備嚟描述。 HomeKit 中每個物理設備(即單個 IP 或 BLE 設備)可以對應一個或多個邏輯設備(以下簡稱子設備), HomeKit 可以透過接口獲取邏輯設備列表。喺「家庭」 app 入面,我哋可以透過「作為單一板塊整體顯示」同「作為單獨板塊分開顯示」按鈕將子設備聚合或者分開顯示。
橋接器(網關)係一類特殊嘅設備,佢承擔住將非 BLE 或 IP 設備接入 HomeKit 嘅功能。透過橋接器接入 HomeKit 嘅設備可以以「產品組合」嘅形式通過 HomeKit 認證,宣傳同銷售時除咗印刷「 Works with Apple HomeKit 」標誌,仲需要註明支援 HomeKit 嘅橋接器型號。有啲設備既有自己嘅功能,又可以用作橋接器(例如 Aqara Camera G3);亦有啲設備只有橋接功能,「家庭」 app 將佢哋隱藏到咗「家庭設置 > 中樞與橋接」入面。我哋可以喺呢一頁睇返或者移除橋接器。
HomeKit 設備入網同初始化
作為「 HomeKit 原理」嘅最後一塊拼圖,我哋需要講下 HomeKit 設備嘅入網同初始設定流程。為咗喺本地完成設備嘅配置同認證, HomeKit 唔似米家等平台噉提供「支援設備列表」同操作指南,而係完全依靠藍牙同 Bonjour 發現( discover )附近嘅設備。咁樣反而創造出咗更一致嘅設備添加流程,成為咗 HomeKit 嘅一大標誌性體驗。
對於 BLE 設備嚟講,未經註冊嘅設備會不停「廣播」一個特殊嘅「 HAP 配對」服務, HomeKit 會監聽呢類廣播消息,從而識別附近正等待配對嘅設備。 Wi-Fi 設備嘅入網則實際上使用咗 MFi 無線設備配置功能;呢一個功能只對 MFi 計劃嘅認證硬件開放,並且需要專用 BLE 藍牙芯片進行服務廣播以被 iOS 設備發現。仲有一類 IP 設備並唔係透過 HomeKit 嘅配對流程接入局域網。佢哋可能會用有線連接,或者擁有更複雜嘅功能(例如電視機),所以呢類設備會直接透過 Bonjour 被發現。
個人終端設備將結合設定碼嚟自動發現對應嘅 HomeKit 設備,確認佢仲未添加到 HomeKit ,然後為設備配網。絕大多數 HomeKit 設備採用嘅靜態設定碼會以貼紙嘅形式出現喺機身或者說明書等位置,目前主要有二維碼貼紙同 NFC 貼紙兩種。使用 iOS 或者 iPadOS 設備嘅攝像頭或者 iPhone 嘅 NFC 掃描對應貼紙都可以激活配對流程。使用動態設定碼嘅帶屏幕設備需要喺屏幕上面展示二維碼供掃描,例如電視機同機頂盒。
已經正確配對或接入後,下一步需要進行初始設定。整個流程採用安全遠程密碼交換協議( Secure Remote Password protocol ),需要進行三個來回嘅資訊傳遞,期間將驗證設定碼嘅有效性,並為 HomeKit 設備生成一個長期密鑰。呢個密鑰喺還原出廠設定之前都會保持不變。設定完成之後, HomeKit 就會嘗試同該設備建立會話,以上流程全部無錯誤則設備添加成功。
小結
喺《 從零開始認識 HomeKit》入面,我哋將 HomeKit 由添加、連接到控制嘅整個流程進行咗完整嘅分析,並介紹咗 HomeKit 為安全性所做嘅努力以及一啲常見嘅可能影響HomeKit 體驗嘅硬件設施。我哋仲介紹咗遠程訪問、 Thread 以及自動化等家庭中樞嘅專屬功能嘅實現原理。