get and set config via mqtt messages

This commit is contained in:
Emanuele Trabattoni
2025-07-25 14:37:38 +02:00
parent 31c6cd9606
commit 74a97a7dd6
7 changed files with 190 additions and 17 deletions

View File

@@ -88,7 +88,14 @@ public:
file.close(); // close config file before unmounting filesystem
};
void updateConfig(ArduinoJson::JsonDocument &json)
ArduinoJson::JsonDocument& getConfig()
{
std::lock_guard<std::mutex> lock(m_mutex);
serialize();
return m_configJson;
}
void setConfig(const ArduinoJson::JsonDocument &json)
{
std::lock_guard<std::mutex> lock(m_mutex);
{
@@ -97,8 +104,9 @@ public:
deserialize();
saveConfig();
}; // filesystem is unmounted here
delay(500);
esp_restart(); // configuration updates trigger a cpu restart
LOG_WARN("setConfig will cause restart!");
delay(5000);
esp_restart();
}
void resetConfig()
@@ -150,8 +158,8 @@ private:
auto ethernet = m_configJson["ethernet"].to<ArduinoJson::JsonObject>();
ethernet["hostname"] = m_ethHostname;
ethernet["ipAddr"] = m_ethIpAddr;
ethernet["netmask "] = m_ethNetmask;
ethernet["gateway "] = m_ethGateway;
ethernet["netmask"] = m_ethNetmask;
ethernet["gateway"] = m_ethGateway;
};
{
@@ -188,6 +196,7 @@ private:
mqtt["loopTime"] = m_mqttLoopTime;
mqtt["clientName"] = m_mqttClientName;
mqtt["retries"] = m_mqttRetries;
mqtt["keepalive"] = m_mqttKeepalive;
auto publish = mqtt["publish"].to<ArduinoJson::JsonObject>();
for (auto v : m_mqttPublish)
{
@@ -235,10 +244,11 @@ private:
auto temperature = m_configJson["temperature"];
m_tempExpectedSensors = temperature["expectedSensors"].as<uint8_t>();
auto values = temperature["correctionValues"].as<JsonArray>();
m_tempCorrectionValues.clear();
m_tempCorrectionValues.reserve(values.size());
for (auto v : values)
{
m_tempCorrectionValues.push_back(v.as<float>());
m_tempCorrectionValues.emplace_back(v.as<float>());
}
};
@@ -255,7 +265,8 @@ private:
m_mqttHost = mqtt["host"].as<std::string>();
m_mqttPort = mqtt["port"].as<uint16_t>();
m_mqttLoopTime = mqtt["loopTime"].as<uint16_t>();
m_mqttRetries = mqtt["retries"].as<uint16_t>();
m_mqttKeepalive = mqtt["keepalive"].as<uint8_t>();
m_mqttRetries = mqtt["retries"].as<uint8_t>();
auto subscribe = mqtt["subsribe"].as<ArduinoJson::JsonObject>();
for (auto v : subscribe)
{
@@ -304,6 +315,7 @@ public:
std::string m_mqttHost = "10.0.2.249";
uint16_t m_mqttPort = 1883;
uint16_t m_mqttLoopTime = 100; // in milliseconds
uint8_t m_mqttKeepalive = 15;
uint8_t m_mqttRetries = 5;
std::string m_mqttClientName = "etcontrollerPRO";