From 15cadb7e987919ee7c89bf3ab3869c1ac3eaa2e7 Mon Sep 17 00:00:00 2001 From: iranl Date: Wed, 29 May 2024 16:29:11 +0200 Subject: [PATCH 1/2] Fix config --- src/NukiOpenerWrapper.cpp | 151 ++++++++++++++++++------------------ src/NukiWrapper.cpp | 157 +++++++++++++++++++------------------- 2 files changed, 151 insertions(+), 157 deletions(-) diff --git a/src/NukiOpenerWrapper.cpp b/src/NukiOpenerWrapper.cpp index 5390afbb..7f5d7cdc 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 e0fb7c2b..54738ef8 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; From 68c9e185fcf86e9719f2c43b85afd41ebf57a1b6 Mon Sep 17 00:00:00 2001 From: iranl Date: Thu, 30 May 2024 23:24:06 +0200 Subject: [PATCH 2/2] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc8725dd..c7a8a7d7 100644 --- a/README.md +++ b/README.md @@ -404,7 +404,7 @@ Example: ### Home Assistant discovery -If Home Assistant discovery is enabled (see the [Home Assistant Discovery](#home-assistant-discovery-optional) section of this README) Nuki Hub will create entities for almost all of the above settings. These entities will be disabled by default in Home Assistant, but can be found in the MQTT devices section of the Home Assistant UI under the "Configuration" section of the Nuki Lock/Opener and enabled there. +If Home Assistant discovery is enabled (see the [Home Assistant Discovery](#home-assistant-discovery-optional) section of this README) Nuki Hub will create entities for almost all of the above settings. ## Over-the-air Update (OTA)