diff --git a/src/NukiOpenerWrapper.cpp b/src/NukiOpenerWrapper.cpp index 5390afb..7f5d7cd 100644 --- a/src/NukiOpenerWrapper.cpp +++ b/src/NukiOpenerWrapper.cpp @@ -333,7 +333,7 @@ void NukiOpenerWrapper::unpair() Preferences nukiBlePref; nukiBlePref.begin("NukiHubopener", false); nukiBlePref.clear(); - nukiBlePref.end(); + nukiBlePref.end(); _deviceId->assignNewId(); _preferences->remove(preference_nuki_id_opener); _paired = false; @@ -520,7 +520,7 @@ void NukiOpenerWrapper::updateAuthData(bool retrieved) { log.resize(_preferences->getInt(preference_authlog_max_entries, 3)); } - + if(log.size() > 0) { _network->publishAuthorizationInfo(log, true); @@ -863,8 +863,8 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value) } Nuki::CmdResult cmdResult; - const char *basicKeys[] = {"name", "latitude", "longitude", "pairingEnabled", "buttonEnabled", "ledFlashEnabled", "timeZoneOffset", "dstMode", "fobAction1", "fobAction2", "fobAction3", "operatingMode", "advertisingMode", "timeZone"}; - const char *advancedKeys[] = {"intercomID", "busModeSwitch", "shortCircuitDuration", "electricStrikeDelay", "randomElectricStrikeDelay", "electricStrikeDuration", "disableRtoAfterRing", "rtoTimeout", "doorbellSuppression", "doorbellSuppressionDuration", "soundRing", "soundOpen", "soundRto", "soundCm", "soundConfirmation", "soundLevel", "singleButtonPressAction", "doubleButtonPressAction", "batteryType", "automaticBatteryTypeDetection"}; + const char *basicKeys[14] = {"name", "latitude", "longitude", "pairingEnabled", "buttonEnabled", "ledFlashEnabled", "timeZoneOffset", "dstMode", "fobAction1", "fobAction2", "fobAction3", "operatingMode", "advertisingMode", "timeZone"}; + const char *advancedKeys[20] = {"intercomID", "busModeSwitch", "shortCircuitDuration", "electricStrikeDelay", "randomElectricStrikeDelay", "electricStrikeDuration", "disableRtoAfterRing", "rtoTimeout", "doorbellSuppression", "doorbellSuppressionDuration", "soundRing", "soundOpen", "soundRto", "soundCm", "soundConfirmation", "soundLevel", "singleButtonPressAction", "doubleButtonPressAction", "batteryType", "automaticBatteryTypeDetection"}; bool basicUpdated = false; bool advancedUpdated = false; uint32_t basicOpenerConfigAclPrefs[16]; @@ -875,7 +875,7 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value) nukiOpenerPreferences->getBytes(preference_conf_opener_basic_acl, &basicOpenerConfigAclPrefs, sizeof(basicOpenerConfigAclPrefs)); nukiOpenerPreferences->getBytes(preference_conf_opener_advanced_acl, &advancedOpenerConfigAclPrefs, sizeof(advancedOpenerConfigAclPrefs)); - for(int i=0; i < 16; i++) + for(int i=0; i < 14; i++) { if(json[basicKeys[i]]) { @@ -1056,261 +1056,258 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value) } } - for(int i=0; i < 20; i++) + for(int j=0; j < 20; j++) { - if(json[advancedKeys[i]]) + if(json[advancedKeys[j]]) { - const char *jsonchar = json[advancedKeys[i]].as(); + const char *jsonchar = json[advancedKeys[j]].as(); if(strlen(jsonchar) == 0) { - jsonResult[advancedKeys[i]] = "noValueSet"; + jsonResult[advancedKeys[j]] = "noValueSet"; continue; } - if((int)advancedOpenerConfigAclPrefs[i] == 1) + if((int)advancedOpenerConfigAclPrefs[j] == 1) { cmdResult = Nuki::CmdResult::Error; - if(strcmp(advancedKeys[i], "intercomID") == 0) + if(strcmp(advancedKeys[j], "intercomID") == 0) { const uint16_t keyvalue = atoi(jsonchar); if(keyvalue >= 0) { - if(_nukiAdvancedConfig.intercomID == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.intercomID == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setIntercomID(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "busModeSwitch") == 0) + else if(strcmp(advancedKeys[j], "busModeSwitch") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.busModeSwitch == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.busModeSwitch == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setBusModeSwitch((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "shortCircuitDuration") == 0) + else if(strcmp(advancedKeys[j], "shortCircuitDuration") == 0) { const uint16_t keyvalue = atoi(jsonchar); if(keyvalue >= 0) { - if(_nukiAdvancedConfig.shortCircuitDuration == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.shortCircuitDuration == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setShortCircuitDuration(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "electricStrikeDelay") == 0) + else if(strcmp(advancedKeys[j], "electricStrikeDelay") == 0) { const uint16_t keyvalue = atoi(jsonchar); if(keyvalue >= 0 && keyvalue <= 30000) { - if(_nukiAdvancedConfig.electricStrikeDelay == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.electricStrikeDelay == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setElectricStrikeDelay(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "randomElectricStrikeDelay") == 0) + else if(strcmp(advancedKeys[j], "randomElectricStrikeDelay") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.randomElectricStrikeDelay == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.randomElectricStrikeDelay == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.enableRandomElectricStrikeDelay((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "electricStrikeDuration") == 0) + else if(strcmp(advancedKeys[j], "electricStrikeDuration") == 0) { const uint16_t keyvalue = atoi(jsonchar); if(keyvalue >= 1000 && keyvalue <= 30000) { - if(_nukiAdvancedConfig.electricStrikeDuration == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.electricStrikeDuration == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setElectricStrikeDuration(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "disableRtoAfterRing") == 0) + else if(strcmp(advancedKeys[j], "disableRtoAfterRing") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.disableRtoAfterRing == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.disableRtoAfterRing == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.disableRtoAfterRing((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "rtoTimeout") == 0) + else if(strcmp(advancedKeys[j], "rtoTimeout") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue >= 5 && keyvalue <= 60) { - if(_nukiAdvancedConfig.rtoTimeout == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.rtoTimeout == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setRtoTimeout(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "doorbellSuppression") == 0) + else if(strcmp(advancedKeys[j], "doorbellSuppression") == 0) { const uint8_t dbsupr = nukiOpenerInst->doorbellSuppressionToInt(jsonchar); if(dbsupr != 99) { - if(_nukiAdvancedConfig.doorbellSuppression == dbsupr) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.doorbellSuppression == dbsupr) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setDoorbellSuppression(dbsupr); } - else jsonResult[basicKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "doorbellSuppressionDuration") == 0) + else if(strcmp(advancedKeys[j], "doorbellSuppressionDuration") == 0) { const uint16_t keyvalue = atoi(jsonchar); if(keyvalue >= 500 && keyvalue <= 10000) { - if(_nukiAdvancedConfig.doorbellSuppressionDuration == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.doorbellSuppressionDuration == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setDoorbellSuppressionDuration(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "soundRing") == 0) + else if(strcmp(advancedKeys[j], "soundRing") == 0) { const uint8_t sound = nukiOpenerInst->soundToInt(jsonchar); if(sound != 99) { - if(_nukiAdvancedConfig.soundRing == sound) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.soundRing == sound) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setSoundRing(sound); } - else jsonResult[basicKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "soundOpen") == 0) + else if(strcmp(advancedKeys[j], "soundOpen") == 0) { const uint8_t sound = nukiOpenerInst->soundToInt(jsonchar); if(sound != 99) { - if(_nukiAdvancedConfig.soundOpen == sound) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.soundOpen == sound) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setSoundOpen(sound); } - else jsonResult[basicKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "soundRto") == 0) + else if(strcmp(advancedKeys[j], "soundRto") == 0) { const uint8_t sound = nukiOpenerInst->soundToInt(jsonchar); if(sound != 99) { - if(_nukiAdvancedConfig.soundRto == sound) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.soundRto == sound) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setSoundRto(sound); } - else jsonResult[basicKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "soundCm") == 0) + else if(strcmp(advancedKeys[j], "soundCm") == 0) { const uint8_t sound = nukiOpenerInst->soundToInt(jsonchar); if(sound != 99) { - if(_nukiAdvancedConfig.soundCm == sound) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.soundCm == sound) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setSoundCm(sound); } - else jsonResult[basicKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "soundConfirmation") == 0) + else if(strcmp(advancedKeys[j], "soundConfirmation") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.soundConfirmation == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.soundConfirmation == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.enableSoundConfirmation((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "soundLevel") == 0) + else if(strcmp(advancedKeys[j], "soundLevel") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue >= 0 && keyvalue <= 255) { - if(_nukiAdvancedConfig.soundLevel == keyvalue) jsonResult[basicKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.soundLevel == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setSoundLevel(keyvalue); } - else jsonResult[basicKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "singleButtonPressAction") == 0) + else if(strcmp(advancedKeys[j], "singleButtonPressAction") == 0) { NukiOpener::ButtonPressAction sbpa = nukiOpenerInst->buttonPressActionToEnum(jsonchar); if(!(int)sbpa == 0xff) { - if(_nukiAdvancedConfig.singleButtonPressAction == sbpa) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.singleButtonPressAction == sbpa) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setSingleButtonPressAction(sbpa); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "doubleButtonPressAction") == 0) + else if(strcmp(advancedKeys[j], "doubleButtonPressAction") == 0) { NukiOpener::ButtonPressAction dbpa = nukiOpenerInst->buttonPressActionToEnum(jsonchar); if(!(int)dbpa == 0xff) { - if(_nukiAdvancedConfig.doubleButtonPressAction == dbpa) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.doubleButtonPressAction == dbpa) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setDoubleButtonPressAction(dbpa); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "batteryType") == 0) + else if(strcmp(advancedKeys[j], "batteryType") == 0) { Nuki::BatteryType battype = nukiOpenerInst->batteryTypeToEnum(jsonchar); if(!(int)battype == 0xff) { - if(_nukiAdvancedConfig.batteryType == battype) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.batteryType == battype) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.setBatteryType(battype); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "automaticBatteryTypeDetection") == 0) + else if(strcmp(advancedKeys[j], "automaticBatteryTypeDetection") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.automaticBatteryTypeDetection == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.automaticBatteryTypeDetection == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiOpener.enableAutoBatteryTypeDetection((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } if(cmdResult == Nuki::CmdResult::Success) advancedUpdated = true; - if(!jsonResult[advancedKeys[i]]) { + if(!jsonResult[advancedKeys[j]]) { char resultStr[15] = {0}; NukiOpener::cmdResultToString(cmdResult, resultStr); - jsonResult[advancedKeys[i]] = resultStr; + jsonResult[advancedKeys[j]] = resultStr; } } - else jsonResult[advancedKeys[i]] = "accessDenied"; + else jsonResult[advancedKeys[j]] = "accessDenied"; } } nukiOpenerPreferences->end(); - if(basicUpdated || advancedUpdated) - { - jsonResult["general"] = "success"; - } + if(basicUpdated || advancedUpdated) jsonResult["general"] = "success"; else jsonResult["general"] = "noChange"; _nextConfigUpdateTs = millis() + 300; diff --git a/src/NukiWrapper.cpp b/src/NukiWrapper.cpp index e0fb7c2..54738ef 100644 --- a/src/NukiWrapper.cpp +++ b/src/NukiWrapper.cpp @@ -807,8 +807,8 @@ void NukiWrapper::onConfigUpdateReceived(const char *value) } Nuki::CmdResult cmdResult; - const char *basicKeys[] = {"name", "latitude", "longitude", "autoUnlatch", "pairingEnabled", "buttonEnabled", "ledEnabled", "ledBrightness", "timeZoneOffset", "dstMode", "fobAction1", "fobAction2", "fobAction3", "singleLock", "advertisingMode", "timeZone"}; - const char *advancedKeys[] = {"unlockedPositionOffsetDegrees", "lockedPositionOffsetDegrees", "singleLockedPositionOffsetDegrees", "unlockedToLockedTransitionOffsetDegrees", "lockNgoTimeout", "singleButtonPressAction", "doubleButtonPressAction", "detachedCylinder", "batteryType", "automaticBatteryTypeDetection", "unlatchDuration", "autoLockTimeOut", "autoUnLockDisabled", "nightModeEnabled", "nightModeStartTime", "nightModeEndTime", "nightModeAutoLockEnabled", "nightModeAutoUnlockDisabled", "nightModeImmediateLockOnStart", "autoLockEnabled", "immediateAutoLockEnabled", "autoUpdateEnabled"}; + const char *basicKeys[16] = {"name", "latitude", "longitude", "autoUnlatch", "pairingEnabled", "buttonEnabled", "ledEnabled", "ledBrightness", "timeZoneOffset", "dstMode", "fobAction1", "fobAction2", "fobAction3", "singleLock", "advertisingMode", "timeZone"}; + const char *advancedKeys[22] = {"unlockedPositionOffsetDegrees", "lockedPositionOffsetDegrees", "singleLockedPositionOffsetDegrees", "unlockedToLockedTransitionOffsetDegrees", "lockNgoTimeout", "singleButtonPressAction", "doubleButtonPressAction", "detachedCylinder", "batteryType", "automaticBatteryTypeDetection", "unlatchDuration", "autoLockTimeOut", "autoUnLockDisabled", "nightModeEnabled", "nightModeStartTime", "nightModeEndTime", "nightModeAutoLockEnabled", "nightModeAutoUnlockDisabled", "nightModeImmediateLockOnStart", "autoLockEnabled", "immediateAutoLockEnabled", "autoUpdateEnabled"}; bool basicUpdated = false; bool advancedUpdated = false; uint32_t basicLockConfigAclPrefs[16]; @@ -1022,177 +1022,177 @@ void NukiWrapper::onConfigUpdateReceived(const char *value) } } - for(int i=0; i < 22; i++) + for(int j=0; j < 22; j++) { - if(json[advancedKeys[i]]) + if(json[advancedKeys[j]]) { - const char *jsonchar = json[advancedKeys[i]].as(); + const char *jsonchar = json[advancedKeys[j]].as(); if(strlen(jsonchar) == 0) { - jsonResult[advancedKeys[i]] = "noValueSet"; + jsonResult[advancedKeys[j]] = "noValueSet"; continue; } - if((int)advancedLockConfigAclPrefs[i] == 1) + if((int)advancedLockConfigAclPrefs[j] == 1) { cmdResult = Nuki::CmdResult::Error; - if(strcmp(advancedKeys[i], "unlockedPositionOffsetDegrees") == 0) + if(strcmp(advancedKeys[j], "unlockedPositionOffsetDegrees") == 0) { const int16_t keyvalue = atoi(jsonchar); if(keyvalue >= -90 && keyvalue <= 180) { - if(_nukiAdvancedConfig.unlockedPositionOffsetDegrees == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.unlockedPositionOffsetDegrees == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.setUnlockedPositionOffsetDegrees(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "lockedPositionOffsetDegrees") == 0) + else if(strcmp(advancedKeys[j], "lockedPositionOffsetDegrees") == 0) { const int16_t keyvalue = atoi(jsonchar); if(keyvalue >= -180 && keyvalue <= 90) { - if(_nukiAdvancedConfig.lockedPositionOffsetDegrees == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.lockedPositionOffsetDegrees == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.setLockedPositionOffsetDegrees(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "singleLockedPositionOffsetDegrees") == 0) + else if(strcmp(advancedKeys[j], "singleLockedPositionOffsetDegrees") == 0) { const int16_t keyvalue = atoi(jsonchar); if(keyvalue >= -180 && keyvalue <= 180) { - if(_nukiAdvancedConfig.singleLockedPositionOffsetDegrees == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.singleLockedPositionOffsetDegrees == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.setSingleLockedPositionOffsetDegrees(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "unlockedToLockedTransitionOffsetDegrees") == 0) + else if(strcmp(advancedKeys[j], "unlockedToLockedTransitionOffsetDegrees") == 0) { const int16_t keyvalue = atoi(jsonchar); if(keyvalue >= -180 && keyvalue <= 180) { - if(_nukiAdvancedConfig.unlockedToLockedTransitionOffsetDegrees == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.unlockedToLockedTransitionOffsetDegrees == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.setUnlockedToLockedTransitionOffsetDegrees(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "lockNgoTimeout") == 0) + else if(strcmp(advancedKeys[j], "lockNgoTimeout") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue >= 5 && keyvalue <= 60) { - if(_nukiAdvancedConfig.lockNgoTimeout == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.lockNgoTimeout == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.setLockNgoTimeout(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "singleButtonPressAction") == 0) + else if(strcmp(advancedKeys[j], "singleButtonPressAction") == 0) { NukiLock::ButtonPressAction sbpa = nukiInst->buttonPressActionToEnum(jsonchar); if((int)sbpa != 0xff) { - if(_nukiAdvancedConfig.singleButtonPressAction == sbpa) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.singleButtonPressAction == sbpa) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.setSingleButtonPressAction(sbpa); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "doubleButtonPressAction") == 0) + else if(strcmp(advancedKeys[j], "doubleButtonPressAction") == 0) { NukiLock::ButtonPressAction dbpa = nukiInst->buttonPressActionToEnum(jsonchar); if((int)dbpa != 0xff) { - if(_nukiAdvancedConfig.doubleButtonPressAction == dbpa) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.doubleButtonPressAction == dbpa) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.setDoubleButtonPressAction(dbpa); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "detachedCylinder") == 0) + else if(strcmp(advancedKeys[j], "detachedCylinder") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.detachedCylinder == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.detachedCylinder == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.enableDetachedCylinder((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "batteryType") == 0) + else if(strcmp(advancedKeys[j], "batteryType") == 0) { Nuki::BatteryType battype = nukiInst->batteryTypeToEnum(jsonchar); if((int)battype != 0xff) { - if(_nukiAdvancedConfig.batteryType == battype) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.batteryType == battype) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.setBatteryType(battype); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "automaticBatteryTypeDetection") == 0) + else if(strcmp(advancedKeys[j], "automaticBatteryTypeDetection") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.automaticBatteryTypeDetection == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.automaticBatteryTypeDetection == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.enableAutoBatteryTypeDetection((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "unlatchDuration") == 0) + else if(strcmp(advancedKeys[j], "unlatchDuration") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue >= 1 && keyvalue <= 30) { - if(_nukiAdvancedConfig.unlatchDuration == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.unlatchDuration == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.setUnlatchDuration(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "autoLockTimeOut") == 0) + else if(strcmp(advancedKeys[j], "autoLockTimeOut") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue >= 30 && keyvalue <= 180) { - if(_nukiAdvancedConfig.autoLockTimeOut == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.autoLockTimeOut == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.setAutoLockTimeOut(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "autoUnLockDisabled") == 0) + else if(strcmp(advancedKeys[j], "autoUnLockDisabled") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.autoUnLockDisabled == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.autoUnLockDisabled == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.disableAutoUnlock((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "nightModeEnabled") == 0) + else if(strcmp(advancedKeys[j], "nightModeEnabled") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.nightModeEnabled == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.nightModeEnabled == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.enableNightMode((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "nightModeStartTime") == 0) + else if(strcmp(advancedKeys[j], "nightModeStartTime") == 0) { String keystr = jsonchar; unsigned char keyvalue[2]; @@ -1200,12 +1200,12 @@ void NukiWrapper::onConfigUpdateReceived(const char *value) keyvalue[1] = (uint8_t)keystr.substring(3, 5).toInt(); if(keyvalue[0] >= 0 && keyvalue[0] <= 23 && keyvalue[1] >= 0 && keyvalue[1] <= 59) { - if(_nukiAdvancedConfig.nightModeStartTime == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.nightModeStartTime == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.setNightModeStartTime(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "nightModeEndTime") == 0) + else if(strcmp(advancedKeys[j], "nightModeEndTime") == 0) { String keystr = jsonchar; unsigned char keyvalue[2]; @@ -1213,96 +1213,93 @@ void NukiWrapper::onConfigUpdateReceived(const char *value) keyvalue[1] = (uint8_t)keystr.substring(3, 5).toInt(); if(keyvalue[0] >= 0 && keyvalue[0] <= 23 && keyvalue[1] >= 0 && keyvalue[1] <= 59) { - if(_nukiAdvancedConfig.nightModeEndTime == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.nightModeEndTime == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.setNightModeEndTime(keyvalue); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "nightModeAutoLockEnabled") == 0) + else if(strcmp(advancedKeys[j], "nightModeAutoLockEnabled") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.nightModeAutoLockEnabled == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.nightModeAutoLockEnabled == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.enableNightModeAutoLock((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "nightModeAutoUnlockDisabled") == 0) + else if(strcmp(advancedKeys[j], "nightModeAutoUnlockDisabled") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.nightModeAutoUnlockDisabled == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.nightModeAutoUnlockDisabled == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.disableNightModeAutoUnlock((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "nightModeImmediateLockOnStart") == 0) + else if(strcmp(advancedKeys[j], "nightModeImmediateLockOnStart") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.nightModeImmediateLockOnStart == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.nightModeImmediateLockOnStart == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.enableNightModeImmediateLockOnStart((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "autoLockEnabled") == 0) + else if(strcmp(advancedKeys[j], "autoLockEnabled") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.autoLockEnabled == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.autoLockEnabled == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.enableAutoLock((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "immediateAutoLockEnabled") == 0) + else if(strcmp(advancedKeys[j], "immediateAutoLockEnabled") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.immediateAutoLockEnabled == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.immediateAutoLockEnabled == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.enableImmediateAutoLock((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } - else if(strcmp(advancedKeys[i], "autoUpdateEnabled") == 0) + else if(strcmp(advancedKeys[j], "autoUpdateEnabled") == 0) { const uint8_t keyvalue = atoi(jsonchar); if(keyvalue == 0 || keyvalue == 1) { - if(_nukiAdvancedConfig.autoUpdateEnabled == keyvalue) jsonResult[advancedKeys[i]] = "unchanged"; + if(_nukiAdvancedConfig.autoUpdateEnabled == keyvalue) jsonResult[advancedKeys[j]] = "unchanged"; else cmdResult = _nukiLock.enableAutoUpdate((keyvalue > 0)); } - else jsonResult[advancedKeys[i]] = "invalidValue"; + else jsonResult[advancedKeys[j]] = "invalidValue"; } if(cmdResult == Nuki::CmdResult::Success) advancedUpdated = true; - if(!jsonResult[advancedKeys[i]]) { + if(!jsonResult[advancedKeys[j]]) { char resultStr[15] = {0}; NukiLock::cmdResultToString(cmdResult, resultStr); - jsonResult[advancedKeys[i]] = resultStr; + jsonResult[advancedKeys[j]] = resultStr; } } - else jsonResult[advancedKeys[i]] = "accessDenied"; + else jsonResult[advancedKeys[j]] = "accessDenied"; } } nukiLockPreferences->end(); - if(basicUpdated || advancedUpdated) - { - jsonResult["general"] = "success"; - } + if(basicUpdated || advancedUpdated) jsonResult["general"] = "success"; else jsonResult["general"] = "noChange"; _nextConfigUpdateTs = millis() + 300;