Feature: Add option to clear eventlog at midnight
This commit is contained in:
parent
3a4f70dc75
commit
6e607f7f67
@ -47,6 +47,7 @@ struct INVERTER_CONFIG_T {
|
||||
uint8_t ReachableThreshold;
|
||||
bool ZeroRuntimeDataIfUnrechable;
|
||||
bool ZeroYieldDayOnMidnight;
|
||||
bool ClearEventlogOnMidnight;
|
||||
bool YieldDayCorrection;
|
||||
CHANNEL_CONFIG_T channel[INV_MAX_CHAN_COUNT];
|
||||
};
|
||||
|
||||
@ -141,6 +141,9 @@ void HoymilesClass::loop()
|
||||
if (inv->getZeroYieldDayOnMidnight()) {
|
||||
inv->Statistics()->zeroDailyData();
|
||||
}
|
||||
if (inv->getClearEventlogOnMidnight()) {
|
||||
inv->EventLog()->clearBuffer();
|
||||
}
|
||||
}
|
||||
|
||||
lastWeekDay = currentWeekDay;
|
||||
|
||||
@ -127,6 +127,16 @@ bool InverterAbstract::getZeroYieldDayOnMidnight() const
|
||||
return _zeroYieldDayOnMidnight;
|
||||
}
|
||||
|
||||
void InverterAbstract::setClearEventlogOnMidnight(const bool enabled)
|
||||
{
|
||||
_clearEventlogOnMidnight = enabled;
|
||||
}
|
||||
|
||||
bool InverterAbstract::getClearEventlogOnMidnight() const
|
||||
{
|
||||
return _clearEventlogOnMidnight;
|
||||
}
|
||||
|
||||
bool InverterAbstract::sendChangeChannelRequest()
|
||||
{
|
||||
return false;
|
||||
|
||||
@ -58,6 +58,9 @@ public:
|
||||
void setZeroYieldDayOnMidnight(const bool enabled);
|
||||
bool getZeroYieldDayOnMidnight() const;
|
||||
|
||||
void setClearEventlogOnMidnight(const bool enabled);
|
||||
bool getClearEventlogOnMidnight() const;
|
||||
|
||||
void clearRxFragmentBuffer();
|
||||
void addRxFragment(const uint8_t fragment[], const uint8_t len);
|
||||
uint8_t verifyAllFragments(CommandAbstract& cmd);
|
||||
@ -102,6 +105,7 @@ private:
|
||||
|
||||
bool _zeroValuesIfUnreachable = false;
|
||||
bool _zeroYieldDayOnMidnight = false;
|
||||
bool _clearEventlogOnMidnight = false;
|
||||
|
||||
std::unique_ptr<AlarmLogParser> _alarmLogParser;
|
||||
std::unique_ptr<DevInfoParser> _devInfoParser;
|
||||
|
||||
@ -128,6 +128,7 @@ bool ConfigurationClass::write()
|
||||
inv["reachable_threshold"] = config.Inverter[i].ReachableThreshold;
|
||||
inv["zero_runtime"] = config.Inverter[i].ZeroRuntimeDataIfUnrechable;
|
||||
inv["zero_day"] = config.Inverter[i].ZeroYieldDayOnMidnight;
|
||||
inv["clear_eventlog"] = config.Inverter[i].ClearEventlogOnMidnight;
|
||||
inv["yieldday_correction"] = config.Inverter[i].YieldDayCorrection;
|
||||
|
||||
JsonArray channel = inv["channel"].to<JsonArray>();
|
||||
@ -302,6 +303,7 @@ bool ConfigurationClass::read()
|
||||
config.Inverter[i].ReachableThreshold = inv["reachable_threshold"] | REACHABLE_THRESHOLD;
|
||||
config.Inverter[i].ZeroRuntimeDataIfUnrechable = inv["zero_runtime"] | false;
|
||||
config.Inverter[i].ZeroYieldDayOnMidnight = inv["zero_day"] | false;
|
||||
config.Inverter[i].ClearEventlogOnMidnight = inv["clear_eventlog"] | false;
|
||||
config.Inverter[i].YieldDayCorrection = inv["yieldday_correction"] | false;
|
||||
|
||||
JsonArray channel = inv["channel"];
|
||||
|
||||
@ -82,6 +82,7 @@ void InverterSettingsClass::init(Scheduler& scheduler)
|
||||
inv->setReachableThreshold(config.Inverter[i].ReachableThreshold);
|
||||
inv->setZeroValuesIfUnreachable(config.Inverter[i].ZeroRuntimeDataIfUnrechable);
|
||||
inv->setZeroYieldDayOnMidnight(config.Inverter[i].ZeroYieldDayOnMidnight);
|
||||
inv->setClearEventlogOnMidnight(config.Inverter[i].ClearEventlogOnMidnight);
|
||||
inv->Statistics()->setYieldDayCorrection(config.Inverter[i].YieldDayCorrection);
|
||||
for (uint8_t c = 0; c < INV_MAX_CHAN_COUNT; c++) {
|
||||
inv->Statistics()->setStringMaxPower(c, config.Inverter[i].channel[c].MaxChannelPower);
|
||||
|
||||
@ -55,6 +55,7 @@ void WebApiInverterClass::onInverterList(AsyncWebServerRequest* request)
|
||||
obj["reachable_threshold"] = config.Inverter[i].ReachableThreshold;
|
||||
obj["zero_runtime"] = config.Inverter[i].ZeroRuntimeDataIfUnrechable;
|
||||
obj["zero_day"] = config.Inverter[i].ZeroYieldDayOnMidnight;
|
||||
obj["clear_eventlog"] = config.Inverter[i].ClearEventlogOnMidnight;
|
||||
obj["yieldday_correction"] = config.Inverter[i].YieldDayCorrection;
|
||||
|
||||
auto inv = Hoymiles.getInverterBySerial(config.Inverter[i].Serial);
|
||||
@ -225,6 +226,7 @@ void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request)
|
||||
inverter.ReachableThreshold = root["reachable_threshold"] | REACHABLE_THRESHOLD;
|
||||
inverter.ZeroRuntimeDataIfUnrechable = root["zero_runtime"] | false;
|
||||
inverter.ZeroYieldDayOnMidnight = root["zero_day"] | false;
|
||||
inverter.ClearEventlogOnMidnight = root["clear_eventlog"] | false;
|
||||
inverter.YieldDayCorrection = root["yieldday_correction"] | false;
|
||||
|
||||
arrayCount++;
|
||||
@ -254,6 +256,7 @@ void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request)
|
||||
inv->setReachableThreshold(inverter.ReachableThreshold);
|
||||
inv->setZeroValuesIfUnreachable(inverter.ZeroRuntimeDataIfUnrechable);
|
||||
inv->setZeroYieldDayOnMidnight(inverter.ZeroYieldDayOnMidnight);
|
||||
inv->setClearEventlogOnMidnight(inverter.ClearEventlogOnMidnight);
|
||||
inv->Statistics()->setYieldDayCorrection(inverter.YieldDayCorrection);
|
||||
for (uint8_t c = 0; c < INV_MAX_CHAN_COUNT; c++) {
|
||||
inv->Statistics()->setStringMaxPower(c, inverter.channel[c].MaxChannelPower);
|
||||
|
||||
@ -515,6 +515,7 @@
|
||||
"ZeroRuntimeHint": "Nulle Laufzeit Daten (keine Ertragsdaten), wenn der Wechselrichter nicht erreichbar ist.",
|
||||
"ZeroDay": "Nulle Tagesertrag um Mitternacht",
|
||||
"ZeroDayHint": "Das funktioniert nur wenn der Wechselrichter nicht erreichbar ist. Wenn Daten aus dem Wechselrichter gelesen werden, werden deren Werte verwendet. (Ein Reset erfolgt nur beim Neustarten)",
|
||||
"ClearEventlog": "Lösche Ereignisanzeige um Mitternacht",
|
||||
"Cancel": "@:base.Cancel",
|
||||
"Save": "@:base.Save",
|
||||
"DeleteMsg": "Soll der Wechselrichter \"{name}\" mit der Seriennummer {serial} wirklich gelöscht werden?",
|
||||
|
||||
@ -515,6 +515,7 @@
|
||||
"ZeroRuntimeHint": "Zero runtime data (no yield data) if inverter becomes unreachable.",
|
||||
"ZeroDay": "Zero daily yield at midnight",
|
||||
"ZeroDayHint": "This only works if the inverter is unreachable. If data is read from the inverter, it's values will be used. (Reset only occours on power cycle)",
|
||||
"ClearEventlog": "Clear Eventlog at midnight",
|
||||
"Cancel": "@:base.Cancel",
|
||||
"Save": "@:base.Save",
|
||||
"DeleteMsg": "Are you sure you want to delete the inverter \"{name}\" with serial number {serial}?",
|
||||
|
||||
@ -515,6 +515,7 @@
|
||||
"ZeroRuntimeHint": "Zero runtime data (no yield data) if inverter becomes unreachable.",
|
||||
"ZeroDay": "Zero daily yield at midnight",
|
||||
"ZeroDayHint": "This only works if the inverter is unreachable. If data is read from the inverter, it's values will be used. (Reset only occours on power cycle)",
|
||||
"ClearEventlog": "Clear Eventlog at midnight",
|
||||
"Cancel": "@:base.Cancel",
|
||||
"Save": "@:base.Save",
|
||||
"DeleteMsg": "Êtes-vous sûr de vouloir supprimer l'onduleur \"{name}\" avec le numéro de série \"{serial}\" ?",
|
||||
|
||||
@ -17,6 +17,7 @@ export interface Inverter {
|
||||
reachable_threshold: number;
|
||||
zero_runtime: boolean;
|
||||
zero_day: boolean;
|
||||
clear_eventlog: boolean;
|
||||
yieldday_correction: boolean;
|
||||
channel: Array<InverterChannel>;
|
||||
}
|
||||
|
||||
@ -176,6 +176,8 @@
|
||||
<InputElement :label="$t('inverteradmin.ZeroDay')" v-model="selectedInverterData.zero_day" type="checkbox"
|
||||
:tooltip="$t('inverteradmin.ZeroDayHint')" wide />
|
||||
|
||||
<InputElement :label="$t('inverteradmin.ClearEventlog')" v-model="selectedInverterData.clear_eventlog" type="checkbox" wide />
|
||||
|
||||
<InputElement :label="$t('inverteradmin.YieldDayCorrection')"
|
||||
v-model="selectedInverterData.yieldday_correction" type="checkbox"
|
||||
:tooltip="$t('inverteradmin.YieldDayCorrectionHint')" wide />
|
||||
|
||||
Loading…
Reference in New Issue
Block a user