From 3093539af5ad8763967101acb8e5f56f76506eee Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 7 Aug 2026 12:58:14 +0200 Subject: [PATCH] Optimizer: add static grid export limit (#32541) --- assets/css/app.css | 16 ++ .../components/ChargingPlans/PlanStrategy.vue | 5 - .../Config/DeviceModal/DeviceModalBase.vue | 1 + assets/js/components/Config/HemsModal.vue | 139 +++++++++++++++++- assets/js/components/Config/PropertyField.vue | 8 - .../js/components/Config/PropertyZoneForm.vue | 12 -- .../js/components/Helper/SavingIndicator.vue | 21 +++ .../Sessions/SessionDetailsModal.vue | 9 -- assets/js/components/Vehicles/Title.vue | 5 - assets/js/types/evcc.ts | 2 + core/keys/site.go | 3 + core/site.go | 9 ++ core/site/api.go | 2 + core/site_api.go | 32 ++++ core/site_optimizer.go | 10 +- core/site_optimizer_test.go | 14 ++ i18n/de.json | 5 + i18n/en.json | 5 + server/http.go | 1 + server/mcp/openapi.json | 24 +++ server/mcp/openapi.md | 20 +++ server/mqtt.go | 1 + server/openapi.state.yaml | 3 + server/openapi.yaml | 12 ++ tests/hems.spec.ts | 58 ++++++++ 25 files changed, 373 insertions(+), 44 deletions(-) create mode 100644 assets/js/components/Helper/SavingIndicator.vue diff --git a/assets/css/app.css b/assets/css/app.css index 701f1cf32..19658451f 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -586,6 +586,16 @@ small { .dark .form-switch .form-check-input:checked { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2328293e'/%3e%3c/svg%3e"); } +/* hide number input spinners */ +input[type="number"] { + appearance: textfield; +} +input[type="number"]::-webkit-outer-spin-button, +input[type="number"]::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + /* fix desktop safari formatting */ input::-webkit-datetime-edit { display: block; @@ -873,6 +883,12 @@ input::-webkit-date-and-time-value { visibility var(--evcc-transition-fast) ease var(--evcc-transition-fast); } +/* clearance so overflow-hidden containers don't clip focus rings */ +.ring-space { + padding: 0.5rem; + margin: -0.5rem; +} + .sticky-bottom { bottom: calc(var(--tab-bar-height) + 0.25rem); } diff --git a/assets/js/components/ChargingPlans/PlanStrategy.vue b/assets/js/components/ChargingPlans/PlanStrategy.vue index a52c23d62..7e38251e0 100644 --- a/assets/js/components/ChargingPlans/PlanStrategy.vue +++ b/assets/js/components/ChargingPlans/PlanStrategy.vue @@ -207,11 +207,6 @@ export default defineComponent({ diff --git a/assets/js/components/Config/PropertyField.vue b/assets/js/components/Config/PropertyField.vue index 43c8f25bb..3e016e0b7 100644 --- a/assets/js/components/Config/PropertyField.vue +++ b/assets/js/components/Config/PropertyField.vue @@ -409,14 +409,6 @@ export default { diff --git a/assets/js/components/Helper/SavingIndicator.vue b/assets/js/components/Helper/SavingIndicator.vue new file mode 100644 index 000000000..ad41d94bc --- /dev/null +++ b/assets/js/components/Helper/SavingIndicator.vue @@ -0,0 +1,21 @@ + + + diff --git a/assets/js/components/Sessions/SessionDetailsModal.vue b/assets/js/components/Sessions/SessionDetailsModal.vue index 3c2ac3fba..c0322ef5b 100644 --- a/assets/js/components/Sessions/SessionDetailsModal.vue +++ b/assets/js/components/Sessions/SessionDetailsModal.vue @@ -367,14 +367,5 @@ export default defineComponent({ .odometer-input .form-control { /* fit ~7 digits (e.g. 128222) */ width: calc(7ch + 1rem); - -moz-appearance: textfield; - appearance: textfield; -} - -.odometer-input .form-control::-webkit-inner-spin-button, -.odometer-input .form-control::-webkit-outer-spin-button { - -webkit-appearance: none; - appearance: none; - margin: 0; } diff --git a/assets/js/components/Vehicles/Title.vue b/assets/js/components/Vehicles/Title.vue index 969efc59f..ff140c256 100644 --- a/assets/js/components/Vehicles/Title.vue +++ b/assets/js/components/Vehicles/Title.vue @@ -158,11 +158,6 @@ export default defineComponent({