From 93a1faf75572266e19de24c93cdcdf4521c3f5dd Mon Sep 17 00:00:00 2001 From: Michael Geers Date: Sat, 24 Feb 2024 17:52:15 +0100 Subject: [PATCH] Smart grid charging per loadpoint (BC) (#12135) --- assets/css/app.css | 14 ++ assets/js/components/BatterySettingsModal.vue | 33 +-- .../js/components/Energyflow/Energyflow.vue | 13 +- assets/js/components/Loadpoint.vue | 1 + .../js/components/LoadpointSettingsModal.vue | 46 +++- assets/js/components/Loadpoints.vue | 3 +- assets/js/components/Site.vue | 1 + ...idSettingsModal.vue => SmartCostLimit.vue} | 229 ++++++++---------- assets/js/components/TopNavigation.vue | 9 - ...odalAvailable.js => smartCostAvailable.js} | 0 assets/js/views/App.vue | 11 +- core/keys/loadpoint.go | 4 + core/keys/site.go | 2 - core/loadpoint.go | 6 +- core/loadpoint/api.go | 9 + core/loadpoint/mock.go | 26 ++ core/loadpoint_api.go | 21 ++ core/site.go | 23 +- core/site/api.go | 2 - core/site_api.go | 23 -- i18n/bg.toml | 2 +- i18n/ca.toml | 22 +- i18n/cs.toml | 22 +- i18n/da.toml | 22 +- i18n/de.toml | 27 ++- i18n/en.toml | 31 ++- i18n/es.toml | 22 +- i18n/fi.toml | 22 +- i18n/fr.toml | 22 +- i18n/hr.toml | 22 +- i18n/lt.toml | 22 +- i18n/nl.toml | 22 +- i18n/no.toml | 22 +- i18n/pl.toml | 22 +- i18n/pt.toml | 22 +- i18n/ro.toml | 22 +- i18n/sl.toml | 22 +- i18n/sv.toml | 22 +- i18n/uk.toml | 22 +- i18n/zh-Hans.toml | 22 +- server/helper.go | 24 ++ server/http.go | 8 +- server/http_loadpoint_handler.go | 46 ---- server/http_site_handler.go | 87 +++---- server/mqtt.go | 40 ++- server/mqtt_setter.go | 21 +- tests/modals.spec.js | 21 -- tests/smart-cost.spec.js | 56 +++++ 48 files changed, 615 insertions(+), 598 deletions(-) rename assets/js/components/{GridSettingsModal.vue => SmartCostLimit.vue} (62%) rename assets/js/utils/{gridModalAvailable.js => smartCostAvailable.js} (100%) create mode 100644 server/helper.go create mode 100644 tests/smart-cost.spec.js diff --git a/assets/css/app.css b/assets/css/app.css index 2e4642201..c0efe7ae6 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -460,3 +460,17 @@ input[type="time"]::-webkit-calendar-picker-indicator { width: calc(1.2rem + 0.75rem); border-radius: 3rem; } + +.form-switch .form-check-input + .form-check-label { + margin-top: 0.1rem; + padding-left: 0.5rem; +} + +@media (min-width: 576px) { + .w-sm-100 { + width: 100% !important; + } + .w-sm-50 { + width: 50% !important; + } +} diff --git a/assets/js/components/BatterySettingsModal.vue b/assets/js/components/BatterySettingsModal.vue index 92a71a2d0..677d6a32b 100644 --- a/assets/js/components/BatterySettingsModal.vue +++ b/assets/js/components/BatterySettingsModal.vue @@ -3,7 +3,7 @@ @@ -245,14 +241,12 @@ import "@h2d2/shopicons/es/regular/lightning"; import "@h2d2/shopicons/es/regular/car3"; import "@h2d2/shopicons/es/regular/home"; import formatter from "../mixins/formatter"; -import FormRow from "./FormRow.vue"; - +import collector from "../mixins/collector"; import api from "../api"; export default { name: "BatterySettingsModal", - components: { FormRow }, - mixins: [formatter], + mixins: [formatter, collector], props: { bufferSoc: Number, prioritySoc: Number, @@ -460,6 +454,11 @@ export default { height: 300px; display: flex; } + +.legend { + min-width: 260px; +} + .batteryLimits { width: 50px; position: relative; @@ -521,11 +520,13 @@ export default { border-radius: 0.5rem 0 0 0.5rem; } .progress { + flex: 1; height: 100%; - width: 100px; + min-width: 100px; + max-width: 150px; flex-direction: column; position: relative; - border-radius: 10px; + border-radius: 1rem; background-color: var(--evcc-box) !important; } .progress-bar { diff --git a/assets/js/components/Energyflow/Energyflow.vue b/assets/js/components/Energyflow/Energyflow.vue index c4bac2732..c0e01a220 100644 --- a/assets/js/components/Energyflow/Energyflow.vue +++ b/assets/js/components/Energyflow/Energyflow.vue @@ -89,10 +89,8 @@ :powerInKw="powerInKw" :details="detailsValue(tariffGrid, tariffCo2)" :detailsFmt="detailsFmt" - :detailsClickable="gridModalAvailable" :detailsTooltip="detailsTooltip(tariffGrid, tariffCo2)" data-testid="energyflow-entry-gridimport" - @details-clicked="openGridSettingsModal" /> @@ -173,7 +171,6 @@ import AnimatedNumber from "../AnimatedNumber.vue"; import settings from "../../settings"; import { CO2_TYPE } from "../../units"; import collector from "../../mixins/collector"; -import gridModalAvailable from "../../utils/gridModalAvailable"; export default { name: "Energyflow", @@ -204,7 +201,6 @@ export default { tariffCo2Home: { type: Number }, tariffPriceLoadpoints: { type: Number }, tariffCo2Loadpoints: { type: Number }, - smartCostLimit: { type: Number }, smartCostType: { type: String }, currency: { type: String }, prioritySoc: { type: Number }, @@ -212,12 +208,9 @@ export default { bufferStartSoc: { type: Number }, }, data: () => { - return { detailsOpen: false, detailsCompleteHeight: null, gridSettingsModal: null }; + return { detailsOpen: false, detailsCompleteHeight: null }; }, computed: { - gridModalAvailable: function () { - return gridModalAvailable(this.smartCostType); - }, gridImport: function () { return Math.max(0, this.gridPower); }, @@ -334,10 +327,6 @@ export default { updateHeight: function () { this.detailsCompleteHeight = this.$refs.detailsInner.offsetHeight; }, - openGridSettingsModal() { - const modal = Modal.getOrCreateInstance(document.getElementById("gridSettingsModal")); - modal.show(); - }, openBatterySettingsModal() { const modal = Modal.getOrCreateInstance( document.getElementById("batterySettingsModal") diff --git a/assets/js/components/Loadpoint.vue b/assets/js/components/Loadpoint.vue index 5602d9f27..3a8f43c96 100644 --- a/assets/js/components/Loadpoint.vue +++ b/assets/js/components/Loadpoint.vue @@ -188,6 +188,7 @@ export default { tariffGrid: Number, tariffCo2: Number, currency: String, + multipleLoadpoints: Boolean, }, data() { return { diff --git a/assets/js/components/LoadpointSettingsModal.vue b/assets/js/components/LoadpointSettingsModal.vue index f73eec78e..b6dfec569 100644 --- a/assets/js/components/LoadpointSettingsModal.vue +++ b/assets/js/components/LoadpointSettingsModal.vue @@ -2,11 +2,13 @@