Skip to content

Commit c898295

Browse files
committed
web/meters: Force charger internal meter in expected slot
Avoid configuring the charger internal meter in another slot than the expected one (default: 0) to make sure the charger will actually use this meter as expected to track the charges.
1 parent 71075c5 commit c898295

File tree

3 files changed

+50
-6
lines changed

3 files changed

+50
-6
lines changed

software/web/src/modules/meters/main.tsx

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
* Boston, MA 02111-1307, USA.
1818
*/
1919

20+
//#include "../../options.inc"
21+
2022
import * as util from "../../ts/util";
2123
import * as API from "../../ts/api";
2224
import * as options from "../../options";
@@ -1001,12 +1003,11 @@ export class Meters extends ConfigComponent<null, MetersProps, MetersState> {
10011003
onEditGetChildren: () => {
10021004
let slots: [string, string][] = [];
10031005
let classes: [string, string][] = [];
1004-
const charger_meter_slot = API.get_unchecked("evse/meter_config")?.slot;
10051006

10061007
for (let free_meter_slot = 0; free_meter_slot < options.METERS_MAX_SLOTS; ++free_meter_slot) {
10071008
if (this.state.configs_table[free_meter_slot][0] == MeterClassID.None || free_meter_slot == meter_slot) {
10081009
let slot_name = free_meter_slot.toString();
1009-
if (free_meter_slot === charger_meter_slot) {
1010+
if (free_meter_slot === this.state.charger_meter_slot) {
10101011
slot_name += " - " + __("meters.content.add_meter_slot_reserved_charger");
10111012
}
10121013
slots.push([free_meter_slot.toString(), slot_name]);
@@ -1040,7 +1041,28 @@ export class Meters extends ConfigComponent<null, MetersProps, MetersState> {
10401041
}
10411042
}
10421043
}}
1043-
value={this.state.edit_meter_config[0].toString()} />
1044+
value={this.state.edit_meter_config[0].toString()}
1045+
className={
1046+
// the charger internal meter has to be in the slot the EVSE expects it to be in
1047+
//#if OPTIONS_PRODUCT_ID_IS_WARP
1048+
this.state.edit_meter_slot != this.state.charger_meter_slot
1049+
&& this.state.edit_meter_config[0] == MeterClassID.RS485Bricklet ? "is-invalid" : undefined
1050+
//#else
1051+
//#if OPTIONS_PRODUCT_ID_IS_WARP_ANY
1052+
this.state.edit_meter_slot != this.state.charger_meter_slot
1053+
&& this.state.edit_meter_config[0] == MeterClassID.EVSEV2 ? "is-invalid" : undefined
1054+
//#else
1055+
undefined
1056+
//#endif
1057+
//#endif
1058+
}
1059+
invalidFeedback={
1060+
//#if OPTIONS_PRODUCT_ID_IS_WARP_ANY
1061+
__("meters.content.invalid_slot_for_charger_internal_meter")(this.state.charger_meter_slot)
1062+
//#else
1063+
undefined
1064+
//#endif
1065+
} />
10441066
</FormRow>
10451067
</>]
10461068

@@ -1085,12 +1107,11 @@ export class Meters extends ConfigComponent<null, MetersProps, MetersState> {
10851107
onAddGetChildren={() => {
10861108
let slots: [string, string][] = [];
10871109
let classes: [string, string][] = [];
1088-
const charger_meter_slot = API.get_unchecked("evse/meter_config")?.slot;
10891110

10901111
for (let free_meter_slot = 0; free_meter_slot < options.METERS_MAX_SLOTS; ++free_meter_slot) {
10911112
if (this.state.configs_table[free_meter_slot][0] == MeterClassID.None) {
10921113
let slot_name = free_meter_slot.toString();
1093-
if (free_meter_slot === charger_meter_slot) {
1114+
if (free_meter_slot === this.state.charger_meter_slot) {
10941115
slot_name += " - " + __("meters.content.add_meter_slot_reserved_charger");
10951116
}
10961117
slots.push([free_meter_slot.toString(), slot_name]);
@@ -1127,7 +1148,28 @@ export class Meters extends ConfigComponent<null, MetersProps, MetersState> {
11271148
}
11281149
}}
11291150
value={this.state.add_meter_config[0].toString()}
1130-
required />
1151+
required
1152+
className={
1153+
// the charger internal meter has to be in the slot the EVSE expects it to be in
1154+
//#if OPTIONS_PRODUCT_ID_IS_WARP
1155+
this.state.add_meter_slot != this.state.charger_meter_slot
1156+
&& this.state.add_meter_config[0] == MeterClassID.RS485Bricklet ? "is-invalid" : undefined
1157+
//#else
1158+
//#if OPTIONS_PRODUCT_ID_IS_WARP_ANY
1159+
this.state.add_meter_slot != this.state.charger_meter_slot
1160+
&& this.state.add_meter_config[0] == MeterClassID.EVSEV2 ? "is-invalid" : undefined
1161+
//#else
1162+
undefined
1163+
//#endif
1164+
//#endif
1165+
}
1166+
invalidFeedback={
1167+
//#if OPTIONS_PRODUCT_ID_IS_WARP_ANY
1168+
__("meters.content.invalid_slot_for_charger_internal_meter")(this.state.charger_meter_slot)
1169+
//#else
1170+
undefined
1171+
//#endif
1172+
} />
11311173
</FormRow>
11321174
];
11331175

software/web/src/modules/meters/translation_de.tsx.template

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ let x = {
6363
"add_meter_slot": "Nummer",
6464
"add_meter_slot_reserved_charger": "Reserviert für Wallbox-Zähler",
6565
"add_meter_class": "Klasse",
66+
"invalid_slot_for_charger_internal_meter": /*SFN*/(slot: number) => `Der Wallbox-interne Zähler kann nur für Stromzählernummer ${slot} konfiguriert werden.`/*NF*/,
6667

6768
"edit_meter_title": "Stromzähler bearbeiten",
6869
"edit_meter_slot": "Nummer",

software/web/src/modules/meters/translation_en.tsx.template

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ let x = {
6363
"add_meter_slot": "Number",
6464
"add_meter_slot_reserved_charger": "Reserved for charger meter",
6565
"add_meter_class": "Class",
66+
"invalid_slot_for_charger_internal_meter": /*SFN*/(slot: number) => `The charger internal meter can only be configured for meter number ${slot}.`/*NF*/,
6667

6768
"edit_meter_title": "Edit energy meter",
6869
"edit_meter_slot": "Number",

0 commit comments

Comments
 (0)