From f55d7c1eff75ea7c5195d3fee50a5ad458c46708 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Sat, 28 Dec 2024 17:52:36 +0100 Subject: [PATCH] extractTasmotaValues bug --- src/main.cpp | 36 +++++++++++++++++++----------------- src/settings.h | 1 + 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 7c94a68..7387c5d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,9 @@ #include #include #include -#include +//#include +#include + #define BUTTON_PIN D3 // GPIO-Pin verbunden mit Taster (D3 entspricht GPIO0) @@ -114,7 +116,6 @@ void extractTasmotaValues(const String& url, String values[6], int decimalPlaces String response = http.getString(); http.end(); - // Array mit den Schlüsseln der gewünschten Werte const String keys[6] = { tasmota_plug_json_prefix_power, tasmota_smr_json_prefix_power, @@ -124,39 +125,37 @@ void extractTasmotaValues(const String& url, String values[6], int decimalPlaces tasmota_smr_json_prefix_2_8_0 }; - // Werte extrahieren for (int i = 0; i < 6; i++) { - values[i] = "?"; // Standardwert, falls Key nicht gefunden wird + values[i] = "?"; int keyIndex = response.indexOf("\"" + keys[i] + "\":"); if (keyIndex != -1) { - int valueStart = keyIndex + keys[i].length() + 3; // Position nach dem ":" - int valueEnd = response.indexOf(",", valueStart); // Ende der Zahl oder des Wertes + int valueStart = keyIndex + keys[i].length() + 3; + int valueEnd = response.indexOf(",", valueStart); if (valueEnd == -1) { - valueEnd = response.indexOf("}", valueStart); // Falls am Ende der JSON-Objekte + valueEnd = response.indexOf("}", valueStart); } if (valueEnd != -1) { values[i] = response.substring(valueStart, valueEnd); - values[i].trim(); // Entfernt überflüssige Leerzeichen + values[i].trim(); - // Anzahl der Nachkommastellen begrenzen + // Begrenzung der Nachkommastellen if (decimalPlaces >= 0) { int dotIndex = values[i].indexOf('.'); if (dotIndex != -1) { + // Berechnung des Truncate-Index int truncateIndex = dotIndex + 1 + decimalPlaces; - if (truncateIndex < values[i].length()) { - values[i] = values[i].substring(0, truncateIndex); + + // Sicherstellen, dass truncateIndex nicht negativ ist und im gültigen Bereich liegt + if (truncateIndex >= 0 && + static_cast(truncateIndex) < values[i].length()) { + values[i] = values[i].substring(0, static_cast(truncateIndex)); } } } } + } } - - -// for (int i = 0; i < 6; i++) { -// Serial.println(String(values[i])); -// } - } else { Serial.println("HTTP Fehler: " + String(httpResponseCode)); } @@ -170,6 +169,9 @@ void extractTasmotaValues(const String& url, String values[6], int decimalPlaces + + + void connectToWiFi() { Serial.println("WLAN Verbindungsaufbau zu: " + String(ssidList[current_ap])); Serial.println("Passwort: " + String(passwordList[current_ap])); diff --git a/src/settings.h b/src/settings.h index 938022e..a28be77 100644 --- a/src/settings.h +++ b/src/settings.h @@ -1,3 +1,4 @@ +#include #ifndef SETTINGS_H #define SETTINGS_H