Add Ultra

This commit is contained in:
iranl
2025-01-14 18:25:46 +01:00
parent 49f6e5db06
commit 7cb31f8c22
14 changed files with 377 additions and 146 deletions

View File

@@ -60,7 +60,7 @@ void NukiWrapper::initialize()
_nukiLock.setDebugCommand(_preferences->getBool(preference_debug_command, false));
_nukiLock.registerLogger(Log);
if (_preferences->getInt(preference_lock_gemini_pin, 0) > 0)
if (_preferences->getInt(preference_lock_gemini_pin, 0) > 0 && _preferences->getBool(preference_lock_gemini_enabled, false))
{
_nukiLock.saveUltraPincode(_preferences->getInt(preference_lock_gemini_pin, 0), false);
}
@@ -135,6 +135,7 @@ void NukiWrapper::readSettings()
_forceDoorsensor = _preferences->getBool(preference_lock_force_doorsensor, false);
_forceKeypad = _preferences->getBool(preference_lock_force_keypad, false);
_forceId = _preferences->getBool(preference_lock_force_id, false);
_isUltra = _preferences->getBool(preference_lock_gemini_enabled, false);
_preferences->getBytes(preference_conf_lock_basic_acl, &_basicLockConfigaclPrefs, sizeof(_basicLockConfigaclPrefs));
_preferences->getBytes(preference_conf_lock_advanced_acl, &_advancedLockConfigaclPrefs, sizeof(_advancedLockConfigaclPrefs));
@@ -428,7 +429,14 @@ void NukiWrapper::lockngounlatch()
bool NukiWrapper::isPinSet()
{
return _nukiLock.getSecurityPincode() != 0;
if (_isUltra)
{
return _nukiLock.getUltraPincode() != 0;
}
else
{
return _nukiLock.getSecurityPincode() != 0;
}
}
bool NukiWrapper::isPinValid()
@@ -441,11 +449,21 @@ void NukiWrapper::setPin(const uint16_t pin)
_nukiLock.saveSecurityPincode(pin);
}
void NukiWrapper::setUltraPin(const uint32_t pin)
{
_nukiLock.saveUltraPincode(pin);
}
uint16_t NukiWrapper::getPin()
{
return _nukiLock.getSecurityPincode();
}
uint32_t NukiWrapper::getUltraPin()
{
return _nukiLock.getUltraPincode();
}
void NukiWrapper::unpair()
{
_nukiLock.unPairNuki();
@@ -1422,6 +1440,23 @@ Nuki::BatteryType NukiWrapper::batteryTypeToEnum(const char* str)
return (Nuki::BatteryType)0xff;
}
NukiLock::MotorSpeed NukiWrapper::motorSpeedToEnum(const char* str)
{
if(strcmp(str, "Standard") == 0)
{
return NukiLock::MotorSpeed::Standard;
}
else if(strcmp(str, "Insane") == 0)
{
return NukiLock::MotorSpeed::Insane;
}
else if(strcmp(str, "Gentle") == 0)
{
return NukiLock::MotorSpeed::Gentle;
}
return (NukiLock::MotorSpeed)0xff;
}
void NukiWrapper::onOfficialUpdateReceived(const char *topic, const char *value)
{
_nukiOfficial->onOfficialUpdateReceived(topic, value);
@@ -1465,7 +1500,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
Nuki::CmdResult cmdResult;
const char *basicKeys[16] = {"name", "latitude", "longitude", "autoUnlatch", "pairingEnabled", "buttonEnabled", "ledEnabled", "ledBrightness", "timeZoneOffset", "dstMode", "fobAction1", "fobAction2", "fobAction3", "singleLock", "advertisingMode", "timeZone"};
const char *advancedKeys[23] = {"unlockedPositionOffsetDegrees", "lockedPositionOffsetDegrees", "singleLockedPositionOffsetDegrees", "unlockedToLockedTransitionOffsetDegrees", "lockNgoTimeout", "singleButtonPressAction", "doubleButtonPressAction", "detachedCylinder", "batteryType", "automaticBatteryTypeDetection", "unlatchDuration", "autoLockTimeOut", "autoUnLockDisabled", "nightModeEnabled", "nightModeStartTime", "nightModeEndTime", "nightModeAutoLockEnabled", "nightModeAutoUnlockDisabled", "nightModeImmediateLockOnStart", "autoLockEnabled", "immediateAutoLockEnabled", "autoUpdateEnabled", "rebootNuki"};
const char *advancedKeys[25] = {"unlockedPositionOffsetDegrees", "lockedPositionOffsetDegrees", "singleLockedPositionOffsetDegrees", "unlockedToLockedTransitionOffsetDegrees", "lockNgoTimeout", "singleButtonPressAction", "doubleButtonPressAction", "detachedCylinder", "batteryType", "automaticBatteryTypeDetection", "unlatchDuration", "autoLockTimeOut", "autoUnLockDisabled", "nightModeEnabled", "nightModeStartTime", "nightModeEndTime", "nightModeAutoLockEnabled", "nightModeAutoUnlockDisabled", "nightModeImmediateLockOnStart", "autoLockEnabled", "immediateAutoLockEnabled", "autoUpdateEnabled", "rebootNuki", "motorSpeed", "enableSlowSpeedDuringNightMode"};
bool basicUpdated = false;
bool advancedUpdated = false;
@@ -1857,7 +1892,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
}
}
for(int j=0; j < 23; j++)
for(int j=0; j < 25; j++)
{
if(json[advancedKeys[j]].is<JsonVariantConst>())
{
@@ -2354,6 +2389,46 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
jsonResult[advancedKeys[j]] = "invalidValue";
}
}
else if(strcmp(advancedKeys[j], "motorSpeed") == 0)
{
NukiLock::MotorSpeed motorSpeed = nukiInst->motorSpeedToEnum(jsonchar);
if((int)motorSpeed != 0xff)
{
if(_nukiAdvancedConfig.motorSpeed == motorSpeed)
{
jsonResult[advancedKeys[j]] = "unchanged";
}
else
{
cmdResult = _nukiLock.setMotorSpeed(motorSpeed);
}
}
else
{
jsonResult[advancedKeys[j]] = "invalidValue";
}
}
else if(strcmp(advancedKeys[j], "enableSlowSpeedDuringNightMode") == 0)
{
const uint8_t keyvalue = atoi(jsonchar);
if(keyvalue == 0 || keyvalue == 1)
{
if(_nukiAdvancedConfig.enableSlowSpeedDuringNightMode == keyvalue)
{
jsonResult[advancedKeys[j]] = "unchanged";
}
else
{
cmdResult = _nukiLock.enableSlowSpeedDuringNightMode((keyvalue > 0));
}
}
else
{
jsonResult[advancedKeys[j]] = "invalidValue";
}
}
if(cmdResult != Nuki::CmdResult::Success)
{