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
|
RxService EMSESP::rxservice_; // incoming Telegram Rx handler
|
||||||
TxService EMSESP::txservice_; // outgoing Telegram Tx handler
|
TxService EMSESP::txservice_; // outgoing Telegram Tx handler
|
||||||
Mqtt EMSESP::mqtt_; // mqtt handler
|
Mqtt EMSESP::mqtt_; // mqtt handler
|
||||||
Modbus * EMSESP::modbus_; // modbus handler
|
Modbus * EMSESP::modbus_ = nullptr; // modbus handler
|
||||||
System EMSESP::system_; // core system services
|
System EMSESP::system_; // core system services
|
||||||
TemperatureSensor EMSESP::temperaturesensor_; // Temperature sensors
|
TemperatureSensor EMSESP::temperaturesensor_; // Temperature sensors
|
||||||
AnalogSensor EMSESP::analogsensor_; // Analog sensors
|
AnalogSensor EMSESP::analogsensor_; // Analog sensors
|
||||||
@@ -1795,12 +1795,6 @@ void EMSESP::start() {
|
|||||||
#endif
|
#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
|
mqtt_.start(); // mqtt init
|
||||||
system_.start(); // starts commands, led, adc, button, network (sets hostname), syslog & uart
|
system_.start(); // starts commands, led, adc, button, network (sets hostname), syslog & uart
|
||||||
shower_.start(); // initialize shower timer and shower alert
|
shower_.start(); // initialize shower timer and shower alert
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ void Modbus::stop() {
|
|||||||
#ifndef EMSESP_STANDALONE
|
#ifndef EMSESP_STANDALONE
|
||||||
modbusServer_->stop();
|
modbusServer_->stop();
|
||||||
// virtual ~ModbusServerTCPasync() = default;
|
// virtual ~ModbusServerTCPasync() = default;
|
||||||
// delete modbusServer_;
|
delete modbusServer_;
|
||||||
modbusServer_ = nullptr;
|
modbusServer_ = nullptr;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -556,11 +556,6 @@ void System::store_settings(WebSettings & settings) {
|
|||||||
board_profile_ = settings.board_profile;
|
board_profile_ = settings.board_profile;
|
||||||
telnet_enabled_ = settings.telnet_enabled;
|
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;
|
tx_mode_ = settings.tx_mode;
|
||||||
syslog_enabled_ = settings.syslog_enabled;
|
syslog_enabled_ = settings.syslog_enabled;
|
||||||
syslog_level_ = settings.syslog_level;
|
syslog_level_ = settings.syslog_level;
|
||||||
@@ -581,6 +576,24 @@ void System::store_settings(WebSettings & settings) {
|
|||||||
|
|
||||||
locale_ = settings.locale;
|
locale_ = settings.locale;
|
||||||
developer_mode_ = settings.developer_mode;
|
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
|
// Starts up core services
|
||||||
@@ -2173,6 +2186,15 @@ bool System::command_info(const char * value, const int8_t id, JsonObject output
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
// Sensor Status
|
||||||
node = output["sensor"].to<JsonObject>();
|
node = output["sensor"].to<JsonObject>();
|
||||||
if (EMSESP::sensor_enabled()) {
|
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["temperatureSensorReads"] = EMSESP::temperaturesensor_.reads();
|
||||||
node["temperatureSensorFails"] = EMSESP::temperaturesensor_.fails();
|
node["temperatureSensorFails"] = EMSESP::temperaturesensor_.fails();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
node = output["Analog"].to<JsonObject>();
|
||||||
|
node["enabled"] = EMSESP::analog_enabled();
|
||||||
if (EMSESP::analog_enabled()) {
|
if (EMSESP::analog_enabled()) {
|
||||||
node["analogSensors"] = EMSESP::analogsensor_.count_entities();
|
node["analogSensors"] = EMSESP::analogsensor_.count_entities();
|
||||||
node["analogSensorReads"] = EMSESP::analogsensor_.reads();
|
node["analogSensorReads"] = EMSESP::analogsensor_.reads();
|
||||||
|
|||||||
@@ -243,13 +243,9 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) {
|
|||||||
|
|
||||||
// Modbus settings
|
// Modbus settings
|
||||||
settings.modbus_enabled = root["modbus_enabled"] | EMSESP_DEFAULT_MODBUS_ENABLED;
|
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;
|
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;
|
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;
|
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
|
// these may need mqtt restart to rebuild HA discovery topics
|
||||||
|
|||||||
Reference in New Issue
Block a user