From b4ead9d6ec42609ed8fe7ca32d815ad4b29f32ca Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 13 Dec 2023 22:15:49 +0100 Subject: [PATCH] Feature: Allow setting of an inverter limit of 0% and 0W Thanks to @madmartin in #1270 --- include/defaults.h | 4 +++- src/MqttHandleHass.cpp | 9 +++++---- src/WebApi_limit.cpp | 8 +++++--- webapp/src/views/HomeView.vue | 6 +++--- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/include/defaults.h b/include/defaults.h index 36f2cfb4..0bbf7210 100644 --- a/include/defaults.h +++ b/include/defaults.h @@ -101,4 +101,6 @@ #define REACHABLE_THRESHOLD 2U -#define LED_BRIGHTNESS 100U \ No newline at end of file +#define LED_BRIGHTNESS 100U + +#define MAX_INVERTER_LIMIT 2250 \ No newline at end of file diff --git a/src/MqttHandleHass.cpp b/src/MqttHandleHass.cpp index 613defad..cb10230b 100644 --- a/src/MqttHandleHass.cpp +++ b/src/MqttHandleHass.cpp @@ -6,6 +6,7 @@ #include "MqttHandleInverter.h" #include "MqttSettings.h" #include "NetworkSettings.h" +#include "defaults.h" MqttHandleHassClass MqttHandleHass; @@ -59,11 +60,11 @@ void MqttHandleHassClass::publishConfig() publishInverterButton(inv, "Turn Inverter On", "mdi:power-plug", "config", "", "cmd/power", "1"); publishInverterButton(inv, "Restart Inverter", "", "config", "restart", "cmd/restart", "1"); - publishInverterNumber(inv, "Limit NonPersistent Relative", "mdi:speedometer", "config", "cmd/limit_nonpersistent_relative", "status/limit_relative", "%"); - publishInverterNumber(inv, "Limit Persistent Relative", "mdi:speedometer", "config", "cmd/limit_persistent_relative", "status/limit_relative", "%"); + publishInverterNumber(inv, "Limit NonPersistent Relative", "mdi:speedometer", "config", "cmd/limit_nonpersistent_relative", "status/limit_relative", "%", 0, 100); + publishInverterNumber(inv, "Limit Persistent Relative", "mdi:speedometer", "config", "cmd/limit_persistent_relative", "status/limit_relative", "%", 0, 100); - publishInverterNumber(inv, "Limit NonPersistent Absolute", "mdi:speedometer", "config", "cmd/limit_nonpersistent_absolute", "status/limit_absolute", "W", 10, 2250); - publishInverterNumber(inv, "Limit Persistent Absolute", "mdi:speedometer", "config", "cmd/limit_persistent_absolute", "status/limit_absolute", "W", 10, 2250); + publishInverterNumber(inv, "Limit NonPersistent Absolute", "mdi:speedometer", "config", "cmd/limit_nonpersistent_absolute", "status/limit_absolute", "W", 0, MAX_INVERTER_LIMIT); + publishInverterNumber(inv, "Limit Persistent Absolute", "mdi:speedometer", "config", "cmd/limit_persistent_absolute", "status/limit_absolute", "W", 0, MAX_INVERTER_LIMIT); publishInverterBinarySensor(inv, "Reachable", "status/reachable", "1", "0"); publishInverterBinarySensor(inv, "Producing", "status/producing", "1", "0"); diff --git a/src/WebApi_limit.cpp b/src/WebApi_limit.cpp index e1732430..1e5b3f21 100644 --- a/src/WebApi_limit.cpp +++ b/src/WebApi_limit.cpp @@ -5,6 +5,8 @@ #include "WebApi_limit.h" #include "WebApi.h" #include "WebApi_errors.h" +#include "defaults.h" +#include "helper.h" #include #include @@ -112,10 +114,10 @@ void WebApiLimitClass::onLimitPost(AsyncWebServerRequest* request) return; } - if (root["limit_value"].as() == 0 || root["limit_value"].as() > 2250) { - retMsg["message"] = "Limit must between 1 and 2250!"; + if (root["limit_value"].as() > MAX_INVERTER_LIMIT) { + retMsg["message"] = "Limit must between 0 and " STR(MAX_INVERTER_LIMIT) "!"; retMsg["code"] = WebApiError::LimitInvalidLimit; - retMsg["param"]["max"] = 2250; + retMsg["param"]["max"] = MAX_INVERTER_LIMIT; response->setLength(); request->send(response); return; diff --git a/webapp/src/views/HomeView.vue b/webapp/src/views/HomeView.vue index 4a63f555..902c9259 100644 --- a/webapp/src/views/HomeView.vue +++ b/webapp/src/views/HomeView.vue @@ -431,7 +431,7 @@ export default defineComponent({ currentLimitList: {} as LimitStatus, targetLimitList: {} as LimitConfig, - targetLimitMin: 2, + targetLimitMin: 0, targetLimitMax: 100, targetLimitTypeText: this.$t('home.Relative'), targetLimitType: 1, @@ -679,11 +679,11 @@ export default defineComponent({ onSelectType(type: number) { if (type == 1) { this.targetLimitTypeText = this.$t('home.Relative'); - this.targetLimitMin = 2; + this.targetLimitMin = 0; this.targetLimitMax = 100; } else { this.targetLimitTypeText = this.$t('home.Absolute'); - this.targetLimitMin = 10; + this.targetLimitMin = 0; this.targetLimitMax = (this.currentLimitList.max_power > 0 ? this.currentLimitList.max_power : 2250); } this.targetLimitType = type;