* Plugins: make javascript return values more permissive * Persist targetSoc/Energy, minSoc and target time, remove experimental from minSoc UI * go generate * Fix tests * Update minSoc description * Store settings by index. Show plan outside pv mode. Add help texts. * remove slug * go mock * lint * chore: simplify templates (#8304) * Add e2e tests with playwright (#8123) * Revert "1p3p: let charger handle session stop/restart (#7723)" This reverts commitdd787ce52f. * mazda2mqtt: document vin required (#8319) * FoxESS: split H1/H3 devices (#7376) Co-authored-by: premultiply <4681172+premultiply@users.noreply.github.com> * Translations update from Hosted Weblate (#8124) * Translated using Weblate (Czech) Currently translated at 37.3% (99 of 265 strings) Co-authored-by: Dusan Suja <bc.suja.dusan@googlemail.com> Translate-URL: https://hosted.weblate.org/projects/evcc/evcc/cs/ Translation: evcc/evcc * Translated using Weblate (Finnish) Currently translated at 100.0% (265 of 265 strings) Co-authored-by: Arna Lepikkö <arna.lepikko@telemail.fi> Translate-URL: https://hosted.weblate.org/projects/evcc/evcc/fi/ Translation: evcc/evcc * Translated using Weblate (German) Currently translated at 100.0% (265 of 265 strings) Co-authored-by: ThinkEV <claas@rootdir.de> Translate-URL: https://hosted.weblate.org/projects/evcc/evcc/de/ Translation: evcc/evcc * Translated using Weblate (Croatian) Currently translated at 100.0% (265 of 265 strings) Translated using Weblate (Slovenian) Currently translated at 100.0% (265 of 265 strings) Co-authored-by: Žiga Deisinger <ziga@deisinger.si> Translate-URL: https://hosted.weblate.org/projects/evcc/evcc/hr/ Translate-URL: https://hosted.weblate.org/projects/evcc/evcc/sl/ Translation: evcc/evcc * Translated using Weblate (Catalan) Currently translated at 100.0% (265 of 265 strings) Co-authored-by: Norbert Poch <npoch@yahoo.com> Translate-URL: https://hosted.weblate.org/projects/evcc/evcc/ca/ Translation: evcc/evcc * Translated using Weblate (Dutch) Currently translated at 76.6% (203 of 265 strings) Translated using Weblate (Dutch) Currently translated at 74.3% (197 of 265 strings) Co-authored-by: Ruben Van Boxem <vanboxem.ruben@gmail.com> Translate-URL: https://hosted.weblate.org/projects/evcc/evcc/nl/ Translation: evcc/evcc * fix toml --------- Co-authored-by: Dusan Suja <bc.suja.dusan@googlemail.com> Co-authored-by: Arna Lepikkö <arna.lepikko@telemail.fi> Co-authored-by: ThinkEV <claas@rootdir.de> Co-authored-by: Žiga Deisinger <ziga@deisinger.si> Co-authored-by: Norbert Poch <npoch@yahoo.com> Co-authored-by: Ruben Van Boxem <vanboxem.ruben@gmail.com> Co-authored-by: premultiply <4681172+premultiply@users.noreply.github.com> * Add OBO Betterman Ion (#8321) Also aligns heartbeat implementations * Enphase: add token auth (firmware D7.x.xxx) and grid (#8247) * Mqtt: fix smartCostLimit topic case (#8328) * Add ISO15118 vehicle template (#8302) * Mqtt: simplify setters * Mqtt: disable message ordering to improve performance * chore: simplify random state generation * Porsche: remove deprecated mobile api (#8349) * Porsche: remove remaining mobile api types * Cupra: add odometer (#8340) * chore: refactor go-stylish * chore: fix stale handler * mazda2mqtt: longer timeout (#8364) * chore: pre-process toml * chore: prevent toml double quotes * Audi: temporarily switch to etron (#8374) * Fix nightly build (#8384) * Update SunSpec templates (#8270) * Revert "Fix nightly build (#8384)" This reverts commit536dbc936c. * Revert "Add e2e tests with playwright (#8123)" This reverts commit0df815729b. * Easee: update Observation IDs (#8391) * Easee: handle smartCharging errors (#8389) * TWC: add non-Tesla vehicle warning (#8329) * TWC: allow loadpoint to wakeup vehicle (#8284) * chore: use gridx consts * Fix ISO15118 vehicle (#8402) Such vehicles would be reported as `(Offline)` previously, as no Soc can be fetched and thus needs to behave as the `offline` template. The SoC is fetched via the charger, so hardcode it to 0 in here * Modbus: add coils (#8385) * OpenEVSE: fix api (#8415) * chore: refactor offline vehicles (#8404) * Easee: wait for api confirmation (#8307) * Revert "Easee: wait for api confirmation (#8307)" This reverts commitce0e4277aa. * automatically switch session log energy unit (#8371) Show the charged energy in the session log table and details in Wh for values below 1 kWh and in kWh for larger values * Fix nightly/release + integration workflow (#8450) * Revert "Add e2e tests with playwright (#8123)" This reverts commit0df815729b. * Revert "Revert "Add e2e tests with playwright (#8123)"" This reverts commit2299306954. * fix nightly/release * fix nightly/release * fix nightly/release --------- Co-authored-by: andig <cpuidle@gmx.de> * chore: no integration on nightly * chore: no integration on nightly * chore: no integration on nightly * Sessions: filter, monthly sums, paging (#8278) * fmt * Update i18n/en.toml Co-authored-by: Simon Riepl <43091717+savus4@users.noreply.github.com> * Use exp/slices * Use mux consistently * add integration tests --------- Co-authored-by: andig <cpuidle@gmx.de> Co-authored-by: C64Axel <33828760+C64Axel@users.noreply.github.com> Co-authored-by: premultiply <4681172+premultiply@users.noreply.github.com> Co-authored-by: Weblate (bot) <hosted@weblate.org> Co-authored-by: Dusan Suja <bc.suja.dusan@googlemail.com> Co-authored-by: Arna Lepikkö <arna.lepikko@telemail.fi> Co-authored-by: ThinkEV <claas@rootdir.de> Co-authored-by: Žiga Deisinger <ziga@deisinger.si> Co-authored-by: Norbert Poch <npoch@yahoo.com> Co-authored-by: Ruben Van Boxem <vanboxem.ruben@gmail.com> Co-authored-by: salz3n <79696598+salz3n@users.noreply.github.com> Co-authored-by: Daniel Paschke <paschdan@gmail.com> Co-authored-by: Andreas Linde <42185+DerAndereAndi@users.noreply.github.com> Co-authored-by: lex777777 <84906358+lex777777@users.noreply.github.com> Co-authored-by: Oscar <OAltr@users.noreply.github.com> Co-authored-by: Michael Heß <GrimmiMeloni@users.noreply.github.com> Co-authored-by: RTTTC <94727758+RTTTC@users.noreply.github.com> Co-authored-by: kscholty <47229207+kscholty@users.noreply.github.com> Co-authored-by: Jan Alexander <jan.alexander@posteo.de> Co-authored-by: Simon Riepl <43091717+savus4@users.noreply.github.com>
124 lines
3 KiB
Vue
124 lines
3 KiB
Vue
<template>
|
|
<LabelAndValue
|
|
class="flex-grow-1"
|
|
:label="$t('main.targetEnergy.label')"
|
|
align="end"
|
|
data-testid="target-energy"
|
|
>
|
|
<h3 class="value m-0 d-block d-sm-flex align-items-baseline justify-content-end">
|
|
<label class="position-relative">
|
|
<select :value="targetEnergy" class="custom-select" @change="change">
|
|
<option
|
|
v-for="{ energy, text, disabled } in options"
|
|
:key="energy"
|
|
:value="energy"
|
|
:disabled="disabled"
|
|
>
|
|
{{ text }}
|
|
</option>
|
|
</select>
|
|
<span
|
|
class="text-decoration-underline"
|
|
:class="{ 'text-gray fw-normal': !targetEnergy }"
|
|
data-testid="target-energy-value"
|
|
>
|
|
<AnimatedNumber :to="targetEnergy" :format="fmtEnergy" />
|
|
</span>
|
|
</label>
|
|
|
|
<div v-if="estimatedTargetSoc" class="extraValue ms-0 ms-sm-1 text-nowrap">
|
|
<AnimatedNumber :to="estimatedTargetSoc" :format="fmtSoc" />
|
|
</div>
|
|
</h3>
|
|
</LabelAndValue>
|
|
</template>
|
|
|
|
<script>
|
|
import LabelAndValue from "./LabelAndValue.vue";
|
|
import AnimatedNumber from "./AnimatedNumber.vue";
|
|
import formatter from "../mixins/formatter";
|
|
|
|
export default {
|
|
name: "TargetEnergySelect",
|
|
components: { LabelAndValue, AnimatedNumber },
|
|
mixins: [formatter],
|
|
props: {
|
|
targetEnergy: Number,
|
|
socPerKwh: Number,
|
|
chargedEnergy: Number,
|
|
vehicleCapacity: Number,
|
|
},
|
|
emits: ["target-energy-updated"],
|
|
computed: {
|
|
maxEnergy: function () {
|
|
return this.vehicleCapacity || 100;
|
|
},
|
|
steps: function () {
|
|
if (this.maxEnergy < 1) return 0.05;
|
|
if (this.maxEnergy < 2) return 0.1;
|
|
if (this.maxEnergy < 5) return 0.25;
|
|
if (this.maxEnergy < 10) return 0.5;
|
|
if (this.maxEnergy < 25) return 1;
|
|
if (this.maxEnergy < 50) return 2;
|
|
return 5;
|
|
},
|
|
options: function () {
|
|
const result = [];
|
|
for (let energy = 0; energy <= this.maxEnergy; energy += this.steps) {
|
|
let text = this.fmtEnergy(energy);
|
|
const disabled = energy < this.chargedEnergy / 1e3 && energy !== 0;
|
|
const soc = this.estimatedSoc(energy);
|
|
if (soc) {
|
|
text += ` (${this.fmtSoc(soc)})`;
|
|
}
|
|
result.push({ energy, text, disabled });
|
|
}
|
|
return result;
|
|
},
|
|
estimatedTargetSoc: function () {
|
|
return this.estimatedSoc(this.targetEnergy);
|
|
},
|
|
},
|
|
methods: {
|
|
change: function (e) {
|
|
return this.$emit("target-energy-updated", parseFloat(e.target.value));
|
|
},
|
|
estimatedSoc: function (kWh) {
|
|
if (this.socPerKwh) {
|
|
return Math.round(kWh * this.socPerKwh);
|
|
}
|
|
return null;
|
|
},
|
|
fmtEnergy: function (value) {
|
|
if (value === 0) {
|
|
return this.$t("main.targetEnergy.noLimit");
|
|
}
|
|
|
|
const inKWh = this.steps >= 0.1;
|
|
const digits = inKWh && this.steps < 1 ? 1 : 0;
|
|
return this.fmtKWh(value * 1e3, inKWh, true, digits);
|
|
},
|
|
fmtSoc: function (value) {
|
|
return `+${Math.round(value)}%`;
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped>
|
|
.value {
|
|
font-size: 18px;
|
|
}
|
|
.extraValue {
|
|
color: var(--evcc-gray);
|
|
font-size: 14px;
|
|
}
|
|
.custom-select {
|
|
left: 0;
|
|
top: 0;
|
|
bottom: 0;
|
|
right: 0;
|
|
position: absolute;
|
|
opacity: 0;
|
|
}
|
|
</style>
|