Home Assistant new
This commit is contained in:
2851
Network.cpp
2851
Network.cpp
File diff suppressed because it is too large
Load Diff
11
Network.h
11
Network.h
@@ -46,17 +46,12 @@ public:
|
||||
bool publishString(const char* prefix, const char* topic, const char* value);
|
||||
|
||||
void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char* availabilityTopic, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction);
|
||||
void publishHASSConfigAdditionalButtons(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSConfigBatLevel(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSConfigAdditionalLockEntities(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSConfigDoorSensor(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSConfigRingDetect(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSConfigContinuousMode(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSConfigLedBrightness(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSConfigSoundLevel(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSConfigAdditionalOpenerEntities(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSConfigAccessLog(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSConfigKeypadAttemptInfo(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSConfigKeypad(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSWifiRssiConfig(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void publishHASSBleRssiConfig(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||
void removeHASSConfig(char* uidString);
|
||||
void removeHASSConfigTopic(char* deviceType, char* name, char* uidString);
|
||||
|
||||
|
||||
@@ -675,9 +675,7 @@ void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, cha
|
||||
char *unlockAction, char *openAction)
|
||||
{
|
||||
_network->publishHASSConfig(deviceType, baseTopic, name, uidString, "~/maintenance/mqttConnectionState", hasKeypad, lockAction, unlockAction, openAction);
|
||||
_network->publishHASSConfigAdditionalButtons(deviceType, baseTopic, name, uidString);
|
||||
_network->publishHASSConfigBatLevel(deviceType, baseTopic, name, uidString);
|
||||
_network->publishHASSConfigLedBrightness(deviceType, baseTopic, name, uidString);
|
||||
_network->publishHASSConfigAdditionalLockEntities(deviceType, baseTopic, name, uidString);
|
||||
if(hasDoorSensor)
|
||||
{
|
||||
_network->publishHASSConfigDoorSensor(deviceType, baseTopic, name, uidString);
|
||||
@@ -687,7 +685,6 @@ void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, cha
|
||||
_network->removeHASSConfigTopic("binary_sensor", "door_sensor", uidString);
|
||||
}
|
||||
_network->publishHASSWifiRssiConfig(deviceType, baseTopic, name, uidString);
|
||||
_network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString);
|
||||
|
||||
if(publishAuthData)
|
||||
{
|
||||
@@ -700,11 +697,12 @@ void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, cha
|
||||
|
||||
if(hasKeypad)
|
||||
{
|
||||
_network->publishHASSConfigKeypadAttemptInfo(deviceType, baseTopic, name, uidString);
|
||||
_network->publishHASSConfigKeypad(deviceType, baseTopic, name, uidString);
|
||||
}
|
||||
else
|
||||
{
|
||||
_network->removeHASSConfigTopic("sensor", "keypad_status", uidString);
|
||||
_network->removeHASSConfigTopic("binary_sensor", "keypad_battery_low", uidString);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -801,13 +799,13 @@ uint8_t NetworkLock::queryCommands()
|
||||
void NetworkLock::batteryTypeToString(const Nuki::BatteryType battype, char* str) {
|
||||
switch (battype) {
|
||||
case Nuki::BatteryType::Alkali:
|
||||
strcpy(str, "alkali");
|
||||
strcpy(str, "Alkali");
|
||||
break;
|
||||
case Nuki::BatteryType::Accumulators:
|
||||
strcpy(str, "accumulators");
|
||||
strcpy(str, "Accumulators");
|
||||
break;
|
||||
case Nuki::BatteryType::Lithium:
|
||||
strcpy(str, "lithium");
|
||||
strcpy(str, "Lithium");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
@@ -818,25 +816,25 @@ void NetworkLock::batteryTypeToString(const Nuki::BatteryType battype, char* str
|
||||
void NetworkLock::buttonPressActionToString(const NukiLock::ButtonPressAction btnPressAction, char* str) {
|
||||
switch (btnPressAction) {
|
||||
case NukiLock::ButtonPressAction::NoAction:
|
||||
strcpy(str, "noaction");
|
||||
strcpy(str, "No Action");
|
||||
break;
|
||||
case NukiLock::ButtonPressAction::Intelligent:
|
||||
strcpy(str, "intelligent");
|
||||
strcpy(str, "Intelligent");
|
||||
break;
|
||||
case NukiLock::ButtonPressAction::Unlock:
|
||||
strcpy(str, "unlock");
|
||||
strcpy(str, "Unlock");
|
||||
break;
|
||||
case NukiLock::ButtonPressAction::Lock:
|
||||
strcpy(str, "lock");
|
||||
strcpy(str, "Lock");
|
||||
break;
|
||||
case NukiLock::ButtonPressAction::Unlatch:
|
||||
strcpy(str, "unlatch");
|
||||
strcpy(str, "Unlatch");
|
||||
break;
|
||||
case NukiLock::ButtonPressAction::LockNgo:
|
||||
strcpy(str, "lockngo");
|
||||
strcpy(str, "Lock n Go");
|
||||
break;
|
||||
case NukiLock::ButtonPressAction::ShowStatus:
|
||||
strcpy(str, "showstatus");
|
||||
strcpy(str, "Show Status");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
@@ -847,16 +845,16 @@ void NetworkLock::buttonPressActionToString(const NukiLock::ButtonPressAction bt
|
||||
void NetworkLock::advertisingModeToString(const Nuki::AdvertisingMode advmode, char* str) {
|
||||
switch (advmode) {
|
||||
case Nuki::AdvertisingMode::Automatic:
|
||||
strcpy(str, "automatic");
|
||||
strcpy(str, "Automatic");
|
||||
break;
|
||||
case Nuki::AdvertisingMode::Normal:
|
||||
strcpy(str, "normal");
|
||||
strcpy(str, "Normal");
|
||||
break;
|
||||
case Nuki::AdvertisingMode::Slow:
|
||||
strcpy(str, "slow");
|
||||
strcpy(str, "Slow");
|
||||
break;
|
||||
case Nuki::AdvertisingMode::Slowest:
|
||||
strcpy(str, "slowest");
|
||||
strcpy(str, "Slowest");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
@@ -1005,7 +1003,7 @@ void NetworkLock::timeZoneIdToString(const Nuki::TimeZoneId timeZoneId, char* st
|
||||
strcpy(str, "Pacific/Pago_Pago");
|
||||
break;
|
||||
case Nuki::TimeZoneId::None:
|
||||
strcpy(str, "none");
|
||||
strcpy(str, "None");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
@@ -1016,16 +1014,16 @@ void NetworkLock::timeZoneIdToString(const Nuki::TimeZoneId timeZoneId, char* st
|
||||
void NetworkLock::homeKitStatusToString(const int hkstatus, char* str) {
|
||||
switch (hkstatus) {
|
||||
case 0:
|
||||
strcpy(str, "notavailable");
|
||||
strcpy(str, "Not Available");
|
||||
break;
|
||||
case 1:
|
||||
strcpy(str, "disabled");
|
||||
strcpy(str, "Disabled");
|
||||
break;
|
||||
case 2:
|
||||
strcpy(str, "enabled");
|
||||
strcpy(str, "Enabled");
|
||||
break;
|
||||
case 3:
|
||||
strcpy(str, "enabledpaired");
|
||||
strcpy(str, "Enabled & Paired");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
@@ -1036,19 +1034,19 @@ void NetworkLock::homeKitStatusToString(const int hkstatus, char* str) {
|
||||
void NetworkLock::fobActionToString(const int fobact, char* str) {
|
||||
switch (fobact) {
|
||||
case 0:
|
||||
strcpy(str, "noaction");
|
||||
strcpy(str, "No Action");
|
||||
break;
|
||||
case 1:
|
||||
strcpy(str, "unlock");
|
||||
strcpy(str, "Unlock");
|
||||
break;
|
||||
case 2:
|
||||
strcpy(str, "lock");
|
||||
strcpy(str, "Lock");
|
||||
break;
|
||||
case 3:
|
||||
strcpy(str, "lockngo");
|
||||
strcpy(str, "Lock n Go");
|
||||
break;
|
||||
case 4:
|
||||
strcpy(str, "intelligent");
|
||||
strcpy(str, "Intelligent");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
|
||||
@@ -567,7 +567,9 @@ void NetworkOpener::publishAdvancedConfig(const NukiOpener::AdvancedConfig &conf
|
||||
json["electricStrikeDuration"] = config.electricStrikeDuration;
|
||||
json["disableRtoAfterRing"] = config.disableRtoAfterRing;
|
||||
json["rtoTimeout"] = config.rtoTimeout;
|
||||
json["doorbellSuppression"] = config.doorbellSuppression;
|
||||
memset(str, 0, sizeof(str));
|
||||
doorbellSuppressionToString(config.doorbellSuppression, str);
|
||||
json["doorbellSuppression"] = str;
|
||||
json["doorbellSuppressionDuration"] = config.doorbellSuppressionDuration;
|
||||
json["soundRing"] = config.soundRing;
|
||||
json["soundOpen"] = config.soundOpen;
|
||||
@@ -613,10 +615,7 @@ void NetworkOpener::publishHASSConfig(char* deviceType, const char* baseTopic, c
|
||||
availabilityTopic.concat("/maintenance/mqttConnectionState");
|
||||
|
||||
_network->publishHASSConfig(deviceType, baseTopic, name, uidString, availabilityTopic.c_str(), false, lockAction, unlockAction, openAction);
|
||||
_network->publishHASSConfigRingDetect(deviceType, baseTopic, name, uidString);
|
||||
_network->publishHASSConfigContinuousMode(deviceType, baseTopic, name, uidString);
|
||||
_network->publishHASSConfigSoundLevel(deviceType, baseTopic, name, uidString);
|
||||
_network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString);
|
||||
_network->publishHASSConfigAdditionalOpenerEntities(deviceType, baseTopic, name, uidString);
|
||||
}
|
||||
|
||||
void NetworkOpener::removeHASSConfig(char* uidString)
|
||||
@@ -814,13 +813,13 @@ uint8_t NetworkOpener::queryCommands()
|
||||
void NetworkOpener::batteryTypeToString(const Nuki::BatteryType battype, char* str) {
|
||||
switch (battype) {
|
||||
case Nuki::BatteryType::Alkali:
|
||||
strcpy(str, "alkali");
|
||||
strcpy(str, "Alkali");
|
||||
break;
|
||||
case Nuki::BatteryType::Accumulators:
|
||||
strcpy(str, "accumulators");
|
||||
strcpy(str, "Accumulators");
|
||||
break;
|
||||
case Nuki::BatteryType::Lithium:
|
||||
strcpy(str, "lithium");
|
||||
strcpy(str, "Lithium");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
@@ -831,28 +830,28 @@ void NetworkOpener::batteryTypeToString(const Nuki::BatteryType battype, char* s
|
||||
void NetworkOpener::buttonPressActionToString(const NukiOpener::ButtonPressAction btnPressAction, char* str) {
|
||||
switch (btnPressAction) {
|
||||
case NukiOpener::ButtonPressAction::NoAction:
|
||||
strcpy(str, "noaction");
|
||||
strcpy(str, "No Action");
|
||||
break;
|
||||
case NukiOpener::ButtonPressAction::ToggleRTO:
|
||||
strcpy(str, "togglerto");
|
||||
strcpy(str, "Toggle RTO");
|
||||
break;
|
||||
case NukiOpener::ButtonPressAction::ActivateRTO:
|
||||
strcpy(str, "activaterto");
|
||||
strcpy(str, "Activate RTO");
|
||||
break;
|
||||
case NukiOpener::ButtonPressAction::DeactivateRTO:
|
||||
strcpy(str, "deactivaterto");
|
||||
strcpy(str, "Deactivate RTO");
|
||||
break;
|
||||
case NukiOpener::ButtonPressAction::ToggleCM:
|
||||
strcpy(str, "togglecm");
|
||||
strcpy(str, "Toggle CM");
|
||||
break;
|
||||
case NukiOpener::ButtonPressAction::ActivateCM:
|
||||
strcpy(str, "activatecm");
|
||||
strcpy(str, "Activate CM");
|
||||
break;
|
||||
case NukiOpener::ButtonPressAction::DectivateCM:
|
||||
strcpy(str, "deactivatecm");
|
||||
strcpy(str, "Deactivate CM");
|
||||
break;
|
||||
case NukiOpener::ButtonPressAction::Open:
|
||||
strcpy(str, "open");
|
||||
strcpy(str, "Open");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
@@ -863,16 +862,16 @@ void NetworkOpener::buttonPressActionToString(const NukiOpener::ButtonPressActio
|
||||
void NetworkOpener::advertisingModeToString(const Nuki::AdvertisingMode advmode, char* str) {
|
||||
switch (advmode) {
|
||||
case Nuki::AdvertisingMode::Automatic:
|
||||
strcpy(str, "automatic");
|
||||
strcpy(str, "Automatic");
|
||||
break;
|
||||
case Nuki::AdvertisingMode::Normal:
|
||||
strcpy(str, "normal");
|
||||
strcpy(str, "Normal");
|
||||
break;
|
||||
case Nuki::AdvertisingMode::Slow:
|
||||
strcpy(str, "slow");
|
||||
strcpy(str, "Slow");
|
||||
break;
|
||||
case Nuki::AdvertisingMode::Slowest:
|
||||
strcpy(str, "slowest");
|
||||
strcpy(str, "Slowest");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
@@ -1021,7 +1020,7 @@ void NetworkOpener::timeZoneIdToString(const Nuki::TimeZoneId timeZoneId, char*
|
||||
strcpy(str, "Pacific/Pago_Pago");
|
||||
break;
|
||||
case Nuki::TimeZoneId::None:
|
||||
strcpy(str, "none");
|
||||
strcpy(str, "None");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
@@ -1032,22 +1031,22 @@ void NetworkOpener::timeZoneIdToString(const Nuki::TimeZoneId timeZoneId, char*
|
||||
void NetworkOpener::fobActionToString(const int fobact, char* str) {
|
||||
switch (fobact) {
|
||||
case 0:
|
||||
strcpy(str, "noaction");
|
||||
strcpy(str, "No Action");
|
||||
break;
|
||||
case 1:
|
||||
strcpy(str, "togglerto");
|
||||
strcpy(str, "Toggle RTO");
|
||||
break;
|
||||
case 2:
|
||||
strcpy(str, "activaterto");
|
||||
strcpy(str, "Activate RTO");
|
||||
break;
|
||||
case 3:
|
||||
strcpy(str, "deactivaterto");
|
||||
strcpy(str, "Deactivate RTO");
|
||||
break;
|
||||
case 7:
|
||||
strcpy(str, "open");
|
||||
strcpy(str, "Open");
|
||||
break;
|
||||
case 8:
|
||||
strcpy(str, "ring");
|
||||
strcpy(str, "Ring");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
@@ -1058,13 +1057,13 @@ void NetworkOpener::fobActionToString(const int fobact, char* str) {
|
||||
void NetworkOpener::capabilitiesToString(const int capabilities, char* str) {
|
||||
switch (capabilities) {
|
||||
case 0:
|
||||
strcpy(str, "dooropener");
|
||||
strcpy(str, "Door opener");
|
||||
break;
|
||||
case 1:
|
||||
strcpy(str, "both");
|
||||
strcpy(str, "Both");
|
||||
break;
|
||||
case 2:
|
||||
strcpy(str, "rto");
|
||||
strcpy(str, "RTO");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
@@ -1075,52 +1074,84 @@ void NetworkOpener::capabilitiesToString(const int capabilities, char* str) {
|
||||
void NetworkOpener::operatingModeToString(const int opmode, char* str) {
|
||||
switch (opmode) {
|
||||
case 0:
|
||||
strcpy(str, "genericdooropener");
|
||||
strcpy(str, "Generic door opener");
|
||||
break;
|
||||
case 1:
|
||||
strcpy(str, "analogueintercom");
|
||||
strcpy(str, "Analogue intercom");
|
||||
break;
|
||||
case 2:
|
||||
strcpy(str, "digitalintercom");
|
||||
strcpy(str, "Digital intercom");
|
||||
break;
|
||||
case 3:
|
||||
strcpy(str, "siedle");
|
||||
strcpy(str, "Siedle");
|
||||
break;
|
||||
case 4:
|
||||
strcpy(str, "tcs");
|
||||
strcpy(str, "TCS");
|
||||
break;
|
||||
case 5:
|
||||
strcpy(str, "bticino");
|
||||
strcpy(str, "Bticino");
|
||||
break;
|
||||
case 6:
|
||||
strcpy(str, "siedlehts");
|
||||
strcpy(str, "Siedle HTS");
|
||||
break;
|
||||
case 7:
|
||||
strcpy(str, "str");
|
||||
strcpy(str, "STR");
|
||||
break;
|
||||
case 8:
|
||||
strcpy(str, "ritto");
|
||||
strcpy(str, "Ritto");
|
||||
break;
|
||||
case 9:
|
||||
strcpy(str, "fermax");
|
||||
strcpy(str, "Fermax");
|
||||
break;
|
||||
case 10:
|
||||
strcpy(str, "comelit");
|
||||
strcpy(str, "Comelit");
|
||||
break;
|
||||
case 11:
|
||||
strcpy(str, "urmetbibus");
|
||||
strcpy(str, "Urmet BiBus");
|
||||
break;
|
||||
case 12:
|
||||
strcpy(str, "urmet2voice");
|
||||
strcpy(str, "Urmet 2Voice");
|
||||
break;
|
||||
case 13:
|
||||
strcpy(str, "golmar");
|
||||
strcpy(str, "Golmar");
|
||||
break;
|
||||
case 14:
|
||||
strcpy(str, "sks");
|
||||
strcpy(str, "SKS");
|
||||
break;
|
||||
case 15:
|
||||
strcpy(str, "spare");
|
||||
strcpy(str, "Spare");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkOpener::doorbellSuppressionToString(const int dbsupr, char* str) {
|
||||
switch (dbsupr) {
|
||||
case 0:
|
||||
strcpy(str, "Off");
|
||||
break;
|
||||
case 1:
|
||||
strcpy(str, "CM");
|
||||
break;
|
||||
case 2:
|
||||
strcpy(str, "RTO");
|
||||
break;
|
||||
case 3:
|
||||
strcpy(str, "CM & RTO");
|
||||
break;
|
||||
case 4:
|
||||
strcpy(str, "Ring");
|
||||
break;
|
||||
case 5:
|
||||
strcpy(str, "CM & Ring");
|
||||
break;
|
||||
case 6:
|
||||
strcpy(str, "RTO & Ring");
|
||||
break;
|
||||
case 7:
|
||||
strcpy(str, "CM & RTO & Ring");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
|
||||
@@ -67,6 +67,7 @@ private:
|
||||
void timeZoneIdToString(const Nuki::TimeZoneId timeZoneId, char* str);
|
||||
void fobActionToString(const int fobact, char* str);
|
||||
void operatingModeToString(const int opmode, char* str);
|
||||
void doorbellSuppressionToString(const int dbsupr, char* str);
|
||||
void capabilitiesToString(const int capabilities, char* str);
|
||||
|
||||
String concat(String a, String b);
|
||||
|
||||
@@ -554,10 +554,10 @@ void NukiOpenerWrapper::onConfigUpdateReceivedCallback(const char *value)
|
||||
|
||||
Nuki::AdvertisingMode NukiOpenerWrapper::advertisingModeToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "automatic") == 0) return Nuki::AdvertisingMode::Automatic;
|
||||
else if(strcmp(str, "normal") == 0) return Nuki::AdvertisingMode::Normal;
|
||||
else if(strcmp(str, "slow") == 0) return Nuki::AdvertisingMode::Slow;
|
||||
else if(strcmp(str, "slowest") == 0) return Nuki::AdvertisingMode::Slowest;
|
||||
if(strcmp(str, "Automatic") == 0) return Nuki::AdvertisingMode::Automatic;
|
||||
else if(strcmp(str, "Normal") == 0) return Nuki::AdvertisingMode::Normal;
|
||||
else if(strcmp(str, "Slow") == 0) return Nuki::AdvertisingMode::Slow;
|
||||
else if(strcmp(str, "Slowest") == 0) return Nuki::AdvertisingMode::Slowest;
|
||||
return (Nuki::AdvertisingMode)0xff;
|
||||
}
|
||||
|
||||
@@ -609,60 +609,73 @@ Nuki::TimeZoneId NukiOpenerWrapper::timeZoneToEnum(const char *str)
|
||||
else if(strcmp(str, "Pacific/Guam") == 0) return Nuki::TimeZoneId::Pacific_Guam;
|
||||
else if(strcmp(str, "Pacific/Honolulu") == 0) return Nuki::TimeZoneId::Pacific_Honolulu;
|
||||
else if(strcmp(str, "Pacific/Pago_Pago") == 0) return Nuki::TimeZoneId::Pacific_Pago_Pago;
|
||||
else if(strcmp(str, "none") == 0) return Nuki::TimeZoneId::None;
|
||||
else if(strcmp(str, "None") == 0) return Nuki::TimeZoneId::None;
|
||||
return (Nuki::TimeZoneId)0xff;
|
||||
}
|
||||
|
||||
uint8_t NukiOpenerWrapper::fobActionToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "noaction") == 0) return 0;
|
||||
else if(strcmp(str, "togglerto") == 0) return 1;
|
||||
else if(strcmp(str, "activaterto") == 0) return 2;
|
||||
else if(strcmp(str, "deactivaterto") == 0) return 3;
|
||||
else if(strcmp(str, "open") == 0) return 7;
|
||||
else if(strcmp(str, "ring") == 0) return 8;
|
||||
if(strcmp(str, "No Action") == 0) return 0;
|
||||
else if(strcmp(str, "Toggle RTO") == 0) return 1;
|
||||
else if(strcmp(str, "Activate RTO") == 0) return 2;
|
||||
else if(strcmp(str, "Deactivate RTO") == 0) return 3;
|
||||
else if(strcmp(str, "Open") == 0) return 7;
|
||||
else if(strcmp(str, "Ring") == 0) return 8;
|
||||
return 99;
|
||||
}
|
||||
|
||||
uint8_t NukiOpenerWrapper::operatingModeToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "genericdooropener") == 0) return 0;
|
||||
else if(strcmp(str, "analogueintercom") == 0) return 1;
|
||||
else if(strcmp(str, "digitalintercom") == 0) return 2;
|
||||
else if(strcmp(str, "siedle") == 0) return 3;
|
||||
else if(strcmp(str, "tcs") == 0) return 4;
|
||||
else if(strcmp(str, "bticino") == 0) return 5;
|
||||
else if(strcmp(str, "siedlehts") == 0) return 6;
|
||||
else if(strcmp(str, "str") == 0) return 7;
|
||||
else if(strcmp(str, "ritto") == 0) return 8;
|
||||
else if(strcmp(str, "fermax") == 0) return 9;
|
||||
else if(strcmp(str, "comelit") == 0) return 10;
|
||||
else if(strcmp(str, "urmetbibus") == 0) return 11;
|
||||
else if(strcmp(str, "urmet2voice") == 0) return 12;
|
||||
else if(strcmp(str, "golmar") == 0) return 13;
|
||||
else if(strcmp(str, "sks") == 0) return 14;
|
||||
else if(strcmp(str, "spare") == 0) return 15;
|
||||
if(strcmp(str, "Generic door opener") == 0) return 0;
|
||||
else if(strcmp(str, "Analogue intercom") == 0) return 1;
|
||||
else if(strcmp(str, "Digital intercom") == 0) return 2;
|
||||
else if(strcmp(str, "Siedle") == 0) return 3;
|
||||
else if(strcmp(str, "TCS") == 0) return 4;
|
||||
else if(strcmp(str, "Bticino") == 0) return 5;
|
||||
else if(strcmp(str, "Siedle HTS") == 0) return 6;
|
||||
else if(strcmp(str, "STR") == 0) return 7;
|
||||
else if(strcmp(str, "Ritto") == 0) return 8;
|
||||
else if(strcmp(str, "Fermax") == 0) return 9;
|
||||
else if(strcmp(str, "Comelit") == 0) return 10;
|
||||
else if(strcmp(str, "Urmet BiBus") == 0) return 11;
|
||||
else if(strcmp(str, "Urmet 2Voice") == 0) return 12;
|
||||
else if(strcmp(str, "Golmar") == 0) return 13;
|
||||
else if(strcmp(str, "SKS") == 0) return 14;
|
||||
else if(strcmp(str, "Spare") == 0) return 15;
|
||||
return 99;
|
||||
}
|
||||
|
||||
uint8_t NukiOpenerWrapper::doorbellSuppressionToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "Off") == 0) return 0;
|
||||
else if(strcmp(str, "CM") == 0) return 1;
|
||||
else if(strcmp(str, "RTO") == 0) return 2;
|
||||
else if(strcmp(str, "CM & RTO") == 0) return 3;
|
||||
else if(strcmp(str, "Ring") == 0) return 4;
|
||||
else if(strcmp(str, "CM & Ring") == 0) return 5;
|
||||
else if(strcmp(str, "RTO & Ring") == 0) return 6;
|
||||
else if(strcmp(str, "CM & RTO & Ring") == 0) return 7;
|
||||
return 99;
|
||||
}
|
||||
|
||||
NukiOpener::ButtonPressAction NukiOpenerWrapper::buttonPressActionToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "noaction") == 0) return NukiOpener::ButtonPressAction::NoAction;
|
||||
else if(strcmp(str, "togglerto") == 0) return NukiOpener::ButtonPressAction::ToggleRTO;
|
||||
else if(strcmp(str, "activaterto") == 0) return NukiOpener::ButtonPressAction::ActivateRTO;
|
||||
else if(strcmp(str, "deactivaterto") == 0) return NukiOpener::ButtonPressAction::DeactivateRTO;
|
||||
else if(strcmp(str, "togglecm") == 0) return NukiOpener::ButtonPressAction::ToggleCM;
|
||||
else if(strcmp(str, "activatecm") == 0) return NukiOpener::ButtonPressAction::ActivateCM;
|
||||
else if(strcmp(str, "deactivatecm") == 0) return NukiOpener::ButtonPressAction::DectivateCM;
|
||||
else if(strcmp(str, "open") == 0) return NukiOpener::ButtonPressAction::Open;
|
||||
if(strcmp(str, "No Action") == 0) return NukiOpener::ButtonPressAction::NoAction;
|
||||
else if(strcmp(str, "Toggle RTO") == 0) return NukiOpener::ButtonPressAction::ToggleRTO;
|
||||
else if(strcmp(str, "Activate RTO") == 0) return NukiOpener::ButtonPressAction::ActivateRTO;
|
||||
else if(strcmp(str, "Deactivate RTO") == 0) return NukiOpener::ButtonPressAction::DeactivateRTO;
|
||||
else if(strcmp(str, "Toggle CM") == 0) return NukiOpener::ButtonPressAction::ToggleCM;
|
||||
else if(strcmp(str, "Activate CM") == 0) return NukiOpener::ButtonPressAction::ActivateCM;
|
||||
else if(strcmp(str, "Deactivate CM") == 0) return NukiOpener::ButtonPressAction::DectivateCM;
|
||||
else if(strcmp(str, "Open") == 0) return NukiOpener::ButtonPressAction::Open;
|
||||
return (NukiOpener::ButtonPressAction)0xff;
|
||||
}
|
||||
|
||||
Nuki::BatteryType NukiOpenerWrapper::batteryTypeToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "alkali") == 0) return Nuki::BatteryType::Alkali;
|
||||
else if(strcmp(str, "accumulators") == 0) return Nuki::BatteryType::Accumulators;
|
||||
else if(strcmp(str, "lithium") == 0) return Nuki::BatteryType::Lithium;
|
||||
if(strcmp(str, "Alkali") == 0) return Nuki::BatteryType::Alkali;
|
||||
else if(strcmp(str, "Accumulators") == 0) return Nuki::BatteryType::Accumulators;
|
||||
else if(strcmp(str, "Lithium") == 0) return Nuki::BatteryType::Lithium;
|
||||
return (Nuki::BatteryType)0xff;
|
||||
}
|
||||
|
||||
@@ -978,14 +991,14 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
|
||||
}
|
||||
else if(strcmp(advancedKeys[i], "doorbellSuppression") == 0)
|
||||
{
|
||||
const uint8_t keyvalue = atoi(json[advancedKeys[i]]);
|
||||
const uint8_t dbsupr = nukiOpenerInst->doorbellSuppressionToInt(json[advancedKeys[i]]);
|
||||
|
||||
if(keyvalue >= 0 && keyvalue <= 8)
|
||||
if(dbsupr != 99)
|
||||
{
|
||||
if(_nukiAdvancedConfig.doorbellSuppression == keyvalue) jsonResult[advancedKeys[i]] = "unchanged";
|
||||
else cmdResult = _nukiOpener.setDoorbellSuppression(keyvalue);
|
||||
if(_nukiAdvancedConfig.doorbellSuppression == dbsupr) jsonResult[advancedKeys[i]] = "unchanged";
|
||||
else cmdResult = _nukiOpener.setDoorbellSuppression(dbsupr);
|
||||
}
|
||||
else jsonResult[advancedKeys[i]] = "invalidvalue";
|
||||
else jsonResult[basicKeys[i]] = "invalidvalue";
|
||||
}
|
||||
else if(strcmp(advancedKeys[i], "doorbellSuppressionDuration") == 0)
|
||||
{
|
||||
|
||||
@@ -74,6 +74,7 @@ private:
|
||||
Nuki::TimeZoneId timeZoneToEnum(const char* str);
|
||||
uint8_t fobActionToInt(const char *str);
|
||||
uint8_t operatingModeToInt(const char *str);
|
||||
uint8_t doorbellSuppressionToInt(const char *str);
|
||||
NukiOpener::ButtonPressAction buttonPressActionToEnum(const char* str);
|
||||
Nuki::BatteryType batteryTypeToEnum(const char* str);
|
||||
|
||||
|
||||
@@ -529,10 +529,10 @@ void NukiWrapper::onConfigUpdateReceivedCallback(const char *value)
|
||||
|
||||
Nuki::AdvertisingMode NukiWrapper::advertisingModeToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "automatic") == 0) return Nuki::AdvertisingMode::Automatic;
|
||||
else if(strcmp(str, "normal") == 0) return Nuki::AdvertisingMode::Normal;
|
||||
else if(strcmp(str, "slow") == 0) return Nuki::AdvertisingMode::Slow;
|
||||
else if(strcmp(str, "slowest") == 0) return Nuki::AdvertisingMode::Slowest;
|
||||
if(strcmp(str, "Automatic") == 0) return Nuki::AdvertisingMode::Automatic;
|
||||
else if(strcmp(str, "Normal") == 0) return Nuki::AdvertisingMode::Normal;
|
||||
else if(strcmp(str, "Slow") == 0) return Nuki::AdvertisingMode::Slow;
|
||||
else if(strcmp(str, "Slowest") == 0) return Nuki::AdvertisingMode::Slowest;
|
||||
return (Nuki::AdvertisingMode)0xff;
|
||||
}
|
||||
|
||||
@@ -584,37 +584,37 @@ Nuki::TimeZoneId NukiWrapper::timeZoneToEnum(const char *str)
|
||||
else if(strcmp(str, "Pacific/Guam") == 0) return Nuki::TimeZoneId::Pacific_Guam;
|
||||
else if(strcmp(str, "Pacific/Honolulu") == 0) return Nuki::TimeZoneId::Pacific_Honolulu;
|
||||
else if(strcmp(str, "Pacific/Pago_Pago") == 0) return Nuki::TimeZoneId::Pacific_Pago_Pago;
|
||||
else if(strcmp(str, "none") == 0) return Nuki::TimeZoneId::None;
|
||||
else if(strcmp(str, "None") == 0) return Nuki::TimeZoneId::None;
|
||||
return (Nuki::TimeZoneId)0xff;
|
||||
}
|
||||
|
||||
uint8_t NukiWrapper::fobActionToInt(const char *str)
|
||||
{
|
||||
if(strcmp(str, "noaction") == 0) return 0;
|
||||
else if(strcmp(str, "unlock") == 0) return 1;
|
||||
else if(strcmp(str, "lock") == 0) return 2;
|
||||
else if(strcmp(str, "lockngo") == 0) return 3;
|
||||
else if(strcmp(str, "intelligent") == 0) return 4;
|
||||
if(strcmp(str, "No Action") == 0) return 0;
|
||||
else if(strcmp(str, "Unlock") == 0) return 1;
|
||||
else if(strcmp(str, "Lock") == 0) return 2;
|
||||
else if(strcmp(str, "Lock n Go") == 0) return 3;
|
||||
else if(strcmp(str, "Intelligent") == 0) return 4;
|
||||
return 99;
|
||||
}
|
||||
|
||||
NukiLock::ButtonPressAction NukiWrapper::buttonPressActionToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "noaction") == 0) return NukiLock::ButtonPressAction::NoAction;
|
||||
else if(strcmp(str, "intelligent") == 0) return NukiLock::ButtonPressAction::Intelligent;
|
||||
else if(strcmp(str, "unlock") == 0) return NukiLock::ButtonPressAction::Unlock;
|
||||
else if(strcmp(str, "lock") == 0) return NukiLock::ButtonPressAction::Lock;
|
||||
else if(strcmp(str, "unlatch") == 0) return NukiLock::ButtonPressAction::Unlatch;
|
||||
else if(strcmp(str, "lockngo") == 0) return NukiLock::ButtonPressAction::LockNgo;
|
||||
else if(strcmp(str, "showstatus") == 0) return NukiLock::ButtonPressAction::ShowStatus;
|
||||
if(strcmp(str, "No Action") == 0) return NukiLock::ButtonPressAction::NoAction;
|
||||
else if(strcmp(str, "Intelligent") == 0) return NukiLock::ButtonPressAction::Intelligent;
|
||||
else if(strcmp(str, "Unlock") == 0) return NukiLock::ButtonPressAction::Unlock;
|
||||
else if(strcmp(str, "Lock") == 0) return NukiLock::ButtonPressAction::Lock;
|
||||
else if(strcmp(str, "Unlatch") == 0) return NukiLock::ButtonPressAction::Unlatch;
|
||||
else if(strcmp(str, "Lock n Go") == 0) return NukiLock::ButtonPressAction::LockNgo;
|
||||
else if(strcmp(str, "Show Status") == 0) return NukiLock::ButtonPressAction::ShowStatus;
|
||||
return (NukiLock::ButtonPressAction)0xff;
|
||||
}
|
||||
|
||||
Nuki::BatteryType NukiWrapper::batteryTypeToEnum(const char* str)
|
||||
{
|
||||
if(strcmp(str, "alkali") == 0) return Nuki::BatteryType::Alkali;
|
||||
else if(strcmp(str, "accumulators") == 0) return Nuki::BatteryType::Accumulators;
|
||||
else if(strcmp(str, "lithium") == 0) return Nuki::BatteryType::Lithium;
|
||||
if(strcmp(str, "Alkali") == 0) return Nuki::BatteryType::Alkali;
|
||||
else if(strcmp(str, "Accumulators") == 0) return Nuki::BatteryType::Accumulators;
|
||||
else if(strcmp(str, "Lithium") == 0) return Nuki::BatteryType::Lithium;
|
||||
return (Nuki::BatteryType)0xff;
|
||||
}
|
||||
|
||||
@@ -823,7 +823,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
{
|
||||
Nuki::AdvertisingMode advmode = nukiInst->advertisingModeToEnum(json[basicKeys[i]]);
|
||||
|
||||
if(!(int)advmode == 0xff)
|
||||
if((int)advmode != 0xff)
|
||||
{
|
||||
if(_nukiConfig.advertisingMode == advmode) jsonResult[basicKeys[i]] = "unchanged";
|
||||
else cmdResult = _nukiLock.setAdvertisingMode(advmode);
|
||||
@@ -834,7 +834,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
{
|
||||
Nuki::TimeZoneId tzid = nukiInst->timeZoneToEnum(json[basicKeys[i]]);
|
||||
|
||||
if(!(int)tzid == 0xff)
|
||||
if((int)tzid != 0xff)
|
||||
{
|
||||
if(_nukiConfig.timeZoneId == tzid) jsonResult[basicKeys[i]] = "unchanged";
|
||||
else cmdResult = _nukiLock.setTimeZoneId(tzid);
|
||||
@@ -921,7 +921,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
{
|
||||
NukiLock::ButtonPressAction sbpa = nukiInst->buttonPressActionToEnum(json[advancedKeys[i]]);
|
||||
|
||||
if(!(int)sbpa == 0xff)
|
||||
if((int)sbpa != 0xff)
|
||||
{
|
||||
if(_nukiAdvancedConfig.singleButtonPressAction == sbpa) jsonResult[advancedKeys[i]] = "unchanged";
|
||||
else cmdResult = _nukiLock.setSingleButtonPressAction(sbpa);
|
||||
@@ -932,7 +932,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
{
|
||||
NukiLock::ButtonPressAction dbpa = nukiInst->buttonPressActionToEnum(json[advancedKeys[i]]);
|
||||
|
||||
if(!(int)dbpa == 0xff)
|
||||
if((int)dbpa != 0xff)
|
||||
{
|
||||
if(_nukiAdvancedConfig.doubleButtonPressAction == dbpa) jsonResult[advancedKeys[i]] = "unchanged";
|
||||
else cmdResult = _nukiLock.setDoubleButtonPressAction(dbpa);
|
||||
@@ -954,7 +954,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value)
|
||||
{
|
||||
Nuki::BatteryType battype = nukiInst->batteryTypeToEnum(json[advancedKeys[i]]);
|
||||
|
||||
if(!(int)battype == 0xff)
|
||||
if((int)battype != 0xff)
|
||||
{
|
||||
if(_nukiAdvancedConfig.batteryType == battype) jsonResult[advancedKeys[i]] = "unchanged";
|
||||
else cmdResult = _nukiLock.setBatteryType(battype);
|
||||
|
||||
@@ -1239,7 +1239,7 @@ void WebCfgServer::buildAccLvlHtml(String &response)
|
||||
_preferences->getBytes(preference_conf_lock_advanced_acl, &advancedLockConfigAclPrefs, sizeof(advancedLockConfigAclPrefs));
|
||||
|
||||
response.concat("<h3>Nuki Lock Access Control</h3>");
|
||||
response.concat("<input type=\"button\" value=\"Allow all\" onclick=\"");
|
||||
response.concat("<input type=\"button\" value=\"Allow all\" style=\"margin-right: 10px;\" onclick=\"");
|
||||
response.concat("for(el of document.getElementsByClassName('chk_access_lock')){if(el.constructor.name==='HTMLInputElement'&&el.type==='checkbox')el.checked=true;}\">");
|
||||
response.concat("<input type=\"button\" value=\"Disallow all\" onclick=\"");
|
||||
response.concat("for(el of document.getElementsByClassName('chk_access_lock')){if(el.constructor.name==='HTMLInputElement'&&el.type==='checkbox')el.checked=false;}\">");
|
||||
@@ -1257,7 +1257,7 @@ void WebCfgServer::buildAccLvlHtml(String &response)
|
||||
response.concat("</table><br>");
|
||||
|
||||
response.concat("<h3>Nuki Lock Config Control (Requires PIN to be set)</h3>");
|
||||
response.concat("<input type=\"button\" value=\"Allow all\" onclick=\"");
|
||||
response.concat("<input type=\"button\" value=\"Allow all\" style=\"margin-right: 10px;\" onclick=\"");
|
||||
response.concat("for(el of document.getElementsByClassName('chk_config_lock')){if(el.constructor.name==='HTMLInputElement'&&el.type==='checkbox')el.checked=true;}\">");
|
||||
response.concat("<input type=\"button\" value=\"Disallow all\" onclick=\"");
|
||||
response.concat("for(el of document.getElementsByClassName('chk_config_lock')){if(el.constructor.name==='HTMLInputElement'&&el.type==='checkbox')el.checked=false;}\">");
|
||||
@@ -1312,7 +1312,7 @@ void WebCfgServer::buildAccLvlHtml(String &response)
|
||||
_preferences->getBytes(preference_conf_opener_advanced_acl, &advancedOpenerConfigAclPrefs, sizeof(advancedOpenerConfigAclPrefs));
|
||||
|
||||
response.concat("<h3>Nuki Opener Access Control</h3>");
|
||||
response.concat("<input type=\"button\" value=\"Allow all\" onclick=\"");
|
||||
response.concat("<input type=\"button\" value=\"Allow all\" style=\"margin-right: 10px;\" onclick=\"");
|
||||
response.concat("for(el of document.getElementsByClassName('chk_access_opener')){if(el.constructor.name==='HTMLInputElement'&&el.type==='checkbox')el.checked=true;}\">");
|
||||
response.concat("<input type=\"button\" value=\"Disallow all\" onclick=\"");
|
||||
response.concat("for(el of document.getElementsByClassName('chk_access_opener')){if(el.constructor.name==='HTMLInputElement'&&el.type==='checkbox')el.checked=false;}\">");
|
||||
@@ -1329,7 +1329,7 @@ void WebCfgServer::buildAccLvlHtml(String &response)
|
||||
response.concat("</table><br>");
|
||||
|
||||
response.concat("<h3>Nuki Opener Config Control (Requires PIN to be set)</h3>");
|
||||
response.concat("<input type=\"button\" value=\"Allow all\" onclick=\"");
|
||||
response.concat("<input type=\"button\" value=\"Allow all\" style=\"margin-right: 10px;\" onclick=\"");
|
||||
response.concat("for(el of document.getElementsByClassName('chk_config_opener')){if(el.constructor.name==='HTMLInputElement'&&el.type==='checkbox')el.checked=true;}\">");
|
||||
response.concat("<input type=\"button\" value=\"Disallow all\" onclick=\"");
|
||||
response.concat("for(el of document.getElementsByClassName('chk_config_opener')){if(el.constructor.name==='HTMLInputElement'&&el.type==='checkbox')el.checked=false;}\">");
|
||||
@@ -1346,7 +1346,7 @@ void WebCfgServer::buildAccLvlHtml(String &response)
|
||||
printCheckBox(response, "CONFOPNFOB1", "Fob Action 1", ((int)basicOpenerConfigAclPrefs[8] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNFOB2", "Fob Action 2", ((int)basicOpenerConfigAclPrefs[9] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNFOB3", "Fob Action 3", ((int)basicOpenerConfigAclPrefs[10] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNOPM", "Operation Mode", ((int)basicOpenerConfigAclPrefs[11] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNOPM", "Operating Mode", ((int)basicOpenerConfigAclPrefs[11] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNADVM", "Advertising Mode", ((int)basicOpenerConfigAclPrefs[12] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNTZID", "Timezone ID", ((int)basicOpenerConfigAclPrefs[13] == 1), "chk_config_opener");
|
||||
|
||||
@@ -1356,7 +1356,7 @@ void WebCfgServer::buildAccLvlHtml(String &response)
|
||||
printCheckBox(response, "CONFOPNESD", "Eletric Strike Delay", ((int)advancedOpenerConfigAclPrefs[3] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNRESD", "Random Electric Strike Delay", ((int)advancedOpenerConfigAclPrefs[4] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNESDUR", "Electric Strike Duration", ((int)advancedOpenerConfigAclPrefs[5] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNDRTOAR", "disable RTO after ring", ((int)advancedOpenerConfigAclPrefs[6] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNDRTOAR", "Disable RTO after ring", ((int)advancedOpenerConfigAclPrefs[6] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNRTOT", "RTO timeout", ((int)advancedOpenerConfigAclPrefs[7] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNDRBSUP", "Doorbell suppression", ((int)advancedOpenerConfigAclPrefs[8] == 1), "chk_config_opener");
|
||||
printCheckBox(response, "CONFOPNDRBSUPDUR", "Doorbell suppression duration", ((int)advancedOpenerConfigAclPrefs[9] == 1), "chk_config_opener");
|
||||
@@ -1656,7 +1656,7 @@ void WebCfgServer::buildInfoHtml(String &response)
|
||||
response.concat((int)basicOpenerConfigAclPrefs[9] ? "Allowed\n" : "Disallowed\n");
|
||||
response.concat("Opener config ACL (Fob Action 3): ");
|
||||
response.concat((int)basicOpenerConfigAclPrefs[10] ? "Allowed\n" : "Disallowed\n");
|
||||
response.concat("Opener config ACL (Operation Mode): ");
|
||||
response.concat("Opener config ACL (Operating Mode): ");
|
||||
response.concat((int)basicOpenerConfigAclPrefs[11] ? "Allowed\n" : "Disallowed\n");
|
||||
response.concat("Opener config ACL (Advertising Mode): ");
|
||||
response.concat((int)basicOpenerConfigAclPrefs[12] ? "Allowed\n" : "Disallowed\n");
|
||||
@@ -1674,7 +1674,7 @@ void WebCfgServer::buildInfoHtml(String &response)
|
||||
response.concat((int)advancedOpenerConfigAclPrefs[4] ? "Allowed\n" : "Disallowed\n");
|
||||
response.concat("Opener config ACL (Electric Strike Duration): ");
|
||||
response.concat((int)advancedOpenerConfigAclPrefs[5] ? "Allowed\n" : "Disallowed\n");
|
||||
response.concat("Opener config ACL (disable RTO after ring): ");
|
||||
response.concat("Opener config ACL (Disable RTO after ring): ");
|
||||
response.concat((int)advancedOpenerConfigAclPrefs[6] ? "Allowed\n" : "Disallowed\n");
|
||||
response.concat("Opener config ACL (RTO timeout): ");
|
||||
response.concat((int)advancedOpenerConfigAclPrefs[7] ? "Allowed\n" : "Disallowed\n");
|
||||
|
||||
Reference in New Issue
Block a user