From 509e03be160cbc3eeb942bfcc2bb55bcde6427cf Mon Sep 17 00:00:00 2001 From: Ton Huisman Date: Thu, 26 Jan 2023 23:34:14 +0100 Subject: [PATCH] [Config] Replace Settings.Name by Settings.getUnitname() --- src/_C006.cpp | 2 +- src/_C009.cpp | 2 +- src/_C014.cpp | 23 ++++++++++---------- src/_C017.cpp | 2 +- src/src/Commands/Settings.cpp | 13 ++++++----- src/src/DataStructs/NodesHandler.cpp | 2 +- src/src/DataStructs/SettingsStruct.h | 3 +++ src/src/DataStructs_templ/SettingsStruct.cpp | 9 ++++++-- src/src/Helpers/Networking.cpp | 2 +- src/src/Helpers/StringProvider.cpp | 2 +- src/src/WebServer/CacheControllerPages.cpp | 2 +- src/src/WebServer/CustomPage.cpp | 2 +- src/src/WebServer/DownloadPage.cpp | 2 +- src/src/WebServer/JSON.cpp | 4 ++-- src/src/WebServer/RootPage.cpp | 2 +- src/src/WebServer/WebTemplateParser.cpp | 2 +- 16 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/_C006.cpp b/src/_C006.cpp index 1e0c4d2c1..55180e3d4 100644 --- a/src/_C006.cpp +++ b/src/_C006.cpp @@ -84,7 +84,7 @@ bool CPlugin_006(CPlugin::Function function, struct EventStruct *event, String& String name = topicSplit[4]; - if (name == Settings.Name) + if (name.equals(Settings.getUnitname())) { String cmd = topicSplit[5]; cmd += ','; diff --git a/src/_C009.cpp b/src/_C009.cpp index 599d50a71..0d18ec92d 100644 --- a/src/_C009.cpp +++ b/src/_C009.cpp @@ -135,7 +135,7 @@ bool do_process_c009_delay_queue(int controller_number, const Queue_element_base jsonString += F("\"ESP\":{"); { // Create nested objects in "ESP": - jsonString += to_json_object_value(F("name"), Settings.Name); + jsonString += to_json_object_value(F("name"), Settings.getUnitname()); jsonString += ','; jsonString += to_json_object_value(F("unit"), String(Settings.Unit)); jsonString += ','; diff --git a/src/_C014.cpp b/src/_C014.cpp index 0f1cdd468..c91e2c17a 100644 --- a/src/_C014.cpp +++ b/src/_C014.cpp @@ -211,7 +211,7 @@ bool CPlugin_014(CPlugin::Function function, struct EventStruct *event, String& errorCounter = 0; pubname = CPLUGIN_014_BASE_TOPIC; // Scheme to form device messages - pubname.replace(F("%sysname%"), Settings.Name); + pubname.replace(F("%sysname%"), Settings.getUnitname()); # ifdef CPLUGIN_014_V3 @@ -262,7 +262,7 @@ bool CPlugin_014(CPlugin::Function function, struct EventStruct *event, String& // send autodiscover header pubname = CPLUGIN_014_BASE_TOPIC; // Scheme to form device messages - pubname.replace(F("%sysname%"), Settings.Name); + pubname.replace(F("%sysname%"), Settings.getUnitname()); int deviceCount = 1; // minimum the SYSTEM device exists int nodeCount = 1; // minimum the cmd node exists errorCounter = 0; @@ -270,7 +270,7 @@ bool CPlugin_014(CPlugin::Function function, struct EventStruct *event, String& if (lastBootCause != BOOT_CAUSE_DEEP_SLEEP) // skip sending autodiscover data when returning from deep sleep { String nodename = CPLUGIN_014_BASE_VALUE; // Scheme to form node messages - nodename.replace(F("%sysname%"), Settings.Name); + nodename.replace(F("%sysname%"), Settings.getUnitname()); String nodesList; // build comma separated List for nodes String valuesList; // build comma separated List for values String deviceName; // current Device Name nr:name @@ -285,7 +285,7 @@ bool CPlugin_014(CPlugin::Function function, struct EventStruct *event, String& CPlugin_014_sendMQTTdevice(pubname, event->TaskIndex, F("$homie"), F(CPLUGIN_014_HOMIE_VERSION), errorCounter); // $name Device → Controller Friendly name of the device Yes Yes - CPlugin_014_sendMQTTdevice(pubname, event->TaskIndex, F("$name"), Settings.Name, errorCounter); + CPlugin_014_sendMQTTdevice(pubname, event->TaskIndex, F("$name"), Settings.getUnitname(), errorCounter); // $localip Device → Controller IP of the device on the local network Yes Yes # ifdef CPLUGIN_014_V3 @@ -663,7 +663,7 @@ bool CPlugin_014(CPlugin::Function function, struct EventStruct *event, String& case CPlugin::Function::CPLUGIN_GOT_INVALID: { pubname = CPLUGIN_014_BASE_TOPIC; // Scheme to form device messages - pubname.replace(F("%sysname%"), Settings.Name); + pubname.replace(F("%sysname%"), Settings.getUnitname()); // disconnected: this is the state the device is in when it is cleanly disconnected from the MQTT broker. You must send this message // before cleanly disconnecting @@ -671,10 +671,11 @@ bool CPlugin_014(CPlugin::Function function, struct EventStruct *event, String& if (loglevelActiveFor(LOG_LEVEL_INFO)) { String log = F("C014 : Device: "); - log += Settings.Name; + log += Settings.getUnitname(); + log += F(" got invalid (disconnect"); - if (success) { log += F(" got invalid (disconnected)."); } - else { log += F(" got invaild (disconnect) failed!"); } + if (success) { log += F("ed)."); } + else { log += F(") failed!"); } addLogMove(LOG_LEVEL_INFO, log); } break; @@ -683,7 +684,7 @@ bool CPlugin_014(CPlugin::Function function, struct EventStruct *event, String& case CPlugin::Function::CPLUGIN_FLUSH: { pubname = CPLUGIN_014_BASE_TOPIC; // Scheme to form device messages - pubname.replace(F("%sysname%"), Settings.Name); + pubname.replace(F("%sysname%"), Settings.getUnitname()); // sleeping: this is the state the device is in when the device is sleeping. You have to send this message before sleeping. success = CPlugin_014_sendMQTTdevice(pubname, event->TaskIndex, F("$state"), F("sleeping"), errorCounter); @@ -982,7 +983,7 @@ bool CPlugin_014(CPlugin::Function function, struct EventStruct *event, String& if (valueInt == 1) { valueBool = F("true"); } String topic = CPLUGIN_014_PUBLISH; // ControllerSettings.Publish not used because it can be modified by the user! - topic.replace(F("%sysname%"), Settings.Name); + topic.replace(F("%sysname%"), Settings.getUnitname()); topic.replace(F("%tskname%"), F(CPLUGIN_014_SYSTEM_DEVICE)); topic.replace(F("%valname%"), String(F(CPLUGIN_014_GPIO_VALUE)) + toString(port, 0)); @@ -1018,7 +1019,7 @@ bool CPlugin_014(CPlugin::Function function, struct EventStruct *event, String& if (validTaskVarIndex(taskVarIndex)) { userVarIndex_t userVarIndex = event->BaseVarIndex + taskVarIndex; String topic = CPLUGIN_014_PUBLISH; - topic.replace(F("%sysname%"), Settings.Name); + topic.replace(F("%sysname%"), Settings.getUnitname()); int deviceIndex = event->Par1; // parseString(string, 2).toInt(); LoadTaskSettings(deviceIndex - 1); const String deviceName = getTaskDeviceName(event->TaskIndex); diff --git a/src/_C017.cpp b/src/_C017.cpp index b40c259b1..f6120bad3 100644 --- a/src/_C017.cpp +++ b/src/_C017.cpp @@ -125,7 +125,7 @@ bool do_process_c017_delay_queue(int controller_number, const Queue_element_base continue; // Zabbix will ignore an empty key anyway } JsonObject block = data.createNestedObject(); - block[F("host")] = Settings.Name; // Zabbix hostname, Unit Name for the ESP easy + block[F("host")] = Settings.getUnitname(); // Zabbix hostname, Unit Name for the ESP easy block[F("key")] = taskValueName; // Zabbix item key // Value Name for the ESP easy float value = 0.0f; validFloatFromString(element.txt[i], value); diff --git a/src/src/Commands/Settings.cpp b/src/src/Commands/Settings.cpp index 183c469be..407d4876b 100644 --- a/src/src/Commands/Settings.cpp +++ b/src/src/Commands/Settings.cpp @@ -42,11 +42,12 @@ String Command_Settings_Unit(struct EventStruct *event, const char* Line) String Command_Settings_Name(struct EventStruct *event, const char* Line) { - return Command_GetORSetString(event, F("Name:"), - Line, - Settings.Name, - sizeof(Settings.Name), - 1); + Command_GetORSetString(event, F("Name:"), + Line, + Settings.Name, + sizeof(Settings.Name), + 1); + return Settings.getUnitname(); } String Command_Settings_Password(struct EventStruct *event, const char* Line) @@ -92,7 +93,7 @@ const __FlashStringHelper * Command_Settings_Print(struct EventStruct *event, co serialPrintln(F("System Info")); serialPrint(F(" IP Address : ")); serialPrintln(NetworkLocalIP().toString()); serialPrint(F(" Build : ")); serialPrintln(String(get_build_nr()) + '/' + getSystemBuildString()); - serialPrint(F(" Name : ")); serialPrintln(Settings.Name); + serialPrint(F(" Name : ")); serialPrintln(Settings.getUnitname()); serialPrint(F(" Unit : ")); serialPrintln(String(static_cast(Settings.Unit))); serialPrint(F(" WifiSSID : ")); serialPrintln(SecuritySettings.WifiSSID); serialPrint(F(" WifiKey : ")); serialPrintln(SecuritySettings.WifiKey); diff --git a/src/src/DataStructs/NodesHandler.cpp b/src/src/DataStructs/NodesHandler.cpp index 0c4a003c5..747802fd3 100644 --- a/src/src/DataStructs/NodesHandler.cpp +++ b/src/src/DataStructs/NodesHandler.cpp @@ -374,7 +374,7 @@ void NodesHandler::updateThisNode() { thisNode.unit = Settings.Unit; thisNode.build = Settings.Build; - memcpy(thisNode.nodeName, Settings.Name, 25); + memcpy(thisNode.nodeName, Settings.getUnitname().c_str(), 25); thisNode.nodeType = NODE_TYPE_ID; thisNode.webgui_portnumber = Settings.WebserverPort; diff --git a/src/src/DataStructs/SettingsStruct.h b/src/src/DataStructs/SettingsStruct.h index 03e35ecb3..3005ae5ab 100644 --- a/src/src/DataStructs/SettingsStruct.h +++ b/src/src/DataStructs/SettingsStruct.h @@ -198,6 +198,9 @@ class SettingsStruct_tmpl // Return hostname with explicit set append unit. String getHostname(bool appendUnit) const; + // Return the name of the unit, without unitnr appended, with template parsing applied, replacement for Settings.Name in most places + String getUnitname() const; + PinBootState getPinBootState(uint8_t gpio_pin) const; void setPinBootState(uint8_t gpio_pin, PinBootState state); diff --git a/src/src/DataStructs_templ/SettingsStruct.cpp b/src/src/DataStructs_templ/SettingsStruct.cpp index d667c85e3..588f4c212 100644 --- a/src/src/DataStructs_templ/SettingsStruct.cpp +++ b/src/src/DataStructs_templ/SettingsStruct.cpp @@ -573,8 +573,7 @@ String SettingsStruct_tmpl::getHostname() const { template String SettingsStruct_tmpl::getHostname(bool appendUnit) const { - String hostname = this->Name; - hostname = parseTemplate(hostname); + String hostname = this->getUnitname(); if ((this->Unit != 0) && appendUnit) { // only append non-zero unit number hostname += '_'; @@ -583,6 +582,12 @@ String SettingsStruct_tmpl::getHostname(bool appendUnit) const { return hostname; } +template +String SettingsStruct_tmpl::getUnitname() const { + String unitname = this->Name; + return parseTemplate(unitname); +} + template PinBootState SettingsStruct_tmpl::getPinBootState(uint8_t gpio_pin) const { diff --git a/src/src/Helpers/Networking.cpp b/src/src/Helpers/Networking.cpp index 2dbe9e5b6..e8f85666b 100644 --- a/src/src/Helpers/Networking.cpp +++ b/src/src/Helpers/Networking.cpp @@ -544,7 +544,7 @@ void SSDP_schema(WiFiClient& client) { "" "urn:schemas-upnp-org:device:BinaryLight:1" "")); - client.print(Settings.Name); + client.print(Settings.getUnitname()); client.print(F("" "/" "")); diff --git a/src/src/Helpers/StringProvider.cpp b/src/src/Helpers/StringProvider.cpp index d596820ca..70a33ad94 100644 --- a/src/src/Helpers/StringProvider.cpp +++ b/src/src/Helpers/StringProvider.cpp @@ -262,7 +262,7 @@ String getValue(LabelType::Enum label) { return _unit; } #endif // FEATURE_ZEROFILLED_UNITNUMBER - case LabelType::UNIT_NAME: return String(Settings.Name); // Only return the set name, no appended unit. + case LabelType::UNIT_NAME: return Settings.getUnitname(); // Only return the set name, no appended unit. case LabelType::HOST_NAME: return NetworkGetHostname(); diff --git a/src/src/WebServer/CacheControllerPages.cpp b/src/src/WebServer/CacheControllerPages.cpp index ce72f45a6..fff3d075d 100644 --- a/src/src/WebServer/CacheControllerPages.cpp +++ b/src/src/WebServer/CacheControllerPages.cpp @@ -86,7 +86,7 @@ void handle_dumpcache() { { // Send HTTP headers to directly save the dump as a CSV file String str = F("attachment; filename=cachedump_"); - str += Settings.Name; + str += Settings.getUnitname(); str += F("_U"); str += Settings.Unit; diff --git a/src/src/WebServer/CustomPage.cpp b/src/src/WebServer/CustomPage.cpp index 212632ee4..22b71489b 100644 --- a/src/src/WebServer/CustomPage.cpp +++ b/src/src/WebServer/CustomPage.cpp @@ -93,7 +93,7 @@ bool handle_custom(const String& path) { name += it->second.getNodeName(); } else { - name += Settings.Name; + name += Settings.getUnitname(); } addSelector_Item(name, it->first, choice == it->first); } diff --git a/src/src/WebServer/DownloadPage.cpp b/src/src/WebServer/DownloadPage.cpp index fe7c0cecb..e47de4834 100644 --- a/src/src/WebServer/DownloadPage.cpp +++ b/src/src/WebServer/DownloadPage.cpp @@ -32,7 +32,7 @@ void handle_download() } String str = F("attachment; filename=config_"); - str += Settings.Name; + str += Settings.getUnitname(); str += F("_U"); str += Settings.Unit; str += F("_Build"); diff --git a/src/src/WebServer/JSON.cpp b/src/src/WebServer/JSON.cpp index cba8c0397..4f3eb4c26 100644 --- a/src/src/WebServer/JSON.cpp +++ b/src/src/WebServer/JSON.cpp @@ -324,7 +324,7 @@ void handle_json() addHtml('{'); stream_next_json_object_value(F("nr"), it->first); stream_next_json_object_value(F("name"), - (it->first != Settings.Unit) ? it->second.getNodeName() : Settings.Name); + (it->first != Settings.Unit) ? it->second.getNodeName() : Settings.getUnitname()); if (it->second.build) { stream_next_json_object_value(F("build"), formatSystemBuildNr(it->second.build)); @@ -541,7 +541,7 @@ void handle_nodes_list_json() { } json_number(F("first"), String(it->first)); - json_prop(F("name"), isThisUnit ? Settings.Name : it->second.getNodeName()); + json_prop(F("name"), isThisUnit ? Settings.getUnitname() : it->second.getNodeName()); if (it->second.build) { json_prop(F("build"), formatSystemBuildNr(it->second.build)); } json_prop(F("type"), it->second.getNodeTypeDisplayString()); diff --git a/src/src/WebServer/RootPage.cpp b/src/src/WebServer/RootPage.cpp index 4984fb713..61ef08d90 100644 --- a/src/src/WebServer/RootPage.cpp +++ b/src/src/WebServer/RootPage.cpp @@ -305,7 +305,7 @@ void handle_root() { html_TD(); if (isThisUnit) { - addHtml(Settings.Name); + addHtml(Settings.getUnitname()); } else { addHtml(it->second.getNodeName()); diff --git a/src/src/WebServer/WebTemplateParser.cpp b/src/src/WebServer/WebTemplateParser.cpp index 80b9c0f0d..16f64dd18 100644 --- a/src/src/WebServer/WebTemplateParser.cpp +++ b/src/src/WebServer/WebTemplateParser.cpp @@ -255,7 +255,7 @@ void WebTemplateParser::getWebPageTemplateVar(const String& varName) if (varName.equals(F("name"))) { - addHtml(Settings.Name); + addHtml(Settings.getUnitname()); } else if (varName.equals(F("unit")))