diff --git a/ESP32_AP-Flasher/data/www/content_cards.json.gz b/ESP32_AP-Flasher/data/www/content_cards.json.gz
index a06edadc5..0977c7668 100644
Binary files a/ESP32_AP-Flasher/data/www/content_cards.json.gz and b/ESP32_AP-Flasher/data/www/content_cards.json.gz differ
diff --git a/ESP32_AP-Flasher/data/www/edit.html.gz b/ESP32_AP-Flasher/data/www/edit.html.gz
index b94cbe016..a5610f1f0 100644
Binary files a/ESP32_AP-Flasher/data/www/edit.html.gz and b/ESP32_AP-Flasher/data/www/edit.html.gz differ
diff --git a/ESP32_AP-Flasher/data/www/flash.js.gz b/ESP32_AP-Flasher/data/www/flash.js.gz
index 572e67926..f7ddd013b 100644
Binary files a/ESP32_AP-Flasher/data/www/flash.js.gz and b/ESP32_AP-Flasher/data/www/flash.js.gz differ
diff --git a/ESP32_AP-Flasher/data/www/jsontemplate-demo.html.gz b/ESP32_AP-Flasher/data/www/jsontemplate-demo.html.gz
index 0d7ef3ce1..1a93cab69 100644
Binary files a/ESP32_AP-Flasher/data/www/jsontemplate-demo.html.gz and b/ESP32_AP-Flasher/data/www/jsontemplate-demo.html.gz differ
diff --git a/ESP32_AP-Flasher/data/www/main.css.gz b/ESP32_AP-Flasher/data/www/main.css.gz
index 8204db0e4..500a11919 100644
Binary files a/ESP32_AP-Flasher/data/www/main.css.gz and b/ESP32_AP-Flasher/data/www/main.css.gz differ
diff --git a/ESP32_AP-Flasher/data/www/main.js.gz b/ESP32_AP-Flasher/data/www/main.js.gz
index 9923adf22..00f2ffeed 100644
Binary files a/ESP32_AP-Flasher/data/www/main.js.gz and b/ESP32_AP-Flasher/data/www/main.js.gz differ
diff --git a/ESP32_AP-Flasher/data/www/ota.js.gz b/ESP32_AP-Flasher/data/www/ota.js.gz
index 67725136a..749ac7e4e 100644
Binary files a/ESP32_AP-Flasher/data/www/ota.js.gz and b/ESP32_AP-Flasher/data/www/ota.js.gz differ
diff --git a/ESP32_AP-Flasher/data/www/painter.js.gz b/ESP32_AP-Flasher/data/www/painter.js.gz
index 59b29f9b4..203bc2faa 100644
Binary files a/ESP32_AP-Flasher/data/www/painter.js.gz and b/ESP32_AP-Flasher/data/www/painter.js.gz differ
diff --git a/ESP32_AP-Flasher/data/www/setup.html.gz b/ESP32_AP-Flasher/data/www/setup.html.gz
index e6ed5f764..815b77404 100644
Binary files a/ESP32_AP-Flasher/data/www/setup.html.gz and b/ESP32_AP-Flasher/data/www/setup.html.gz differ
diff --git a/ESP32_AP-Flasher/data/www/setup.js.gz b/ESP32_AP-Flasher/data/www/setup.js.gz
index eaac7eb44..32cc8bc8d 100644
Binary files a/ESP32_AP-Flasher/data/www/setup.js.gz and b/ESP32_AP-Flasher/data/www/setup.js.gz differ
diff --git a/ESP32_AP-Flasher/data/www/upload-demo.html.gz b/ESP32_AP-Flasher/data/www/upload-demo.html.gz
index 51a7ab33f..a2a5d84e8 100644
Binary files a/ESP32_AP-Flasher/data/www/upload-demo.html.gz and b/ESP32_AP-Flasher/data/www/upload-demo.html.gz differ
diff --git a/ESP32_AP-Flasher/data/www/variables-demo.html.gz b/ESP32_AP-Flasher/data/www/variables-demo.html.gz
index e5846ccf6..71024ec1e 100644
Binary files a/ESP32_AP-Flasher/data/www/variables-demo.html.gz and b/ESP32_AP-Flasher/data/www/variables-demo.html.gz differ
diff --git a/ESP32_AP-Flasher/include/tag_db.h b/ESP32_AP-Flasher/include/tag_db.h
index a22458b64..8a5331f7b 100644
--- a/ESP32_AP-Flasher/include/tag_db.h
+++ b/ESP32_AP-Flasher/include/tag_db.h
@@ -54,6 +54,7 @@ class tagRecord {
struct Config {
uint8_t channel;
+ uint8_t subghzchannel;
char alias[32];
uint8_t led;
uint8_t tft;
diff --git a/ESP32_AP-Flasher/src/newproto.cpp b/ESP32_AP-Flasher/src/newproto.cpp
index fb4bdcb80..0ae6d099c 100644
--- a/ESP32_AP-Flasher/src/newproto.cpp
+++ b/ESP32_AP-Flasher/src/newproto.cpp
@@ -640,8 +640,11 @@ void setAPchannel() {
udpsync.getAPList();
} else {
if (curChannel.channel != config.channel) {
- curChannel.channel = config.channel;
- sendChannelPower(&curChannel);
+ curChannel.channel = config.channel;
+#ifdef HAS_SUBGHZ
+ curChannel.subghzchannel = config.subghzchannel;
+#endif
+ sendChannelPower(&curChannel);
}
}
}
diff --git a/ESP32_AP-Flasher/src/tag_db.cpp b/ESP32_AP-Flasher/src/tag_db.cpp
index ef8aa8156..c394679c7 100644
--- a/ESP32_AP-Flasher/src/tag_db.cpp
+++ b/ESP32_AP-Flasher/src/tag_db.cpp
@@ -315,6 +315,7 @@ void initAPconfig() {
configFile.close();
}
config.channel = APconfig.containsKey("channel") ? APconfig["channel"] : 0;
+ config.subghzchannel = APconfig.containsKey("subghzchannel") ? APconfig["subghzchannel"] : 0;
if (APconfig["alias"]) strlcpy(config.alias, APconfig["alias"], sizeof(config.alias));
config.led = APconfig.containsKey("led") ? APconfig["led"] : 255;
config.tft = APconfig.containsKey("tft") ? APconfig["tft"] : 255;
@@ -343,6 +344,7 @@ void saveAPconfig() {
fs::File configFile = contentFS->open("/current/apconfig.json", "w");
DynamicJsonDocument APconfig(500);
APconfig["channel"] = config.channel;
+ APconfig["subghzchannel"] = config.subghzchannel;
APconfig["alias"] = config.alias;
APconfig["led"] = config.led;
APconfig["tft"] = config.tft;
diff --git a/ESP32_AP-Flasher/src/web.cpp b/ESP32_AP-Flasher/src/web.cpp
index 22477967c..0b6af745e 100644
--- a/ESP32_AP-Flasher/src/web.cpp
+++ b/ESP32_AP-Flasher/src/web.cpp
@@ -509,6 +509,13 @@ void init_web() {
#else
response->print("\"hasBLE\": \"0\", ");
#endif
+
+#ifdef HAS_SUBGHZ
+ response->print("\"hasSubGhz\": \"1\", ");
+#else
+ response->print("\"hasSubGhz\": \"0\", ");
+#endif
+
response->print("\"apstate\": \"" + String(apInfo.state) + "\"");
File configFile = contentFS->open("/current/apconfig.json", "r");
@@ -542,6 +549,9 @@ void init_web() {
if (request->hasParam("channel", true)) {
config.channel = static_castAccess Point config
+ + +