Nuki ID + README + ACL fix
This commit is contained in:
@@ -314,6 +314,7 @@ void NukiOpenerWrapper::unpair()
|
|||||||
{
|
{
|
||||||
_nukiOpener.unPairNuki();
|
_nukiOpener.unPairNuki();
|
||||||
_deviceId->assignNewId();
|
_deviceId->assignNewId();
|
||||||
|
_preferences->remove(preference_nuki_id_opener);
|
||||||
_paired = false;
|
_paired = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,8 +356,8 @@ void NukiOpenerWrapper::updateKeyTurnerState()
|
|||||||
{
|
{
|
||||||
Log->println(F("Nuki opener: Ring detected (Open)"));
|
Log->println(F("Nuki opener: Ring detected (Open)"));
|
||||||
_network->publishRing(false);
|
_network->publishRing(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
_network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState);
|
_network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState);
|
||||||
updateGpioOutputs();
|
updateGpioOutputs();
|
||||||
|
|
||||||
@@ -399,11 +400,19 @@ void NukiOpenerWrapper::updateConfig()
|
|||||||
|
|
||||||
if(_nukiConfigValid)
|
if(_nukiConfigValid)
|
||||||
{
|
{
|
||||||
_firmwareVersion = std::to_string(_nukiConfig.firmwareVersion[0]) + "." + std::to_string(_nukiConfig.firmwareVersion[1]) + "." + std::to_string(_nukiConfig.firmwareVersion[2]);
|
if(_preferences->getUInt(preference_nuki_id_opener, 0) == 0)
|
||||||
_hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]);
|
{
|
||||||
_network->publishConfig(_nukiConfig);
|
_preferences->putUInt(preference_nuki_id_opener, _nukiConfig.nukiId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(_preferences->getUInt(preference_nuki_id_opener, 0) == _nukiConfig.nukiId)
|
||||||
|
{
|
||||||
|
_firmwareVersion = std::to_string(_nukiConfig.firmwareVersion[0]) + "." + std::to_string(_nukiConfig.firmwareVersion[1]) + "." + std::to_string(_nukiConfig.firmwareVersion[2]);
|
||||||
|
_hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]);
|
||||||
|
_network->publishConfig(_nukiConfig);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(_nukiAdvancedConfigValid)
|
if(_nukiAdvancedConfigValid && _preferences->getUInt(preference_nuki_id_opener, 0) == _nukiConfig.nukiId)
|
||||||
{
|
{
|
||||||
_network->publishAdvancedConfig(_nukiAdvancedConfig);
|
_network->publishAdvancedConfig(_nukiAdvancedConfig);
|
||||||
}
|
}
|
||||||
@@ -442,7 +451,7 @@ void NukiOpenerWrapper::updateAuthData()
|
|||||||
void NukiOpenerWrapper::updateKeypad()
|
void NukiOpenerWrapper::updateKeypad()
|
||||||
{
|
{
|
||||||
if(_preferences->getBool(preference_keypad_info_enabled)) return;
|
if(_preferences->getBool(preference_keypad_info_enabled)) return;
|
||||||
|
|
||||||
Log->print(F("Querying opener keypad: "));
|
Log->print(F("Querying opener keypad: "));
|
||||||
Nuki::CmdResult result = _nukiOpener.retrieveKeypadEntries(0, 0xffff);
|
Nuki::CmdResult result = _nukiOpener.retrieveKeypadEntries(0, 0xffff);
|
||||||
printCommandResult(result);
|
printCommandResult(result);
|
||||||
@@ -498,12 +507,12 @@ LockActionResult NukiOpenerWrapper::onLockActionReceivedCallback(const char *val
|
|||||||
{
|
{
|
||||||
return LockActionResult::UnknownAction;
|
return LockActionResult::UnknownAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
nukiOpenerPreferences = new Preferences();
|
nukiOpenerPreferences = new Preferences();
|
||||||
nukiOpenerPreferences->begin("nukihub", true);
|
nukiOpenerPreferences->begin("nukihub", true);
|
||||||
uint32_t aclPrefs[17];
|
uint32_t aclPrefs[17];
|
||||||
nukiOpenerPreferences->getBytes(preference_acl, &aclPrefs, sizeof(aclPrefs));
|
nukiOpenerPreferences->getBytes(preference_acl, &aclPrefs, sizeof(aclPrefs));
|
||||||
|
|
||||||
if((action == NukiOpener::LockAction::ActivateRTO && (int)aclPrefs[9] == 1) || (action == NukiOpener::LockAction::DeactivateRTO && (int)aclPrefs[10] == 1) || (action == NukiOpener::LockAction::ElectricStrikeActuation && (int)aclPrefs[11] == 1) || (action == NukiOpener::LockAction::ActivateCM && (int)aclPrefs[12] == 1) || (action == NukiOpener::LockAction::DeactivateCM && (int)aclPrefs[13] == 1) || (action == NukiOpener::LockAction::FobAction1 && (int)aclPrefs[14] == 1) || (action == NukiOpener::LockAction::FobAction2 && (int)aclPrefs[15] == 1) || (action == NukiOpener::LockAction::FobAction3 && (int)aclPrefs[16] == 1))
|
if((action == NukiOpener::LockAction::ActivateRTO && (int)aclPrefs[9] == 1) || (action == NukiOpener::LockAction::DeactivateRTO && (int)aclPrefs[10] == 1) || (action == NukiOpener::LockAction::ElectricStrikeActuation && (int)aclPrefs[11] == 1) || (action == NukiOpener::LockAction::ActivateCM && (int)aclPrefs[12] == 1) || (action == NukiOpener::LockAction::DeactivateCM && (int)aclPrefs[13] == 1) || (action == NukiOpener::LockAction::FobAction1 && (int)aclPrefs[14] == 1) || (action == NukiOpener::LockAction::FobAction2 && (int)aclPrefs[15] == 1) || (action == NukiOpener::LockAction::FobAction3 && (int)aclPrefs[16] == 1))
|
||||||
{
|
{
|
||||||
nukiOpenerPreferences->end();
|
nukiOpenerPreferences->end();
|
||||||
@@ -752,6 +761,7 @@ void NukiOpenerWrapper::readAdvancedConfig()
|
|||||||
void NukiOpenerWrapper::setupHASS()
|
void NukiOpenerWrapper::setupHASS()
|
||||||
{
|
{
|
||||||
if(!_nukiConfigValid) return;
|
if(!_nukiConfigValid) return;
|
||||||
|
if(_preferences->getUInt(preference_nuki_id_opener, 0) != _nukiConfig.nukiId) return;
|
||||||
|
|
||||||
String baseTopic = _preferences->getString(preference_mqtt_opener_path);
|
String baseTopic = _preferences->getString(preference_mqtt_opener_path);
|
||||||
char uidString[20];
|
char uidString[20];
|
||||||
|
|||||||
@@ -303,6 +303,7 @@ void NukiWrapper::unpair()
|
|||||||
{
|
{
|
||||||
_nukiLock.unPairNuki();
|
_nukiLock.unPairNuki();
|
||||||
_deviceId->assignNewId();
|
_deviceId->assignNewId();
|
||||||
|
_preferences->remove(preference_nuki_id_lock);
|
||||||
_paired = false;
|
_paired = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -364,11 +365,19 @@ void NukiWrapper::updateConfig()
|
|||||||
_hasKeypad = _nukiConfig.hasKeypad > 0 || _nukiConfig.hasKeypadV2;
|
_hasKeypad = _nukiConfig.hasKeypad > 0 || _nukiConfig.hasKeypadV2;
|
||||||
if(_nukiConfigValid)
|
if(_nukiConfigValid)
|
||||||
{
|
{
|
||||||
_firmwareVersion = std::to_string(_nukiConfig.firmwareVersion[0]) + "." + std::to_string(_nukiConfig.firmwareVersion[1]) + "." + std::to_string(_nukiConfig.firmwareVersion[2]);
|
if(_preferences->getUInt(preference_nuki_id_lock, 0) == 0)
|
||||||
_hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]);
|
{
|
||||||
_network->publishConfig(_nukiConfig);
|
_preferences->putUInt(preference_nuki_id_lock, _nukiConfig.nukiId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(_preferences->getUInt(preference_nuki_id_lock, 0) == _nukiConfig.nukiId)
|
||||||
|
{
|
||||||
|
_firmwareVersion = std::to_string(_nukiConfig.firmwareVersion[0]) + "." + std::to_string(_nukiConfig.firmwareVersion[1]) + "." + std::to_string(_nukiConfig.firmwareVersion[2]);
|
||||||
|
_hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]);
|
||||||
|
_network->publishConfig(_nukiConfig);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(_nukiAdvancedConfigValid)
|
if(_nukiAdvancedConfigValid && _preferences->getUInt(preference_nuki_id_lock, 0) == _nukiConfig.nukiId)
|
||||||
{
|
{
|
||||||
_network->publishAdvancedConfig(_nukiAdvancedConfig);
|
_network->publishAdvancedConfig(_nukiAdvancedConfig);
|
||||||
}
|
}
|
||||||
@@ -560,13 +569,6 @@ void NukiWrapper::onConfigUpdateReceived(const char *topic, const char *value)
|
|||||||
_nukiLock.enableAutoLock(newValue);
|
_nukiLock.enableAutoLock(newValue);
|
||||||
_nextConfigUpdateTs = millis() + 300;
|
_nextConfigUpdateTs = millis() + 300;
|
||||||
}
|
}
|
||||||
else if(strcmp(topic, mqtt_topic_config_auto_lock) == 0)
|
|
||||||
{
|
|
||||||
bool newValue = atoi(value) > 0;
|
|
||||||
if(!_nukiAdvancedConfigValid || _nukiAdvancedConfig.autoLockEnabled == newValue) return;
|
|
||||||
_nukiLock.enableAutoLock(newValue);
|
|
||||||
_nextConfigUpdateTs = millis() + 300;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NukiWrapper::onKeypadCommandReceived(const char *command, const uint &id, const String &name, const String &code, const int& enabled)
|
void NukiWrapper::onKeypadCommandReceived(const char *command, const uint &id, const String &name, const String &code, const int& enabled)
|
||||||
@@ -732,6 +734,7 @@ void NukiWrapper::readAdvancedConfig()
|
|||||||
void NukiWrapper::setupHASS()
|
void NukiWrapper::setupHASS()
|
||||||
{
|
{
|
||||||
if(!_nukiConfigValid) return;
|
if(!_nukiConfigValid) return;
|
||||||
|
if(_preferences->getUInt(preference_nuki_id_lock, 0) != _nukiConfig.nukiId) return;
|
||||||
|
|
||||||
String baseTopic = _preferences->getString(preference_mqtt_lock_path);
|
String baseTopic = _preferences->getString(preference_mqtt_lock_path);
|
||||||
char uidString[20];
|
char uidString[20];
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
#define preference_config_version "confVersion"
|
#define preference_config_version "confVersion"
|
||||||
#define preference_device_id_lock "deviceId"
|
#define preference_device_id_lock "deviceId"
|
||||||
#define preference_device_id_opener "deviceIdOp"
|
#define preference_device_id_opener "deviceIdOp"
|
||||||
|
#define preference_nuki_id_lock "nukiId"
|
||||||
|
#define preference_nuki_id_opener "nukidOp"
|
||||||
#define preference_mqtt_broker "mqttbroker"
|
#define preference_mqtt_broker "mqttbroker"
|
||||||
#define preference_mqtt_broker_port "mqttport"
|
#define preference_mqtt_broker_port "mqttport"
|
||||||
#define preference_mqtt_user "mqttuser"
|
#define preference_mqtt_user "mqttuser"
|
||||||
@@ -68,9 +70,8 @@ class DebugPreferences
|
|||||||
private:
|
private:
|
||||||
std::vector<char*> _keys =
|
std::vector<char*> _keys =
|
||||||
{
|
{
|
||||||
preference_started_before, preference_config_version, preference_device_id_lock, preference_device_id_opener, preference_mqtt_broker,
|
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_port, preference_mqtt_user, preference_mqtt_password, preference_mqtt_log_enabled, preference_check_updates, preference_lock_enabled,
|
preference_lock_enabled, preference_mqtt_lock_path, preference_opener_enabled, preference_opener_continuous_mode, preference_mqtt_opener_path,
|
||||||
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_mqtt_ca,
|
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_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_ip_dhcp_enabled, preference_ip_address, preference_ip_subnet, preference_ip_gateway, preference_ip_dns_server,
|
||||||
|
|||||||
@@ -15,7 +15,9 @@ Feel free to join us on Discord: https://discord.gg/feB9FnMY
|
|||||||
## Supported devices
|
## Supported devices
|
||||||
|
|
||||||
<b>Supported ESP32 devices:</b>
|
<b>Supported ESP32 devices:</b>
|
||||||
- Any dual-core ESP32, except the ESP32-S3 (because of compilation issues)
|
- All dual-core ESP32 models with WIFI and BLE which are supported by Arduino Core 2.0.14 should work, but builds are currently only provided for the ESP32 and not for the ESP32-S3 or ESP32-C3.
|
||||||
|
- The ESP32-S2 has no BLE and as such can't run Nuki Hub.
|
||||||
|
- The ESP32-C6 and ESP32-H2 are not supported by Arduino Core 2.0.14 as such can't run Nuki Hub (at this time).
|
||||||
|
|
||||||
<b>Supported Nuki devices:</b>
|
<b>Supported Nuki devices:</b>
|
||||||
- Nuki Smart Lock 1.0
|
- Nuki Smart Lock 1.0
|
||||||
|
|||||||
4
main.cpp
4
main.cpp
@@ -146,6 +146,10 @@ bool initPreferences()
|
|||||||
{
|
{
|
||||||
preferences->putBool(preference_started_before, true);
|
preferences->putBool(preference_started_before, true);
|
||||||
preferences->putBool(preference_lock_enabled, true);
|
preferences->putBool(preference_lock_enabled, true);
|
||||||
|
preferences->putBool(preference_admin_enabled, true);
|
||||||
|
|
||||||
|
uint32_t aclPrefs[17] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
|
||||||
|
preferences->putBytes(preference_acl, (byte*)(&aclPrefs), sizeof(aclPrefs));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user