From 3c0c8eece32b45b553a4c08456d346f0d2078504 Mon Sep 17 00:00:00 2001 From: lumapu Date: Thu, 11 Jul 2024 22:20:11 +0200 Subject: [PATCH] 0.8.129 * sort alarms ascending #1471 * fix alarm counter for first alarm * prevent add inverter multiple times #1700 --- src/CHANGES.md | 7 ++++++- src/defines.h | 2 +- src/hm/hmInverter.h | 2 +- src/web/RestApi.h | 34 +++++++++++++++++++++++++++++----- 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/CHANGES.md b/src/CHANGES.md index dfd4ca2a..c60bd5c4 100644 --- a/src/CHANGES.md +++ b/src/CHANGES.md @@ -1,8 +1,13 @@ # Development Changes +## 0.8.129 - 2024-07-11 +* sort alarms ascending #1471 +* fix alarm counter for first alarm +* prevent add inverter multiple times #1700 + ## 0.8.128 - 2024-07-10 * add environments for 16MB flash size ESP32-S3 aka opendtufusion -* prevent duplicate alarms, update end time once it is received +* prevent duplicate alarms, update end time once it is received #1471 ## 0.8.127 - 2024-06-21 * add grid file #1677 diff --git a/src/defines.h b/src/defines.h index fae033d7..5914daa2 100644 --- a/src/defines.h +++ b/src/defines.h @@ -13,7 +13,7 @@ //------------------------------------- #define VERSION_MAJOR 0 #define VERSION_MINOR 8 -#define VERSION_PATCH 128 +#define VERSION_PATCH 129 //------------------------------------- typedef struct { uint8_t ch; diff --git a/src/hm/hmInverter.h b/src/hm/hmInverter.h index e1b99bc8..ff3ff9c5 100644 --- a/src/hm/hmInverter.h +++ b/src/hm/hmInverter.h @@ -834,7 +834,7 @@ class Inverter { } } - if(alarmCnt < 10 && alarmCnt < mAlarmNxtWrPos) + if(alarmCnt < 10 && alarmCnt <= mAlarmNxtWrPos) alarmCnt = mAlarmNxtWrPos + 1; lastAlarm[mAlarmNxtWrPos] = alarm_t(code, start, end); diff --git a/src/web/RestApi.h b/src/web/RestApi.h index d1f130d4..e02f186a 100644 --- a/src/web/RestApi.h +++ b/src/web/RestApi.h @@ -704,11 +704,23 @@ class RestApi { obj[F("last_id")] = iv->getChannelFieldValue(CH0, FLD_EVT, rec); JsonArray alarm = obj.createNestedArray(F("alarm")); + + // find oldest alarm + uint8_t offset = 0; + uint32_t oldestStart = 0xffffffff; + for(uint8_t i = 0; i < 10; i++) { + if((iv->lastAlarm[i].start != 0) && (iv->lastAlarm[i].start < oldestStart)) { + offset = i; + oldestStart = iv->lastAlarm[i].start; + } + } + for(uint8_t i = 0; i < 10; i++) { - alarm[i][F("code")] = iv->lastAlarm[i].code; - alarm[i][F("str")] = iv->getAlarmStr(iv->lastAlarm[i].code); - alarm[i][F("start")] = iv->lastAlarm[i].start; - alarm[i][F("end")] = iv->lastAlarm[i].end; + uint8_t pos = (i + offset) % 10; + alarm[pos][F("code")] = iv->lastAlarm[pos].code; + alarm[pos][F("str")] = iv->getAlarmStr(iv->lastAlarm[pos].code); + alarm[pos][F("start")] = iv->lastAlarm[pos].start; + alarm[pos][F("end")] = iv->lastAlarm[pos].end; } } @@ -1105,7 +1117,19 @@ class RestApi { } #endif /* !defined(ETHERNET */ else if(F("save_iv") == jsonIn[F("cmd")]) { - Inverter<> *iv = mSys->getInverterByPos(jsonIn[F("id")], false); + Inverter<> *iv; + + for(uint8_t i = 0; i < MAX_NUM_INVERTERS; i++) { + iv = mSys->getInverterByPos(jsonIn[F("id")], true); + if(nullptr != iv) { + if((i != jsonIn[F("id")]) && (iv->config->serial.u64 == jsonIn[F("ser")])) { + jsonOut[F("error")] = F("ERR_DUPLICATE_INVERTER"); + return false; + } + } + } + + iv = mSys->getInverterByPos(jsonIn[F("id")], false); iv->config->enabled = jsonIn[F("en")]; iv->config->serial.u64 = jsonIn[F("ser")]; snprintf(iv->config->name, MAX_NAME_LENGTH, "%s", jsonIn[F("name")].as());