Add local configuration to set http domain

change http domain by PUT from local server request
This commit is contained in:
samuelbles07
2025-04-02 02:12:13 +07:00
parent 9ed58d1853
commit 7c57477238
4 changed files with 71 additions and 3 deletions

View File

@ -944,6 +944,12 @@ void initializeNetwork() {
agSerial->setDebug(true); agSerial->setDebug(true);
} }
String httpDomain = configuration.getHttpDomain();
if (httpDomain != "") {
agClient->setHttpDomain(httpDomain.c_str());
Serial.printf("HTTP request domain set to: %s\n", httpDomain.c_str());
}
if (!agClient->begin(ag->deviceId().c_str())) { if (!agClient->begin(ag->deviceId().c_str())) {
oledDisplay.setText("Client", "initialization", "failed"); oledDisplay.setText("Client", "initialization", "failed");
delay(5000); delay(5000);
@ -1041,6 +1047,16 @@ static void configUpdateHandle() {
initMqtt(); initMqtt();
} }
String httpDomain = configuration.getHttpDomain();
if (httpDomain != "") {
Serial.printf("HTTP request domain set to: %s\n", httpDomain.c_str());
agClient->setHttpDomain(httpDomain.c_str());
} else {
// Its empty, set to default
Serial.println("HTTP domain from configuration empty, set to default");
agClient->setHttpDomainDefault();
}
if (configuration.hasSensorSGP) { if (configuration.hasSensorSGP) {
if (configuration.noxLearnOffsetChanged() || if (configuration.noxLearnOffsetChanged() ||
configuration.tvocLearnOffsetChanged()) { configuration.tvocLearnOffsetChanged()) {

View File

@ -46,6 +46,7 @@ JSON_PROP_DEF(abcDays);
JSON_PROP_DEF(tvocLearningOffset); JSON_PROP_DEF(tvocLearningOffset);
JSON_PROP_DEF(noxLearningOffset); JSON_PROP_DEF(noxLearningOffset);
JSON_PROP_DEF(mqttBrokerUrl); JSON_PROP_DEF(mqttBrokerUrl);
JSON_PROP_DEF(httpDomain);
JSON_PROP_DEF(temperatureUnit); JSON_PROP_DEF(temperatureUnit);
JSON_PROP_DEF(configurationControl); JSON_PROP_DEF(configurationControl);
JSON_PROP_DEF(postDataToAirGradient); JSON_PROP_DEF(postDataToAirGradient);
@ -68,6 +69,7 @@ JSON_PROP_DEF(rhum);
#define jprop_tvocLearningOffset_default 12 #define jprop_tvocLearningOffset_default 12
#define jprop_noxLearningOffset_default 12 #define jprop_noxLearningOffset_default 12
#define jprop_mqttBrokerUrl_default "" #define jprop_mqttBrokerUrl_default ""
#define jprop_httpDomain_default ""
#define jprop_temperatureUnit_default "c" #define jprop_temperatureUnit_default "c"
#define jprop_configurationControl_default String(CONFIGURATION_CONTROL_NAME[ConfigurationControl::ConfigurationControlBoth]) #define jprop_configurationControl_default String(CONFIGURATION_CONTROL_NAME[ConfigurationControl::ConfigurationControlBoth])
#define jprop_postDataToAirGradient_default true #define jprop_postDataToAirGradient_default true
@ -377,6 +379,7 @@ void Configuration::defaultConfig(void) {
jconfig[jprop_country] = jprop_country_default; jconfig[jprop_country] = jprop_country_default;
jconfig[jprop_mqttBrokerUrl] = jprop_mqttBrokerUrl_default; jconfig[jprop_mqttBrokerUrl] = jprop_mqttBrokerUrl_default;
jconfig[jprop_httpDomain] = jprop_httpDomain_default;
jconfig[jprop_configurationControl] = jprop_configurationControl_default; jconfig[jprop_configurationControl] = jprop_configurationControl_default;
jconfig[jprop_pmStandard] = jprop_pmStandard_default; jconfig[jprop_pmStandard] = jprop_pmStandard_default;
jconfig[jprop_temperatureUnit] = jprop_temperatureUnit_default; jconfig[jprop_temperatureUnit] = jprop_temperatureUnit_default;
@ -735,7 +738,7 @@ bool Configuration::parse(String data, bool isLocal) {
jconfig[jprop_mqttBrokerUrl] = broker; jconfig[jprop_mqttBrokerUrl] = broker;
} }
} else { } else {
failedMessage = "\"mqttBrokerUrl\" length should <= 255"; failedMessage = "\"mqttBrokerUrl\" length should less than 255 character";
jsonInvalid(); jsonInvalid();
return false; return false;
} }
@ -754,6 +757,32 @@ bool Configuration::parse(String data, bool isLocal) {
} }
} }
if (isLocal) {
if (JSON.typeof_(root[jprop_httpDomain]) == "string") {
String httpDomain = root[jprop_httpDomain];
String oldHttpDomain = jconfig[jprop_httpDomain];
if (httpDomain.length() <= 255) {
if (httpDomain != oldHttpDomain) {
changed = true;
configLogInfo(String(jprop_httpDomain), oldHttpDomain, httpDomain);
jconfig[jprop_httpDomain] = httpDomain;
}
} else {
failedMessage = "\"httpDomain\" length should less than 255 character";
jsonInvalid();
return false;
}
}
else {
if (jsonTypeInvalid(root[jprop_httpDomain], "string")) {
failedMessage =
jsonTypeInvalidMessage(String(jprop_httpDomain), "string");
jsonInvalid();
return false;
}
}
}
if (JSON.typeof_(root[jprop_temperatureUnit]) == "string") { if (JSON.typeof_(root[jprop_temperatureUnit]) == "string") {
String unit = root[jprop_temperatureUnit]; String unit = root[jprop_temperatureUnit];
String oldUnit = jconfig[jprop_temperatureUnit]; String oldUnit = jconfig[jprop_temperatureUnit];
@ -1036,6 +1065,16 @@ String Configuration::getMqttBrokerUri(void) {
return broker; return broker;
} }
/**
* @brief Get HTTP domain for post measures and get configuration
*
* @return String http domain, might be empty string
*/
String Configuration::getHttpDomain(void) {
String httpDomain = jconfig[jprop_httpDomain];
return httpDomain;
}
/** /**
* @brief Get configuratoin post data to AirGradient cloud * @brief Get configuratoin post data to AirGradient cloud
* *
@ -1121,7 +1160,7 @@ bool Configuration::isUpdated(void) {
} }
String Configuration::jsonTypeInvalidMessage(String name, String type) { String Configuration::jsonTypeInvalidMessage(String name, String type) {
return "'" + name + "' type invalid, it's should '" + type + "'"; return "'" + name + "' type is invalid, expecting '" + type + "'";
} }
String Configuration::jsonValueInvalidMessage(String name, String value) { String Configuration::jsonValueInvalidMessage(String name, String value) {
@ -1275,6 +1314,18 @@ void Configuration::toConfig(const char *buf) {
logInfo("toConfig: mqttBroker changed"); logInfo("toConfig: mqttBroker changed");
} }
/** validate http domain */
if (JSON.typeof_(jconfig[jprop_httpDomain]) != "string") {
isConfigFieldInvalid = true;
} else {
isConfigFieldInvalid = false;
}
if (isConfigFieldInvalid) {
changed = true;
jconfig[jprop_httpDomain] = jprop_httpDomain_default;
logInfo("toConfig: httpDomain changed");
}
/** Validate temperature unit */ /** Validate temperature unit */
if (JSON.typeof_(jconfig[jprop_temperatureUnit]) != "string") { if (JSON.typeof_(jconfig[jprop_temperatureUnit]) != "string") {
isConfigFieldInvalid = true; isConfigFieldInvalid = true;

View File

@ -82,6 +82,7 @@ public:
String getLedBarModeName(void); String getLedBarModeName(void);
bool getDisplayMode(void); bool getDisplayMode(void);
String getMqttBrokerUri(void); String getMqttBrokerUri(void);
String getHttpDomain(void);
bool isPostDataToAirGradient(void); bool isPostDataToAirGradient(void);
ConfigurationControl getConfigurationControl(void); ConfigurationControl getConfigurationControl(void);
bool isCo2CalibrationRequested(void); bool isCo2CalibrationRequested(void);