Nuki Hub 的範圍是提供一種有效的方法將 Nuki 設備整合到本地家庭自動化平台中。
Nuki Hub 軟體在 ESP32 模組上運行,可作為 Nuki 設備和家庭自動化平台之間的橋樑。
它透過藍牙 (BLE) 與 Nuki 鎖和/或開啟器通信,並使用 MQTT 與其他系統整合。
它透過 MQTT 公開鎖定狀態(以及更多資訊),並允許執行鎖定和解鎖等命令以及透過 MQTT 更改 Nuki Lock/Opener 配置。
Nuki Hub 不與 Nuki 行動應用程式集成,它無法在官方 Nuki 行動應用程式中將自己註冊為橋接器。
歡迎加入我們的 Discord:https://discord.gg/9nPq85bP4p
支援的 ESP32 設備:
不支援的 ESP32 設備:
支援的 Nuki 設備:
未經測試但可能支援:
支援的乙太網路設備:
作為 Wi-Fi(可在任何支援的 ESP32 上使用)的替代方案,支援以下具有內建有線乙太網路的 ESP32 模組:
原則上,支援所有具有內建乙太網路連接埠的 ESP32(及其變體)設備,但可能需要使用「自訂 LAN 設定」選項進行額外設定。有關詳細信息,請參閱“透過乙太網路連接”部分。
如果絕對需要WIFI6:ESP32-C6
如果需要 PoE:任何上述帶有 PoE 的裝置或任何其他 ESP 裝置與 SPI 乙太網路模組 (W5500) 以及 PoE 至乙太網路和 USB 型 B/C 分路器的組合
如果您想要最大效能並打算執行以下任一個或多個:
具有 2MB 或更多 PSRAM 的 ESP32-S3(尋找 N>=4 且 R>=2 的 ESP32-S3,例如 ESP32-S3 N16R8)
一般來說,在購買新設備時,尺寸和多幾美元都不是問題:具有 2MB 或更多 PSRAM 的 ESP32-S3。
ESP32-S3 是一款雙核心 CPU,具有許多 GPIO,能夠使用 PSRAM 擴大 RAM,能夠透過 SPI 連接乙太網路模組,並可選擇使用 PoE 分離器為設備供電。與其他 ESP 設備相比,ESP32-S3 唯一缺少的功能是能夠使用一些僅由原始 ESP32 支援的乙太網路模組以及透過 WIFI6 (C6) 連接的能力
特徵 | 努基中心 | 貫橋 |
---|---|---|
橋接API | x | |
智慧鎖遙控器 | x | x |
透過 Matter 整合智慧家居 | x | |
透過 Matter 整合 Apple HomeKit | x | |
MQTT API | x | x(僅適用於 SL 3、4 和 4 Pro 型號) |
有線電視區域網路支援 | x | |
乙太網路供電 (PoE) | x(如果 LAN/ESP 模組支援) | |
無線區域網路支援 | x | x(僅適用於 SL 3 和 4 Pro 型號) |
家庭自動化平台集成 | x | x |
雲端支援 | x(透過智慧家庭解決方案可選) | x |
無雲操作 | x | x(自韌體 3.8.2 起) |
官方 Nuki 應用程式集成 | x | |
Nuki 智慧鎖所有型號 | x | x |
努基揭幕戰 | x | x |
Nuki 鍵盤(1.0 和 2.0) | x | x |
MQTT 加密 | x | |
MQTT API的細粒度存取控制 | x | |
透過 MQTT API 匯出鎖定操作 | x | |
透過 GPIO 控制 | x | |
WiFI 和 Thread 連線鎖的混合模式 | x |
如果您尚未訂購 Nuki 產品,您可以在下訂單時使用我的推薦人代碼來支持我:
REF2BJHFVHZKK
這也將為您的訂單提供 10% 的折扣。
此項目可供所有人免費使用。不過,如果您想捐款,可以在 ko-fi.com 給我買杯咖啡:
將韌體刷新到 ESP32。最簡單的安裝方法是使用 Chrome/Opera/Edge 等相容瀏覽器使用 Web 安裝程式:
https://technyon.github.io/nuki_hub/
注意:Webflash 不適用於 ESP32-Solo1
或從 https://github.com/technyon/nuki_hub/releases 下載適用於您的 ESP32 模型的最新版本
解壓縮 zip 檔案並閱讀隨附的 how-to-flash.txt,以了解「Espressif Flash 下載工具」或「esptool」的安裝說明。
給 ESP32 通電,就會出現一個名為「NukiHub」的新 Wi-Fi 存取點。
接入點的密碼是「NukiHubESP32」。
將用戶端裝置連接到此存取點,並在瀏覽器中導航至「http://192.168.4.1」。
使用 Web 介面將 ESP 連接到您首選的 Wi-Fi 網路。
設定 Wi-Fi 後,ESP 應自動連接到您的網路。
若要設定與 MQTT 代理程式的連接,請先將您的用戶端裝置連接到 ESP32 所連接的相同 Wi-Fi 網路。
在瀏覽器中導覽至透過 DHCP 指派給 ESP32 的 IP 位址(通常在網際網路路由器的 Web 介面中找到)。
接下來,按一下“MQTT 配置”下方的“編輯”,然後輸入 MQTT 代理程式的位址和連接埠(通常為 1883)以及使用者名稱和密碼(如果 MQTT 代理程式需要)。
該韌體支援 MQTT 的 SSL 加密,但大多數人,尤其是家庭用戶不使用此功能。
在這種情況下,請將所有以「MQTT SSL」開頭的欄位留空。否則,請參閱本自述文件的「MQTT 加密」部分。
透過在官方 Nuki 應用程式的「設定」>「功能和配置」>「按鈕和 LED」中啟用此設置,確保 Nuki 裝置啟用「藍牙配對」。啟用設定後,按住 Nuki 裝置上的按鈕幾秒鐘。
當 ESP32 通電時,配對應該是自動的。
配對成功後,Web 介面應顯示「已配對:是」。
鎖狀態和電池電量等 MQTT 節點現在應該反映鎖定報告的值。
注意:可以在 Nuki Bridge 旁邊運行 Nuki Hub。不建議這樣做(除非使用混合模式),並且會導致電池電量消耗過多,並可能導致任一裝置遺失更新。在配對之前啟用“註冊為應用程式”以允許這樣做。否則,與 Nuki Hub 配對時,橋接器將被取消註冊。
混合模式可讓您在 Nuki Lock 3.0 Pro、Nuki Lock 4.0 或 Nuki Lock 4.0 Pro 上與 Nuki Hub 結合使用官方 Nuki MQTT 實作。
有關詳細信息,請參閱混合模式。
ESP32 設備的可用 RAM 數量有限。
在僅連接 Nuki Lock 的 Nuki Hub 版本 9.01 上,預期的可用 RAM/堆可用量約為:
此可用 RAM 量可以透過某些操作(例如更改 Nuki 設備配置)或在啟用以下功能時連續減少(暫時):
目前可用的 RAM/Heap 可以在 Nuki Hub 的 Web 配置器的資訊頁面上找到。
當 ESP32 耗盡可用 RAM 時,該裝置可能會崩潰或發生意外行為。
Nuki Hub 確實允許在常規二進位上使用嵌入式 PSRAM(只要可用)。
PSRAM 的大小通常為 2、4 或 8MB,這大大擴充了可用內部 RAM 的 320kb。
當 PSRAM 可用時,基本上不可能用完 RAM。您可以在 Web 設定器的資訊頁面上檢查 PSRAM 是否可用。
請注意,適用於 ESP32-S3 的 Nuki Hub 有兩種版本。
一種適用於不具有四路 SPI PSRAM 的設備,另一種適用於具有八路 SPI PSRAM 的設備。
如果您的 ESP32-S3 裝置具有 PSRAM 但未偵測到,請刷新其他 S3 二進位。
在瀏覽器中導覽至指派給 ESP32 的 IP 位址。
「導入/匯出配置」選單選項允許以 JSON 格式匯入和匯出 NukiHub 設定。
透過選擇以下任一選項來建立目前 NukiHub 設定的(部分)備份:
上述兩個選項都不會備份配對數據,因此在恢復原廠設定或新裝置上匯入此匯出時,您必須手動配對 Nuki 裝置。
若要變更 Nuki Lock/Opener 設置,請使用下列任一設定將configuration/action
主題設定為 JSON 格式的值。可以一次更改多個設定。有關可用設定的更多信息,請參閱 Nuki Smart Lock API 基本配置、Nuki Smart Lock API 高級配置、Nuki Opener API 基本配置和 Nuki Opener API 高級配置。
必須先在配置入口網站中啟用更改設定。在「存取等級配置」的「Nuki Lock/Opener 配置控制」下檢查您希望能夠變更的設定並儲存配置。
環境 | 用法 | 可能的值 | 例子 |
---|---|---|---|
姓名 | 智慧鎖的名稱。 | 字母數字字串,最大長度 32 個字符 | { "name": "Frontdoor" } |
緯度 | 智慧鎖地理位置的緯度。 | 漂浮 | { "latitude": "48.858093" } |
經度 | 智能鎖地理位置的經度 | 漂浮 | { "longitude": "2.294694" } |
自動解鎖 | 是否應透過從外部手動操作門把手來打開門。 | 1 = 啟用,0 = 停用 | { "autoUnlatch": "1" } |
配對已啟用 | 是否應啟用透過按鈕啟動配對模式。 | 1 = 啟用,0 = 停用 | { "pairingEnabled": "0" } |
按鈕啟用 | 是否應啟用該按鈕。 | 1 = 啟用,0 = 停用 | { "buttonEnabled": "1" } |
LED 啟用 | 是否應啟用閃爍 LED 以發出門未鎖訊號。 | 1 = 啟用,0 = 停用 | { "ledEnabled": "1" } |
led亮度 | LED 亮度等級 | 0 = 關閉,...,5 = 最大 | { "ledBrightness": "2" } |
時區偏移量 | 時區偏移 (UTC)(以分鐘為單位) | 0 到 60 之間的整數 | { "timeZoneOffset": "0" } |
目標模式 | 所需的夏令時間模式。 | 0 = 禁用,1 = 歐洲 | { "dstMode": "0" } |
fob動作1 | 如果按一次 Nuki Fob,則會執行所需的操作。 | “無操作”、“解鎖”、“鎖定”、“鎖定即繼續”、“智慧” | { "fobAction1": "Lock n Go" } |
fobAction2 | 如果按兩次 Nuki Fob,則會執行所需的操作。 | “無操作”、“解鎖”、“鎖定”、“鎖定即繼續”、“智慧” | { "fobAction2": "Intelligent" } |
fobAction3 | 如果按 Nuki Fob 三次,則會執行所需的操作。 | “無操作”、“解鎖”、“鎖定”、“鎖定即繼續”、“智慧” | { "fobAction3": "Unlock" } |
單鎖 | 只執行單鎖還是雙鎖 | 0 = 雙鎖,1 = 單鎖 | { "singleLock": "0" } |
廣告模式 | 所需的廣告模式。 | “自動”、“正常”、“慢速”、“最慢” | { "advertisingMode": "Normal" } |
時區 | 當前時區,如果不支援時區,則為“無” | 「無」或 Nuki Timezones 中的時區之一 | { "timeZone": "Europe/Berlin" } |
解鎖位置偏移度數 | 改變解鎖位置的偏移量(以度為單位)。 | -90 到 180 之間的整數 | { "unlockedPositionOffsetDegrees": "-90" } |
鎖定位置偏移度數 | 改變鎖定位置的偏移量(以度為單位)。 | -180 到 90 之間的整數 | { "lockedPositionOffsetDegrees": "80" } |
singleLockedPositionOffsetDegrees | 改變單一鎖定位置的偏移(以度為單位)。 | -180 到 180 之間的整數 | { "singleLockedPositionOffsetDegrees": "120" } |
unlockedToLockedTransitionOffsetDegrees | 偏移量以度為單位改變從解鎖到鎖定的過渡發生的位置。 | -180 到 180 之間的整數 | { "unlockedToLockedTransitionOffsetDegrees": "180" } |
鎖Ngo逾時 | lock 'n' go 逾時(以秒為單位) | 5 到 60 之間的整數 | { "lockNgoTimeout": "60" } |
單按鈕按下動作 | 如果按一下按鈕,則執行所需的操作。 | “無操作”、“智慧型”、“解鎖”、“鎖定”、“解鎖”、“鎖定即繼續”、“顯示狀態” | { "singleButtonPressAction": "Lock n Go" } |
雙按鈕按下動作 | 如果按兩次按鈕,則執行所需的操作。 | “無操作”、“智慧型”、“解鎖”、“鎖定”、“解鎖”、“鎖定即繼續”、“顯示狀態” | { "doubleButtonPressAction": "Show Status" } |
分離圓柱體 | 使用過的圓筒內側是否與外側脫離。 | 0 = 未分離,1 = 分離 | { "detachedCylinder": "1" } |
電池類型 | 智慧鎖中的電池類型。 | “鹼”、“蓄電池”、“鋰” | { "batteryType": "Accumulators" } |
自動電池類型檢測 | 是否開啟自動偵測電池類型。 | 1 = 啟用,0 = 停用 | { "automaticBatteryTypeDetection": "Lock n Go" } |
解鎖持續時間 | 將閂鎖保持在解鎖位置的持續時間(以秒為單位)。 | 1 到 30 之間的整數 | { "unlatchDuration": "3" } |
自動鎖定逾時 | 智慧鎖在解鎖後重新上鎖之前的秒數。 | 30 到 1800 之間的整數 | { "autoLockTimeOut": "60" } |
自動解鎖停用 | 一般情況下是否應停用自動解鎖。 | 1 = 自動解鎖停用,0 = 自動解鎖啟用 | { "autoUnLockDisabled": "1" } |
夜間模式啟用 | 是否啟用夜間模式。 | 1 = 啟用,0 = 停用 | { "nightModeEnabled": "1" } |
夜間模式開始時間 | 夜間模式的開始時間(如果啟用)。 | “HH:MM”格式的時間 | { "nightModeStartTime": "22:00" } |
夜間模式結束時間 | 夜間模式的結束時間(如果啟用)。 | “HH:MM”格式的時間 | { "nightModeEndTime": "07:00" } |
夜間模式自動鎖定已啟用 | 夜間模式下是否應啟用自動鎖定。 | 1 = 啟用,0 = 停用 | { "nightModeAutoLockEnabled": "1" } |
夜間模式自動解鎖已停用 | 夜間模式下是否應停用自動解鎖。 | 1 = 自動解鎖停用,0 = 自動解鎖啟用 | { "nightModeAutoUnlockDisabled": "1" } |
夜間模式立即鎖定開始 | 夜間模式啟動時是否應立即鎖門。 | 1 = 啟用,0 = 停用 | { "nightModeImmediateLockOnStart": "1" } |
自動鎖定啟用 | 是否啟用自動鎖定。 | 1 = 啟用,0 = 停用 | { "autoLockEnabled": "1" } |
立即自動鎖定啟用 | 關門後是否立即自動上鎖。 | 1 = 啟用,0 = 停用 | { "immediateAutoLockEnabled": "1" } |
自動更新啟用 | 是否應啟用自動韌體更新。 | 1 = 啟用,0 = 停用 | { "autoUpdateEnabled": "1" } |
重啟努基 | 立即重新啟動 Nuki 設備 | 1=重啟nuki | { "rebootNuki": "1" } |
環境 | 用法 | 可能的值 | 例子 |
---|---|---|---|
姓名 | 開瓶器的名稱。 | 字母數字字串,最大長度 32 個字符 | { "name": "Frontdoor" } |
緯度 | Openers 地理位置的緯度。 | 漂浮 | { "latitude": "48.858093" } |
經度 | Openers 地理位置的經度 | 漂浮 | { "longitude": "2.294694" } |
配對已啟用 | 是否應啟用透過按鈕啟動配對模式。 | 1 = 啟用,0 = 停用 | { "pairingEnabled": "0" } |
按鈕啟用 | 是否應啟用該按鈕。 | 1 = 啟用,0 = 停用 | { "buttonEnabled": "1" } |
led閃光燈啟用 | 是否應啟用閃爍 LED 來發出 CM 或 RTO 訊號。 | 1 = 啟用,0 = 停用 | { "ledFlashEnabled": "1" } |
時區偏移量 | 時區偏移 (UTC)(以分鐘為單位) | 0 到 60 之間的整數 | { "timeZoneOffset": "0" } |
目標模式 | 所需的夏令時間模式。 | 0 = 禁用,1 = 歐洲 | { "dstMode": "0" } |
fob動作1 | 如果按一次 Nuki Fob,則會執行所需的操作。 | “無操作”、“切換 RTO”、“啟動 RTO”、“停用 RTO”、“開啟”、“振鈴” | { "fobAction1": "Toggle RTO" } |
fobAction2 | 如果按兩次 Nuki Fob,則會執行所需的操作。 | “無操作”、“切換 RTO”、“啟動 RTO”、“停用 RTO”、“開啟”、“振鈴” | { "fobAction2": "Open" } |
fobAction3 | 如果按 Nuki Fob 三次,則會執行所需的操作。 | “無操作”、“切換 RTO”、“啟動 RTO”、“停用 RTO”、“開啟”、“振鈴” | { "fobAction3": "Ring" } |
操作模式 | 所需的操作模式 | 「通用開門器」、「類比對講機」、「數位對講機」、「Siedle」、「TCS」、「Bticino」、「Siedle HTS」、「STR」、「Ritto」、「Fermax」、「Comelit」、「 Urmet BiBus”、“Urmet 2Voice”、“Golmar”、“SKS”、“備用” | { "operatingMode": "TCS" } |
廣告模式 | 所需的廣告模式。 | “自動”、“正常”、“慢速”、“最慢” | { "advertisingMode": "Normal" } |
時區 | 當前時區,如果不支援時區,則為“無” | 「無」或 Nuki Timezones 中的時區之一 | { "timeZone": "Europe/Berlin" } |
對講機ID | 已連接對講機的資料庫ID。 | 整數 | { "intercomID": "1" } |
總線模式切換 | 資料模式和模擬模式之間的切換方法 | 0 = 無,1 =v 短路 | { "busModeSwitch": "0" } |
短路持續時間 | 總線模式切換的短路持續時間(以毫秒為單位)。 | 整數 | { "shortCircuitDuration": "250" } |
電擊延遲 | RTO 啟動電擊時,電擊啟動延遲(以毫秒為單位) | 0 到 30000 之間的整數 | { "electricStrikeDelay": "2080" } |
隨機電擊延遲 | 隨機延遲(3-7 秒)以模擬內部人員啟動電擊。 | 1 = 啟用,0 = 停用 | { "randomElectricStrikeDelay": "1" } |
電擊持續時間 | 電擊啟動的持續時間(以毫秒為單位)。 。 | 1000 到 30000 之間的整數 | { "electricStrikeDuration": "5000" } |
禁用 RtoAfterRing | 響鈴後是否關閉RTO。 | 1 = 振鈴後禁用 RTO,0 = 振鈴後不禁用 RTO | { "disableRtoAfterRing": "0" } |
超時時間 | 經過這段時間(以分鐘為單位)後,RTO 將自動停用 | 5 到 60 之間的整數 | { "rtoTimeout": "60" } |
門鈴抑制 | 當 Ring、CM 和/或 RTO 處於活動狀態時是否抑制門鈴 | 「關」、「CM」、「RTO」、「CM & RTO」、「振鈴」、「CM & 振鈴」、「RTO & 振鈴」、「CM & RTO & 振鈴」 | { "doorbellSuppression": "CM & Ring" } |
門鈴抑制持續時間 | 門鈴抑制的持續時間(以毫秒為單位)。 | 500 到 10000 之間的整數 | { "doorbellSuppressionDuration": "2000" } |
音環 | 響鈴聲音 | “無聲音”、“聲音 1”、“聲音 2”、“聲音 3” | { "soundRing": "No Sound" } |
聲音打開 | 打開的聲音。 | “無聲音”、“聲音 1”、“聲音 2”、“聲音 3” | { "soundOpen": "Sound 1" } |
聲音Rto | RTO 聲音。 | “無聲音”、“聲音 1”、“聲音 2”、“聲音 3” | { "soundRto": "Sound 2" } |
聲音厘米 | CM 聲音。 | “無聲音”、“聲音 1”、“聲音 2”、“聲音 3” | { "soundCm": "Sound 3" } |
聲音確認 | 聲音確認 | 0 = 無聲音,1 = 有聲音 | { "soundConfirmation": "1" } |
聲級 | 開瓶器的聲音級別 | 0 到 255 之間的整數 | { "soundLevel": "200" } |
單按鈕按下動作 | 如果按一下按鈕,則執行所需的操作。 | “無操作”、“切換 RTO”、“啟動 RTO”、“停用 RTO”、“切換 CM”、“啟動 CM”、“停用 CM”、“開啟” | { "singleButtonPressAction": "Open" } |
雙按鈕按下動作 | 如果按兩次按鈕,則執行所需的操作。 | “無操作”、“切換 RTO”、“啟動 RTO”、“停用 RTO”、“切換 CM”、“啟動 CM”、“停用 CM”、“開啟” | { "doubleButtonPressAction": "No Action" } |
電池類型 | 智慧鎖中的電池類型。 | “鹼”、“蓄電池”、“鋰” | { "batteryType": "Accumulators" } |
自動電池類型檢測 | 是否開啟自動偵測電池類型。 | 1 = 啟用,0 = 停用 | { "automaticBatteryTypeDetection": "1" } |
重啟努基 | 立即重新啟動 Nuki 設備 | 1=重啟nuki | { "rebootNuki": "1" } |
一次更改多個設定的範例用法:
{ "buttonEnabled": "1", "lockngoTimeout": "60", "automaticBatteryTypeDetection": "1" }
{ "fobAction1": "Unlock", "fobAction2": "Intelligent", "nightModeImmediateLockOnStart": "1" }
最後一次設定變更操作的結果將作為 JSON 資料發佈到configuration/commandResult
MQTT 主題。
JSON 資料將包括一個名為「常規」的節點以及 Nuki Hub 在操作中偵測到的每個設定的節點。
「常規」節點的可能值為「noValidPinSet」、「invalidJson」、「invalidConfig」、「success」和「noChange」。
每個設定的節點的可能值為「unchanged」、「noValueSet」、「invalidValue」、「valueTooLong」、「accessDenied」、「success」、「failed」、「timeOut」、「working」、「notPaired」、「 error” ”和“未定義”
例子:
{"advertisingMode":"success","general":"success"}
如果啟用了 Home Assistant 發現(請參閱本自述文件的 Home Assistant 發現部分),Nuki Hub 將為幾乎所有上述設定建立實體。
透過串列連接初始安裝 Nuki Hub 韌體後,可以透過瀏覽器透過 OTA 更新來部署進一步的更新。
在配置入口網站中,從主頁選擇「韌體更新」。
如果 Nuki Hub 連接到互聯網,升級 Nuki Hub 最簡單的方法是選擇「更新到最新版本」。
這將下載最新的 Nuki Hub 和 Nuki Hub 更新程式並自動升級這兩個應用程式。
過程中Nuki Hub將重新啟動3次,大約需要5分鐘。
如果您已啟用“允許使用 MQTT 更新”,您也可以使用 Home Assistant 更新程式或向nukihub/maintanance/update
主題寫入“1”來啟動更新程序。
或者,您可以從檔案系統中選擇一個二進位檔案來手動更新 Nuki Hub 或 Nuki Hub 更新程序
您只能從 Nuki Hub 更新程式更新 Nuki Hub,並且只能從 Nuki Hub 更新更新程序
您可以從「韌體更新」頁面選擇重新啟動選項,從 Nuki Hub 重新啟動到更新程序,反之亦然
當您使用正確的應用程式時,您可以透過點擊「瀏覽」上傳新的二進位文件,然後選擇新的「nuki_hub[board].bin」或「nuki_hub_updater[board].bin」文件,然後選擇「上傳文件」。
大約一分鐘後,應安裝新固件,然後 ESP 將自動重新啟動到更新的二進位。
選擇錯誤的二進位檔案將導致更新失敗
從 Nuki Hub 8.35 或更低版本升級的使用者請注意:
更新至版本 9.00 需要更改 ESP32 的分割區表。
從早期版本更新到 Nuki Hub 9.00 時,請按照首次安裝說明進行操作。
使用上述說明更新時,您的設定不會受到影響(使用 Webflash 更新時請勿選擇擦除裝置)。
透過 MQTT 的通訊可以進行 SSL 加密。
若要啟用 SSL 加密,請在 MQTT 設定頁面中提供必要的資訊。
支援以下配置:
CA、CERT 和 KEY 為空 -> 不加密
CA 已填,但 CERT 和 KEY 為空 -> 加密 MQTT
CA、CERT 和 KEY 已填寫 -> 帶有客戶端驗證的加密 MQTT
為 MQTT 伺服器建立憑證範例:
# make a ca key
openssl genpkey -algorithm RSA -out ca.key
# make a CA cert
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=US/ST=YourState/L=YourCity/O=YourOrganization/OU=YourUnit/CN=YourCAName"
# make a server key
openssl genpkey -algorithm RSA -out server.key
# Make a sign request, MAKE SURE THE CN MATCHES YOUR MQTT SERVERNAME
openssl req -new -key server.key -out server.csr -subj "/C=US/ST=YourState/L=YourCity/O=YourOrganization/OU=YourUnit/CN=homeserver.local"
# sign it
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650
該軟體支援 MQTT Discovery,將 Nuki Hub 與 Home Assistant 整合。
若要啟用自動發現,請啟用「MQTT 設定」頁面上的核取方塊。
啟用後,Nuki Lock 和/或 Opener 及相關實體應自動出現在您的 Home Assistant MQTT 裝置中。
啟用自動發現時,會設定 Home Assistant 服務和 Nuki 指令之間的下列對應:
智慧鎖 | 開場白(預設) | 開場白(替代) | |
---|---|---|---|
鎖.鎖 | 鎖 | 禁用環打開 | 禁用連續模式 |
鎖定.解鎖 | 開鎖 | 啟用環打開 | 啟用連續模式 |
鎖.開 | 解鎖 | 電擊啟動 | 電擊啟動 |
注意:MQTT Discovery 使用保留的 MQTT 訊息來儲存設備配置。為了避免經紀商上的孤立配置,如果您不想再使用此軟體,請先停用自動發現。取消配對以及在 MQTT 設定頁面中變更/停用自動發現主題時,保留的訊息會自動清除。
注意 2:可以使用 MQTT Lock 整合手動設定 Home Assistant,但不建議這樣做
如果鍵盤連接到鎖,則可以新增、更新和刪除鍵盤代碼。必須先在設定入口網站中啟用此功能。勾選「存取等級配置」下的「新增、修改和刪除鍵盤代碼」並儲存配置。
有關目前鍵盤程式碼的資訊以 JSON 資料形式發佈到「[lock/opener]/keypad/json」MQTT 主題。
這需要透過選取「存取等級配置」下的「發布鍵盤代碼資訊」並儲存配置來單獨啟用。出於安全原因,程式碼本身不會發布,除非在 Nuki Hub 設定中明確啟用。預設最多發布 10 個條目。
若要變更 Nuki Lock/Opener 鍵盤設置,請將[lock/opener]/keypad/actionJson
主題設定為包含下列節點的 JSON 格式值。
節點 | 刪除 | 添加 | 更新 | 查看 | 用法 | 可能的值 |
---|---|---|---|---|---|---|
行動 | 必需的 | 必需的 | 必需的 | 必需的 | 要執行的動作 | “刪除”、“新增”、“更新”、“檢查” |
代碼ID | 必需的 | 未使用 | 必需的 | 必需的 | 要刪除或更新的現有程式碼的程式碼 ID | 整數 |
程式碼 | 未使用 | 必需的 | 選修的 | 必需的 | 要建立或更新的程式碼 | 不帶零的 6 位元整數,不能以「12」開頭 |
已啟用 | 未使用 | 未使用 | 選修的 | 未使用 | 啟用或停用程式碼,新增時始終啟用 | 1 = 啟用,0 = 停用 |
姓名 | 未使用 | 必需的 | 選修的 | 未使用 | 要建立或更新的程式碼的名稱 | 字串,最多 20 個字符 |
限時 | 未使用 | 選修的 | 選修的 | 未使用 | 如果此授權僅限於特定時間訪問,則需要啟用 = 1 | 1 = 啟用,0 = 停用 |
允許從 | 未使用 | 選修的 | 選修的 | 未使用 | 應允許存取的開始時間戳記(需要啟用 = 1 且 timeLimited = 1) | “年-月-日 時:分:秒” |
允許直到 | 未使用 | 選修的 | 選修的 | 未使用 | 應允許存取之前的結束時間戳記(需要啟用 = 1 且 timeLimited = 1) | “年-月-日 時:分:秒” |
允許工作日 | 未使用 | 選修的 | 選修的 | 未使用 | 應允許存取的工作日(需要啟用 = 1 且 timeLimited = 1) | 日期數組:“週一”、“週二”、“週三”、“週四”、“週五”、“週六”、“週日” |
允許起始時間 | 未使用 | 選修的 | 選修的 | 未使用 | 每天應允許訪問的開始時間(需要啟用 = 1 且 timeLimited = 1) | “呵呵:嗯” |
允許直到時間 | 未使用 | 選修的 | 選修的 | 未使用 | 允許訪問之前每天的結束時間(需要啟用 = 1 且 timeLimited = 1) | “呵呵:嗯” |
範例:
{ "action": "delete", "codeId": "1234" }
{ "action": "add", "code": "589472", "name": "Test", "timeLimited": "1", "allowedFrom": "2024-04-12 10:00:00", "allowedUntil": "2034-04-12 10:00:00", "allowedWeekdays": [ "wed", "thu", "fri" ], "allowedFromTime": "08:00", "allowedUntilTime": "16:00" }
{ "action": "update", "codeId": "1234", "enabled": "1", "name": "Test", "timeLimited": "1", "allowedFrom": "2024-04-12 10:00:00", "allowedUntil": "2034-04-12 10:00:00", "allowedWeekdays": [ "mon", "tue", "sat", "sun" ], "allowedFromTime": "08:00", "allowedUntilTime": "16:00" }
最後一次鍵盤變更操作的結果將會發佈到[lock/opener]/configuration/commandResultJson
MQTT 主題。
可能的值為「noValidPinSet」、「keypadControlDisabled」、「keypadNotAvailable」、「keypadDisabled」、「invalidConfig」、「invalidJson」、「noActionSet」、「invalidAction」、「noExistingCodeIdSetno」、「TSetnoSetno」、「SetCode」、「noExistingCode 」 、「invalidAllowedFrom」、「invalidAllowedUntil」、「invalidAllowedFromTime」、「invalidAllowedUntilTime」、「成功」、「失敗」、「超時」、「工作」、「未配對」、「錯誤」和「未定義」。
如果鍵盤連接到鎖,則可以新增、更新和刪除鍵盤代碼。必須先在設定入口網站中啟用此功能。勾選「存取等級配置」下的「新增、修改和刪除鍵盤代碼」並儲存配置。
有關程式碼的資訊發佈在「keypad/code_x」下,x 從 0 開始,直到配置的程式碼數量。這需要透過選取「存取等級配置」下的「發布鍵盤代碼資訊」並儲存配置來單獨啟用。預設最多發布 10 個條目。
出於安全原因,程式碼本身不會發布,除非在 Nuki Hub 設定中明確啟用。若要修改鍵盤代碼,請在鍵盤/命令下設定命令結構:
要修改鍵盤程式碼,必須根據命令設定前四個參數節點:
** 注意:代碼規則為:
設定必要的參數後,將要執行的動作寫入命令節點。例如新增一段程式碼:
可以新增、更新和刪除時間控制條目。必須先在設定入口網站中啟用此功能。勾選「存取等級配置」下的「新增、修改和刪除時間控制條目」並儲存配置。
有關當前時間控制條目的資訊會作為 JSON 資料發佈到「[lock/opener]/timecontrol/json」MQTT 主題。
這需要透過選取「存取等級配置」下的「發佈時間控制條目資訊」並儲存組態來單獨啟用。預設最多發布 10 個條目。
若要變更 Nuki Lock/Opener 時間控制設置,請將[lock/opener]/timecontrol/actionJson
主題設定為包含下列節點的 JSON 格式值。
節點 | 刪除 | 添加 | 更新 | 用法 | 可能的值 |
---|---|---|---|---|---|
行動 | 必需的 | 必需的 | 必需的 | 要執行的動作 | “刪除”、“新增”、“更新” |
條目ID | 必需的 | 未使用 | 必需的 | 若要刪除或更新的現有條目的條目 ID | 整數 |
已啟用 | 未使用 | 未使用 | 選修的 | 啟用或停用條目,新增時始終啟用 | 1 = 啟用,0 = 停用 |
工作日 | 未使用 | 選修的 | 選修的 | 應執行所選鎖定操作的工作日(需要啟用 = 1) | 日期數組:“週一”、“週二”、“週三”、“週四”、“週五”、“週六”、“週日” |
時間 | 未使用 | 必需的 | 選修的 | 應執行所選鎖定操作的時間(需要啟用 = 1) | “呵呵:嗯” |
鎖定動作 | 未使用 | 必需的 | 選修的 | 應在所選工作日的所選時間執行的鎖定操作(需要啟用 = 1) | 對於 Nuki 鎖:「Unlock」、「Lock」、「Unlatch」、「LockNgo」、「LockNgoUnlatch」、「FullLock」。對於 Nuki Opener:“ActivateRTO”、“DeactivateRTO”、“ElectricStrikeActuation”、“ActivateCM”、“DeactivateCM” |
範例:
{ "action": "delete", "entryId": "1234" }
{ "action": "add", "weekdays": [ "wed", "thu", "fri" ], "time": "08:00", "lockAction": "Unlock" }
{ "action": "update", "entryId": "1234", "enabled": "1", "weekdays": [ "mon", "tue", "sat", "sun" ], "time": "08:00", "lockAction": "Lock" }
授權條目可以更新和刪除。必須先在設定入口網站中啟用此功能。勾選「存取等級配置」下的「修改和刪除授權條目」並儲存配置。目前還無法以這種方式新增授權條目。
有關目前授權條目的資訊以 JSON 資料形式發佈至「[lock/opener]/authorization/json」MQTT 主題。
這需要透過勾選「存取等級配置」下的「發布授權條目資訊」並儲存配置來單獨啟用。預設最多發布 10 個條目。
若要變更 Nuki Lock/Opener 授權設置,請將[lock/opener]/authorization/action
主題設定為包含下列節點的 JSON 格式值。
節點 | 刪除 | 添加 | 更新 | 用法 | 可能的值 |
---|---|---|---|---|---|
行動 | 必需的 | 必需的 | 必需的 | 要執行的動作 | “刪除”、“新增”、“更新” |
授權ID | 必需的 | 未使用 | 必需的 | 若要刪除或更新的現有條目的身份驗證 ID | 整數 |
已啟用 | 未使用 | 未使用 | 選修的 | 啟用或停用授權,新增時始終啟用 | 1 = 啟用,0 = 停用 |
姓名 | 未使用 | 必需的 | 選修的 | 建立或更新的授權名稱 | 字串,最多 20 個字符 |
遠端允許 | 未使用 | 選修的 | 選修的 | 如果允許遠端存取此授權,則需要啟用= 1 | 1 = 啟用,0 = 停用 |
限時 | 未使用 | 選修的 | 選修的 | 如果此授權僅限於特定時間訪問,則需要啟用 = 1 | 1 = 啟用,0 = 停用 |
允許從 | 未使用 | 選修的 | 選修的 | 應允許存取的開始時間戳記(需要啟用 = 1 且 timeLimited = 1) | “年-月-日 時:分:秒” |
允許直到 | 未使用 | 選修的 | 選修的 | 應允許存取之前的結束時間戳記(需要啟用 = 1 且 timeLimited = 1) | “年-月-日 時:分:秒” |
允許工作日 | 未使用 | 選修的 | 選修的 | 應允許存取的工作日(需要啟用 = 1 且 timeLimited = 1) | 日期數組:“週一”、“週二”、“週三”、“週四”、“週五”、“週六”、“週日” |
允許起始時間 | 未使用 | 選修的 | 選修的 | 每天應允許訪問的開始時間(需要啟用 = 1 且 timeLimited = 1) | “呵呵:嗯” |
允許直到時間 | 未使用 | 選修的 | 選修的 | 允許訪問之前每天的結束時間(需要啟用 = 1 且 timeLimited = 1) | “呵呵:嗯” |
範例:
{ "action": "delete", "authId": "1234" }
{ "action": "update", "authId": "1234", "enabled": "1", "name": "Test", "timeLimited": "1", "allowedFrom": "2024-04-12 10:00:00", "allowedUntil": "2034-04-12 10:00:00", "allowedWeekdays": [ "mon", "tue", "sat", "sun" ], "allowedFromTime": "08:00", "allowedUntilTime": "16:00" }
可以透過 GPIO 控制鎖。若要觸發操作,接地連接必須至少保持 300 毫秒(或「通用輸入(下拉)」時連接至 +3.3V)。
若要啟用 GPIO 控制,請前往「GPIO 設定」頁面,其中每個 GPIO 都可以配置為特定角色:
如果您喜歡透過乙太網路而不是 Wi-Fi 連接,則可以使用內建乙太網路的支援的 ESP32 模組之一(請參閱「支援的裝置」部分)或連接單獨的 SPI 乙太網路模組。
目前支援Wiznet W5x00模組(W5100、W5200、W5500)、DN9051和KSZ8851SNL晶片。
若要使用支援的模組,請刷新韌體,透過 Wi-Fi 連接並在「網路配置」部分中選擇正確的網路硬體。
若要將外部 W5x00 模組連接到 ESP,請使用下列接線方案:
現在透過 Wi-Fi 連線並將網路硬體變更為「Generic W5500」。
如果在更改網路設備後未偵測到或正確初始化乙太網路硬件,則將使用 Wi-Fi 作為後備。
注意:LAN8720 模組僅在 ESP32 和 ESP32-Solo1 上支持,在 ESP32-S3、ESP32-C3 或 ESP-C6 上不支援
不幸的是,ESP32 在某些存取點上存在問題,且重新連線失敗。
作為解決方法,您可以導航至“網路配置”並啟用“斷開連接時重新啟動”。
一旦 ESP 與 Wi-Fi 斷開連接,這將立即重新啟動 ESP。
此外,這也將配置入口網站逾時減少到三分鐘,以防止 ESP 在存取點暫時離線的情況下陷入設定模式。
如果這仍然無法解決斷開連接問題並且 ESP 變得無法訪問,則可以使用“重新啟動計時器”選項作為最後的手段。
它將在配置的時間後重新啟動 ESP。
首先,確保 Nuki 裝置的韌體版本是最新的,舊版本有配對問題。
接下來,嘗試擦除 ESP32 閃存,然後(重新)刷新韌體。
若要擦除閃存,請使用 espressif 下載工具並點擊「擦除」按鈕。
然後按照「how-to-flash.txt」檔案中的說明或使用 Webflash 刷新韌體。
另外,檢查是否允許配對。在 Nuki 智慧型手機應用程式中,前往「設定」-->「功能和配置」-->「按鈕和 LED」並確保啟用「藍牙配對」。
接下來按住按鈕幾秒鐘,直到 LED 燈保持亮起。
關於 M5Stack PoESP32 單元的說明。這裡最初的藍牙接收非常差(範圍不到一公尺)。原因是模組PCB上沒有天線,只有IPEX連接器。透過改裝外部 SMA 天線(IPEX 或其他名稱 U.FL、IPAX、IPX、AMC、MHF、UMCC),藍牙/Wi-Fi 可以在幾公尺範圍內工作。
確保您使用的 Home Assistant 版本至少為 2023.8.0。
Home Assistant 開發人員對 MQTT 自動發現進行了更改,這打破了對舊版本的支持,Nuki Hub 已採用這些更改。
不幸的是,這意味著 Nuki Hub 發現實作不再支援舊版的 Home Assistant。
Nuki 表示,這是 Pro 鎖的設計初衷,也是其規格的一部分。
您可以使用內建 Wi-Fi 或網橋(Nuki Hub 註冊為該網橋)。
或使用 Wi-Fi 或 Thread 在混合模式下使用 Nuki Hub,請參閱混合模式
不支援同時使用兩者。
某些功能受到鎖定(或開啟器)韌體的限制,並且只有在提供 PIN 後才能存取。
設定鎖定(或開啟器)時,您必須在 Nuki 智慧型手機應用程式中設定 PIN。
導覽至 Nuki Hub 憑證頁面,輸入此 PIN 碼並點選「儲存」。
檢查配置器主頁,查看輸入的 PIN 碼是否有效
請參閱上一點,此功能需要配置正確的 PIN。
確保在「存取等級配置」下選取「解鎖」選項。
可以使用 lock.open 服務觸發解鎖。
或者,透過家庭助理發現公開「解鎖」按鈕。
此按鈕預設為停用狀態,但可以在 Home Assistant UI 中啟用。
當使用多個 Nuki 設備時,必須為每個設備配置不同的路徑。
導覽至「MQTT 配置」並變更至少一台裝置的「基本 MQTT 配置」下的「MQTT NukiHub 路徑」。
這通常是在不使用混合模式(官方 MQTT / Nuki Hub 共存)時啟用「註冊為應用程式」的結果。
這樣做會導致 Nuki Hub 不斷查詢鎖,從而導致電池消耗過多。
為了防止這種行為,請取消配對 Nuki Hub,停用“註冊為應用程式”,然後重新配對。
切勿啟用“註冊為應用程式”,除非您打算在 Nuki Hub 之外使用 Nuki Bridge,或者您正在使用混合模式!
碼頭工人(首選)
有關使用 Docker 進行建置的說明,請參閱 Docker 目錄中的 README。
平台 IO,基於 Debian 的 Linux 發行版(例如 Ubuntu)的說明
apt-get update
apt-get install -y git python3 pip make
python3 -m venv .venv
source .venv/bin/activate
git clone https://github.com/technyon/nuki_hub --recursive
cd nuki_hub
# install tools platformio and esptool
make deps
# build all binary boards
make updater
make release
這是用於 Nuki 設備的第三方軟體。
該項目或其任何作者均與 Nuki Home Solutions GmbH 無關。
官方產品及支援請參考Nuki官網:
https://nuki.io/
有關更多許可證詳細信息,請檢查隨附的許可證文件。