diff --git a/NukiOpenerWrapper.cpp b/NukiOpenerWrapper.cpp index ee3a099..1aa6c8c 100644 --- a/NukiOpenerWrapper.cpp +++ b/NukiOpenerWrapper.cpp @@ -406,6 +406,31 @@ void NukiOpenerWrapper::updateConfig() _hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]); _network->publishConfig(_nukiConfig); _retryConfigCount = 0; + + const int pinStatus = _preferences->getInt(preference_opener_pin_status, 4); + + if(isPinSet()) { + Nuki::CmdResult result = _nukiOpener.verifySecurityPin(); + + if(result != Nuki::CmdResult::Success) + { + if(pinStatus != 2) { + _preferences->putInt(preference_opener_pin_status, 2); + } + } + else + { + if(pinStatus != 1) { + _preferences->putInt(preference_opener_pin_status, 1); + } + } + } + else + { + if(pinStatus != 0) { + _preferences->putInt(preference_opener_pin_status, 0); + } + } } else { diff --git a/NukiWrapper.cpp b/NukiWrapper.cpp index a53ec53..f0a7677 100644 --- a/NukiWrapper.cpp +++ b/NukiWrapper.cpp @@ -379,6 +379,31 @@ void NukiWrapper::updateConfig() _hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]); _network->publishConfig(_nukiConfig); _retryConfigCount = 0; + + const int pinStatus = _preferences->getInt(preference_lock_pin_status, 4); + + if(isPinSet()) { + Nuki::CmdResult result = _nukiLock.verifySecurityPin(); + + if(result != Nuki::CmdResult::Success) + { + if(pinStatus != 2) { + _preferences->putInt(preference_lock_pin_status, 2); + } + } + else + { + if(pinStatus != 1) { + _preferences->putInt(preference_lock_pin_status, 1); + } + } + } + else + { + if(pinStatus != 0) { + _preferences->putInt(preference_lock_pin_status, 0); + } + } } else { diff --git a/PreferencesKeys.h b/PreferencesKeys.h index 18edb41..7c57305 100644 --- a/PreferencesKeys.h +++ b/PreferencesKeys.h @@ -14,8 +14,10 @@ #define preference_mqtt_password "mqttpass" #define preference_mqtt_log_enabled "mqttlog" #define preference_lock_enabled "lockena" +#define preference_lock_pin_status "lockpin" #define preference_mqtt_lock_path "mqttpath" #define preference_opener_enabled "openerena" +#define preference_opener_pin_status "openerpin" #define preference_opener_continuous_mode "openercont" #define preference_mqtt_opener_path "mqttoppath" #define preference_check_updates "checkupdates" @@ -71,8 +73,8 @@ private: std::vector _keys = { preference_started_before, preference_config_version, preference_device_id_lock, preference_device_id_opener, preference_nuki_id_lock, preference_nuki_id_opener, preference_mqtt_broker, preference_mqtt_broker_port, preference_mqtt_user, preference_mqtt_password, preference_mqtt_log_enabled, preference_check_updates, - preference_lock_enabled, preference_mqtt_lock_path, preference_opener_enabled, preference_opener_continuous_mode, preference_mqtt_opener_path, - preference_lock_max_keypad_code_count, preference_opener_max_keypad_code_count, + preference_lock_enabled, preference_lock_pin_status, preference_mqtt_lock_path, preference_opener_enabled, preference_opener_pin_status, + preference_opener_continuous_mode, preference_mqtt_opener_path, preference_lock_max_keypad_code_count, preference_opener_max_keypad_code_count, preference_mqtt_ca, preference_mqtt_crt, preference_mqtt_key, preference_mqtt_hass_discovery, preference_mqtt_hass_cu_url, preference_ip_dhcp_enabled, preference_ip_address, preference_ip_subnet, preference_ip_gateway, preference_ip_dns_server, preference_network_hardware, preference_network_wifi_fallback_disabled, preference_rssi_publish_interval, diff --git a/WebCfgServer.cpp b/WebCfgServer.cpp index c7c5389..c39aadb 100644 --- a/WebCfgServer.cpp +++ b/WebCfgServer.cpp @@ -710,6 +710,25 @@ void WebCfgServer::buildHtml(String& response) NukiLock::lockstateToString(_nuki->keyTurnerState().lockState, lockstateArr); printParameter(response, "Nuki Lock paired", _nuki->isPaired() ? ("Yes (BLE Address " + _nuki->getBleAddress().toString() + ")").c_str() : "No"); printParameter(response, "Nuki Lock state", lockstateArr); + + if(_nuki->isPaired()) + { + switch(_preferences->getInt(preference_lock_pin_status, 4)) + { + case 0: + printParameter(response, "Nuki Lock PIN status", "PIN not set"); + break; + case 1: + printParameter(response, "Nuki Lock PIN status", "PIN valid"); + break; + case 2: + printParameter(response, "Nuki Lock PIN status", "PIN set but invalid"); + break; + default: + printParameter(response, "Nuki Lock PIN status", "Unknown"); + break; + } + } } if(_nukiOpener != nullptr) { @@ -725,7 +744,27 @@ void WebCfgServer::buildHtml(String& response) { printParameter(response, "Nuki Opener state", lockstateArr); } + + if(_nukiOpener->isPaired()) + { + switch(_preferences->getInt(preference_opener_pin_status, 4)) + { + case 0: + printParameter(response, "Nuki Opener PIN status", "PIN not set"); + break; + case 1: + printParameter(response, "Nuki Opener PIN status", "PIN valid"); + break; + case 2: + printParameter(response, "Nuki Opener PIN status", "PIN set but invalid"); + break; + default: + printParameter(response, "Nuki Opener PIN status", "Unknown"); + break; + } + } } + printParameter(response, "Firmware", version.c_str(), "/info"); if(_preferences->getBool(preference_check_updates))