diff --git a/esp32/lib/ESP32-sveltekit/ap_settings.h b/esp32/lib/ESP32-sveltekit/ap_settings.h index ccf848a..1ecbfd2 100644 --- a/esp32/lib/ESP32-sveltekit/ap_settings.h +++ b/esp32/lib/ESP32-sveltekit/ap_settings.h @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include @@ -98,7 +98,7 @@ class APSettings { case AP_MODE_NEVER: break; default: newSettings.provisionMode = AP_MODE_DISCONNECTED; } - newSettings.ssid = root["ssid"] | SettingValue::format(FACTORY_AP_SSID); + newSettings.ssid = root["ssid"] | format(FACTORY_AP_SSID); newSettings.password = root["password"] | FACTORY_AP_PASSWORD; newSettings.channel = root["channel"] | FACTORY_AP_CHANNEL; newSettings.ssidHidden = root["ssid_hidden"] | FACTORY_AP_SSID_HIDDEN; diff --git a/esp32/lib/ESP32-sveltekit/string_utilities.h b/esp32/lib/ESP32-sveltekit/string_utilities.h new file mode 100644 index 0000000..6eeba22 --- /dev/null +++ b/esp32/lib/ESP32-sveltekit/string_utilities.h @@ -0,0 +1,33 @@ +#pragma once + +#include + +constexpr static const char* PLATFORM = "esp32"; + +static String getRandom() { return String(random(2147483647), HEX); } + +static String getUniqueId() { + uint8_t mac[6]; + esp_read_mac(mac, ESP_MAC_WIFI_STA); + char macStr[13] = {0}; + sprintf(macStr, "%02x%02x%02x%02x%02x%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + return String(macStr); +} + +static String replaceEach(String value, String pattern, String (*generateReplacement)()) { + while (true) { + int index = value.indexOf(pattern); + if (index == -1) { + break; + } + value = value.substring(0, index) + generateReplacement() + value.substring(index + pattern.length()); + } + return value; +} + +static String format(String value) { + value = replaceEach(value, "#{random}", getRandom); + value.replace("#{unique_id}", getUniqueId()); + value.replace("#{platform}", PLATFORM); + return value; +} \ No newline at end of file diff --git a/esp32/lib/ESP32-sveltekit/wifi_settings.h b/esp32/lib/ESP32-sveltekit/wifi_settings.h index c9a1a7e..4e141a7 100644 --- a/esp32/lib/ESP32-sveltekit/wifi_settings.h +++ b/esp32/lib/ESP32-sveltekit/wifi_settings.h @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #ifndef FACTORY_WIFI_RSSI_THRESHOLD @@ -59,7 +59,7 @@ class WiFiSettings { } static StateUpdateResult update(JsonObject &root, WiFiSettings &settings) { - settings.hostname = root["hostname"] | SettingValue::format(FACTORY_WIFI_HOSTNAME); + settings.hostname = root["hostname"] | format(FACTORY_WIFI_HOSTNAME); settings.priorityBySignalStrength = root["priority_RSSI"] | true; settings.wifiSettings.clear();