[Request] Show actual power limiter state in live view helgeerbe/OpenDTU-OnBattery#134
This commit is contained in:
parent
7952becd17
commit
01a2ffaed5
@ -7,18 +7,20 @@
|
||||
#include <Hoymiles.h>
|
||||
#include <memory>
|
||||
|
||||
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 @@ private:
|
||||
uint32_t _lastLoop;
|
||||
uint32_t _lastPowerMeterUpdate;
|
||||
uint16_t _lastRequestedPowerLimit;
|
||||
u_int8_t _plState = STATE_DISCOVER;
|
||||
plStates _plState = STATE_DISCOVER;
|
||||
|
||||
float _powerMeter1Power;
|
||||
float _powerMeter2Power;
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -31,6 +31,27 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-group me-2" role="group">
|
||||
<button type="button"
|
||||
class="btn btn-sm" v-tooltip :title="$t('vedirecthome.PowerLimiterState')">
|
||||
<div v-if="vedirectData.PLSTATE == 0">
|
||||
<BIconXCircleFill style="font-size:24px;" />
|
||||
</div>
|
||||
<div v-else-if="vedirectData.PLSTATE == 1">
|
||||
<BIconBatteryCharging style="font-size:24px;" />
|
||||
</div>
|
||||
<div v-else-if="vedirectData.PLSTATE == 2">
|
||||
<BIconSun style="font-size:24px;" />
|
||||
</div>
|
||||
<div v-else-if="vedirectData.PLSTATE == 3">
|
||||
<BIconBatteryHalf style="font-size:24px;" />
|
||||
</div>
|
||||
<span v-if="vedirectData.PLSTATE != -1"
|
||||
class="position-absolute top-0 start-100 translate-middle badge rounded-pill text-bg-info">
|
||||
{{ vedirectData.PLLIMIT }} W
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row flex-row flex-wrap align-items-start g-3">
|
||||
@ -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 {
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -22,4 +22,6 @@ export interface Vedirect {
|
||||
H21: ValueObject;
|
||||
H22: ValueObject;
|
||||
H23: ValueObject;
|
||||
PLSTATE: number;
|
||||
PLLIMIT: number;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user