Home Assistant new

This commit is contained in:
iranl
2024-04-08 20:57:06 +02:00
parent e044a7d7a6
commit 346e40e1da
9 changed files with 2388 additions and 820 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -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);

View File

@@ -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");

View File

@@ -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");

View File

@@ -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);

View File

@@ -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)
{

View File

@@ -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);

View File

@@ -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);

View File

@@ -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'&amp;&amp;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'&amp;&amp;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'&amp;&amp;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'&amp;&amp;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'&amp;&amp;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'&amp;&amp;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'&amp;&amp;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'&amp;&amp;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");