enable IPv6 for tasmota, add env:ci_16M for E32V2

This commit is contained in:
MichaelDvP
2024-02-29 10:04:10 +01:00
parent 2ddd2401eb
commit 463c68d08c
8 changed files with 79 additions and 55 deletions

View File

@@ -48,6 +48,10 @@ jobs:
run: | run: |
platformio run -e ci_s3 platformio run -e ci_s3
- name: Build E32V2 firmware
run: |
platformio run -e ci_16M
- name: Create a GH Release - name: Create a GH Release
id: 'automatic_releases' id: 'automatic_releases'
uses: 'marvinpinto/action-automatic-releases@latest' uses: 'marvinpinto/action-automatic-releases@latest'

View File

@@ -23,7 +23,7 @@
}, },
"dependencies": { "dependencies": {
"@alova/adapter-xhr": "^1.0.3", "@alova/adapter-xhr": "^1.0.3",
"@babel/core": "^7.23.9", "@babel/core": "^7.24.0",
"@emotion/react": "^11.11.4", "@emotion/react": "^11.11.4",
"@emotion/styled": "^11.11.0", "@emotion/styled": "^11.11.0",
"@mui/icons-material": "^5.15.11", "@mui/icons-material": "^5.15.11",

View File

@@ -216,6 +216,8 @@ const WiFiSettingsForm: FC = () => {
<MenuItem value={44}>11 dBm</MenuItem> <MenuItem value={44}>11 dBm</MenuItem>
<MenuItem value={34}>8.5 dBm</MenuItem> <MenuItem value={34}>8.5 dBm</MenuItem>
<MenuItem value={28}>7 dBm</MenuItem> <MenuItem value={28}>7 dBm</MenuItem>
<MenuItem value={20}>5 dBm</MenuItem>
<MenuItem value={8}>2 dBm</MenuItem>
</TextField> </TextField>
<BlockFormControlLabel <BlockFormControlLabel
control={<Checkbox name="nosleep" checked={data.nosleep} onChange={updateFormValue} />} control={<Checkbox name="nosleep" checked={data.nosleep} onChange={updateFormValue} />}
@@ -257,10 +259,12 @@ const WiFiSettingsForm: FC = () => {
margin="normal" margin="normal"
/> />
)} )}
{data.enableIPv6 !== undefined && (
<BlockFormControlLabel <BlockFormControlLabel
control={<Checkbox name="enableIPv6" checked={data.enableIPv6} onChange={updateFormValue} />} control={<Checkbox name="enableIPv6" checked={data.enableIPv6} onChange={updateFormValue} />}
label={LL.NETWORK_ENABLE_IPV6()} label={LL.NETWORK_ENABLE_IPV6()}
/> />
)}
<BlockFormControlLabel <BlockFormControlLabel
control={<Checkbox name="static_ip_config" checked={data.static_ip_config} onChange={updateFormValue} />} control={<Checkbox name="static_ip_config" checked={data.static_ip_config} onChange={updateFormValue} />}
label={LL.NETWORK_FIXED_IP()} label={LL.NETWORK_FIXED_IP()}

View File

@@ -42,7 +42,7 @@ export interface NetworkSettings {
password: string; password: string;
hostname: string; hostname: string;
static_ip_config: boolean; static_ip_config: boolean;
enableIPv6: boolean; enableIPv6?: boolean;
bandwidth20: boolean; bandwidth20: boolean;
nosleep: boolean; nosleep: boolean;
tx_power: number; tx_power: number;

View File

@@ -86,26 +86,26 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/core@npm:^7.23.9": "@babel/core@npm:^7.24.0":
version: 7.23.9 version: 7.24.0
resolution: "@babel/core@npm:7.23.9" resolution: "@babel/core@npm:7.24.0"
dependencies: dependencies:
"@ampproject/remapping": "npm:^2.2.0" "@ampproject/remapping": "npm:^2.2.0"
"@babel/code-frame": "npm:^7.23.5" "@babel/code-frame": "npm:^7.23.5"
"@babel/generator": "npm:^7.23.6" "@babel/generator": "npm:^7.23.6"
"@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-compilation-targets": "npm:^7.23.6"
"@babel/helper-module-transforms": "npm:^7.23.3" "@babel/helper-module-transforms": "npm:^7.23.3"
"@babel/helpers": "npm:^7.23.9" "@babel/helpers": "npm:^7.24.0"
"@babel/parser": "npm:^7.23.9" "@babel/parser": "npm:^7.24.0"
"@babel/template": "npm:^7.23.9" "@babel/template": "npm:^7.24.0"
"@babel/traverse": "npm:^7.23.9" "@babel/traverse": "npm:^7.24.0"
"@babel/types": "npm:^7.23.9" "@babel/types": "npm:^7.24.0"
convert-source-map: "npm:^2.0.0" convert-source-map: "npm:^2.0.0"
debug: "npm:^4.1.0" debug: "npm:^4.1.0"
gensync: "npm:^1.0.0-beta.2" gensync: "npm:^1.0.0-beta.2"
json5: "npm:^2.2.3" json5: "npm:^2.2.3"
semver: "npm:^6.3.1" semver: "npm:^6.3.1"
checksum: 10/268cdbb86bef1b8ea5b1300f2f325e56a1740a5051360cb228ffeaa0f80282b6674f3a2b4d6466adb0691183759b88d4c37b4a4f77232c84a49ed771c84cdc27 checksum: 10/1e22215cc89e061e0cbfed72f265ad24d363f3e9b24b51e9c4cf3ccb9222260a29a1c1e62edb439cb7e2229a3fce924edd43300500416613236c13fc8d62a947
languageName: node languageName: node
linkType: hard linkType: hard
@@ -304,14 +304,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/helpers@npm:^7.23.9": "@babel/helpers@npm:^7.24.0":
version: 7.23.9 version: 7.24.0
resolution: "@babel/helpers@npm:7.23.9" resolution: "@babel/helpers@npm:7.24.0"
dependencies: dependencies:
"@babel/template": "npm:^7.23.9" "@babel/template": "npm:^7.24.0"
"@babel/traverse": "npm:^7.23.9" "@babel/traverse": "npm:^7.24.0"
"@babel/types": "npm:^7.23.9" "@babel/types": "npm:^7.24.0"
checksum: 10/dd56daac8bbd7ed174bb00fd185926fd449e591d9a00edaceb7ac6edbdd7a8db57e2cb365b4fafda382201752789ced2f7ae010f667eab0f198a4571cda4d2c5 checksum: 10/cc82012161b30185c2698da359c7311cf019f0932f8fcb805e985fec9e0053c354f0534dc9961f3170eee579df6724eecd34b0f5ffaa155cdd456af59fbff86e
languageName: node languageName: node
linkType: hard linkType: hard
@@ -346,12 +346,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/parser@npm:^7.23.9": "@babel/parser@npm:^7.24.0":
version: 7.23.9 version: 7.24.0
resolution: "@babel/parser@npm:7.23.9" resolution: "@babel/parser@npm:7.24.0"
bin: bin:
parser: ./bin/babel-parser.js parser: ./bin/babel-parser.js
checksum: 10/727a7a807100f6a26df859e2f009c4ddbd0d3363287b45daa50bd082ccd0d431d0c4d0e610a91f806e04a1918726cd0f5a0592c9b902a815337feed12e1cafd9 checksum: 10/3e5ebb903a6f71629a9d0226743e37fe3d961e79911d2698b243637f66c4df7e3e0a42c07838bc0e7cc9fcd585d9be8f4134a145b9459ee4a459420fb0d1360b
languageName: node languageName: node
linkType: hard linkType: hard
@@ -421,14 +421,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/template@npm:^7.23.9": "@babel/template@npm:^7.24.0":
version: 7.23.9 version: 7.24.0
resolution: "@babel/template@npm:7.23.9" resolution: "@babel/template@npm:7.24.0"
dependencies: dependencies:
"@babel/code-frame": "npm:^7.23.5" "@babel/code-frame": "npm:^7.23.5"
"@babel/parser": "npm:^7.23.9" "@babel/parser": "npm:^7.24.0"
"@babel/types": "npm:^7.23.9" "@babel/types": "npm:^7.24.0"
checksum: 10/1b011ba9354dc2e646561d54b6862e0df51760e6179faadd79be05825b0b6da04911e4e192df943f1766748da3037fd8493615b38707f7cadb0cf0c96601c170 checksum: 10/8c538338c7de8fac8ada691a5a812bdcbd60bd4a4eb5adae2cc9ee19773e8fb1a724312a00af9e1ce49056ffd3c3475e7287b5668cf6360bfb3f8ac827a06ffe
languageName: node languageName: node
linkType: hard linkType: hard
@@ -450,9 +450,9 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/traverse@npm:^7.23.9": "@babel/traverse@npm:^7.24.0":
version: 7.23.9 version: 7.24.0
resolution: "@babel/traverse@npm:7.23.9" resolution: "@babel/traverse@npm:7.24.0"
dependencies: dependencies:
"@babel/code-frame": "npm:^7.23.5" "@babel/code-frame": "npm:^7.23.5"
"@babel/generator": "npm:^7.23.6" "@babel/generator": "npm:^7.23.6"
@@ -460,11 +460,11 @@ __metadata:
"@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-function-name": "npm:^7.23.0"
"@babel/helper-hoist-variables": "npm:^7.22.5" "@babel/helper-hoist-variables": "npm:^7.22.5"
"@babel/helper-split-export-declaration": "npm:^7.22.6" "@babel/helper-split-export-declaration": "npm:^7.22.6"
"@babel/parser": "npm:^7.23.9" "@babel/parser": "npm:^7.24.0"
"@babel/types": "npm:^7.23.9" "@babel/types": "npm:^7.24.0"
debug: "npm:^4.3.1" debug: "npm:^4.3.1"
globals: "npm:^11.1.0" globals: "npm:^11.1.0"
checksum: 10/e2bb845f7f229feb7c338f7e150f5f1abc5395dcd3a6a47f63a25242ec3ec6b165f04a6df7d4849468547faee34eb3cf52487eb0bd867a7d3c42fec2a648266f checksum: 10/5cc482248ebb79adcbcf021aab4e0e95bafe2a1736ee4b46abe6f88b59848ad73e15e219db8f06c9a33a14c64257e5b47e53876601e998a8c596accb1b7f4996
languageName: node languageName: node
linkType: hard linkType: hard
@@ -490,14 +490,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/types@npm:^7.23.9": "@babel/types@npm:^7.24.0":
version: 7.23.9 version: 7.24.0
resolution: "@babel/types@npm:7.23.9" resolution: "@babel/types@npm:7.24.0"
dependencies: dependencies:
"@babel/helper-string-parser": "npm:^7.23.4" "@babel/helper-string-parser": "npm:^7.23.4"
"@babel/helper-validator-identifier": "npm:^7.22.20" "@babel/helper-validator-identifier": "npm:^7.22.20"
to-fast-properties: "npm:^2.0.0" to-fast-properties: "npm:^2.0.0"
checksum: 10/bed9634e5fd0f9dc63c84cfa83316c4cb617192db9fedfea464fca743affe93736d7bf2ebf418ee8358751a9d388e303af87a0c050cb5d87d5870c1b0154f6cb checksum: 10/a0b4875ce2e132f9daff0d5b27c7f4c4fcc97f2b084bdc5834e92c9d32592778489029e65d99d00c406da612d87b72d7a236c0afccaa1435c028d0c94c9b6da4
languageName: node languageName: node
linkType: hard linkType: hard
@@ -1848,7 +1848,7 @@ __metadata:
resolution: "EMS-ESP@workspace:." resolution: "EMS-ESP@workspace:."
dependencies: dependencies:
"@alova/adapter-xhr": "npm:^1.0.3" "@alova/adapter-xhr": "npm:^1.0.3"
"@babel/core": "npm:^7.23.9" "@babel/core": "npm:^7.24.0"
"@emotion/react": "npm:^11.11.4" "@emotion/react": "npm:^11.11.4"
"@emotion/styled": "npm:^11.11.0" "@emotion/styled": "npm:^11.11.0"
"@mui/icons-material": "npm:^5.15.11" "@mui/icons-material": "npm:^5.15.11"

View File

@@ -39,7 +39,7 @@ void MqttSettingsService::startClient() {
delete _mqttClient; delete _mqttClient;
_mqttClient = nullptr; _mqttClient = nullptr;
} }
#if CONFIG_IDF_TARGET_ESP32S3 #ifndef TASMOTA_SDK
if (_state.enableTLS) { if (_state.enableTLS) {
isSecure = true; isSecure = true;
_mqttClient = new espMqttClientSecure(espMqttClientTypes::UseInternalTask::NO); _mqttClient = new espMqttClientSecure(espMqttClientTypes::UseInternalTask::NO);
@@ -92,7 +92,7 @@ const char * MqttSettingsService::getClientId() {
} }
void MqttSettingsService::setWill(const char * topic) { void MqttSettingsService::setWill(const char * topic) {
#if CONFIG_IDF_TARGET_ESP32S3 #ifndef TASMOTA_SDK
if (_state.enableTLS) { if (_state.enableTLS) {
static_cast<espMqttClientSecure *>(_mqttClient)->setWill(topic, 1, true, "offline"); static_cast<espMqttClientSecure *>(_mqttClient)->setWill(topic, 1, true, "offline");
return; return;
@@ -178,7 +178,7 @@ bool MqttSettingsService::configureMqtt() {
// only connect if WiFi is connected and MQTT is enabled // only connect if WiFi is connected and MQTT is enabled
if (_state.enabled && emsesp::EMSESP::system_.network_connected() && !_state.host.isEmpty()) { if (_state.enabled && emsesp::EMSESP::system_.network_connected() && !_state.host.isEmpty()) {
_reconfigureMqtt = false; _reconfigureMqtt = false;
#if CONFIG_IDF_TARGET_ESP32S3 #ifndef TASMOTA_SDK
if (_state.enableTLS) { if (_state.enableTLS) {
#if EMSESP_DEBUG #if EMSESP_DEBUG
emsesp::EMSESP::logger().debug("Start secure MQTT with rootCA"); emsesp::EMSESP::logger().debug("Start secure MQTT with rootCA");
@@ -208,11 +208,9 @@ bool MqttSettingsService::configureMqtt() {
} }
void MqttSettings::read(MqttSettings & settings, JsonObject root) { void MqttSettings::read(MqttSettings & settings, JsonObject root) {
#if CONFIG_IDF_TARGET_ESP32S3
#ifndef TASMOTA_SDK #ifndef TASMOTA_SDK
root["enableTLS"] = settings.enableTLS; root["enableTLS"] = settings.enableTLS;
root["rootCA"] = settings.rootCA; root["rootCA"] = settings.rootCA;
#endif
#endif #endif
root["enabled"] = settings.enabled; root["enabled"] = settings.enabled;
root["host"] = settings.host; root["host"] = settings.host;
@@ -247,11 +245,11 @@ StateUpdateResult MqttSettings::update(JsonObject root, MqttSettings & settings)
MqttSettings newSettings = {}; MqttSettings newSettings = {};
bool changed = false; bool changed = false;
#if CONFIG_IDF_TARGET_ESP32S3
#ifndef TASMOTA_SDK #ifndef TASMOTA_SDK
newSettings.enableTLS = root["enableTLS"] | false; newSettings.enableTLS = root["enableTLS"] | false;
newSettings.rootCA = root["rootCA"] | ""; newSettings.rootCA = root["rootCA"] | "";
#endif #else
newSettings.enableTLS = false;
#endif #endif
newSettings.enabled = root["enabled"] | FACTORY_MQTT_ENABLED; newSettings.enabled = root["enabled"] | FACTORY_MQTT_ENABLED;
newSettings.host = root["host"] | FACTORY_MQTT_HOST; newSettings.host = root["host"] | FACTORY_MQTT_HOST;
@@ -368,7 +366,7 @@ StateUpdateResult MqttSettings::update(JsonObject root, MqttSettings & settings)
emsesp::EMSESP::mqtt_.set_publish_time_heartbeat(newSettings.publish_time_heartbeat); emsesp::EMSESP::mqtt_.set_publish_time_heartbeat(newSettings.publish_time_heartbeat);
} }
#if CONFIG_IDF_TARGET_ESP32S3 #ifndef TASMOTA_SDK
// strip down to certificate only // strip down to certificate only
newSettings.rootCA.replace("\r", ""); newSettings.rootCA.replace("\r", "");
newSettings.rootCA.replace("\n", ""); newSettings.rootCA.replace("\n", "");

View File

@@ -70,6 +70,9 @@ void NetworkSettingsService::manageSTA() {
// Connect or reconnect as required // Connect or reconnect as required
if ((WiFi.getMode() & WIFI_STA) == 0) { if ((WiFi.getMode() & WIFI_STA) == 0) {
#ifdef TASMOTA_SDK
WiFi.enableIPv6(_state.enableIPv6);
#endif
if (_state.staticIPConfig) { if (_state.staticIPConfig) {
WiFi.config(_state.localIP, _state.gatewayIP, _state.subnetMask, _state.dnsIP1, _state.dnsIP2); // configure for static IP WiFi.config(_state.localIP, _state.gatewayIP, _state.subnetMask, _state.dnsIP1, _state.dnsIP2); // configure for static IP
} }
@@ -388,13 +391,15 @@ void NetworkSettings::read(NetworkSettings & settings, JsonObject root) {
root["password"] = settings.password; root["password"] = settings.password;
root["hostname"] = settings.hostname; root["hostname"] = settings.hostname;
root["static_ip_config"] = settings.staticIPConfig; root["static_ip_config"] = settings.staticIPConfig;
root["enableIPv6"] = settings.enableIPv6;
root["bandwidth20"] = settings.bandwidth20; root["bandwidth20"] = settings.bandwidth20;
root["nosleep"] = settings.nosleep; root["nosleep"] = settings.nosleep;
root["enableMDNS"] = settings.enableMDNS; root["enableMDNS"] = settings.enableMDNS;
root["enableCORS"] = settings.enableCORS; root["enableCORS"] = settings.enableCORS;
root["CORSOrigin"] = settings.CORSOrigin; root["CORSOrigin"] = settings.CORSOrigin;
root["tx_power"] = settings.tx_power; root["tx_power"] = settings.tx_power;
#ifndef TASMOTA_SDK
root["enableIPv6"] = settings.enableIPv6;
#endif
// extended settings // extended settings
JsonUtils::writeIP(root, "local_ip", settings.localIP); JsonUtils::writeIP(root, "local_ip", settings.localIP);
@@ -416,14 +421,17 @@ StateUpdateResult NetworkSettings::update(JsonObject root, NetworkSettings & set
settings.password = root["password"] | FACTORY_WIFI_PASSWORD; settings.password = root["password"] | FACTORY_WIFI_PASSWORD;
settings.hostname = root["hostname"] | FACTORY_WIFI_HOSTNAME; settings.hostname = root["hostname"] | FACTORY_WIFI_HOSTNAME;
settings.staticIPConfig = root["static_ip_config"] | false; settings.staticIPConfig = root["static_ip_config"] | false;
settings.enableIPv6 = root["enableIPv6"] | false;
settings.bandwidth20 = root["bandwidth20"] | false; settings.bandwidth20 = root["bandwidth20"] | false;
settings.tx_power = static_cast<uint8_t>(root["tx_power"] | 0); settings.tx_power = static_cast<uint8_t>(root["tx_power"] | 0);
settings.nosleep = root["nosleep"] | false; settings.nosleep = root["nosleep"] | false;
settings.enableMDNS = root["enableMDNS"] | true; settings.enableMDNS = root["enableMDNS"] | true;
settings.enableCORS = root["enableCORS"] | false; settings.enableCORS = root["enableCORS"] | false;
settings.CORSOrigin = root["CORSOrigin"] | "*"; settings.CORSOrigin = root["CORSOrigin"] | "*";
#ifdef TASMOTA_SDK
settings.enableIPv6 = true;
#else
settings.enableIPv6 = root["enableIPv6"] | false;
#endif
// extended settings // extended settings
JsonUtils::readIP(root, "local_ip", settings.localIP); JsonUtils::readIP(root, "local_ip", settings.localIP);
JsonUtils::readIP(root, "gateway_ip", settings.gatewayIP); JsonUtils::readIP(root, "gateway_ip", settings.gatewayIP);

View File

@@ -96,6 +96,16 @@ build_flags =
${espressi32_base.build_flags} ${espressi32_base.build_flags}
'-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"' '-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"'
[env:ci_16M]
extends = espressi32_base
extra_scripts = scripts/rename_fw.py
board = esp32dev
board_build.partitions = esp32_partition_16M.csv
board_build.extra_flags = -DBOARD_HAS_PSRAM
build_flags =
${espressi32_base.build_flags}
'-DEMSESP_DEFAULT_BOARD_PROFILE="E32V2"'
[env:esp32_4M] [env:esp32_4M]
extends = espressi32_base_tasmota extends = espressi32_base_tasmota
board = esp32dev board = esp32dev
@@ -111,7 +121,7 @@ board_upload.flash_size = 4MB
board_build.partitions = esp32_asym_partition_4M.csv board_build.partitions = esp32_asym_partition_4M.csv
[env:esp32_16M] [env:esp32_16M]
extends = espressi32_base_tasmota extends = espressi32_base
board = esp32dev board = esp32dev
board_build.extra_flags = -DBOARD_HAS_PSRAM board_build.extra_flags = -DBOARD_HAS_PSRAM
board_upload.flash_size = 16MB board_upload.flash_size = 16MB