response "" for empty, fix value for some cases

This commit is contained in:
MichaelDvP
2024-07-25 17:58:38 +02:00
parent 9c80c92f06
commit 8adb35e47a
2 changed files with 4 additions and 6 deletions

View File

@@ -729,7 +729,7 @@ void EMSESP::publish_response(std::shared_ptr<const Telegram> telegram) {
} }
buffer[267] = '\0'; buffer[267] = '\0';
} }
if (telegram->message_length > 0 || telegram->offset == offset) { if (telegram->message_length) {
strlcpy(&buffer[(telegram->offset - offset) * 3], Helpers::data_to_hex(telegram->message_data, telegram->message_length).c_str(), 768); strlcpy(&buffer[(telegram->offset - offset) * 3], Helpers::data_to_hex(telegram->message_data, telegram->message_length).c_str(), 768);
} else { } else {
strlcpy(&buffer[(telegram->offset - offset) * 3], "", 768); strlcpy(&buffer[(telegram->offset - offset) * 3], "", 768);
@@ -746,11 +746,8 @@ void EMSESP::publish_response(std::shared_ptr<const Telegram> telegram) {
doc["offset"] = Helpers::hextoa(s, offset); doc["offset"] = Helpers::hextoa(s, offset);
doc["data"] = buffer; doc["data"] = buffer;
if (telegram->message_length <= 4 && strlen(buffer) <= 11) { if (strlen(buffer) && strlen(buffer) <= 11) {
uint32_t value = 0; uint32_t value = Helpers::hextoint(buffer);
for (uint8_t i = 0; i < telegram->message_length; i++) {
value = (value << 8) + telegram->message_data[i];
}
doc["value"] = value; doc["value"] = value;
} }
Mqtt::queue_publish("response", doc.as<JsonObject>()); Mqtt::queue_publish("response", doc.as<JsonObject>());

View File

@@ -411,6 +411,7 @@ uint32_t Helpers::hextoint(const char * hex) {
// get current character then increment // get current character then increment
char byte = *hex++; char byte = *hex++;
// transform hex character to the 4bit equivalent number, using the ascii table indexes // transform hex character to the 4bit equivalent number, using the ascii table indexes
if (byte == ' ') byte = *hex++; // skip spaces
if (byte >= '0' && byte <= '9') if (byte >= '0' && byte <= '9')
byte = byte - '0'; byte = byte - '0';
else if (byte >= 'a' && byte <= 'f') else if (byte >= 'a' && byte <= 'f')