O escopo do Nuki Hub é ter uma maneira eficiente de integrar dispositivos Nuki em uma plataforma local de automação residencial.
O software Nuki Hub funciona em um módulo ESP32 e atua como uma ponte entre os dispositivos Nuki e uma plataforma de automação residencial.
Ele se comunica com um Nuki Lock e/ou Opener através de Bluetooth (BLE) e usa MQTT para integração com outros sistemas.
Ele expõe o estado de bloqueio (e muito mais) por meio do MQTT e permite executar comandos como bloquear e desbloquear, bem como alterar a configuração do Nuki Lock/Opener por meio do MQTT.
O Nuki Hub não se integra ao aplicativo móvel Nuki e não pode se registrar como uma ponte no aplicativo móvel oficial Nuki.
Sinta-se à vontade para se juntar a nós no Discord: https://discord.gg/9nPq85bP4p
Dispositivos ESP32 suportados:
Dispositivos ESP32 não suportados:
Dispositivos Nuki suportados:
Não testado, mas provavelmente suportado:
Dispositivos Ethernet suportados:
Como alternativa ao Wi-Fi (que está disponível em qualquer ESP32 compatível), os seguintes módulos ESP32 com Ethernet com fio integrada são suportados:
Em princípio, todos os dispositivos ESP32 (e variantes) com porta Ethernet integrada são suportados, mas podem exigir configuração adicional usando a opção "Configuração de LAN personalizada". Consulte a seção "Conexão via Ethernet" para obter mais informações.
Se WIFI6 for absolutamente necessário: ESP32-C6
Se for necessário PoE: Qualquer um dos dispositivos mencionados acima com PoE ou qualquer outro dispositivo ESP em combinação com um módulo Ethernet SPI (W5500) e PoE para Ethernet e divisor USB tipo B/C
Se você deseja desempenho máximo e pretende executar um ou vários dos seguintes:
Um ESP32-S3 com 2 MB de PSRAM ou mais (procure um ESP32-S3 com a designação N>=4 e R>=2, como um ESP32-S3 N16R8)
Em geral, ao comprar um novo dispositivo, quando o tamanho e alguns dólares a mais ou menos não são um problema: Um ESP32-S3 com 2 MB de PSRAM ou mais.
O ESP32-S3 é uma CPU dual-core com muitos GPIOs, capacidade de ampliar RAM usando PSRAM, capacidade de conectar módulos Ethernet via SPI e opcionalmente alimentar o dispositivo com um divisor PoE. As únicas funções que faltam no ESP32-S3 em comparação com outros dispositivos ESP é a capacidade de usar alguns módulos Ethernet suportados apenas pelo ESP32 original e a capacidade de conectar via WIFI6 (C6)
Recurso | Centro Nuki | Ponte Nuki |
---|---|---|
API de ponte | x | |
Controle remoto Smart Lock | x | x |
Integração de casa inteligente via Matter | x | |
Integração do Apple HomeKit via Matter | x | |
API MQTT | x | x (somente para modelos SL 3, 4 e 4 Pro) |
Suporte para LAN com fio | x | |
Alimentação pela Ethernet (PoE) | x (se suportado pelo módulo LAN/ESP) | |
Suporte WLAN | x | x (apenas para modelos SL 3 e 4 Pro) |
Integração da plataforma de automação residencial | x | x |
Suporte à nuvem | x (opcional via solução smarthome) | x |
Operação sem nuvem | x | x (desde versão 3.8.2) |
Integração oficial do aplicativo Nuki | x | |
Nuki Smartlocks todos os modelos | x | x |
Abridor Nuki | x | x |
Teclado Nuki (1.0 e 2.0) | x | x |
Criptografia MQTT | x | |
Controle de acesso refinado da API MQTT | x | |
Exportação de ações de bloqueio via API MQTT | x | |
Controle via GPIO | x | |
Modo híbrido para bloqueios conectados por WiFI e Thread | x |
Se você ainda não encomendou seu produto Nuki, você pode me apoiar usando meu código de referência ao fazer seu pedido:
REF2BJHFVHZKK
Isso também lhe dará um desconto de 10% no seu pedido.
Este projeto é de uso gratuito para todos. No entanto, se você quiser doar, pode me comprar um café em ko-fi.com:
Atualize o firmware para um ESP32. A maneira mais fácil de instalar é usar o instalador da web usando um navegador compatível como Chrome/Opera/Edge:
https://technyon.github.io/nuki_hub/
NOTA: Webflash não está disponível para ESP32-Solo1
Alternativamente, baixe a versão mais recente para o seu modelo ESP32 em https://github.com/technyon/nuki_hub/releases
Descompacte o arquivo zip e leia o how-to-flash.txt incluído para obter instruções de instalação de "Espressif Flash Download Tools" ou "esptool".
Ligue o ESP32 e um novo ponto de acesso Wi-Fi chamado “NukiHub” deverá aparecer.
A senha do ponto de acesso é “NukiHubESP32”.
Conecte um dispositivo cliente a este ponto de acesso e em um navegador navegue até "http://192.168.4.1".
Use a interface da web para conectar o ESP à sua rede Wi-Fi preferida.
Após configurar o Wi-Fi, o ESP deverá se conectar automaticamente à sua rede.
Para configurar a conexão com o corretor MQTT, primeiro conecte seu dispositivo cliente à mesma rede Wi-Fi à qual o ESP32 está conectado.
Em um navegador, navegue até o endereço IP atribuído ao ESP32 via DHCP (geralmente encontrado na interface web do seu roteador de internet).
Em seguida, clique em "Editar" abaixo de "Configuração MQTT" e insira o endereço e a porta (geralmente 1883) do seu corretor MQTT e um nome de usuário e uma senha, se exigido pelo seu corretor MQTT.
O firmware suporta criptografia SSL para MQTT, porém a maioria das pessoas, especialmente os usuários domésticos, não a usam.
Nesse caso, deixe todos os campos que começam com "MQTT SSL" em branco. Caso contrário, consulte a seção "Criptografia MQTT" deste README.
Certifique-se de que o "emparelhamento Bluetooth" esteja habilitado para o dispositivo Nuki, habilitando esta configuração no aplicativo oficial Nuki em "Configurações" > "Recursos e configuração" > "Botão e LED". Depois de habilitar a configuração, pressione o botão no dispositivo Nuki por alguns segundos.
O emparelhamento deve ser automático quando o ESP32 estiver ligado.
Quando o emparelhamento for bem-sucedido, a interface da web deverá mostrar "Emparelhado: Sim".
Nós MQTT, como estado de bloqueio e nível de bateria, agora devem refletir os valores relatados do bloqueio.
Nota: É possível executar o Nuki Hub ao lado de uma ponte Nuki. Isso não é recomendado (a menos que seja usado o modo híbrido) e levará ao consumo excessivo da bateria e pode fazer com que qualquer dispositivo perca atualizações. Ative "Registrar como aplicativo" antes de emparelhar para permitir isso. Caso contrário, o registro da Bridge será cancelado ao emparelhar o Nuki Hub.
O modo híbrido permite que você use a implementação oficial do Nuki MQTT em um Nuki Lock 3.0 Pro, Nuki Lock 4.0 ou Nuki Lock 4.0 Pro em conjunto com o Nuki Hub.
Consulte modo híbrido para obter mais informações.
Os dispositivos ESP32 têm uma quantidade limitada de RAM livre disponível.
Na versão 9.01 do Nuki Hub com apenas um Nuki Lock conectado, a quantidade livre esperada de RAM/Heap disponível é em torno de:
Esta quantidade livre de RAM pode ser reduzida (temporariamente) por certas ações (como alterar a configuração do dispositivo Nuki) ou continuamente ao ativar o seguinte:
A RAM/Heap atualmente disponível pode ser encontrada na página de informações do configurador Web do Nuki Hub.
Quando o ESP32 fica sem RAM disponível, este dispositivo pode travar ou pode ocorrer um comportamento inesperado.
O Nuki Hub permite o uso de PSRAM incorporado nos binários regulares sempre que estiver disponível.
A PSRAM geralmente tem 2, 4 ou 8 MB de tamanho e, portanto, aumenta bastante os 320 KB de RAM interna disponíveis.
É basicamente impossível ficar sem RAM quando a PSRAM está disponível. Você pode verificar na página de informações do configurador Web se PSRAM está disponível.
Observe que existem duas versões do Nuki Hub para o ESP32-S3 disponíveis.
Um para dispositivos sem ou Quad SPI PSRAM e outro para dispositivos com Octal SPI PSRAM.
Se o seu dispositivo ESP32-S3 tiver PSRAM, mas não for detectado, atualize o outro binário S3.
Em um navegador navegue até o endereço IP atribuído ao ESP32.
A opção de menu "Importar/Exportar configuração" permite importar e exportar as configurações do NukiHub no formato JSON.
Crie um backup (parcial) das configurações atuais do NukiHub selecionando qualquer um dos seguintes:
Ambas as opções acima não farão backup dos dados de emparelhamento, então você terá que emparelhar manualmente os dispositivos Nuki ao importar esta exportação em uma redefinição de fábrica ou em um novo dispositivo.
Para alterar as configurações de bloqueio/abridor Nuki Defina o tópico configuration/action
como um valor formatado JSON com qualquer uma das seguintes configurações. Várias configurações podem ser alteradas de uma só vez. Consulte a API BASIC NUKI SMART Lock, a API Smart Lock API da NUKI Smart API Advanced Config, o NUKI API API Basic Config e o NUKI Opener API Avançado Config para obter mais informações sobre as configurações disponíveis.
A alteração das configurações deve ser ativada primeiro no portal de configuração. Verifique as configurações que você deseja alterar em "Controle de configuração de bloqueio/abridor Nuki" em "Configuração do nível de acesso" e salve a configuração.
Contexto | Uso | Valores possíveis | Exemplo |
---|---|---|---|
nome | O nome do bloqueio inteligente. | Corda alfanumérica, comprimento máximo 32 chars | { "name": "Frontdoor" } |
latitude | A latitude da geoposição de bloqueios inteligentes. | Flutuador | { "latitude": "48.858093" } |
longitude | A longitude da geoposição de bloqueios inteligentes | Flutuador | { "longitude": "2.294694" } |
AUTOUNLATCH | Se a porta deve ou não ser destinada a operar manualmente uma maçaneta da porta do lado de fora. | 1 = ativado, 0 = desativado | { "autoUnlatch": "1" } |
EmparingEnabled | Se ativar ou não o modo de emparelhamento via botão deve ser ativado. | 1 = ativado, 0 = desativado | { "pairingEnabled": "0" } |
ButtonEnabled | Se o botão deve ou não ser ativado. | 1 = ativado, 0 = desativado | { "buttonEnabled": "1" } |
Ledenabled | Se o LED piscante deve ou não ser ativado para sinalizar uma porta desbloqueada. | 1 = ativado, 0 = desativado | { "ledEnabled": "1" } |
LedBrightness | O nível de brilho LED | 0 = OFF,…, 5 = Max | { "ledBrightness": "2" } |
TimeZoneoffset | O deslocamento do fuso horário (UTC) em minutos | Número inteiro entre 0 e 60 | { "timeZoneOffset": "0" } |
DSTMode | O modo de tempo de verão desejado. | 0 = desativado, 1 = europeu | { "dstMode": "0" } |
FOBACIONE1 | A ação desejada, se um fob nuki for pressionado uma vez. | "Sem ação", "desbloqueio", "Lock", "Lock n Go", "Inteligente" | { "fobAction1": "Lock n Go" } |
Fobaction2 | A ação desejada, se um fob nuki for pressionado duas vezes. | "Sem ação", "desbloqueio", "Lock", "Lock n Go", "Inteligente" | { "fobAction2": "Intelligent" } |
fobaction3 | A ação desejada, se um fob nuki for pressionado três vezes. | "Sem ação", "desbloqueio", "Lock", "Lock n Go", "Inteligente" | { "fobAction3": "Unlock" } |
Singlelock | Se apenas um bloqueio ou bloqueio duplo deve ser executado | 0 = bloqueio duplo, 1 = bloqueio único | { "singleLock": "0" } |
Publicidade | O modo de publicidade desejado. | "Automático", "Normal", "Slow", "Slowest" | { "advertisingMode": "Normal" } |
fuso horário | O fuso horário atual ou "nenhum" se os fusos horários não forem suportados | "Nenhum" ou um dos fusos horários dos fusos horários de Nuki | { "timeZone": "Europe/Berlin" } |
desbloqueioPpositionOffsetDegrees | Compensar isso que altera a posição desbloqueada em graus. | Número inteiro entre -90 e 180 | { "unlockedPositionOffsetDegrees": "-90" } |
LockedPositionOffSetDegrees | Compensar que altera a posição bloqueada em graus. | Número inteiro entre -180 e 90 | { "lockedPositionOffsetDegrees": "80" } |
SingleLockedPositionOffsetDegrees | Deslocamento que altera a única posição bloqueada em graus. | Número inteiro entre -180 e 180 | { "singleLockedPositionOffsetDegrees": "120" } |
desbloqueioTolockedTransitionOffsetDegrees | Compensar que altera a posição em que a transição de desbloqueada para trancada acontece em graus. | Número inteiro entre -180 e 180 | { "unlockedToLockedTransitionOffsetDegrees": "180" } |
LocknGotimeout | Tempo limite para Lock 'n' vai em segundos | Número inteiro entre 5 e 60 | { "lockNgoTimeout": "60" } |
SingleButtonPressAction | A ação desejada, se o botão for pressionado uma vez. | "Sem ação", "inteligente", "desbloqueio", "bloqueio", "destrancam", "bloquear n go", "status do show" | { "singleButtonPressAction": "Lock n Go" } |
DoubleButtonPressAction | A ação desejada, se o botão for pressionado duas vezes. | "Sem ação", "inteligente", "desbloqueio", "bloqueio", "destrancam", "bloquear n go", "status do show" | { "doubleButtonPressAction": "Show Status" } |
DestachedCylinder | Quando o lado interno do cilindro usado é destacado do lado externo. | 0 = não destacado, 1 = destacado | { "detachedCylinder": "1" } |
Tipo de Bateria | O tipo de baterias presentes no Smart Lock. | "Alkali", "Accumulators", "Lithium" | { "batteryType": "Accumulators" } |
AutomaticBatteryTypeteCeção | Se a detecção automática do tipo de bateria está ativada. | 1 = ativado, 0 = desativado | { "automaticBatteryTypeDetection": "Lock n Go" } |
UnatchDuration | Duração em segundos para segurar a trava na posição destacada. | Número inteiro entre 1 e 30 | { "unlatchDuration": "3" } |
AutolockTimeout | Segundos até que o Smart Lock se relacionasse depois de ser desbloqueado. | Número inteiro entre 30 e 1800 | { "autoLockTimeOut": "60" } |
AUTOUNLOCKDISABLED | Se o desbloqueio automático deve ser desativado em geral. | 1 = desbloqueio automático desativado, 0 = desbloqueio automático ativado | { "autoUnLockDisabled": "1" } |
pesadelado | Se o pesadelo está ativado. | 1 = ativado, 0 = desativado | { "nightModeEnabled": "1" } |
NightmodestartTime | Horário de início para pesadelo, se ativado. | Tempo no formato "HH: MM" | { "nightModeStartTime": "22:00" } |
NightmodeEndtime | Horário de término para pesadelo, se ativado. | Tempo no formato "HH: MM" | { "nightModeEndTime": "07:00" } |
NightmodeautolockEnabled | Se o bloqueio automático deve ser ativado durante o pesadelo. | 1 = ativado, 0 = desativado | { "nightModeAutoLockEnabled": "1" } |
NightmodeautounlockDisabled | Se o desbloqueio automático deve ser desativado durante o pesadelo. | 1 = desbloqueio automático desativado, 0 = desbloqueio automático ativado | { "nightModeAutoUnlockDisabled": "1" } |
NightmodeImediatelockOnStart | Se a porta deve ser trancada imediatamente no início do pesadelo. | 1 = ativado, 0 = desativado | { "nightModeImmediateLockOnStart": "1" } |
AutolockEnabled | Se o bloqueio automático está ativado. | 1 = ativado, 0 = desativado | { "autoLockEnabled": "1" } |
ImediatoautolockEnabled | Se o bloqueio automático deve ser realizado imediatamente após o fechamento da porta. | 1 = ativado, 0 = desativado | { "immediateAutoLockEnabled": "1" } |
AutoupDateEnabled | Se as atualizações automáticas de firmware devem ser ativadas. | 1 = ativado, 0 = desativado | { "autoUpdateEnabled": "1" } |
Rebootnuki | Reinicie o dispositivo Nuki imediatamente | 1 = reiniciar nuki | { "rebootNuki": "1" } |
Contexto | Uso | Valores possíveis | Exemplo |
---|---|---|---|
nome | O nome do abridor. | Corda alfanumérica, comprimento máximo 32 chars | { "name": "Frontdoor" } |
latitude | A latitude da geoposição de abridores. | Flutuador | { "latitude": "48.858093" } |
longitude | A longitude da geoposição de abridores | Flutuador | { "longitude": "2.294694" } |
EmparingEnabled | Se ativar ou não o modo de emparelhamento via botão deve ser ativado. | 1 = ativado, 0 = desativado | { "pairingEnabled": "0" } |
ButtonEnabled | Se o botão deve ou não ser ativado. | 1 = ativado, 0 = desativado | { "buttonEnabled": "1" } |
LedFlashenabled | Se o LED piscante deve ou não ser ativado para sinalizar CM ou RTO. | 1 = ativado, 0 = desativado | { "ledFlashEnabled": "1" } |
TimeZoneoffset | O deslocamento do fuso horário (UTC) em minutos | Número inteiro entre 0 e 60 | { "timeZoneOffset": "0" } |
DSTMode | O modo de tempo de verão desejado. | 0 = desativado, 1 = europeu | { "dstMode": "0" } |
FOBACIONE1 | A ação desejada, se um fob nuki for pressionado uma vez. | "Sem ação", "alternar RTO", "Ativar RTO", "Desativar RTO", "Open", "Ring" | { "fobAction1": "Toggle RTO" } |
Fobaction2 | A ação desejada, se um fob nuki for pressionado duas vezes. | "Sem ação", "alternar RTO", "Ativar RTO", "Desativar RTO", "Open", "Ring" | { "fobAction2": "Open" } |
fobaction3 | A ação desejada, se um fob nuki for pressionado três vezes. | "Sem ação", "alternar RTO", "Ativar RTO", "Desativar RTO", "Open", "Ring" | { "fobAction3": "Ring" } |
OperatingMode | O modo de operação desejado | "Abridor de portas genéricas", "Intercomão analógico", "Intercom digital", "Siedle", "TCS", "Bticino", "Siedle Hts", "Str", "Ritto", "Fermax", "Comelit", " Urmet Bibus "," Urmet 2voice "," Golmar "," Sks "," Spare " | { "operatingMode": "TCS" } |
Publicidade | O modo de publicidade desejado. | "Automático", "Normal", "Slow", "Slowest" | { "advertisingMode": "Normal" } |
fuso horário | O fuso horário atual ou "nenhum" se os fusos horários não forem suportados | "Nenhum" ou um dos fusos horários dos fusos horários de Nuki | { "timeZone": "Europe/Berlin" } |
Intercomid | ID do banco de dados do interfone conectado. | Inteiro | { "intercomID": "1" } |
BusModeswitch | Método para alternar entre dados e modo analógico | 0 = Nenhum, 1 = circuito de vshort | { "busModeSwitch": "0" } |
Shortcircuitduration | Duração do curto -circuito para troca de modo de barramento em MS. | Inteiro | { "shortCircuitDuration": "250" } |
Electrictrikedelay | Atraso no MS da ativação de ataque elétrico em caso de uma atuação de greve elétrica pela RTO | Número inteiro entre 0 e 30000 | { "electricStrikeDelay": "2080" } |
RandomEltricsTrikeday | Atraso aleatório (3-7s) para simular uma pessoa dentro de atuação da greve elétrica. | 1 = ativado, 0 = desativado | { "randomElectricStrikeDelay": "1" } |
Electrictrikeduration | Duração no MS da atuação da greve elétrica. . | Número inteiro entre 1000 e 30000 | { "electricStrikeDuration": "5000" } |
Desabramentofterring | Se deve desativar o RTO após o anel. | 1 = desativar o RTO após o anel, 0 = Não desative o RTO após o anel | { "disableRtoAfterRing": "0" } |
rtotimeout | Após esse período de tempo em minutos, a RTO fica desativada automaticamente | Número inteiro entre 5 e 60 | { "rtoTimeout": "60" } |
Porta de suposição | Se a campainha é suprimida quando anel, CM e/ou RTO estão ativos | "Off", "cm", "rto", "cm & rto", "ring", "cm & ring", "rto & ring", "cm & rto & ring" | { "doorbellSuppression": "CM & Ring" } |
DoorbellsuppressionDuration | Duração no MS da supressão da campainha. | Número inteiro entre 500 e 10000 | { "doorbellSuppressionDuration": "2000" } |
Soundring | O som do anel | "No Sound", "Sound 1", "Sound 2", "Sound 3" | { "soundRing": "No Sound" } |
SoundOpen | O som aberto. | "No Sound", "Sound 1", "Sound 2", "Sound 3" | { "soundOpen": "Sound 1" } |
Soundrto | O som RTO. | "No Sound", "Sound 1", "Sound 2", "Sound 3" | { "soundRto": "Sound 2" } |
Soundcm | O som cm. | "No Sound", "Sound 1", "Sound 2", "Sound 3" | { "soundCm": "Sound 3" } |
SOM CONFERRA | Confirmação de som | 0 = sem som, 1 = som | { "soundConfirmation": "1" } |
Soundlevel | O nível de som para o abridor | Número inteiro entre 0 e 255 | { "soundLevel": "200" } |
SingleButtonPressAction | A ação desejada, se o botão for pressionado uma vez. | "Sem ação", "alternar RTO", "Ativar RTO", "Desativar RTO", "Alternar CM", "Ativar CM", "DeActivate CM", "Open" | { "singleButtonPressAction": "Open" } |
DoubleButtonPressAction | A ação desejada, se o botão for pressionado duas vezes. | "Sem ação", "alternar RTO", "Ativar RTO", "Desativar RTO", "Alternar CM", "Ativar CM", "DeActivate CM", "Open" | { "doubleButtonPressAction": "No Action" } |
Tipo de Bateria | O tipo de baterias presentes no Smart Lock. | "Alkali", "Accumulators", "Lithium" | { "batteryType": "Accumulators" } |
AutomaticBatteryTypeteCeção | Se a detecção automática do tipo de bateria está ativada. | 1 = ativado, 0 = desativado | { "automaticBatteryTypeDetection": "1" } |
Rebootnuki | Reinicie o dispositivo Nuki imediatamente | 1 = reiniciar nuki | { "rebootNuki": "1" } |
Exemplo de uso para alterar várias configurações de uma só vez:
{ "buttonEnabled": "1", "lockngoTimeout": "60", "automaticBatteryTypeDetection": "1" }
{ "fobAction1": "Unlock", "fobAction2": "Intelligent", "nightModeImmediateLockOnStart": "1" }
O resultado da última ação de mudança de configuração será publicado no tópico MQTT configuration/commandResult
como dados JSON.
Os dados JSON incluirão um nó chamado "Geral" e um nó para cada configuração que o Nuki Hub detectou na ação.
Valores possíveis para o nó "geral" são "Notalidpinset", "Invalidjson", "InvalidConfig", "Sucesso" e "Nochange".
Valores possíveis para o nó por configuração são "inalterados", "novalueset", "invalidValue", "valueToolong", "accessdenied", "success", "falhou", "timeout", "funcionando", "não mais avançado", "erro" "e" indefinido "
Exemplo:
{"advertisingMode":"success","general":"success"}
Se a descoberta do assistente doméstico estiver ativada (consulte a seção de descoberta de assistência doméstica deste readme) o Nuki Hub criará entidades para quase todas as configurações acima.
Após a instalação inicial do firmware do Nuki Hub por meio de conexão serial, outras atualizações podem ser implantadas via atualização OTA de um navegador.
No portal de configuração, selecione "Atualização de firmware" na página principal.
A maneira mais fácil de atualizar o Nuki Hub, se o Nuki Hub estiver conectado à Internet, é selecionar "Atualizar para a versão mais recente".
Isso baixará os últimos Nuki Hub e o Nuki Hub Uppater e atualizará automaticamente os dois aplicativos.
O Nuki Hub reiniciará 3 vezes durante esse processo, que levará cerca de 5 minutos.
Se você ativou "Permitir atualização usando o MQTT", também pode usar o atualizador do Assistente de casa ou escrever "1" no tópico nukihub/maintanance/update
para iniciar o processo de atualização.
Alternativamente
Você só pode atualizar o Nuki Hub do Updater Nuki Hub e atualizar o atualizador apenas do Nuki Hub
Você pode reiniciar do Nuki Hub para o atualizador e vice -versa, selecionando a opção de reinicialização da página "Firware Atualize"
Quando você estiver no aplicativo correto, pode fazer o upload do novo binário clicando em "Browse" e selecione o novo "nuki_hub [placa] .bin" ou "nuki_hub_updater [placa] .bin" e selecione "file de upload".
Após cerca de um minuto, o novo firmware deve ser instalado após o que o ESP reiniciará automaticamente para o binário atualizado.
Selecionar o binário errado levará a uma atualização sem sucesso
Nota para os usuários Atualizando do Nuki Hub 8.35 ou inferior:
A atualização da versão 9.00 requer uma alteração na tabela de partição do ESP32.
Siga as instruções para a primeira vez que a instalação uma vez ao atualizar para o Nuki Hub 9.00 a partir de uma versão anterior.
Suas configurações não serão afetadas ao atualizar usando as instruções acima (não selecione Apagar o dispositivo ao atualizar usando o webflash).
A comunicação via MQTT pode ser criptografada SSL.
Para ativar a criptografia SSL, forneça as informações necessárias na página de configuração do MQTT.
As seguintes configurações são suportadas:
CA, CERT e KEY estão vazios -> Sem criptografia
CA está preenchido, mas cert e chave estão vazios -> MQTT criptografado
CA, CERT e KEY são preenchidos -> MQTT criptografado com o Cliente Vaildation
Exemplo de criação de certificado para o seu servidor 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
Este software suporta o MQTT Discovery para integrar o Nuki Hub ao Home Assistant.
Para ativar a descoberta automática, ative a caixa de seleção na página "Configuração MQTT".
Uma vez ativado, o bloqueio nuki e/ou as entidades relacionadas e relacionadas devem aparecer automaticamente em seus dispositivos MQTT de assistente doméstico.
O mapeamento a seguir entre os serviços de assistente doméstico e os comandos nuki é configurado ao ativar a descoberta automática:
Smartlock | Abridor (padrão) | Abridor (alternativo) | |
---|---|---|---|
Lock.lock | Trancar | Desativar anel para abrir | Desative o modo contínuo |
Lock.Unlock | Desbloquear | Ativar anel para abrir | Ativar modo contínuo |
bloqueio.open | Unida | Atuação de ataque elétrico | Atuação de ataque elétrico |
Nota: O MQTT Discovery usa mensagens MQTT retidas para armazenar configurações de dispositivos. Para evitar configurações de órfãos em seu corretor, desative a descoberta automática primeiro, se você não quiser mais usar este software. As mensagens retidas são automaticamente limpas ao não pare e ao alterar/desativar o tópico de descoberta automática na página de configuração do MQTT.
Nota2: Assistente doméstico pode ser configurado manualmente usando a integração de bloqueio MQTT, mas isso não é recomendado
Se um teclado estiver conectado ao bloqueio, os códigos do teclado poderão ser adicionados, atualizados e removidos. Isso deve ativar primeiro no portal de configuração. Verifique "Adicionar, modificar e excluir códigos de teclado" em "Configuração do nível de acesso" e salve a configuração.
As informações sobre os códigos do teclado atuais são publicadas como dados JSON para o tópico "Lock/Opener]/Keypad/JSON".
Isso precisa ser ativado separadamente, verificando "Publique informações de códigos de teclado" em "Configuração do nível de acesso" e salvando a configuração. Por razões de segurança, o código em si não é publicado, a menos que isso seja explicitamente ativado nas configurações do Nuki Hub. Por padrão, um máximo de 10 entradas é publicado.
Para alterar as configurações do teclado de bloqueio/abridor Nuki, defina o tópico [lock/opener]/keypad/actionJson
para um valor formatado JSON contendo os seguintes nós.
Nó | Excluir | Adicionar | Atualizar | Verificar | Uso | Valores possíveis |
---|---|---|---|---|---|---|
Ação | Obrigatório | Obrigatório | Obrigatório | Obrigatório | A ação para executar | "Delete", "Add", "Atualize", "Check" |
CodeID | Obrigatório | Não usado | Obrigatório | Obrigatório | O ID do código do código existente para excluir ou atualizar | Inteiro |
código | Não usado | Obrigatório | Opcional | Obrigatório | O código para criar ou atualizar | Inteiro de 6 dígitos sem zero, não posso começar com "12" |
habilitado | Não usado | Não usado | Opcional | Não usado | Ativar ou desativar o código, sempre ativado em adição | 1 = ativado, 0 = desativado |
nome | Não usado | Obrigatório | Opcional | Não usado | O nome do código para criar ou atualizar | String, max 20 chars |
Timelimitado | Não usado | Opcional | Opcional | Não usado | Se essa autorização estiver restrita ao acesso apenas em determinados momentos, requer ativado = 1 | 1 = ativado, 0 = desativado |
permitido de | Não usado | Opcional | Opcional | Não usado | O registro de data e hora inicial do qual o acesso deve ser permitido (requer ativado = 1 e timelimitado = 1) | "AAAA-MM-DD HH: MM: SS" |
permitido | Não usado | Opcional | Opcional | Não usado | O timestamp final até que o acesso deve ser permitido (requer ativado = 1 e timelimitado = 1) | "AAAA-MM-DD HH: MM: SS" |
PermitidoWeekdays | Não usado | Opcional | Opcional | Não usado | Dados da semana nos quais o acesso deve ser permitido (requer ativado = 1 e timelimitado = 1) | Array of Days: "Mon", "Tue", "Wed", "Thu", "Fri" "Sat", "Sun" |
permitido no tempo | Não usado | Opcional | Opcional | Não usado | O horário de início por dia a partir do qual o acesso deve ser permitido (requer ativado = 1 e timelimitado = 1) | "HH: MM" |
permitido aLTIME | Não usado | Opcional | Opcional | Não usado | O tempo de término por dia até que o acesso deve ser permitido (requer ativado = 1 e timelimitado = 1) | "HH: MM" |
Exemplos:
{ "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" }
O resultado da última ação de alteração do teclado será publicado no tópico [lock/opener]/configuration/commandResultJson
MQTT.
Possible values are "noValidPinSet", "keypadControlDisabled", "keypadNotAvailable", "keypadDisabled", "invalidConfig", "invalidJson", "noActionSet", "invalidAction", "noExistingCodeIdSet", "noNameSet", "noValidCodeSet", "noCodeSet" , "invalidouloudfrom", "invalidalloweduntil", "InvalidoulouledFromTime", "InvalidallowEduntilTime", "Sucesso", "Falha", "Timeout", "Trabalhando", "Nottaired", "Error" e "Undefined".
Se um teclado estiver conectado ao bloqueio, os códigos do teclado poderão ser adicionados, atualizados e removidos. Isso deve ativar primeiro no portal de configuração. Verifique "Adicionar, modificar e excluir códigos de teclado" em "Configuração do nível de acesso" e salve a configuração.
As informações sobre os códigos são publicadas em "Teclado/Code_X", x começando de 0 o número de códigos configurados. Isso precisa ser ativado separadamente, verificando "Publique informações de códigos de teclado" em "Configuração do nível de acesso" e salvando a configuração. Por padrão, um máximo de 10 entradas é publicado.
Por razões de segurança, o código em si não é publicado, a menos que isso seja explicitamente ativado nas configurações do Nuki Hub. Para modificar os códigos do teclado, uma estrutura de comando é configurada no teclado/comando:
Para modificar os códigos do teclado, os quatro primeiros nós de parâmetros devem ser definidos dependendo do comando:
** NOTA: As regras para códigos são:
Depois de definir os parâmetros necessários, escreva a ação a ser executada no nó de comando. Por exemplo, para adicionar um código:
As entradas do timeControl podem ser adicionadas, atualizadas e removidas. Isso deve ativar primeiro no portal de configuração. Verifique "Adicionar, modificar e excluir entradas do timecontrol" em "Configuração do nível de acesso" e salve a configuração.
As informações sobre as entradas atuais do TimeControl são publicadas como dados JSON para o tópico "Lock/Opener]/TimeControl/JSON" MQTT.
Isso precisa ser ativado separadamente, verificando "Publique informações de entradas de timeControl" em "Configuração do nível de acesso" e salvando a configuração. Por padrão, um máximo de 10 entradas é publicado.
Para alterar as configurações de bloqueio nuki/abridor Timecontrol Defina o tópico [lock/opener]/timecontrol/actionJson
para um valor formatado JSON contendo os seguintes nós.
Nó | Excluir | Adicionar | Atualizar | Uso | Valores possíveis |
---|---|---|---|---|---|
Ação | Obrigatório | Obrigatório | Obrigatório | A ação para executar | "Delete", "Add", "Atualize" |
entrada | Obrigatório | Não usado | Obrigatório | O ID de entrada da entrada existente para excluir ou atualizar | Inteiro |
habilitado | Não usado | Não usado | Opcional | Ativar ou desativar a entrada, sempre ativado em add | 1 = ativado, 0 = desativado |
dias de semana | Não usado | Opcional | Opcional | Dados da semana nos quais a ação de bloqueio escolhida deve ser excedida (requer habilitado = 1) | Array of Days: "Mon", "Tue", "Wed", "Thu", "Fri" "Sat", "Sun" |
tempo | Não usado | Obrigatório | Opcional | O tempo em que a ação de bloqueio escolhida deve ser executada (requer habilitado = 1) | "HH: MM" |
Lockaction | Não usado | Obrigatório | Opcional | A ação de bloqueio que deve ser executada nos dias da semana escolhida no horário escolhido (requer habilitado = 1) | Para o bloqueio nuki: "desbloquear", "bloquear", "desatlar", "bloquear", "Lockngounlatch", "Fulllock". Para o abridor de Nuki: "Activaterto", "DeActivaterto", "ElectricStrikeactuation", "Activatecm", "DeActivatecm |
Exemplos:
{ "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" }
As entradas de autorização podem ser atualizadas e removidas. Isso deve ativar primeiro no portal de configuração. Verifique "Modificar e excluir entradas de autorização" em "Configuração do nível de acesso" e salve a configuração. No momento, ainda não é possível adicionar entradas de autorização dessa maneira.
As informações sobre as entradas de autorização atuais são publicadas como dados JSON para o tópico "Lock/Opener]/Authorization/JSON" MQTT.
Isso precisa ser ativado separadamente, verificando "Publicar informações de entradas de autorização" em "Configuração do nível de acesso" e salvando a configuração. Por padrão, um máximo de 10 entradas é publicado.
Para alterar as configurações de autorização de bloqueio/abridor Nuki Defina o tópico [lock/opener]/authorization/action
para um valor formatado JSON contendo os seguintes nós.
Nó | Excluir | Adicionar | Atualizar | Uso | Valores possíveis |
---|---|---|---|---|---|
Ação | Obrigatório | Obrigatório | Obrigatório | A ação para executar | "Delete", "Add", "Atualize" |
autid | Obrigatório | Não usado | Obrigatório | O autenticação da entrada existente para excluir ou atualizar | Inteiro |
habilitado | Não usado | Não usado | Opcional | Ativar ou desativar a autorização, sempre habilitada em add | 1 = ativado, 0 = desativado |
nome | Não usado | Obrigatório | Opcional | O nome da autorização para criar ou atualizar | String, max 20 chars |
Remoteallowed | Não usado | Opcional | Opcional | Se esta autorização for permitida acesso remoto, requer ativado = 1 | 1 = ativado, 0 = desativado |
Timelimitado | Não usado | Opcional | Opcional | Se essa autorização estiver restrita ao acesso apenas em determinados momentos, requer ativado = 1 | 1 = ativado, 0 = desativado |
permitido de | Não usado | Opcional | Opcional | O registro de data e hora inicial do qual o acesso deve ser permitido (requer ativado = 1 e timelimitado = 1) | "AAAA-MM-DD HH: MM: SS" |
permitido | Não usado | Opcional | Opcional | O timestamp final até que o acesso deve ser permitido (requer ativado = 1 e timelimitado = 1) | "AAAA-MM-DD HH: MM: SS" |
PermitidoWeekdays | Não usado | Opcional | Opcional | Dados da semana nos quais o acesso deve ser permitido (requer ativado = 1 e timelimitado = 1) | Array of Days: "Mon", "Tue", "Wed", "Thu", "Fri" "Sat", "Sun" |
permitido no tempo | Não usado | Opcional | Opcional | O horário de início por dia a partir do qual o acesso deve ser permitido (requer ativado = 1 e timelimitado = 1) | "HH: MM" |
permitido aLTIME | Não usado | Opcional | Opcional | O tempo de término por dia até que o acesso deve ser permitido (requer ativado = 1 e timelimitado = 1) | "HH: MM" |
Exemplos:
{ "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" }
A trava pode ser controlada via GPIO. Para acionar as ações, uma conexão com o solo deve estar presente para o arrendamento de 300 ms (ou para +3,3V para "entrada geral (pull-down)").
Para ativar o controle GPIO, vá a página "Configuração do GPIO", onde cada gpio pode configurar para uma função específica:
Se você preferir se conectar ao via Ethernet em vez de Wi-Fi, você usa um dos módulos ESP32 suportados com Ethernet embutido (consulte a seção "Dispositivos suportados") ou conecte um módulo SPI Ethernet separado.
Atualmente, o módulo Wiznet W5X00 (W5100, W5200, W5500), DN9051 e KSZ8851SNL são suportados.
Para usar um módulo suportado, pisque o firmware, conecte-se via Wi-Fi e selecione o hardware de rede correto na seção "Configuração de rede".
Para conectar um módulo W5X00 externo ao ESP, use este esquema de fiação:
Agora conecte-se via Wi-Fi e altere o hardware de rede para "W5500 genérico".
Se o hardware Ethernet não for detectado ou inicializado corretamente após a alteração do dispositivo de rede, o Wi-Fi será usado como fallback.
Nota: Os módulos LAN8720 são suportados apenas nos ESP32 e ESP32-SOLO1, não no ESP32-S3, ESP32-C3 ou ESP-C6
Infelizmente, o ESP32 tem problemas com alguns pontos de acesso e a reconectando falhas.
Como solução alternativa, você pode navegar para "configuração de rede" e ativar "reiniciar na desconexão".
Isso reiniciará o ESP assim que for desconectado do Wi-Fi.
Além disso, isso reduz o tempo limite do portal de configuração para três minutos para impedir que o ESP seja preso no modo de configuração, caso um ponto de acesso esteja offline temporariamente.
Se isso ainda não consertar as desconexões e o ESP se tornar inacessível, a opção "reiniciar timer" pode ser usada como último recurso.
Ele reiniciará o ESP após um período de tempo configurado.
Primeiro, verifique se a versão de firmware do dispositivo Nuki está atualizada e as versões mais antigas têm problemas de emparelhamento.
Em seguida, tente apagar o Flash ESP32 e depois (re-) Flash o firmware.
Para apagar o flash, use a ferramenta de download do Espressif e clique no botão "EASE".
Posteriormente, pisque o firmware, conforme descrito no arquivo "Como fazer Flash.txt" ou usando o WebFlash.
Além disso, verifique se o emparelhamento é permitido. No aplicativo de smartphone nuki, vá para "Configurações" -> "Recursos e configuração" -> "Button & LED" e verifique se "emparelhamento bluetooh" está ativado.
Em seguida, pressione o botão por vários segundos até que a luz de LED permaneça iluminada.
Uma nota sobre a unidade M5Stack POESP32. Aqui, a recepção inicial do Bluetooth é muito ruim (variação menor de um metro). O motivo é que o módulo não possui uma antena na PCB, mas apenas um conector IPEX. Ao adaptar uma antena SMA externa (ipex ou outros nomes U.FL, IPAX, IPX, AMC, MHF, UMCC), Bluetooth/Wi-Fi funciona em vários metros.
Certifique -se de estar usando pelo menos a versão 2023.8.0 do Home Assistant.
Os desenvolvedores assistentes domésticos fizeram alterações no MQTT Auto Discovery, que quebra o suporte à versão mais antiga e o Nuki Hub adotou essas alterações.
Infelizmente, isso significa que as versões mais antigas do assistente doméstico não são mais suportadas pela implementação do Nuki Hub Discovery.
De acordo com Nuki, isso é por design e parte da especificação do Pro Lock.
Você pode usar o Wi-Fi interno ou uma ponte (que o Nuki Hub registra como).
Ou use hub nuki no modo híbrido usando wi-fi ou thread, consulte o modo híbrido
Usar os dois ao mesmo tempo não é suportado.
Alguma funcionalidade é restrita pelo firmware de bloqueio (ou abridor) e só é acessível quando o pino é fornecido.
Ao configurar o bloqueio (ou o abridor), você deve definir um pino no aplicativo de smartphone nuki.
Navegue até a página de credenciais do Nuki Hub, digite este pino e clique em Salvar.
Verifique a página principal do configurador para ver se o pino inserido é válido
Veja o ponto anterior, essa funcionalidade precisa do pino correto para ser configurado.
Verifique se a opção "Unlatch" está verificada em "Configuração do nível de acesso".
A destrancação pode ser acionada usando o serviço de bloqueio.open.
Como alternativa, um botão "Unlatch" é exposto através da descoberta do assistente doméstico.
Este botão está desativado por padrão, mas pode ser ativado na interface do usuário do Home Assistant.
Ao usar vários dispositivos nuki, diferentes caminhos para cada dispositivo precisam ser configurados.
Navegue até "Configuração MQTT" e altere o "caminho MQTT nukiHub" em "Configuração básica do MQTT" para pelo menos um dos dispositivos.
Isso geralmente é resultado de ativar o "registro como aplicativo" quando não usa o modo híbrido (coexistência oficial do MQTT / Nuki Hub).
Fazer isso fará com que o Nuki Hub consulte constantemente a trava e, como tal, cause o dreno excessivo da bateria.
Para impedir esse comportamento, o hub de nuki não emair, desativar "registrar-se como aplicativo" e re-par.
Nunca habilite "Registre -se como aplicativo", a menos que você pretenda usar uma ponte nuki, além do Nuki Hub ou você esteja usando o modo híbrido!
Docker (preferido)
Consulte o ReadMe no diretório do Docker para obter instruções sobre construção usando o Docker.
Plataforma IO, Instruções para Distro Linux baseado em Debian (por exemplo, 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
Este é um software de terceiros para dispositivos Nuki.
Este projeto ou qualquer um de seus autores não está associado à Nuki Home Solutions GmbH.
Consulte os produtos oficiais e o suporte ao site oficial da Nuki:
https://nuki.io/
Para obter mais detalhes da licença, verifique o arquivo de licença incluído.