From bb74f2fffebbc681b046fe6da2b794141fbf6d1a Mon Sep 17 00:00:00 2001 From: "S. Seegel" Date: Tue, 21 Nov 2023 17:24:14 +0100 Subject: [PATCH 1/2] Support variable length fields --- src/MBUSPayload.cpp | 79 ++++++++++++++++++++++++++++++++++----------- src/MBUSPayload.h | 1 + 2 files changed, 62 insertions(+), 18 deletions(-) diff --git a/src/MBUSPayload.cpp b/src/MBUSPayload.cpp index 15bca42..7d6bb14 100644 --- a/src/MBUSPayload.cpp +++ b/src/MBUSPayload.cpp @@ -192,7 +192,6 @@ uint8_t MBUSPayload::addField(uint8_t code, float value) { } uint8_t MBUSPayload::decode(uint8_t *buffer, uint8_t size, JsonArray& root) { - uint8_t count = 0; uint8_t index = 0; @@ -202,9 +201,22 @@ uint8_t MBUSPayload::decode(uint8_t *buffer, uint8_t size, JsonArray& root) { // Decode DIF uint8_t dif = buffer[index++]; - bool bcd = ((dif & 0x08) == 0x08); + bool bcd; uint8_t len = (dif & 0x07); - if ((len < 1) || (4 < len)) { + bcd = ((dif & 0x08) == 0x08); + switch (len) { + case 1: + case 2: + case 3: + case 4: + break; + + case 5: // var len or float + if (bcd) { // var len + break; + } + + default: // float, 48 & 64 bit not yet supported _error = MBUS_ERROR::UNSUPPORTED_CODING; return 0; } @@ -225,6 +237,9 @@ uint8_t MBUSPayload::decode(uint8_t *buffer, uint8_t size, JsonArray& root) { _error = MBUS_ERROR::UNSUPPORTED_VIF; return 0; } + + if (dif == MBUS_CODING::VARLEN) + len = buffer[index++]; // Check buffer overflow if (index + len > size) { @@ -234,37 +249,65 @@ uint8_t MBUSPayload::decode(uint8_t *buffer, uint8_t size, JsonArray& root) { // read value uint32_t value = 0; + String valuestr; if (bcd) { - for (uint8_t i = 0; i> 4) * 10) + (byte & 0x0F); + if (dif == MBUS_CODING::VARLEN) { + bool prntabl = true; + for (uint8_t i = 0; i> 4) * 10) + (byte & 0x0F); + } + } + } + else { for (uint8_t i = 0; i Date: Mon, 6 Apr 2026 00:16:13 +0200 Subject: [PATCH 2/2] fix warning with Arduino JSON 7 --- src/MBUSPayload.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MBUSPayload.cpp b/src/MBUSPayload.cpp index 7d6bb14..e692687 100644 --- a/src/MBUSPayload.cpp +++ b/src/MBUSPayload.cpp @@ -286,7 +286,7 @@ uint8_t MBUSPayload::decode(uint8_t *buffer, uint8_t size, JsonArray& root) { index += len; // Init object - JsonObject data = root.createNestedObject(); + JsonObject data = root.add(); data["vif"] = vif; data["code"] = vif_defs[def].code;