mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-03-19 16:16:31 +03:00
allow modbus start/stop without reboot
This commit is contained in:
@@ -84,7 +84,7 @@ uuid::log::Logger EMSESP::logger() {
|
||||
RxService EMSESP::rxservice_; // incoming Telegram Rx handler
|
||||
TxService EMSESP::txservice_; // outgoing Telegram Tx handler
|
||||
Mqtt EMSESP::mqtt_; // mqtt handler
|
||||
Modbus * EMSESP::modbus_; // modbus handler
|
||||
Modbus * EMSESP::modbus_ = nullptr; // modbus handler
|
||||
System EMSESP::system_; // core system services
|
||||
TemperatureSensor EMSESP::temperaturesensor_; // Temperature sensors
|
||||
AnalogSensor EMSESP::analogsensor_; // Analog sensors
|
||||
@@ -1795,12 +1795,6 @@ void EMSESP::start() {
|
||||
#endif
|
||||
}
|
||||
|
||||
// start services
|
||||
if (system_.modbus_enabled()) {
|
||||
modbus_ = new Modbus;
|
||||
modbus_->start(1, system_.modbus_port(), system_.modbus_max_clients(), system_.modbus_timeout() * 1000);
|
||||
}
|
||||
|
||||
mqtt_.start(); // mqtt init
|
||||
system_.start(); // starts commands, led, adc, button, network (sets hostname), syslog & uart
|
||||
shower_.start(); // initialize shower timer and shower alert
|
||||
|
||||
@@ -52,7 +52,7 @@ void Modbus::stop() {
|
||||
#ifndef EMSESP_STANDALONE
|
||||
modbusServer_->stop();
|
||||
// virtual ~ModbusServerTCPasync() = default;
|
||||
// delete modbusServer_;
|
||||
delete modbusServer_;
|
||||
modbusServer_ = nullptr;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -556,11 +556,6 @@ void System::store_settings(WebSettings & settings) {
|
||||
board_profile_ = settings.board_profile;
|
||||
telnet_enabled_ = settings.telnet_enabled;
|
||||
|
||||
modbus_enabled_ = settings.modbus_enabled;
|
||||
modbus_port_ = settings.modbus_port;
|
||||
modbus_max_clients_ = settings.modbus_max_clients;
|
||||
modbus_timeout_ = settings.modbus_timeout;
|
||||
|
||||
tx_mode_ = settings.tx_mode;
|
||||
syslog_enabled_ = settings.syslog_enabled;
|
||||
syslog_level_ = settings.syslog_level;
|
||||
@@ -581,6 +576,24 @@ void System::store_settings(WebSettings & settings) {
|
||||
|
||||
locale_ = settings.locale;
|
||||
developer_mode_ = settings.developer_mode;
|
||||
// start services
|
||||
if (settings.modbus_enabled) {
|
||||
if (EMSESP::modbus_ == nullptr) {
|
||||
EMSESP::modbus_ = new Modbus;
|
||||
EMSESP::modbus_->start(1, settings.modbus_port, settings.modbus_max_clients, settings.modbus_timeout * 1000);
|
||||
} else if (settings.modbus_port != modbus_port_ || settings.modbus_max_clients != modbus_max_clients_ || settings.modbus_timeout != modbus_timeout_) {
|
||||
EMSESP::modbus_->stop();
|
||||
EMSESP::modbus_->start(1, settings.modbus_port, settings.modbus_max_clients, settings.modbus_timeout * 1000);
|
||||
}
|
||||
} else if (EMSESP::modbus_ != nullptr) {
|
||||
EMSESP::modbus_->stop();
|
||||
delete EMSESP::modbus_;
|
||||
EMSESP::modbus_ = nullptr;
|
||||
}
|
||||
modbus_enabled_ = settings.modbus_enabled;
|
||||
modbus_port_ = settings.modbus_port;
|
||||
modbus_max_clients_ = settings.modbus_max_clients;
|
||||
modbus_timeout_ = settings.modbus_timeout;
|
||||
}
|
||||
|
||||
// Starts up core services
|
||||
@@ -2173,6 +2186,15 @@ bool System::command_info(const char * value, const int8_t id, JsonObject output
|
||||
}
|
||||
#endif
|
||||
|
||||
// Modbus Status
|
||||
node = output["Modbus"].to<JsonObject>();
|
||||
node["enabled"] = EMSESP::system_.modbus_enabled_;
|
||||
if (EMSESP::system_.modbus_enabled_) {
|
||||
node["maxClients"] = EMSESP::system_.modbus_max_clients_;
|
||||
node["port"] = EMSESP::system_.modbus_port_;
|
||||
node["timeout"] = EMSESP::system_.modbus_timeout_;
|
||||
}
|
||||
|
||||
// Sensor Status
|
||||
node = output["sensor"].to<JsonObject>();
|
||||
if (EMSESP::sensor_enabled()) {
|
||||
@@ -2180,6 +2202,9 @@ bool System::command_info(const char * value, const int8_t id, JsonObject output
|
||||
node["temperatureSensorReads"] = EMSESP::temperaturesensor_.reads();
|
||||
node["temperatureSensorFails"] = EMSESP::temperaturesensor_.fails();
|
||||
}
|
||||
|
||||
node = output["Analog"].to<JsonObject>();
|
||||
node["enabled"] = EMSESP::analog_enabled();
|
||||
if (EMSESP::analog_enabled()) {
|
||||
node["analogSensors"] = EMSESP::analogsensor_.count_entities();
|
||||
node["analogSensorReads"] = EMSESP::analogsensor_.reads();
|
||||
|
||||
@@ -243,13 +243,9 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) {
|
||||
|
||||
// Modbus settings
|
||||
settings.modbus_enabled = root["modbus_enabled"] | EMSESP_DEFAULT_MODBUS_ENABLED;
|
||||
check_flag(original_settings.modbus_enabled, settings.modbus_enabled, ChangeFlags::RESTART);
|
||||
settings.modbus_port = root["modbus_port"] | EMSESP_DEFAULT_MODBUS_PORT;
|
||||
check_flag(original_settings.modbus_port, settings.modbus_port, ChangeFlags::RESTART);
|
||||
settings.modbus_max_clients = root["modbus_max_clients"] | EMSESP_DEFAULT_MODBUS_MAX_CLIENTS;
|
||||
check_flag(original_settings.modbus_max_clients, settings.modbus_max_clients, ChangeFlags::RESTART);
|
||||
settings.modbus_timeout = root["modbus_timeout"] | EMSESP_DEFAULT_MODBUS_TIMEOUT;
|
||||
check_flag(original_settings.modbus_timeout, settings.modbus_timeout, ChangeFlags::RESTART);
|
||||
|
||||
//
|
||||
// these may need mqtt restart to rebuild HA discovery topics
|
||||
|
||||
Reference in New Issue
Block a user