From 01a2ffaed537b32976f759ba4eb2afe331aaa630 Mon Sep 17 00:00:00 2001 From: helgeerbe Date: Fri, 10 Mar 2023 16:29:00 +0100 Subject: [PATCH] [Request] Show actual power limiter state in live view helgeerbe/OpenDTU-OnBattery#134 --- include/PowerLimiter.h | 8 +++--- src/PowerLimiter.cpp | 8 ++++++ src/WebApi_ws_vedirect_live.cpp | 8 ++++++ webapp/src/components/VedirectView.vue | 31 ++++++++++++++++++++++ webapp/src/locales/de.json | 3 ++- webapp/src/locales/en.json | 3 ++- webapp/src/types/VedirectLiveDataStatus.ts | 2 ++ 7 files changed, 58 insertions(+), 5 deletions(-) diff --git a/include/PowerLimiter.h b/include/PowerLimiter.h index 844bf20ec..35d66c32e 100644 --- a/include/PowerLimiter.h +++ b/include/PowerLimiter.h @@ -7,18 +7,20 @@ #include #include -enum PowerLimiterStates { +typedef enum { STATE_DISCOVER = 0, STATE_OFF, STATE_CONSUME_SOLAR_POWER_ONLY, STATE_NORMAL_OPERATION -}; +} plStates; class PowerLimiterClass { public: void init(); void loop(); + plStates getPowerLimiterState(); + uint16_t getLastRequestedPowewrLimit(); void onMqttMessage(const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t len, size_t index, size_t total); private: @@ -26,7 +28,7 @@ class PowerLimiterClass { uint32_t _lastLoop; uint32_t _lastPowerMeterUpdate; uint16_t _lastRequestedPowerLimit; - u_int8_t _plState = STATE_DISCOVER; + plStates _plState = STATE_DISCOVER; float _powerMeter1Power; float _powerMeter2Power; diff --git a/src/PowerLimiter.cpp b/src/PowerLimiter.cpp index c7a4d8c35..26dbcc084 100644 --- a/src/PowerLimiter.cpp +++ b/src/PowerLimiter.cpp @@ -186,6 +186,14 @@ void PowerLimiterClass::loop() } } +plStates PowerLimiterClass::getPowerLimiterState() { + return _plState; +} + +uint16_t PowerLimiterClass::getLastRequestedPowewrLimit() { + return _lastRequestedPowerLimit; +} + bool PowerLimiterClass::canUseDirectSolarPower() { CONFIG_T& config = Configuration.get(); diff --git a/src/WebApi_ws_vedirect_live.cpp b/src/WebApi_ws_vedirect_live.cpp index a8d16069d..64ac88482 100644 --- a/src/WebApi_ws_vedirect_live.cpp +++ b/src/WebApi_ws_vedirect_live.cpp @@ -8,6 +8,7 @@ #include "MessageOutput.h" #include "WebApi.h" #include "defaults.h" +#include "PowerLimiter.h" WebApiWsVedirectLiveClass::WebApiWsVedirectLiveClass() : _ws("/vedirectlivedata") @@ -120,6 +121,13 @@ void WebApiWsVedirectLiveClass::generateJsonResponse(JsonVariant& root) root["H23"]["v"] = VeDirect.veFrame.H23; root["H23"]["u"] = "W"; + // power limiter state + if (Configuration.get().PowerLimiter_Enabled) + root["PLSTATE"] = PowerLimiter.getPowerLimiterState(); + else + root["PLSTATE"] = -1; + root["PLLIMIT"] = PowerLimiter.getLastRequestedPowewrLimit(); + if (VeDirect.getLastUpdate() > _newestVedirectTimestamp) { _newestVedirectTimestamp = VeDirect.getLastUpdate(); } diff --git a/webapp/src/components/VedirectView.vue b/webapp/src/components/VedirectView.vue index 6a59315b4..9af9f8e00 100644 --- a/webapp/src/components/VedirectView.vue +++ b/webapp/src/components/VedirectView.vue @@ -31,6 +31,27 @@ +
+ +
@@ -178,10 +199,20 @@ import { defineComponent } from 'vue'; import type { Vedirect } from '@/types/VedirectLiveDataStatus'; import { handleResponse, authHeader, authUrl } from '@/utils/authentication'; +import { + BIconSun, + BIconBatteryCharging, + BIconBatteryHalf, + BIconXCircleFill +} from 'bootstrap-icons-vue'; export default defineComponent({ components: { + BIconSun, + BIconBatteryCharging, + BIconBatteryHalf, + BIconXCircleFill }, data() { return { diff --git a/webapp/src/locales/de.json b/webapp/src/locales/de.json index 201899541..f2e31bbcb 100644 --- a/webapp/src/locales/de.json +++ b/webapp/src/locales/de.json @@ -152,7 +152,8 @@ "YieldToday": "Ertrag heute", "MaximumPowerToday": "Maximale Leistung heute", "YieldYesterday": "Ertrag gestern", - "MaximumPowerYesterday": "Maximale Leistung gestern" + "MaximumPowerYesterday": "Maximale Leistung gestern", + "PowerLimiterState": "Power limiter Status [aus (laden), nur die Sonne nutzen, Nutzung der Batterie]" }, "eventlog": { "Start": "Begin", diff --git a/webapp/src/locales/en.json b/webapp/src/locales/en.json index 487cca131..be095abe2 100644 --- a/webapp/src/locales/en.json +++ b/webapp/src/locales/en.json @@ -152,7 +152,8 @@ "YieldToday": "Yield today", "MaximumPowerToday": "Maximum power today", "YieldYesterday": "Yield yesterday", - "MaximumPowerYesterday": "Maximum power yesterday" + "MaximumPowerYesterday": "Maximum power yesterday", + "PowerLimiterState": "Power limiter state [off (charging), solar passthrough, on battery]" }, "eventlog": { "Start": "Start", diff --git a/webapp/src/types/VedirectLiveDataStatus.ts b/webapp/src/types/VedirectLiveDataStatus.ts index 791fd92f7..bdd011ad8 100644 --- a/webapp/src/types/VedirectLiveDataStatus.ts +++ b/webapp/src/types/VedirectLiveDataStatus.ts @@ -22,4 +22,6 @@ export interface Vedirect { H21: ValueObject; H22: ValueObject; H23: ValueObject; + PLSTATE: number; + PLLIMIT: number; } \ No newline at end of file