forked from evcc-io/evcc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
battery.go
39 lines (32 loc) · 869 Bytes
/
battery.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
package meter
import (
"github.com/evcc-io/evcc/api"
)
type battery struct {
MinSoc, MaxSoc float64
}
// LimitController returns an api.BatteryController decorator
func (m *battery) LimitController(socG func() (float64, error), limitSocS func(float64) error) func(api.BatteryMode) error {
return func(mode api.BatteryMode) error {
switch mode {
case api.BatteryNormal:
return limitSocS(m.MinSoc)
case api.BatteryHold:
soc, err := socG()
if err != nil {
return err
}
return limitSocS(max(soc, m.MinSoc))
case api.BatteryCharge:
return limitSocS(m.MaxSoc)
default:
return api.ErrNotAvailable
}
}
}
// ModeController returns an api.BatteryController decorator
func (m *battery) ModeController(modeS func(int64) error) func(api.BatteryMode) error {
return func(mode api.BatteryMode) error {
return modeS(int64(mode))
}
}