NTP improvements
This commit is contained in:
@@ -279,6 +279,8 @@ In a browser navigate to the IP address assigned to the ESP32.
|
|||||||
- Opener: Nuki Bridge is running alongside Nuki Hub: Enable to allow Nuki Hub to co-exist with a Nuki Bridge by registering Nuki Hub as an (smartphone) app instead of a bridge. Changing this setting will require re-pairing. Enabling this setting is strongly discouraged as described in the "[Pairing with a Nuki Lock or Opener](#pairing-with-a-nuki-lock-or-opener)" section of this README
|
- Opener: Nuki Bridge is running alongside Nuki Hub: Enable to allow Nuki Hub to co-exist with a Nuki Bridge by registering Nuki Hub as an (smartphone) app instead of a bridge. Changing this setting will require re-pairing. Enabling this setting is strongly discouraged as described in the "[Pairing with a Nuki Lock or Opener](#pairing-with-a-nuki-lock-or-opener)" section of this README
|
||||||
- Restart if bluetooth beacons not received: Set to a positive integer to restart the Nuki Hub after the set amount of seconds has passed without receiving a bluetooth beacon from the Nuki device, set to -1 to disable, default 60. Because the bluetooth stack of the ESP32 can silently fail it is not recommended to disable this setting.
|
- Restart if bluetooth beacons not received: Set to a positive integer to restart the Nuki Hub after the set amount of seconds has passed without receiving a bluetooth beacon from the Nuki device, set to -1 to disable, default 60. Because the bluetooth stack of the ESP32 can silently fail it is not recommended to disable this setting.
|
||||||
- BLE transmit power in dB: Set to a integer between -12 and 9 to set the Bluetooth transmit power, default 9.
|
- BLE transmit power in dB: Set to a integer between -12 and 9 to set the Bluetooth transmit power, default 9.
|
||||||
|
- Update Nuki Hub and Lock/Opener time using NTP: Enable to update the ESP32 time and Nuki Lock and/or Nuki Opener time every 12 hours using a NTP time server
|
||||||
|
- NTP server: Set to the NTP server you want to use, defaults to "pool.ntp.org". If DHCP is used and NTP servers are provided using DHCP these will take precedence over the specified NTP server.
|
||||||
|
|
||||||
### Access Level Configuration
|
### Access Level Configuration
|
||||||
|
|
||||||
|
|||||||
@@ -118,4 +118,6 @@ CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=8
|
|||||||
CONFIG_ESP_WIFI_RX_BA_WIN=6
|
CONFIG_ESP_WIFI_RX_BA_WIN=6
|
||||||
CONFIG_ESP_WIFI_IRAM_OPT=n
|
CONFIG_ESP_WIFI_IRAM_OPT=n
|
||||||
CONFIG_ESP_WIFI_RX_IRAM_OPT=n
|
CONFIG_ESP_WIFI_RX_IRAM_OPT=n
|
||||||
CONFIG_MBEDTLS_DYNAMIC_BUFFER=y
|
CONFIG_MBEDTLS_DYNAMIC_BUFFER=y
|
||||||
|
CONFIG_LWIP_DHCP_GET_NTP_SRV=y
|
||||||
|
CONFIG_LWIP_SNTP_UPDATE_DELAY=43200000
|
||||||
@@ -72,6 +72,7 @@
|
|||||||
#define preference_connect_mode (char*)"nukiConnMode"
|
#define preference_connect_mode (char*)"nukiConnMode"
|
||||||
#define preference_http_auth_type (char*)"httpdAuthType"
|
#define preference_http_auth_type (char*)"httpdAuthType"
|
||||||
#define preference_update_time (char*)"updateTime"
|
#define preference_update_time (char*)"updateTime"
|
||||||
|
#define preference_time_server (char*)"timeServer"
|
||||||
#define preference_mqtt_ssl_enabled (char*)"mqttSSLena"
|
#define preference_mqtt_ssl_enabled (char*)"mqttSSLena"
|
||||||
#define preference_lock_gemini_pin (char*)"geminiPin"
|
#define preference_lock_gemini_pin (char*)"geminiPin"
|
||||||
#define preference_lock_gemini_enabled (char*)"geminiena"
|
#define preference_lock_gemini_enabled (char*)"geminiena"
|
||||||
@@ -116,6 +117,7 @@
|
|||||||
#define preference_network_timeout (char*)"nettmout"
|
#define preference_network_timeout (char*)"nettmout"
|
||||||
#define preference_restart_on_disconnect (char*)"restdisc"
|
#define preference_restart_on_disconnect (char*)"restdisc"
|
||||||
#define preference_publish_debug_info (char*)"pubdbg"
|
#define preference_publish_debug_info (char*)"pubdbg"
|
||||||
|
#define preference_enable_debug_mode (char*)"enadbg"
|
||||||
#define preference_official_hybrid_actions (char*)"hybridAct"
|
#define preference_official_hybrid_actions (char*)"hybridAct"
|
||||||
#define preference_official_hybrid_retry (char*)"hybridRtry"
|
#define preference_official_hybrid_retry (char*)"hybridRtry"
|
||||||
#define preference_keypad_check_code_enabled (char*)"kpChkEna"
|
#define preference_keypad_check_code_enabled (char*)"kpChkEna"
|
||||||
@@ -178,6 +180,7 @@ inline void initPreferences(Preferences* preferences)
|
|||||||
uint32_t advancedOpenerConfigAclPrefs[21] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
uint32_t advancedOpenerConfigAclPrefs[21] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
preferences->putBytes(preference_conf_opener_advanced_acl, (byte*)(&advancedOpenerConfigAclPrefs), sizeof(advancedOpenerConfigAclPrefs));
|
preferences->putBytes(preference_conf_opener_advanced_acl, (byte*)(&advancedOpenerConfigAclPrefs), sizeof(advancedOpenerConfigAclPrefs));
|
||||||
preferences->putString(preference_mqtt_lock_path, "nukihub");
|
preferences->putString(preference_mqtt_lock_path, "nukihub");
|
||||||
|
preferences->putString(preference_time_server, "pool.ntp.org");
|
||||||
|
|
||||||
preferences->putBool(preference_check_updates, true);
|
preferences->putBool(preference_check_updates, true);
|
||||||
preferences->putBool(preference_opener_continuous_mode, false);
|
preferences->putBool(preference_opener_continuous_mode, false);
|
||||||
@@ -232,6 +235,7 @@ inline void initPreferences(Preferences* preferences)
|
|||||||
preferences->putBool(preference_connect_mode, true);
|
preferences->putBool(preference_connect_mode, true);
|
||||||
preferences->putBool(preference_http_auth_type, false);
|
preferences->putBool(preference_http_auth_type, false);
|
||||||
preferences->putBool(preference_retain_gpio, false);
|
preferences->putBool(preference_retain_gpio, false);
|
||||||
|
preferences->putBool(preference_enable_debug_mode, false);
|
||||||
|
|
||||||
#ifndef CONFIG_IDF_TARGET_ESP32H2
|
#ifndef CONFIG_IDF_TARGET_ESP32H2
|
||||||
WiFi.begin();
|
WiFi.begin();
|
||||||
@@ -469,7 +473,7 @@ private:
|
|||||||
preference_started_before, preference_config_version, preference_device_id_lock, preference_device_id_opener, preference_nuki_id_lock, preference_nuki_id_opener,
|
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_mqtt_broker, preference_mqtt_broker_port, preference_mqtt_user, preference_mqtt_password, preference_mqtt_log_enabled, preference_check_updates,
|
||||||
preference_webserver_enabled, preference_lock_enabled, preference_lock_pin_status, preference_mqtt_lock_path, preference_opener_enabled, preference_opener_pin_status,
|
preference_webserver_enabled, preference_lock_enabled, preference_lock_pin_status, preference_mqtt_lock_path, preference_opener_enabled, preference_opener_pin_status,
|
||||||
preference_opener_continuous_mode, preference_lock_max_keypad_code_count, preference_opener_max_keypad_code_count, preference_update_time,
|
preference_opener_continuous_mode, preference_lock_max_keypad_code_count, preference_opener_max_keypad_code_count, preference_update_time, preference_time_server,
|
||||||
preference_lock_max_timecontrol_entry_count, preference_opener_max_timecontrol_entry_count, preference_enable_bootloop_reset, preference_mqtt_ca, preference_mqtt_crt,
|
preference_lock_max_timecontrol_entry_count, preference_opener_max_timecontrol_entry_count, preference_enable_bootloop_reset, preference_mqtt_ca, preference_mqtt_crt,
|
||||||
preference_mqtt_key, preference_mqtt_hass_discovery, preference_mqtt_hass_cu_url, preference_buffer_size, preference_ip_dhcp_enabled, preference_ip_address,
|
preference_mqtt_key, preference_mqtt_hass_discovery, preference_mqtt_hass_cu_url, preference_buffer_size, preference_ip_dhcp_enabled, preference_ip_address,
|
||||||
preference_ip_subnet, preference_ip_gateway, preference_ip_dns_server, preference_network_hardware, preference_http_auth_type, preference_lock_gemini_pin,
|
preference_ip_subnet, preference_ip_gateway, preference_ip_dns_server, preference_network_hardware, preference_http_auth_type, preference_lock_gemini_pin,
|
||||||
@@ -478,7 +482,7 @@ private:
|
|||||||
preference_query_interval_configuration, preference_query_interval_battery, preference_query_interval_keypad, preference_keypad_control_enabled,
|
preference_query_interval_configuration, preference_query_interval_battery, preference_query_interval_keypad, preference_keypad_control_enabled,
|
||||||
preference_keypad_info_enabled, preference_keypad_publish_code, preference_timecontrol_control_enabled, preference_timecontrol_info_enabled, preference_conf_info_enabled,
|
preference_keypad_info_enabled, preference_keypad_publish_code, preference_timecontrol_control_enabled, preference_timecontrol_info_enabled, preference_conf_info_enabled,
|
||||||
preference_register_as_app, preference_register_opener_as_app, preference_command_nr_of_retries, preference_command_retry_delay, preference_cred_user,
|
preference_register_as_app, preference_register_opener_as_app, preference_command_nr_of_retries, preference_command_retry_delay, preference_cred_user,
|
||||||
preference_cred_password, preference_disable_non_json, preference_publish_authdata, preference_publish_debug_info, preference_mqtt_ssl_enabled,
|
preference_cred_password, preference_disable_non_json, preference_publish_authdata, preference_publish_debug_info, preference_mqtt_ssl_enabled, preference_enable_debug_mode,
|
||||||
preference_official_hybrid_enabled, preference_query_interval_hybrid_lockstate, preference_official_hybrid_actions, preference_official_hybrid_retry,
|
preference_official_hybrid_enabled, preference_query_interval_hybrid_lockstate, preference_official_hybrid_actions, preference_official_hybrid_retry,
|
||||||
preference_task_size_network, preference_task_size_nuki, preference_authlog_max_entries, preference_keypad_max_entries, preference_timecontrol_max_entries,
|
preference_task_size_network, preference_task_size_nuki, preference_authlog_max_entries, preference_keypad_max_entries, preference_timecontrol_max_entries,
|
||||||
preference_update_from_mqtt, preference_show_secrets, preference_ble_tx_power, preference_webserial_enabled, preference_find_best_rssi, preference_lock_gemini_enabled,
|
preference_update_from_mqtt, preference_show_secrets, preference_ble_tx_power, preference_webserial_enabled, preference_find_best_rssi, preference_lock_gemini_enabled,
|
||||||
@@ -507,7 +511,7 @@ private:
|
|||||||
preference_ntw_reconfigure, preference_keypad_check_code_enabled, preference_disable_network_not_connected, preference_find_best_rssi, preference_http_auth_type,
|
preference_ntw_reconfigure, preference_keypad_check_code_enabled, preference_disable_network_not_connected, preference_find_best_rssi, preference_http_auth_type,
|
||||||
preference_debug_connect, preference_debug_communication, preference_debug_readable_data, preference_debug_hex_data, preference_debug_command, preference_connect_mode,
|
preference_debug_connect, preference_debug_communication, preference_debug_readable_data, preference_debug_hex_data, preference_debug_command, preference_connect_mode,
|
||||||
preference_lock_force_id, preference_lock_force_doorsensor, preference_lock_force_keypad, preference_opener_force_id, preference_opener_force_keypad, preference_mqtt_ssl_enabled,
|
preference_lock_force_id, preference_lock_force_doorsensor, preference_lock_force_keypad, preference_opener_force_id, preference_opener_force_keypad, preference_mqtt_ssl_enabled,
|
||||||
preference_hybrid_reboot_on_disconnect, preference_lock_gemini_enabled
|
preference_hybrid_reboot_on_disconnect, preference_lock_gemini_enabled, preference_enable_debug_mode
|
||||||
};
|
};
|
||||||
std::vector<char*> _bytePrefs =
|
std::vector<char*> _bytePrefs =
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -233,12 +233,12 @@ void WebCfgServer::initialize()
|
|||||||
}
|
}
|
||||||
else if (value == "debugon")
|
else if (value == "debugon")
|
||||||
{
|
{
|
||||||
_preferences->putBool(preference_publish_debug_info, true);
|
_preferences->putBool(preference_enable_debug_mode, true);
|
||||||
return buildConfirmHtml(request, resp, "Debug On", 3, true);
|
return buildConfirmHtml(request, resp, "Debug On", 3, true);
|
||||||
}
|
}
|
||||||
else if (value == "debugoff")
|
else if (value == "debugoff")
|
||||||
{
|
{
|
||||||
_preferences->putBool(preference_publish_debug_info, false);
|
_preferences->putBool(preference_enable_debug_mode, false);
|
||||||
return buildConfirmHtml(request, resp, "Debug Off", 3, true);
|
return buildConfirmHtml(request, resp, "Debug Off", 3, true);
|
||||||
}
|
}
|
||||||
else if (value == "export")
|
else if (value == "export")
|
||||||
@@ -1882,6 +1882,16 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
|||||||
configChanged = true;
|
configChanged = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(key == "TIMESRV")
|
||||||
|
{
|
||||||
|
if(_preferences->getString(preference_time_server, "pool.ntp.org") != value)
|
||||||
|
{
|
||||||
|
_preferences->putString(preference_time_server, value);
|
||||||
|
Log->print(("Setting changed: "));
|
||||||
|
Log->println(key);
|
||||||
|
configChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(key == "NWHW")
|
else if(key == "NWHW")
|
||||||
{
|
{
|
||||||
if(_preferences->getInt(preference_network_hardware, 0) != value.toInt())
|
if(_preferences->getInt(preference_network_hardware, 0) != value.toInt())
|
||||||
@@ -2547,6 +2557,16 @@ bool WebCfgServer::processArgs(PsychicRequest *request, PsychicResponse* resp, S
|
|||||||
configChanged = true;
|
configChanged = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(key == "DBGHEAP")
|
||||||
|
{
|
||||||
|
if(_preferences->getBool(preference_publish_debug_info, false) != (value == "1"))
|
||||||
|
{
|
||||||
|
_preferences->putBool(preference_publish_debug_info, (value == "1"));
|
||||||
|
Log->print(("Setting changed: "));
|
||||||
|
Log->println(key);
|
||||||
|
configChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(key == "DBGREAD")
|
else if(key == "DBGREAD")
|
||||||
{
|
{
|
||||||
if(_preferences->getBool(preference_debug_readable_data, false) != (value == "1"))
|
if(_preferences->getBool(preference_debug_readable_data, false) != (value == "1"))
|
||||||
@@ -3961,7 +3981,7 @@ esp_err_t WebCfgServer::buildHtml(PsychicRequest *request, PsychicResponse* resp
|
|||||||
{
|
{
|
||||||
buildNavigationMenuEntry(&response, "Custom Ethernet Configuration", "/get?page=custntw");
|
buildNavigationMenuEntry(&response, "Custom Ethernet Configuration", "/get?page=custntw");
|
||||||
}
|
}
|
||||||
if (_preferences->getBool(preference_publish_debug_info, false))
|
if (_preferences->getBool(preference_enable_debug_mode, false))
|
||||||
{
|
{
|
||||||
buildNavigationMenuEntry(&response, "Advanced Configuration", "/get?page=advanced");
|
buildNavigationMenuEntry(&response, "Advanced Configuration", "/get?page=advanced");
|
||||||
}
|
}
|
||||||
@@ -4431,6 +4451,7 @@ esp_err_t WebCfgServer::buildAdvancedConfigHtml(PsychicRequest *request, Psychic
|
|||||||
printCheckBox(&response, "DBGREAD", "Enable Nuki readable data debug logging", _preferences->getBool(preference_debug_readable_data, false), "");
|
printCheckBox(&response, "DBGREAD", "Enable Nuki readable data debug logging", _preferences->getBool(preference_debug_readable_data, false), "");
|
||||||
printCheckBox(&response, "DBGHEX", "Enable Nuki hex data debug logging", _preferences->getBool(preference_debug_hex_data, false), "");
|
printCheckBox(&response, "DBGHEX", "Enable Nuki hex data debug logging", _preferences->getBool(preference_debug_hex_data, false), "");
|
||||||
printCheckBox(&response, "DBGCOMM", "Enable Nuki command debug logging", _preferences->getBool(preference_debug_command, false), "");
|
printCheckBox(&response, "DBGCOMM", "Enable Nuki command debug logging", _preferences->getBool(preference_debug_command, false), "");
|
||||||
|
printCheckBox(&response, "DBGHEAP", "Pubish free heap over MQTT", _preferences->getBool(preference_publish_debug_info, false), "");
|
||||||
response.print("</table>");
|
response.print("</table>");
|
||||||
|
|
||||||
response.print("<br><input type=\"submit\" name=\"submit\" value=\"Save\">");
|
response.print("<br><input type=\"submit\" name=\"submit\" value=\"Save\">");
|
||||||
@@ -4781,6 +4802,8 @@ esp_err_t WebCfgServer::buildNukiConfigHtml(PsychicRequest *request, PsychicResp
|
|||||||
printInputField(&response, "RSBC", "Restart if bluetooth beacons not received (seconds; -1 to disable)", _preferences->getInt(preference_restart_ble_beacon_lost), 10, "");
|
printInputField(&response, "RSBC", "Restart if bluetooth beacons not received (seconds; -1 to disable)", _preferences->getInt(preference_restart_ble_beacon_lost), 10, "");
|
||||||
printInputField(&response, "TXPWR", "BLE transmit power in dB (minimum -12, maximum 9)", _preferences->getInt(preference_ble_tx_power, 9), 10, "");
|
printInputField(&response, "TXPWR", "BLE transmit power in dB (minimum -12, maximum 9)", _preferences->getInt(preference_ble_tx_power, 9), 10, "");
|
||||||
printCheckBox(&response, "UPTIME", "Update Nuki Hub and Lock/Opener time using NTP", _preferences->getBool(preference_update_time, false), "");
|
printCheckBox(&response, "UPTIME", "Update Nuki Hub and Lock/Opener time using NTP", _preferences->getBool(preference_update_time, false), "");
|
||||||
|
printInputField(&response, "TIMESRV", "NTP server", _preferences->getString(preference_time_server, "pool.ntp.org").c_str(), 255, "");
|
||||||
|
|
||||||
response.print("</table>");
|
response.print("</table>");
|
||||||
response.print("<br><input type=\"submit\" name=\"submit\" value=\"Save\">");
|
response.print("<br><input type=\"submit\" name=\"submit\" value=\"Save\">");
|
||||||
response.print("</form>");
|
response.print("</form>");
|
||||||
@@ -4967,7 +4990,9 @@ esp_err_t WebCfgServer::buildInfoHtml(PsychicRequest *request, PsychicResponse*
|
|||||||
#else
|
#else
|
||||||
response.print("Disabled");
|
response.print("Disabled");
|
||||||
#endif
|
#endif
|
||||||
response.print("\nPublish debug information enabled: ");
|
response.print("\nAdvanced menu enabled: ");
|
||||||
|
response.print(_preferences->getBool(preference_enable_debug_mode, false) ? "Yes" : "No");
|
||||||
|
response.print("\nPublish free heap over MQTT: ");
|
||||||
response.print(_preferences->getBool(preference_publish_debug_info, false) ? "Yes" : "No");
|
response.print(_preferences->getBool(preference_publish_debug_info, false) ? "Yes" : "No");
|
||||||
response.print("\nNuki connect debug logging enabled: ");
|
response.print("\nNuki connect debug logging enabled: ");
|
||||||
response.print(_preferences->getBool(preference_debug_connect, false) ? "Yes" : "No");
|
response.print(_preferences->getBool(preference_debug_connect, false) ? "Yes" : "No");
|
||||||
|
|||||||
22
src/main.cpp
22
src/main.cpp
@@ -29,8 +29,7 @@
|
|||||||
#include "RestartReason.h"
|
#include "RestartReason.h"
|
||||||
#include "EspMillis.h"
|
#include "EspMillis.h"
|
||||||
#include "NimBLEDevice.h"
|
#include "NimBLEDevice.h"
|
||||||
#include <time.h>
|
#include "esp_netif_sntp.h"
|
||||||
#include "esp_sntp.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#ifdef DEBUG_NUKIHUB
|
#ifdef DEBUG_NUKIHUB
|
||||||
@@ -827,9 +826,22 @@ void setup()
|
|||||||
|
|
||||||
if(preferences->getBool(preference_update_time, false))
|
if(preferences->getBool(preference_update_time, false))
|
||||||
{
|
{
|
||||||
sntp_set_sync_interval(12 * 60 * 60 * 1000UL);
|
esp_sntp_config_t config = ESP_NETIF_SNTP_DEFAULT_CONFIG(preferences->getString(preference_time_server, "pool.ntp.org").c_str());
|
||||||
sntp_set_time_sync_notification_cb(cbSyncTime);
|
config.start = false;
|
||||||
configTime(0, 0, "pool.ntp.org");
|
config.server_from_dhcp = true;
|
||||||
|
config.renew_servers_after_new_IP = true;
|
||||||
|
config.index_of_first_server = 1;
|
||||||
|
|
||||||
|
if (network->networkDeviceType() == NetworkDeviceType::WiFi)
|
||||||
|
{
|
||||||
|
config.ip_event_to_renew = IP_EVENT_STA_GOT_IP;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
config.ip_event_to_renew = IP_EVENT_ETH_GOT_IP;
|
||||||
|
}
|
||||||
|
config.sync_cb = cbSyncTime;
|
||||||
|
esp_netif_sntp_init(&config);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user