Browse Source

0.8.86

* RestAPI check for parent element to be JsonObject #1449
* fix translation #1448 #1442
* fix reset values when inverter status is 'not available' #1035 #1437
pull/1465/head
lumapu 1 year ago
parent
commit
6d887e1540
  1. 5
      src/CHANGES.md
  2. 2
      src/app.cpp
  3. 2
      src/defines.h
  4. 52
      src/web/RestApi.h
  5. 6
      src/web/html/serial.html
  6. 18
      src/web/lang.json

5
src/CHANGES.md

@ -1,5 +1,10 @@
# Development Changes # Development Changes
## 0.8.86 - 2024-02-23
* RestAPI check for parent element to be JsonObject #1449
* fix translation #1448 #1442
* fix reset values when inverter status is 'not available' #1035 #1437
## 0.8.85 - 2024-02-22 ## 0.8.85 - 2024-02-22
* possible fix of MqTT fix "total values are sent to often" #1421 * possible fix of MqTT fix "total values are sent to often" #1421
* fix translation #1442 * fix translation #1442

2
src/app.cpp

@ -468,7 +468,7 @@ void app:: zeroIvValues(bool checkAvail, bool skipYieldDay) {
continue; // skip to next inverter continue; // skip to next inverter
if (checkAvail) { if (checkAvail) {
if (!iv->isAvailable()) if (iv->isAvailable())
continue; continue;
} }

2
src/defines.h

@ -13,7 +13,7 @@
//------------------------------------- //-------------------------------------
#define VERSION_MAJOR 0 #define VERSION_MAJOR 0
#define VERSION_MINOR 8 #define VERSION_MINOR 8
#define VERSION_PATCH 85 #define VERSION_PATCH 86
//------------------------------------- //-------------------------------------
typedef struct { typedef struct {

52
src/web/RestApi.h

@ -141,7 +141,7 @@ class RestApi {
DPRINTLN(DBG_VERBOSE, "onApiPostBody"); DPRINTLN(DBG_VERBOSE, "onApiPostBody");
if(0 == index) { if(0 == index) {
if(NULL != mTmpBuf) if(nullptr != mTmpBuf)
delete[] mTmpBuf; delete[] mTmpBuf;
mTmpBuf = new uint8_t[total+1]; mTmpBuf = new uint8_t[total+1];
mTmpSize = total; mTmpSize = total;
@ -154,36 +154,40 @@ class RestApi {
DynamicJsonDocument json(1000); DynamicJsonDocument json(1000);
DeserializationError err = deserializeJson(json, reinterpret_cast<const char*>(mTmpBuf), mTmpSize);
JsonObject obj = json.as<JsonObject>();
AsyncJsonResponse* response = new AsyncJsonResponse(false, 200); AsyncJsonResponse* response = new AsyncJsonResponse(false, 200);
JsonObject root = response->getRoot(); JsonObject root = response->getRoot();
root[F("success")] = (err) ? false : true; DeserializationError err = deserializeJson(json, reinterpret_cast<const char*>(mTmpBuf), mTmpSize);
if(!err) { if(!json.is<JsonObject>())
String path = request->url().substring(5); root[F("error")] = F(DESER_FAILED);
if(path == "ctrl") else {
root[F("success")] = setCtrl(obj, root, request->client()->remoteIP().toString().c_str()); JsonObject obj = json.as<JsonObject>();
else if(path == "setup")
root[F("success")] = setSetup(obj, root, request->client()->remoteIP().toString().c_str()); root[F("success")] = (err) ? false : true;
else { if(!err) {
root[F("success")] = false; String path = request->url().substring(5);
root[F("error")] = F(PATH_NOT_FOUND) + path; if(path == "ctrl")
} root[F("success")] = setCtrl(obj, root, request->client()->remoteIP().toString().c_str());
} else { else if(path == "setup")
switch (err.code()) { root[F("success")] = setSetup(obj, root, request->client()->remoteIP().toString().c_str());
case DeserializationError::Ok: break; else {
case DeserializationError::IncompleteInput: root[F("error")] = F(INCOMPLETE_INPUT); break; root[F("success")] = false;
case DeserializationError::InvalidInput: root[F("error")] = F(INVALID_INPUT); break; root[F("error")] = F(PATH_NOT_FOUND) + path;
case DeserializationError::NoMemory: root[F("error")] = F(NOT_ENOUGH_MEM); break; }
default: root[F("error")] = F(DESER_FAILED); break; } else {
switch (err.code()) {
case DeserializationError::Ok: break;
case DeserializationError::IncompleteInput: root[F("error")] = F(INCOMPLETE_INPUT); break;
case DeserializationError::InvalidInput: root[F("error")] = F(INVALID_INPUT); break;
case DeserializationError::NoMemory: root[F("error")] = F(NOT_ENOUGH_MEM); break;
default: root[F("error")] = F(DESER_FAILED); break;
}
} }
} }
response->setLength(); response->setLength();
request->send(response); request->send(response);
delete[] mTmpBuf; delete[] mTmpBuf;
mTmpBuf = NULL; mTmpBuf = nullptr;
} }
void getNotFound(JsonObject obj, String url) { void getNotFound(JsonObject obj, String url) {
@ -974,7 +978,7 @@ class RestApi {
uint32_t mTimezoneOffset = 0; uint32_t mTimezoneOffset = 0;
uint32_t mHeapFree = 0, mHeapFreeBlk = 0; uint32_t mHeapFree = 0, mHeapFreeBlk = 0;
uint8_t mHeapFrag = 0; uint8_t mHeapFrag = 0;
uint8_t *mTmpBuf = NULL; uint8_t *mTmpBuf = nullptr;
uint32_t mTmpSize = 0; uint32_t mTmpSize = 0;
}; };

6
src/web/html/serial.html

@ -65,7 +65,7 @@
}); });
document.getElementById("scroll").addEventListener("click", function() { document.getElementById("scroll").addEventListener("click", function() {
mAutoScroll = !mAutoScroll; mAutoScroll = !mAutoScroll;
this.value = (mAutoScroll) ? "autoscroll" : "manual scroll"; this.value = (mAutoScroll) ? "{#BTN_AUTOSCROLL}" : "{#BTN_MANUALSCROLL}";
}); });
document.getElementById("copy").addEventListener("click", function() { document.getElementById("copy").addEventListener("click", function() {
con.value = version + " - " + build + "\n---------------\n" + con.value; con.value = version + " - " + build + "\n---------------\n" + con.value;
@ -80,10 +80,10 @@
try { try {
return document.execCommand("copy"); // Security exception may be thrown by some browsers. return document.execCommand("copy"); // Security exception may be thrown by some browsers.
} catch (ex) { } catch (ex) {
alert("Copy to clipboard failed" + ex); alert("CLIPBOARD_FAILED " + ex);
} finally { } finally {
document.body.removeChild(ta); document.body.removeChild(ta);
alert("Copied to clipboard"); alert("{#COPIED_TO_CLIPBOARD}");
} }
} }
}); });

18
src/web/lang.json

@ -883,6 +883,11 @@
"en": "autoscroll", "en": "autoscroll",
"de": "automatisch scrollen" "de": "automatisch scrollen"
}, },
{
"token": "BTN_MANUALSCROLL",
"en": "manual scroll",
"de": "manuell scrollen"
},
{ {
"token": "BTN_COPY", "token": "BTN_COPY",
"en": "copy", "en": "copy",
@ -897,12 +902,21 @@
"token": "UPTIME", "token": "UPTIME",
"en": "uptime", "en": "uptime",
"de": "Laufzeit" "de": "Laufzeit"
} },
,
{ {
"token": "DAYS", "token": "DAYS",
"en": "days", "en": "days",
"de": "Tage" "de": "Tage"
},
{
"token": "COPIED_TO_CLIPBOARD",
"en": "Copied to clipboard",
"de": "in die Zwischenablage kopiert"
},
{
"token": "CLIPBOARD_FAILED",
"en": "Copy failed",
"de": "kopieren fehlgeschlagen"
} }
] ]
}, },

Loading…
Cancel
Save