From 0b5a7b9f2a63b07c1c2d2bf2463ce309ebe152be Mon Sep 17 00:00:00 2001 From: Proddy Date: Tue, 14 Nov 2023 22:24:32 +0100 Subject: [PATCH] fix bug when traversing ems devices when using cmd allvalues --- src/emsdevice.cpp | 6 +++--- src/system.cpp | 12 ++++-------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index ae80ffcb2..12a584fc1 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -817,7 +817,7 @@ std::string EMSdevice::get_value_uom(const std::string & shortname) const { return std::string{}; // not found } -bool EMSdevice::export_values(uint8_t device_type, JsonObject & output, const int8_t id, const uint8_t output_target) { +bool EMSdevice::export_values(uint8_t unique_id, JsonObject & output, const int8_t id, const uint8_t output_target) { bool has_value = false; uint8_t tag; if (id >= 1 && id <= (1 + DeviceValueTAG::TAG_HS16 - DeviceValueTAG::TAG_HC1)) { @@ -830,7 +830,7 @@ bool EMSdevice::export_values(uint8_t device_type, JsonObject & output, const in if (id > 0 || output_target == EMSdevice::OUTPUT_TARGET::API_VERBOSE) { for (const auto & emsdevice : EMSESP::emsdevices) { - if (emsdevice && (emsdevice->device_type() == device_type)) { + if (emsdevice->unique_id() == unique_id) { has_value |= emsdevice->generate_values(output, tag, (id < 1), output_target); // use nested for id -1 and 0 } } @@ -842,7 +842,7 @@ bool EMSdevice::export_values(uint8_t device_type, JsonObject & output, const in JsonObject output_hc = output; bool nest_created = false; for (const auto & emsdevice : EMSESP::emsdevices) { - if (emsdevice && (emsdevice->device_type() == device_type)) { + if (emsdevice->unique_id() == unique_id) { if (!nest_created && emsdevice->has_tags(tag)) { output_hc = output.createNestedObject(EMSdevice::tag_to_mqtt(tag)); nest_created = true; diff --git a/src/system.cpp b/src/system.cpp index 6e2759f7d..62c80ea58 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -112,14 +112,10 @@ bool System::command_allvalues(const char * value, const int8_t id, JsonObject & DynamicJsonDocument doc(EMSESP_JSON_SIZE_XXXLARGE); JsonObject device_output; - for (const auto & device_class : EMSFactory::device_handlers()) { - for (const auto & emsdevice : EMSESP::emsdevices) { - if (emsdevice->device_type() == device_class.first) { - std::string title = emsdevice->device_type_2_device_name_translated() + std::string(" ") + emsdevice->to_string(); - device_output = output.createNestedObject(title); - emsesp::EMSdevice::export_values(emsdevice->device_type(), device_output, id, EMSdevice::OUTPUT_TARGET::API_VERBOSE); - } - } + for (const auto & emsdevice : EMSESP::emsdevices) { + std::string title = emsdevice->device_type_2_device_name_translated() + std::string(" ") + emsdevice->to_string(); + device_output = output.createNestedObject(title); + emsesp::EMSdevice::export_values(emsdevice->unique_id(), device_output, id, EMSdevice::OUTPUT_TARGET::API_VERBOSE); } // Custom entities