Feature: Allow reset of radio statistics via WebApp
This commit is contained in:
parent
d3903d8602
commit
9b565596d5
@ -32,6 +32,7 @@ enum WebApiError {
|
|||||||
InverterChanged,
|
InverterChanged,
|
||||||
InverterDeleted,
|
InverterDeleted,
|
||||||
InverterOrdered,
|
InverterOrdered,
|
||||||
|
InverterStatsResetted,
|
||||||
|
|
||||||
LimitBase = 5000,
|
LimitBase = 5000,
|
||||||
LimitSerialZero,
|
LimitSerialZero,
|
||||||
|
|||||||
@ -14,4 +14,5 @@ private:
|
|||||||
void onInverterEdit(AsyncWebServerRequest* request);
|
void onInverterEdit(AsyncWebServerRequest* request);
|
||||||
void onInverterDelete(AsyncWebServerRequest* request);
|
void onInverterDelete(AsyncWebServerRequest* request);
|
||||||
void onInverterOrder(AsyncWebServerRequest* request);
|
void onInverterOrder(AsyncWebServerRequest* request);
|
||||||
|
void onInverterStatReset(AsyncWebServerRequest* request);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -21,6 +21,7 @@ void WebApiInverterClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
|||||||
server.on("/api/inverter/edit", HTTP_POST, std::bind(&WebApiInverterClass::onInverterEdit, this, _1));
|
server.on("/api/inverter/edit", HTTP_POST, std::bind(&WebApiInverterClass::onInverterEdit, this, _1));
|
||||||
server.on("/api/inverter/del", HTTP_POST, std::bind(&WebApiInverterClass::onInverterDelete, this, _1));
|
server.on("/api/inverter/del", HTTP_POST, std::bind(&WebApiInverterClass::onInverterDelete, this, _1));
|
||||||
server.on("/api/inverter/order", HTTP_POST, std::bind(&WebApiInverterClass::onInverterOrder, this, _1));
|
server.on("/api/inverter/order", HTTP_POST, std::bind(&WebApiInverterClass::onInverterOrder, this, _1));
|
||||||
|
server.on("/api/inverter/stats_reset", HTTP_GET, std::bind(&WebApiInverterClass::onInverterStatReset, this, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebApiInverterClass::onInverterList(AsyncWebServerRequest* request)
|
void WebApiInverterClass::onInverterList(AsyncWebServerRequest* request)
|
||||||
@ -349,3 +350,24 @@ void WebApiInverterClass::onInverterOrder(AsyncWebServerRequest* request)
|
|||||||
|
|
||||||
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
|
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebApiInverterClass::onInverterStatReset(AsyncWebServerRequest* request)
|
||||||
|
{
|
||||||
|
if (!WebApi.checkCredentials(request)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
AsyncJsonResponse* response = new AsyncJsonResponse();
|
||||||
|
auto retMsg = response->getRoot();
|
||||||
|
auto serial = WebApi.parseSerialFromRequest(request);
|
||||||
|
auto inv = Hoymiles.getInverterBySerial(serial);
|
||||||
|
|
||||||
|
if (inv != nullptr) {
|
||||||
|
inv->resetRadioStats();
|
||||||
|
retMsg["type"] = "success";
|
||||||
|
retMsg["message"] = "Stats resetted";
|
||||||
|
retMsg["code"] = WebApiError::InverterStatsResetted;
|
||||||
|
}
|
||||||
|
|
||||||
|
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
|
||||||
|
}
|
||||||
|
|||||||
@ -148,7 +148,9 @@
|
|||||||
"RxFailNothing": "Empfang Fehler: Nichts empfangen",
|
"RxFailNothing": "Empfang Fehler: Nichts empfangen",
|
||||||
"RxFailPartial": "Empfang Fehler: Teilweise empfangen",
|
"RxFailPartial": "Empfang Fehler: Teilweise empfangen",
|
||||||
"RxFailCorrupt": "Empfang Fehler: Beschädigt empfangen",
|
"RxFailCorrupt": "Empfang Fehler: Beschädigt empfangen",
|
||||||
"TxReRequest": "Gesendete Fragment Wiederanforderungen"
|
"TxReRequest": "Gesendete Fragment Wiederanforderungen",
|
||||||
|
"StatsReset": "Statistiken zurücksetzen",
|
||||||
|
"StatsResetting": "Zurücksetzen..."
|
||||||
},
|
},
|
||||||
"eventlog": {
|
"eventlog": {
|
||||||
"Start": "Beginn",
|
"Start": "Beginn",
|
||||||
|
|||||||
@ -148,7 +148,9 @@
|
|||||||
"RxFailNothing": "RX Fail: Receive Nothing",
|
"RxFailNothing": "RX Fail: Receive Nothing",
|
||||||
"RxFailPartial": "RX Fail: Receive Partial",
|
"RxFailPartial": "RX Fail: Receive Partial",
|
||||||
"RxFailCorrupt": "RX Fail: Receive Corrupt",
|
"RxFailCorrupt": "RX Fail: Receive Corrupt",
|
||||||
"TxReRequest": "TX Re-Request Fragment"
|
"TxReRequest": "TX Re-Request Fragment",
|
||||||
|
"StatsReset": "Reset Statistics",
|
||||||
|
"StatsResetting": "Resetting..."
|
||||||
},
|
},
|
||||||
"eventlog": {
|
"eventlog": {
|
||||||
"Start": "Start",
|
"Start": "Start",
|
||||||
|
|||||||
@ -148,7 +148,9 @@
|
|||||||
"RxFailNothing": "RX Fail: Receive Nothing",
|
"RxFailNothing": "RX Fail: Receive Nothing",
|
||||||
"RxFailPartial": "RX Fail: Receive Partial",
|
"RxFailPartial": "RX Fail: Receive Partial",
|
||||||
"RxFailCorrupt": "RX Fail: Receive Corrupt",
|
"RxFailCorrupt": "RX Fail: Receive Corrupt",
|
||||||
"TxReRequest": "TX Re-Request Fragment"
|
"TxReRequest": "TX Re-Request Fragment",
|
||||||
|
"StatsReset": "Reset Statistics",
|
||||||
|
"StatsResetting": "Resetting..."
|
||||||
},
|
},
|
||||||
"eventlog": {
|
"eventlog": {
|
||||||
"Start": "Départ",
|
"Start": "Départ",
|
||||||
|
|||||||
@ -293,6 +293,20 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<button
|
||||||
|
:disabled="!isLogged || performRadioStatsReset"
|
||||||
|
type="button"
|
||||||
|
class="btn btn-danger"
|
||||||
|
@click="onResetRadioStats(inverter.serial)"
|
||||||
|
>
|
||||||
|
<template v-if="!performRadioStatsReset">
|
||||||
|
{{ $t('home.StatsReset') }}
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<span class="spinner-border spinner-border-sm" aria-hidden="true"></span>
|
||||||
|
<span role="status"> {{ $t('home.StatsResetting') }}</span>
|
||||||
|
</template>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -551,6 +565,7 @@ export default defineComponent({
|
|||||||
alertMessageLimit: '',
|
alertMessageLimit: '',
|
||||||
alertTypeLimit: 'info',
|
alertTypeLimit: 'info',
|
||||||
showAlertLimit: false,
|
showAlertLimit: false,
|
||||||
|
performRadioStatsReset: false,
|
||||||
|
|
||||||
powerSettingView: {} as bootstrap.Modal,
|
powerSettingView: {} as bootstrap.Modal,
|
||||||
powerSettingSerial: '',
|
powerSettingSerial: '',
|
||||||
@ -780,6 +795,14 @@ export default defineComponent({
|
|||||||
|
|
||||||
this.limitSettingView.show();
|
this.limitSettingView.show();
|
||||||
},
|
},
|
||||||
|
onResetRadioStats(serial: string) {
|
||||||
|
this.performRadioStatsReset = true;
|
||||||
|
fetch('/api/inverter/stats_reset?inv=' + serial, { headers: authHeader() })
|
||||||
|
.then((response) => handleResponse(response, this.$emitter, this.$router))
|
||||||
|
.then(() => {
|
||||||
|
this.performRadioStatsReset = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
onSetLimitSettings(setPersistent: boolean) {
|
onSetLimitSettings(setPersistent: boolean) {
|
||||||
this.targetLimitList.limit_type = (setPersistent ? 256 : 0) + this.targetLimitType;
|
this.targetLimitList.limit_type = (setPersistent ? 256 : 0) + this.targetLimitType;
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user