mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 07:49:52 +03:00
Merge pull request #2390 from proddy/dev
fix system command read from crashing
This commit is contained in:
2
Makefile
2
Makefile
@@ -103,7 +103,7 @@ CPPFLAGS += -Wall -Wextra -Werror
|
|||||||
CPPFLAGS += -Wswitch-enum
|
CPPFLAGS += -Wswitch-enum
|
||||||
CPPFLAGS += -Wno-unused-parameter
|
CPPFLAGS += -Wno-unused-parameter
|
||||||
CPPFLAGS += -Wno-missing-braces
|
CPPFLAGS += -Wno-missing-braces
|
||||||
CPPFLAGS += -Wno-tautological-constant-out-of-range-compare
|
# CPPFLAGS += -Wno-tautological-constant-out-of-range-compare
|
||||||
|
|
||||||
CFLAGS += $(CPPFLAGS)
|
CFLAGS += $(CPPFLAGS)
|
||||||
CXXFLAGS += $(CPPFLAGS)
|
CXXFLAGS += $(CPPFLAGS)
|
||||||
|
|||||||
@@ -66,12 +66,12 @@ std::string Mqtt::lastresponse_ = "";
|
|||||||
// icons from https://materialdesignicons.com used with the UOMs (unit of measurements)
|
// icons from https://materialdesignicons.com used with the UOMs (unit of measurements)
|
||||||
MAKE_WORD(measurement)
|
MAKE_WORD(measurement)
|
||||||
MAKE_WORD(total_increasing)
|
MAKE_WORD(total_increasing)
|
||||||
MAKE_WORD_CUSTOM(icondegrees, "mdi:coolant-temperature") // DeviceValueUOM::DEGREES
|
// MAKE_WORD_CUSTOM(icondegrees, "mdi:coolant-temperature") // DeviceValueUOM::DEGREES
|
||||||
MAKE_WORD_CUSTOM(iconpercent, "mdi:percent-outline") // DeviceValueUOM::PERCENT
|
MAKE_WORD_CUSTOM(iconpercent, "mdi:percent-outline") // DeviceValueUOM::PERCENT
|
||||||
MAKE_WORD_CUSTOM(iconkb, "mdi:memory") // DeviceValueUOM::KB
|
MAKE_WORD_CUSTOM(iconkb, "mdi:memory") // DeviceValueUOM::KB
|
||||||
MAKE_WORD_CUSTOM(iconlmin, "mdi:water-boiler") // DeviceValueUOM::LMIN
|
MAKE_WORD_CUSTOM(iconlmin, "mdi:water-boiler") // DeviceValueUOM::LMIN
|
||||||
MAKE_WORD_CUSTOM(iconua, "mdi:lightning-bolt-circle") // DeviceValueUOM::UA
|
MAKE_WORD_CUSTOM(iconua, "mdi:lightning-bolt-circle") // DeviceValueUOM::UA
|
||||||
MAKE_WORD_CUSTOM(iconnum, "mdi:counter") // DeviceValueUOM::NONE
|
MAKE_WORD_CUSTOM(iconnum, "mdi:counter") // DeviceValueUOM::NONE
|
||||||
|
|
||||||
uuid::log::Logger Mqtt::logger_{F_(mqtt), uuid::log::Facility::DAEMON};
|
uuid::log::Logger Mqtt::logger_{F_(mqtt), uuid::log::Facility::DAEMON};
|
||||||
|
|
||||||
@@ -1149,8 +1149,6 @@ void Mqtt::add_ha_uom(JsonObject doc, const uint8_t type, const uint8_t uom, con
|
|||||||
case DeviceValueUOM::K:
|
case DeviceValueUOM::K:
|
||||||
doc[sc_ha] = F_(measurement);
|
doc[sc_ha] = F_(measurement);
|
||||||
doc[dc_ha] = "temperature";
|
doc[dc_ha] = "temperature";
|
||||||
if (is_discovery)
|
|
||||||
doc["ic"] = F_(icondegrees); // icon // TODO check if still needed
|
|
||||||
// override uom if fahrenheit
|
// override uom if fahrenheit
|
||||||
doc[uom_ha] = EMSESP::system_.fahrenheit() ? DeviceValue::DeviceValueUOM_s[DeviceValueUOM::FAHRENHEIT] : DeviceValue::DeviceValueUOM_s[uom];
|
doc[uom_ha] = EMSESP::system_.fahrenheit() ? DeviceValue::DeviceValueUOM_s[DeviceValueUOM::FAHRENHEIT] : DeviceValue::DeviceValueUOM_s[uom];
|
||||||
break;
|
break;
|
||||||
@@ -1158,7 +1156,7 @@ void Mqtt::add_ha_uom(JsonObject doc, const uint8_t type, const uint8_t uom, con
|
|||||||
doc[sc_ha] = F_(measurement);
|
doc[sc_ha] = F_(measurement);
|
||||||
doc[dc_ha] = "power_factor";
|
doc[dc_ha] = "power_factor";
|
||||||
if (is_discovery)
|
if (is_discovery)
|
||||||
doc["ic"] = F_(iconpercent); // icon // TODO check if still needed
|
doc["ic"] = F_(iconpercent); // icon
|
||||||
break;
|
break;
|
||||||
case DeviceValueUOM::SECONDS:
|
case DeviceValueUOM::SECONDS:
|
||||||
case DeviceValueUOM::MINUTES:
|
case DeviceValueUOM::MINUTES:
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ bool System::command_send(const char * value, const int8_t id) {
|
|||||||
return EMSESP::txservice_.send_raw(value); // ignore id
|
return EMSESP::txservice_.send_raw(value); // ignore id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// returns last response from MQTT
|
||||||
bool System::command_response(const char * value, const int8_t id, JsonObject output) {
|
bool System::command_response(const char * value, const int8_t id, JsonObject output) {
|
||||||
JsonDocument doc;
|
JsonDocument doc;
|
||||||
if (DeserializationError::Ok == deserializeJson(doc, Mqtt::get_response())) {
|
if (DeserializationError::Ok == deserializeJson(doc, Mqtt::get_response())) {
|
||||||
@@ -1159,7 +1160,7 @@ bool System::check_restore() {
|
|||||||
// returns true if we need a reboot
|
// returns true if we need a reboot
|
||||||
bool System::check_upgrade(bool factory_settings) {
|
bool System::check_upgrade(bool factory_settings) {
|
||||||
bool missing_version = true;
|
bool missing_version = true;
|
||||||
std::string settingsVersion{EMSESP_APP_VERSION}; // default setting version
|
std::string settingsVersion;
|
||||||
|
|
||||||
if (!factory_settings) {
|
if (!factory_settings) {
|
||||||
// fetch current version from settings file
|
// fetch current version from settings file
|
||||||
@@ -1171,6 +1172,8 @@ bool System::check_upgrade(bool factory_settings) {
|
|||||||
LOG_WARNING("No version information found");
|
LOG_WARNING("No version information found");
|
||||||
settingsVersion = "3.5.0"; // this was the last stable version without version info
|
settingsVersion = "3.5.0"; // this was the last stable version without version info
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
settingsVersion = EMSESP_APP_VERSION; // use the current version
|
||||||
}
|
}
|
||||||
|
|
||||||
version::Semver200_version settings_version(settingsVersion);
|
version::Semver200_version settings_version(settingsVersion);
|
||||||
@@ -2083,7 +2086,12 @@ bool System::uploadFirmwareURL(const char * url) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// read command, e.g. read <deviceID> <type ID> [offset] [length] from console or API
|
// read command, e.g. read <deviceID> <type ID> [offset] [length] from console or API
|
||||||
|
// from Console use quotes so: call system read "<deviceID> <type ID> [offset] [length]"
|
||||||
bool System::readCommand(const char * data) {
|
bool System::readCommand(const char * data) {
|
||||||
|
if (!data) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// extract <deviceID> <type ID> [offset] [length] from string
|
// extract <deviceID> <type ID> [offset] [length] from string
|
||||||
char * p;
|
char * p;
|
||||||
char value[11];
|
char value[11];
|
||||||
@@ -2102,7 +2110,7 @@ bool System::readCommand(const char * data) {
|
|||||||
strlcpy(value, p, 10); // get string
|
strlcpy(value, p, 10); // get string
|
||||||
device_id = (uint8_t)Helpers::hextoint(value); // convert hex to int
|
device_id = (uint8_t)Helpers::hextoint(value); // convert hex to int
|
||||||
if (!EMSESP::valid_device(device_id)) {
|
if (!EMSESP::valid_device(device_id)) {
|
||||||
LOG_ERROR("Invalid device ID (%d) for read command", device_id);
|
LOG_ERROR("Invalid device ID (%d) in read command", device_id);
|
||||||
return false; // invalid device
|
return false; // invalid device
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
#define EMSESP_APP_VERSION "3.7.2-dev.17"
|
#define EMSESP_APP_VERSION "3.7.2-dev.18"
|
||||||
|
|||||||
Reference in New Issue
Block a user