Skip to content

讓你的 Yale 電子鎖串接到 HomeKit 上

大概兩年前,我就一直在尋找可以用 HomeKit 的智慧門鎖方案。後來找著找著就放棄了,當時的研究結果是這樣的:

大部分支援 HomeKit 的門鎖都是歐美款式的門鎖,然而歐美國家使用的鎖,外型跟亞洲國家不太一樣,亞洲的鎖通常會長很多,而這種鎖唯一有支援 HomeKit 的只有當時一組叫做「多靈 P8」的鎖。

但是電子鎖這種關乎安全的東西,還是找大牌子比較保險,而就我當時研究,最高階的電子鎖應該不外乎是 Yale(耶魯)跟三星兩家。可惜這兩家都不支援 HomeKit,所以那時候我就放棄購買了,想說等過段時間再看看會不會有出 HomeKit 的門鎖。

 

敗家不需要理由

兩年過去了,市面上支援 HomeKit 的門鎖多了一些,包括小米也出了平價的 HomeKit 門鎖。但我還是認為選擇大品牌的門鎖比較妥當,可惜這兩家大廠這兩年依然沒有出支援 HomeKit 的鎖(Yale 有出,但是是歐美規格)。因此最後還是放棄了 HomeKit,趁著特價活動,把 Yale 的 YDM-7116 + 藍牙模組 + Yale Link Bridge 一次入手。

沒錯,這款特價時會送整組藍牙跟 Bridge,這邊有傳送門。注意要確定有沒有寫送 Bridge(遠端橋接器),因為之前有陣子沒送,現在又突然送了,這顆橋接器單買要三四千,買到賺到。或者有時候門市會做特價也會整組包在一起賣,有興趣的可以打電話去問看看。

順帶一提,YDM-7116 是舊款,新款是 YDM-7116A,差別在於指紋感應的模式不同,新款感應當然比較好,如果對這方面沒有要求,買舊款就夠了。如果你想要知道這系列的電子鎖有什麼功能,可以看陳甯的這篇 YDM-7216 介紹

 

遠端功能真難用

在請師傅安裝門鎖完成後,我就使用了一下 Yale Link 的 App。用完真的是想罵髒話,下面的動畫完美示範了 App 的問題:

View post on imgur.com

很明顯的,這款 App 有許多問題:

  • 對 iPhone 12 Pro 解析度不支援,整個跑版
  • 打開 App 要先等動畫,之後要手動按門鎖,再按遠端連線,最後再按解鎖,太花時間

如果用 App 解鎖要花十幾秒鐘,誰還要用?刷指紋就好了啊。花三四千買這組橋接器的人真的是有夠浪費錢。

 

✭ 黑魔法研究室 ✭ 魔改

不過買都買了,與其抱怨還不如想辦法研究看看它的機制,所以我就開始逆向 App 以及分析 App 請求 API 的封包內容,過了兩天,居然還給我真的研究成功。

(順帶一提,在台灣販售的耶魯電子鎖確實是使用韓國 iRevo 的晶片,因為 App 連線的伺服器的確是 iRevo 的伺服器。)

研究完成之後,就開始著手寫 Homebridge 外掛套件(JavaScript 跟 TypeScript 我都不會,苦手),由於我個人的喜好原因,我偏向使用 Homebridge 而非 HomeAssistant。有興趣的話可以下載 homebridge-yale-link 來安裝。根據其他使用者的說法,可能需要 30 分鐘左右的時間來摸索如何設定。

最後 HomeKit 串接成果如下:

View post on imgur.com

雖然還是要花 5 秒鐘,但是整體時間已經比上面開 App 快上了三倍,在某些條件下還可以再省略一隻 API 的呼叫,會再快一兩秒,詳情可以看套件安裝說明。

我打算在樓梯牆壁貼一個 NFC 感應卡,然後搭配捷徑與 HomeKit 的方式來開門,這樣就可以先提早算好這幾秒鐘的時間差,讓人走到門前的時候剛好門鎖已解鎖。

 

結界限制

由於魔改再怎麼樣都是非原生的 HomeKit,因此會有一些限制:

  • 如果開啟了「家庭」App 之後用傳統方式改變門鎖狀態(例如用指紋開門),則 App 中的狀態不會即時更新。要做到這點其實不難,問題是得每隔幾秒就去呼叫 API,我擔心會大量消耗門鎖的電力,造成很快就沒電的情形發生。
    • 如果先打開門,再開啟家庭 App,則狀態會偵測為已開門,這部分沒有問題。
  • 門鎖打開後,若門的位置已歸位,過幾秒會自動上鎖。我的實作方式是在「家庭」App 中會自動把狀態變回已上鎖狀態,但實際上這只是一個過幾秒鐘會切換狀態的指令,實際上有沒有上鎖不能從那邊看出來。
    • 舉個例子:用 HomeKit 解鎖後,馬上把門推開並且不要歸位,過幾秒鐘 App 會顯示門已經上鎖(時間到,自動切換狀態),但是實際上未上鎖。

 

安全性

方便與安全性是很難兼顧的,在本次的研究中我就發現了幾個安全性的問題。

雖然 Yale Link App 理論上會綁定手機的 UDID、門鎖藍牙模組的序號,搭配每次操作都會更新的 Google 帳號 token,而使得只有符合以上組合的請求才可以成功解鎖。但由於部分 API 設計的缺陷,導致攻擊者只要能入侵你的 Google 帳號,控制你家的門鎖根本成了易如反掌的事情。

如果你在乎安全,我會建議直接把橋接器拔掉,不要使用。或者你得確定你的帳號密碼強度夠強,然後有開兩階段認證,之後禁止其他沒有安全觀念的家庭成員使用自己的 Google 帳號登入、綁定門鎖橋接器。

如果你非常在乎安全,我會建議你藍牙模組也拔掉,並且不要使用 App,因為這個 App 目前也是有一些安全問題存在。細節不多說,但若按照台灣的「行動應用資安聯盟」的標準,這個 App 是不會通過審查的。

至於我個人目前是採用高強度密碼的 Google 帳號搭配兩階段認證的方法,並禁止家裡其他成員使用 App,一律走 HomeKit 解鎖,或者就用電子鎖原本的指紋或卡片解鎖,來取得安全性與方便性中間微妙的平衡。

發佈於其他教學技術研究

11 則留言

  1. YC YC

    您好,感謝您分享這個HB插件,想請問您,yale7116鎖在安裝homebridge前一定要先進入安全模式嗎? 因為目前安裝的步驟到第10點後,並沒有出現terminalId 以及 deviceId 的值,出現了[1/10/2021, 22:25:20] [YaleLinkPlatform] Failed to login with SSO token, please try again. Error: 401這個錯誤,是我哪裡弄錯了嗎? 謝謝您~

    • Hiraku Hiraku

      出現該錯誤就重新做 7~9,這個錯誤跟安全模式應該是沒有關係的,因為原因是你給了無效的 token…
      不過我沒有在一般模式跑過整個流程就是了。

  2. YC YC

    您好,
    非常感謝您的回覆,我後來轉成安全模式,重做兩次順利接上去了,也在Homekit中順利動作,但當我重新下載yale link app再使用8#1#重新加入藍芽模組後,app中可開關鎖,可是homekit鎖就不再動作,且無回應並出現了錯誤訊息。

    能請您再幫忙看看嗎?再次感謝您的協助了,謝謝~

    因好像不能貼圖片,所以用了iclud連結,再次感謝您~
    錯誤訊息icloud圖片連結: https://share.icloud.com/photos/0Bmkh6Y5E70q-4mjjtO5F-ovg

    • Hiraku Hiraku

      你確認一下 HomeBridge 那邊 isNoOtherTerminal 是不是設到 true,如果你還想要用 App 去連 Bridge 的話這邊建議 false。
      錯誤出現的原因有幾個,第一種就是 App 拿到控制權,結果 HomeBridge 同時也要控制權,就會發生衝突,或者有時候是單純 API timeout。但這種情況在下一次重新嘗試操作就會恢復正常了,還請再試試看

      最後想請問,所以您覺得是一般模式可能無法使用這個套件嗎?謝謝

  3. YC YC

    您好,應該是我isNoOtherTerminal設定到true的關係,晚些我再試試看,非常感謝您的協助。

    另在一般模式下我試了5、 6 次,重新反覆設定藍芽模組, 重置再連結Yale bridge, 寫HB config ,然後取得token,但都卡在取得令牌說錯誤而卡關,一次都沒成功過。

    換了安全模式,重複一樣的動作,到了第三次,HB終端機就成功出現ID,鎖也就順利成功連上HB了。(但我也不知道為何是第三次才成功)

    所以在我設定後的心得,確實安全模式才成功沒錯。

    請您參考,謝謝。

    • YC YC

      不好意思, 更正一下, 是卡在取得ID不是令牌,謝謝

    • Hiraku Hiraku

      好的謝謝提供資訊,有可能必須要安全模式它才會分辨 ID,因為一般模式無法刪除單一裝置,也就沒有分辨 ID 的必要…

    • Hiraku Hiraku

      然後我今天發現 Yale 的伺服器好像炸了,如果你發現怎麼突然又連不上了,應該是 Yale 的問題,因為 App 也無法用 WiFi 控制

  4. YC YC

    您好,下午不行,晚上好像又可以了,用HB也正常開關鎖了。
    想再請教一下,若我也將原先的yale link app的藍芽也設定好,兩種使用方式:app開門與homekit開門,這樣會延遲開門速度嗎? 雖然有看了您的說明,但還是不太明白…,謝謝

    • Hiraku Hiraku

      如我上面回覆,我昨天晚上發現 Yale 的伺服器炸了,不是 HomeBridge 這邊的問題。

      關於您的問題,是這樣的:

      Yale Link App 開門有兩個模式
      1. 直接連線藍牙
      2. 透過 WiFi 連接 Bridge

      如果你只透過藍牙,則 isNoOtherTerminal 可以設 true,HomeBridge 反應速度會變快
      如果你 Yale Link App 會透過 WiFi 開鎖,則 isNoOtherTerminal 要設 false,才不會造成 HomeBridge 失效

  5. YC YC

    您好,感謝您仔細的說明,完全明白了,我再試試看。謝謝您的協助與回覆。

發表迴響