-
-
Notifications
You must be signed in to change notification settings - Fork 521
/
config.go
108 lines (93 loc) · 2.48 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package cmd
import (
"time"
"github.com/andig/evcc/api"
"github.com/andig/evcc/charger"
"github.com/andig/evcc/meter"
"github.com/andig/evcc/push"
"github.com/andig/evcc/server"
"github.com/andig/evcc/vehicle"
)
type config struct {
URI string
Log string
Interval time.Duration
Mqtt mqttConfig
Influx server.InfluxConfig
Menu []server.MenuConfig
Messaging messagingConfig
Meters []qualifiedConfig
Chargers []qualifiedConfig
Vehicles []qualifiedConfig
LoadPoints []map[string]interface{}
}
type qualifiedConfig struct {
Name, Type string
Other map[string]interface{} `mapstructure:",remain"`
}
type typedConfig struct {
Type string
Other map[string]interface{} `mapstructure:",remain"`
}
type messagingConfig struct {
Events map[string]push.EventTemplate
Services []typedConfig
}
type mqttConfig struct {
Broker string
User string
Password string
}
// ConfigProvider provides configuration items
type ConfigProvider struct {
meters map[string]api.Meter
chargers map[string]api.Charger
vehicles map[string]api.Vehicle
}
// Meter provides meters by name
func (c *ConfigProvider) Meter(name string) api.Meter {
if meter, ok := c.meters[name]; ok {
return meter
}
log.FATAL.Fatalf("config: invalid meter %s", name)
return nil
}
// Charger provides chargers by name
func (c *ConfigProvider) Charger(name string) api.Charger {
if charger, ok := c.chargers[name]; ok {
return charger
}
log.FATAL.Fatalf("config: invalid charger %s", name)
return nil
}
// Vehicle provides vehicles by name
func (c *ConfigProvider) Vehicle(name string) api.Vehicle {
if vehicle, ok := c.vehicles[name]; ok {
return vehicle
}
log.FATAL.Fatalf("config: invalid vehicle %s", name)
return nil
}
func (c *ConfigProvider) configure(conf config) {
c.configureMeters(conf)
c.configureChargers(conf)
c.configureVehicles(conf)
}
func (c *ConfigProvider) configureMeters(conf config) {
c.meters = make(map[string]api.Meter)
for _, cc := range conf.Meters {
c.meters[cc.Name] = meter.NewFromConfig(log, cc.Type, cc.Other)
}
}
func (c *ConfigProvider) configureChargers(conf config) {
c.chargers = make(map[string]api.Charger)
for _, cc := range conf.Chargers {
c.chargers[cc.Name] = charger.NewFromConfig(log, cc.Type, cc.Other)
}
}
func (c *ConfigProvider) configureVehicles(conf config) {
c.vehicles = make(map[string]api.Vehicle)
for _, cc := range conf.Vehicles {
c.vehicles[cc.Name] = vehicle.NewFromConfig(log, cc.Type, cc.Other)
}
}