Skip to content

Commit a35df85

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents ebd435f + c04f52f commit a35df85

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+1057
-688
lines changed

assets/js/components/Energyflow/Energyflow.vue

+12-2
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,19 @@
6464
>
6565
<div class="d-flex justify-content-between align-items-end mb-4">
6666
<h3 class="m-0">In</h3>
67-
<span class="fw-bold">
67+
<span v-if="pvPossible" class="fw-bold">
6868
<AnimatedNumber :to="inPower" :format="kw" />
6969
</span>
7070
</div>
7171
<div>
7272
<EnergyflowEntry
73+
v-if="pvPossible"
7374
:name="$t('main.energyflow.pvProduction')"
7475
icon="sun"
7576
:power="pvProduction"
7677
:powerTooltip="pvTooltip"
7778
:powerInKw="powerInKw"
79+
data-testid="energyflow-entry-production"
7880
/>
7981
<EnergyflowEntry
8082
v-if="batteryConfigured"
@@ -106,19 +108,21 @@
106108
>
107109
<div class="d-flex justify-content-between align-items-end mb-4">
108110
<h3 class="m-0">Out</h3>
109-
<span class="fw-bold">
111+
<span v-if="pvPossible" class="fw-bold">
110112
<AnimatedNumber :to="outPower" :format="kw" />
111113
</span>
112114
</div>
113115
<div>
114116
<EnergyflowEntry
117+
v-if="pvPossible"
115118
:name="$t('main.energyflow.homePower')"
116119
icon="home"
117120
:power="homePower"
118121
:powerInKw="powerInKw"
119122
:details="detailsValue(tariffPriceHome, tariffCo2Home)"
120123
:detailsFmt="detailsFmt"
121124
:detailsTooltip="detailsTooltip(tariffPriceHome, tariffCo2Home)"
125+
data-testid="energyflow-entry-home"
122126
/>
123127
<EnergyflowEntry
124128
:name="
@@ -139,6 +143,7 @@
139143
:detailsTooltip="
140144
detailsTooltip(tariffPriceLoadpoints, tariffCo2Loadpoints)
141145
"
146+
data-testid="energyflow-entry-loadpoints"
142147
/>
143148
<EnergyflowEntry
144149
v-if="batteryConfigured"
@@ -153,13 +158,15 @@
153158
@details-clicked="openBatterySettingsModal"
154159
/>
155160
<EnergyflowEntry
161+
v-if="pvPossible"
156162
:name="$t('main.energyflow.pvExport')"
157163
icon="powersupply"
158164
:power="pvExport"
159165
:powerInKw="powerInKw"
160166
:details="detailsValue(-tariffFeedIn)"
161167
:detailsFmt="detailsFmt"
162168
:detailsTooltip="detailsTooltip(-tariffFeedIn)"
169+
data-testid="energyflow-entry-gridexport"
163170
/>
164171
</div>
165172
</div>
@@ -293,6 +300,9 @@ export default {
293300
co2Available() {
294301
return this.smartCostType === CO2_TYPE;
295302
},
303+
pvPossible() {
304+
return this.pvConfigured || this.gridConfigured;
305+
},
296306
},
297307
mounted() {
298308
window.addEventListener("resize", this.updateHeight);

assets/js/components/Energyflow/Visualization.vue

+2-5
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,8 @@
6060
:format="fmtBarValue"
6161
/>
6262
</div>
63-
<div
64-
v-if="totalAdjusted <= 0"
65-
class="site-progress-bar bg-light border no-wrap w-100 text-dark"
66-
>
67-
<span>{{ $t("main.energyflow.noEnergy") }}</span>
63+
<div v-if="totalAdjusted <= 0" class="site-progress-bar w-100 grid-import">
64+
<span>{{ fmtKw(0, false, true) }}</span>
6865
</div>
6966
</div>
7067
<div class="label-scale d-flex">

assets/js/components/Loadpoint.vue

+13-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<LoadpointSettingsButton :id="id" class="d-block d-sm-none" />
1616
</div>
1717
<div class="mb-3 d-flex align-items-center">
18-
<Mode class="flex-grow-1" :mode="mode" @updated="setTargetMode" />
18+
<Mode class="flex-grow-1" v-bind="modeProps" @updated="setTargetMode" />
1919
<LoadpointSettingsButton :id="id" class="d-none d-sm-block ms-2" />
2020
</div>
2121
</div>
@@ -98,6 +98,7 @@ import LoadpointSettingsButton from "./LoadpointSettingsButton.vue";
9898
import LoadpointSettingsModal from "./LoadpointSettingsModal.vue";
9999
import VehicleIcon from "./VehicleIcon";
100100
import LoadpointSessionInfo from "./LoadpointSessionInfo.vue";
101+
import smartCostAvailable from "../utils/smartCostAvailable";
101102
102103
export default {
103104
name: "Loadpoint",
@@ -189,6 +190,8 @@ export default {
189190
tariffCo2: Number,
190191
currency: String,
191192
multipleLoadpoints: Boolean,
193+
gridConfigured: Boolean,
194+
pvConfigured: Boolean,
192195
},
193196
data() {
194197
return {
@@ -218,6 +221,9 @@ export default {
218221
phasesProps: function () {
219222
return this.collectProps(Phases);
220223
},
224+
modeProps: function () {
225+
return this.collectProps(Mode);
226+
},
221227
sessionInfoProps: function () {
222228
return this.collectProps(LoadpointSessionInfo);
223229
},
@@ -251,6 +257,12 @@ export default {
251257
socBasedPlanning: function () {
252258
return this.socBasedCharging && this.vehicle?.capacity > 0;
253259
},
260+
pvPossible: function () {
261+
return this.pvConfigured || this.gridConfigured;
262+
},
263+
hasSmartCost: function () {
264+
return smartCostAvailable(this.smartCostType);
265+
},
254266
},
255267
watch: {
256268
phaseRemaining() {

assets/js/components/Loadpoints.vue

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
:tariffCo2="tariffCo2"
2323
:currency="currency"
2424
:multiple-loadpoints="loadpoints.length > 1"
25+
:grid-configured="gridConfigured"
26+
:pv-configured="pvConfigured"
2527
class="h-100"
2628
:class="{ 'loadpoint-unselected': !selected(index) }"
2729
@click="scrollTo(index)"
@@ -67,6 +69,8 @@ export default {
6769
tariffGrid: Number,
6870
tariffCo2: Number,
6971
currency: String,
72+
gridConfigured: Boolean,
73+
pvConfigured: Boolean,
7074
},
7175
data() {
7276
return { selectedIndex: 0, snapTimeout: null };

assets/js/components/Mode.vue

+23-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div class="mode-group border d-inline-flex" role="group">
2+
<div class="mode-group border d-inline-flex" role="group" data-testid="mode">
33
<button
44
v-for="m in modes"
55
:key="m"
@@ -8,7 +8,7 @@
88
:class="{ active: isActive(m) }"
99
@click="setTargetMode(m)"
1010
>
11-
{{ $t(`main.mode.${m}`) }}
11+
{{ label(m) }}
1212
</button>
1313
</div>
1414
</template>
@@ -18,14 +18,31 @@ export default {
1818
name: "Mode",
1919
props: {
2020
mode: String,
21+
pvPossible: Boolean,
22+
hasSmartCost: Boolean,
2123
},
2224
emits: ["updated"],
23-
data() {
24-
return {
25-
modes: ["off", "pv", "minpv", "now"],
26-
};
25+
26+
computed: {
27+
modes: function () {
28+
if (this.pvPossible) {
29+
return ["off", "pv", "minpv", "now"];
30+
}
31+
if (this.hasSmartCost) {
32+
return ["off", "pv", "now"];
33+
}
34+
return ["off", "now"];
35+
},
2736
},
2837
methods: {
38+
label: function (mode) {
39+
// rename pv mode to smart for non-pv and dynamic tariffs scenarios
40+
// TODO: rollout smart name for everyting later
41+
if (mode === "pv" && !this.pvPossible && this.hasSmartCost) {
42+
return this.$t("main.mode.smart");
43+
}
44+
return this.$t(`main.mode.${mode}`);
45+
},
2946
isActive: function (mode) {
3047
return this.mode === mode;
3148
},

assets/js/components/Site.vue

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
:tariffGrid="tariffGrid"
3030
:tariffCo2="tariffCo2"
3131
:currency="currency"
32+
:gridConfigured="gridConfigured"
33+
:pvConfigured="pvConfigured"
3234
/>
3335
<Footer v-bind="footer"></Footer>
3436
</div>

assets/js/views/Config.vue

+10-5
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
</p>
1818
<p class="mb-1"><strong>Missing features</strong></p>
1919
<ul>
20-
<li>grid meter</li>
2120
<li>aux meters</li>
2221
<li>loadpoints and chargers</li>
2322
<li>custom/plugin meters and vehicles</li>
@@ -41,16 +40,22 @@
4140
<ul class="p-0 config-list">
4241
<DeviceCard
4342
:name="$t('config.grid.title')"
44-
:editable="!!gridMeter?.id"
43+
:editable="!gridMeter || !!gridMeter.id"
4544
:error="deviceError('meter', gridMeter?.name)"
4645
data-testid="grid"
47-
@edit="editMeter(gridMeter.id, 'grid')"
46+
@edit="gridMeter?.id ? editMeter(gridMeter.id, 'pv') : addMeter('grid')"
4847
>
4948
<template #icon>
5049
<shopicon-regular-powersupply></shopicon-regular-powersupply>
5150
</template>
5251
<template #tags>
53-
<DeviceTags :tags="deviceTags('meter', gridMeter?.name)" />
52+
<DeviceTags
53+
:tags="
54+
gridMeter
55+
? deviceTags('meter', gridMeter.name)
56+
: { configured: { value: false } }
57+
"
58+
/>
5459
</template>
5560
</DeviceCard>
5661
<DeviceCard
@@ -547,7 +552,7 @@ export default {
547552
removeMeterFromSite(type, name) {
548553
if (type === "grid") {
549554
this.site.grid = "";
550-
} else {
555+
} else if (this.site[type]) {
551556
this.site[type] = this.site[type].filter((i) => i !== name);
552557
}
553558
this.saveSite(type);

0 commit comments

Comments
 (0)