From f1e64a6acfa457e675083ec2e42be81d6105f202 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sat, 18 Dec 2021 22:33:35 +0100 Subject: [PATCH] fix hostname and static ip settings --- data/is-cfg.json | 17 +++++++++----- src/TaskEth.cpp | 9 +++++--- src/TaskOTA.cpp | 6 ++++- src/TaskWifi.cpp | 8 +++++-- src/project_configuration.cpp | 42 ++++++++++++++++++++++------------- src/project_configuration.h | 25 +++++++++++++++------ 6 files changed, 73 insertions(+), 34 deletions(-) diff --git a/data/is-cfg.json b/data/is-cfg.json index cf49d82..bab9eae 100644 --- a/data/is-cfg.json +++ b/data/is-cfg.json @@ -1,13 +1,18 @@ { "callsign": "NOCALL-10", "network": { - "hostname": "NOCALL-10", "DHCP": true, - "staticIP": "192.0.2.100", - "subnet": "255.255.255.0", - "gateway": "192.0.2.1", - "dns1": "192.0.2.1", - "dns2": "192.0.2.2" + "static": { + "ip": "192.168.0.100", + "subnet": "255.255.255.0", + "gateway": "192.168.0.1", + "dns1": "192.168.0.1", + "dns2": "192.168.0.2" + }, + "hostname": { + "overwrite": false, + "name": "NOCALL-10" + } }, "wifi": { "active": true, diff --git a/src/TaskEth.cpp b/src/TaskEth.cpp index 1d74eb5..720856e 100644 --- a/src/TaskEth.cpp +++ b/src/TaskEth.cpp @@ -39,7 +39,6 @@ void WiFiEvent(WiFiEvent_t event) { break; case SYSTEM_EVENT_ETH_CONNECTED: logPrintlnI("ETH Connected"); - ETH.setHostname("esp32-ethernet"); break; case SYSTEM_EVENT_ETH_GOT_IP: logPrintI("Hostname: "); @@ -105,9 +104,13 @@ bool EthTask::setup(System &system) { ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK); if (!system.getUserConfig()->network.DHCP) { - ETH.config(system.getUserConfig()->network.staticIP, system.getUserConfig()->network.gateway, system.getUserConfig()->network.subnet, system.getUserConfig()->network.dns1, system.getUserConfig()->network.dns2); + ETH.config(system.getUserConfig()->network.static_.ip, system.getUserConfig()->network.static_.gateway, system.getUserConfig()->network.static_.subnet, system.getUserConfig()->network.static_.dns1, system.getUserConfig()->network.static_.dns2); + } + if (system.getUserConfig()->network.hostname.overwrite) { + ETH.setHostname(system.getUserConfig()->network.hostname.name.c_str()); + } else { + ETH.setHostname(system.getUserConfig()->callsign.c_str()); } - ETH.setHostname(system.getUserConfig()->network.hostname.c_str()); return true; } diff --git a/src/TaskOTA.cpp b/src/TaskOTA.cpp index 6b6348c..d3bd60c 100644 --- a/src/TaskOTA.cpp +++ b/src/TaskOTA.cpp @@ -43,7 +43,11 @@ bool OTATask::setup(System &system) { else if (error == OTA_END_ERROR) logPrintlnE("End Failed"); }); - _ota.setHostname(system.getUserConfig()->callsign.c_str()); + if (system.getUserConfig()->network.hostname.overwrite) { + _ota.setHostname(system.getUserConfig()->network.hostname.name.c_str()); + } else { + _ota.setHostname(system.getUserConfig()->callsign.c_str()); + } _stateInfo = ""; return true; } diff --git a/src/TaskWifi.cpp b/src/TaskWifi.cpp index 6a0b54e..aa02876 100644 --- a/src/TaskWifi.cpp +++ b/src/TaskWifi.cpp @@ -20,10 +20,14 @@ bool WifiTask::setup(System &system) { WiFi.mode(WIFI_STA); WiFi.onEvent(WiFiEvent); - WiFi.setHostname(system.getUserConfig()->callsign.c_str()); + if (system.getUserConfig()->network.hostname.overwrite) { + WiFi.setHostname(system.getUserConfig()->network.hostname.name.c_str()); + } else { + WiFi.setHostname(system.getUserConfig()->callsign.c_str()); + } if (!system.getUserConfig()->network.DHCP) { - WiFi.config(system.getUserConfig()->network.staticIP, system.getUserConfig()->network.gateway, system.getUserConfig()->network.subnet, system.getUserConfig()->network.dns1, system.getUserConfig()->network.dns2); + WiFi.config(system.getUserConfig()->network.static_.ip, system.getUserConfig()->network.static_.gateway, system.getUserConfig()->network.static_.subnet, system.getUserConfig()->network.static_.dns1, system.getUserConfig()->network.static_.dns2); } for (Configuration::Wifi::AP ap : system.getUserConfig()->wifi.APs) { diff --git a/src/project_configuration.cpp b/src/project_configuration.cpp index cd3702b..3ca11f2 100644 --- a/src/project_configuration.cpp +++ b/src/project_configuration.cpp @@ -8,14 +8,25 @@ void ProjectConfigurationManagement::readProjectConfiguration(DynamicJsonDocumen if (data.containsKey("callsign")) conf.callsign = data["callsign"].as(); - if (data.containsKey("network") && data["network"].containsKey("DHCP")) { - conf.network.hostname = data["network"]["hostname"].as(); - conf.network.DHCP = data["network"]["DHCP"]; - conf.network.staticIP.fromString(data["network"]["staticIP"].as()); - conf.network.subnet.fromString(data["network"]["subnet"].as()); - conf.network.gateway.fromString(data["network"]["gateway"].as()); - conf.network.dns1.fromString(data["network"]["dns1"].as()); - conf.network.dns2.fromString(data["network"]["dns2"].as()); + if (data.containsKey("network")) { + conf.network.DHCP = data["network"]["DHCP"] | false; + if (data["network"].containsKey("static")) { + if (data["network"]["static"].containsKey("ip")) + conf.network.static_.ip.fromString(data["network"]["static"]["ip"].as()); + if (data["network"]["static"].containsKey("subnet")) + conf.network.static_.subnet.fromString(data["network"]["static"]["subnet"].as()); + if (data["network"]["static"].containsKey("gateway")) + conf.network.static_.gateway.fromString(data["network"]["static"]["gateway"].as()); + if (data["network"]["static"].containsKey("dns1")) + conf.network.static_.dns1.fromString(data["network"]["static"]["dns1"].as()); + if (data["network"]["static"].containsKey("dns2")) + conf.network.static_.dns2.fromString(data["network"]["static"]["dns2"].as()); + } + if (data["network"].containsKey("hostname")) { + conf.network.hostname.overwrite = data["network"]["hostname"]["overwrite"] | false; + if (data["network"]["hostname"].containsKey("name")) + conf.network.hostname.name = data["network"]["hostname"]["name"].as(); + } } conf.wifi.active = data["wifi"]["active"]; @@ -77,13 +88,14 @@ void ProjectConfigurationManagement::writeProjectConfiguration(Configuration &co data["callsign"] = conf.callsign; if (!conf.network.DHCP) { - data["network"]["hostname"] = conf.network.hostname; - data["network"]["DHCP"] = conf.network.DHCP; - data["network"]["staticIP"] = conf.network.staticIP.toString(); - data["network"]["subnet"] = conf.network.subnet.toString(); - data["network"]["gateway"] = conf.network.gateway.toString(); - data["network"]["dns1"] = conf.network.dns1.toString(); - data["network"]["dns2"] = conf.network.dns2.toString(); + data["network"]["DHCP"] = conf.network.DHCP; + data["network"]["static"]["ip"] = conf.network.static_.ip.toString(); + data["network"]["static"]["subnet"] = conf.network.static_.subnet.toString(); + data["network"]["static"]["gateway"] = conf.network.static_.gateway.toString(); + data["network"]["static"]["dns1"] = conf.network.static_.dns1.toString(); + data["network"]["static"]["dns2"] = conf.network.static_.dns2.toString(); + data["network"]["hostname"]["overwrite"] = conf.network.hostname.overwrite; + data["network"]["hostname"]["name"] = conf.network.hostname.name; } data["wifi"]["active"] = conf.wifi.active; diff --git a/src/project_configuration.h b/src/project_configuration.h index 9ec3432..09745c4 100644 --- a/src/project_configuration.h +++ b/src/project_configuration.h @@ -6,18 +6,29 @@ class Configuration { public: + class Static { + public: + IPAddress ip; + IPAddress subnet; + IPAddress gateway; + IPAddress dns1; + IPAddress dns2; + }; + + class Hostname { + public: + bool overwrite; + String name; + }; + class Network { public: Network() : DHCP(true) { } - String hostname; - bool DHCP; - IPAddress staticIP; - IPAddress subnet; - IPAddress gateway; - IPAddress dns1; - IPAddress dns2; + bool DHCP; + Static static_; + Hostname hostname; }; class Wifi {