Skip to content

Commit 6cdd844

Browse files
authored
Config UI: unify configured state handling (evcc-io#18237)
1 parent e6e8aa1 commit 6cdd844

File tree

6 files changed

+42
-95
lines changed

6 files changed

+42
-95
lines changed

assets/js/views/Config.vue

+17-22
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@
186186
>
187187
<template #icon><NotificationIcon /></template>
188188
<template #tags>
189-
<DeviceTags :tags="yamlTags('messaging')" />
189+
<DeviceTags :tags="messagingTags" />
190190
</template>
191191
</DeviceCard>
192192
<DeviceCard
@@ -210,7 +210,7 @@
210210
>
211211
<template #icon><EebusIcon /></template>
212212
<template #tags>
213-
<DeviceTags :tags="yamlTags('eebus')" />
213+
<DeviceTags :tags="eebusTags" />
214214
</template>
215215
</DeviceCard>
216216
<DeviceCard
@@ -224,7 +224,7 @@
224224
<template #tags>
225225
<DeviceTags
226226
v-if="circuits.length == 0"
227-
:tags="yamlTags('circuits')"
227+
:tags="{ configured: { value: false } }"
228228
/>
229229
<template
230230
v-for="(circuit, idx) in circuits"
@@ -249,7 +249,7 @@
249249
>
250250
<template #icon><ModbusProxyIcon /></template>
251251
<template #tags>
252-
<DeviceTags :tags="yamlTags('modbusproxy')" />
252+
<DeviceTags :tags="modbusproxyTags" />
253253
</template>
254254
</DeviceCard>
255255
<DeviceCard
@@ -390,12 +390,6 @@ export default {
390390
site: { grid: "", pv: [], battery: [] },
391391
deviceValueTimeout: undefined,
392392
deviceValues: {},
393-
yamlConfigState: {
394-
messaging: false,
395-
eebus: false,
396-
circuits: false,
397-
modbusproxy: false,
398-
},
399393
};
400394
},
401395
computed: {
@@ -462,6 +456,19 @@ export default {
462456
}
463457
return result;
464458
},
459+
eebusTags() {
460+
return { configured: { value: store.state?.eebus || false } };
461+
},
462+
modbusproxyTags() {
463+
const config = store.state?.modbusproxy || [];
464+
if (config.length > 0) {
465+
return { amount: { value: config.length } };
466+
}
467+
return { configured: { value: false } };
468+
},
469+
messagingTags() {
470+
return { configured: { value: store.state?.messaging || false } };
471+
},
465472
},
466473
watch: {
467474
offline() {
@@ -484,7 +491,6 @@ export default {
484491
await this.loadCircuits();
485492
await this.loadDirty();
486493
await this.updateValues();
487-
await this.updateYamlConfigState();
488494
},
489495
async loadDirty() {
490496
const response = await api.get("/config/dirty");
@@ -567,7 +573,6 @@ export default {
567573
},
568574
yamlChanged() {
569575
this.loadDirty();
570-
this.updateYamlConfigState();
571576
},
572577
addMeterToSite(type, name) {
573578
if (type === "grid") {
@@ -636,16 +641,6 @@ export default {
636641
console.error(`modal ${id} not found`);
637642
}
638643
},
639-
updateYamlConfigState() {
640-
const keys = Object.keys(this.yamlConfigState);
641-
keys.forEach(async (key) => {
642-
const res = await api.get(`/config/${key}`);
643-
this.yamlConfigState[key] = !!res.data.result;
644-
});
645-
},
646-
yamlTags(key) {
647-
return { configured: { value: this.yamlConfigState[key] } };
648-
},
649644
circuitTags(circuit) {
650645
const data = store.state?.circuits[circuit.name] || {};
651646
const result = {};

cmd/migrate.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func runMigrate(cmd *cobra.Command, args []string) {
7979
log.DEBUG.Println("- eebus")
8080
if reset {
8181
settings.Delete(keys.EEBus)
82-
} else if conf.EEBus.URI != "" {
82+
} else if conf.EEBus.Configured() {
8383
_ = settings.SetYaml(keys.EEBus, conf.EEBus)
8484
}
8585

cmd/root.go

+14-11
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ func runRoot(cmd *cobra.Command, args []string) {
180180

181181
// setup modbus proxy
182182
if err == nil {
183-
err = wrapErrorWithClass(ClassModbusProxy, configureModbusProxy(conf.ModbusProxy))
183+
err = wrapErrorWithClass(ClassModbusProxy, configureModbusProxy(&conf.ModbusProxy))
184184
}
185185

186186
// setup site and loadpoints
@@ -209,14 +209,6 @@ func runRoot(cmd *cobra.Command, args []string) {
209209

210210
// remove previous fatal startup errors
211211
valueChan <- util.Param{Key: keys.Fatal, Val: nil}
212-
// publish initial settings
213-
valueChan <- util.Param{Key: keys.Interval, Val: conf.Interval}
214-
valueChan <- util.Param{Key: keys.Network, Val: conf.Network}
215-
valueChan <- util.Param{Key: keys.Mqtt, Val: conf.Mqtt}
216-
valueChan <- util.Param{Key: keys.Influx, Val: conf.Influx}
217-
valueChan <- util.Param{Key: keys.Hems, Val: conf.HEMS}
218-
// TODO
219-
valueChan <- util.Param{Key: keys.Sponsor, Val: sponsor.Status()}
220212

221213
// setup mqtt publisher
222214
if err == nil && conf.Mqtt.Broker != "" {
@@ -234,16 +226,27 @@ func runRoot(cmd *cobra.Command, args []string) {
234226

235227
// start HEMS server
236228
if err == nil {
237-
err = wrapErrorWithClass(ClassHEMS, configureHEMS(conf.HEMS, site, httpd))
229+
err = wrapErrorWithClass(ClassHEMS, configureHEMS(&conf.HEMS, site, httpd))
238230
}
239231

240232
// setup messaging
241233
var pushChan chan push.Event
242234
if err == nil {
243-
pushChan, err = configureMessengers(conf.Messaging, site.Vehicles(), valueChan, cache)
235+
pushChan, err = configureMessengers(&conf.Messaging, site.Vehicles(), valueChan, cache)
244236
err = wrapErrorWithClass(ClassMessenger, err)
245237
}
246238

239+
// publish initial settings
240+
valueChan <- util.Param{Key: keys.EEBus, Val: conf.EEBus.Configured()}
241+
valueChan <- util.Param{Key: keys.Hems, Val: conf.HEMS}
242+
valueChan <- util.Param{Key: keys.Influx, Val: conf.Influx}
243+
valueChan <- util.Param{Key: keys.Interval, Val: conf.Interval}
244+
valueChan <- util.Param{Key: keys.Messaging, Val: pushChan != nil}
245+
valueChan <- util.Param{Key: keys.ModbusProxy, Val: conf.ModbusProxy}
246+
valueChan <- util.Param{Key: keys.Mqtt, Val: conf.Mqtt}
247+
valueChan <- util.Param{Key: keys.Network, Val: conf.Network}
248+
valueChan <- util.Param{Key: keys.Sponsor, Val: sponsor.Status()}
249+
247250
// run shutdown functions on stop
248251
var once sync.Once
249252
stopC := make(chan struct{})

cmd/setup.go

+8-61
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ func configureEnvironment(cmd *cobra.Command, conf *globalconfig.All) (err error
491491

492492
// setup EEBus server
493493
if err == nil {
494-
err = wrapErrorWithClass(ClassEEBus, configureEEBus(conf.EEBus))
494+
err = wrapErrorWithClass(ClassEEBus, configureEEBus(&conf.EEBus))
495495
}
496496

497497
// setup javascript VMs
@@ -559,14 +559,6 @@ func configureInflux(conf *globalconfig.Influx) (*server.Influx, error) {
559559
return nil, nil
560560
}
561561

562-
// TODO remove yaml file
563-
// // migrate settings
564-
// if !settings.Exists(keys.Influx) {
565-
// if err := settings.SetJson(keys.Influx, conf); err != nil {
566-
// return nil, err
567-
// }
568-
// }
569-
570562
influx := server.NewInfluxClient(
571563
conf.URL,
572564
conf.Token,
@@ -587,13 +579,6 @@ func configureMqtt(conf *globalconfig.Mqtt) error {
587579
if err := settings.Json(keys.Mqtt, &conf); err != nil {
588580
return err
589581
}
590-
591-
// TODO remove yaml file
592-
// } else {
593-
// // migrate settings & write defaults
594-
// if err := settings.SetJson(keys.Mqtt, conf); err != nil {
595-
// return err
596-
// }
597582
}
598583

599584
if conf.Broker == "" {
@@ -645,7 +630,7 @@ func configureGo(conf []globalconfig.Go) error {
645630
}
646631

647632
// setup HEMS
648-
func configureHEMS(conf globalconfig.Hems, site *core.Site, httpd *server.HTTPd) error {
633+
func configureHEMS(conf *globalconfig.Hems, site *core.Site, httpd *server.HTTPd) error {
649634
// migrate settings
650635
if settings.Exists(keys.Hems) {
651636
if err := settings.Yaml(keys.Hems, new(map[string]any), &conf); err != nil {
@@ -657,14 +642,6 @@ func configureHEMS(conf globalconfig.Hems, site *core.Site, httpd *server.HTTPd)
657642
return nil
658643
}
659644

660-
// TODO remove yaml file
661-
// // migrate settings
662-
// if !settings.Exists(keys.Hems) {
663-
// if err := settings.SetYaml(keys.Hems, conf); err != nil {
664-
// return err
665-
// }
666-
// }
667-
668645
hems, err := hems.NewFromConfig(context.TODO(), conf.Type, conf.Other, site, httpd)
669646
if err != nil {
670647
return fmt.Errorf("failed configuring hems: %w", err)
@@ -681,10 +658,6 @@ func networkSettings(conf *globalconfig.Network) error {
681658
return settings.Json(keys.Network, &conf)
682659
}
683660

684-
// TODO remove yaml file
685-
// // migrate settings
686-
// return settings.SetJson(keys.Network, conf)
687-
688661
return nil
689662
}
690663

@@ -703,7 +676,7 @@ func configureMDNS(conf globalconfig.Network) error {
703676
}
704677

705678
// setup EEBus
706-
func configureEEBus(conf eebus.Config) error {
679+
func configureEEBus(conf *eebus.Config) error {
707680
// migrate settings
708681
if settings.Exists(keys.EEBus) {
709682
if err := settings.Yaml(keys.EEBus, new(map[string]any), &conf); err != nil {
@@ -715,16 +688,8 @@ func configureEEBus(conf eebus.Config) error {
715688
return nil
716689
}
717690

718-
// TODO remove yaml file
719-
// // migrate settings
720-
// if !settings.Exists(keys.EEBus) {
721-
// if err := settings.SetYaml(keys.EEBus, conf); err != nil {
722-
// return err
723-
// }
724-
// }
725-
726691
var err error
727-
if eebus.Instance, err = eebus.NewServer(conf); err != nil {
692+
if eebus.Instance, err = eebus.NewServer(*conf); err != nil {
728693
return fmt.Errorf("failed configuring eebus: %w", err)
729694
}
730695

@@ -735,18 +700,12 @@ func configureEEBus(conf eebus.Config) error {
735700
}
736701

737702
// setup messaging
738-
func configureMessengers(conf globalconfig.Messaging, vehicles push.Vehicles, valueChan chan<- util.Param, cache *util.Cache) (chan push.Event, error) {
703+
func configureMessengers(conf *globalconfig.Messaging, vehicles push.Vehicles, valueChan chan<- util.Param, cache *util.Cache) (chan push.Event, error) {
739704
// migrate settings
740705
if settings.Exists(keys.Messaging) {
741706
if err := settings.Yaml(keys.Messaging, new(map[string]any), &conf); err != nil {
742707
return nil, err
743708
}
744-
745-
// TODO remove yaml file
746-
// } else if len(conf.Services)+len(conf.Events) > 0 {
747-
// if err := settings.SetYaml(keys.Messaging, conf); err != nil {
748-
// return nil, err
749-
// }
750709
}
751710

752711
messageChan := make(chan push.Event, 1)
@@ -807,12 +766,6 @@ func configureTariffs(conf globalconfig.Tariffs) (*tariff.Tariffs, error) {
807766
if err := settings.Yaml(keys.Tariffs, new(map[string]any), &conf); err != nil {
808767
return nil, err
809768
}
810-
811-
// TODO remove yaml file
812-
// } else if conf.Grid.Type != "" || conf.FeedIn.Type != "" || conf.Co2.Type != "" || conf.Planner.Type != "" {
813-
// if err := settings.SetYaml(keys.Tariffs, conf); err != nil {
814-
// return nil, err
815-
// }
816769
}
817770

818771
tariffs := tariff.Tariffs{
@@ -853,21 +806,15 @@ func configureDevices(conf globalconfig.All) error {
853806
return nil
854807
}
855808

856-
func configureModbusProxy(conf []globalconfig.ModbusProxy) error {
809+
func configureModbusProxy(conf *[]globalconfig.ModbusProxy) error {
857810
// migrate settings
858811
if settings.Exists(keys.ModbusProxy) {
859-
if err := settings.Yaml(keys.ModbusProxy, new([]map[string]any), &conf); err != nil {
812+
if err := settings.Yaml(keys.ModbusProxy, new([]map[string]any), conf); err != nil {
860813
return err
861814
}
862-
863-
// TODO remove yaml file
864-
// } else if len(conf) > 0 {
865-
// if err := settings.SetYaml(keys.ModbusProxy, conf); err != nil {
866-
// return err
867-
// }
868815
}
869816

870-
for _, cfg := range conf {
817+
for _, cfg := range *conf {
871818
var mode modbus.ReadOnlyMode
872819
mode, err := modbus.ReadOnlyModeString(cfg.ReadOnly)
873820
if err != nil {

i18n/de.toml

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ labelResidualPower = "Residualleistung"
4040
title = "Regelverhalten"
4141

4242
[config.deviceValue]
43+
amount = "Anzahl"
4344
broker = "Broker"
4445
bucket = "Bucket"
4546
capacity = "Kapazität"

i18n/en.toml

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ labelResidualPower = "Residual power"
4040
title = "Control behavior"
4141

4242
[config.deviceValue]
43+
amount = "Amount"
4344
broker = "Broker"
4445
bucket = "Bucket"
4546
capacity = "Capacity"

0 commit comments

Comments
 (0)