MCPcopy Create free account
hub / github.com/evcc-io/evcc / optimizerUpdateAsync

Method optimizerUpdateAsync

core/site_optimizer.go:117–147  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

115var errOptimizerNotReady = errors.New("battery measurements not ready")
116
117func (site *Site) optimizerUpdateAsync() {
118 if !mu.TryLock() {
119 return
120 }
121 defer mu.Unlock()
122
123 if time.Since(optimizerUpdated) < 2*time.Minute {
124 return
125 }
126
127 var err error
128
129 defer func() {
130 if r := recover(); r != nil {
131 err = fmt.Errorf("panic %v", r)
132 }
133
134 // not ready yet: keep the gate open for an immediate retry next cycle
135 if errors.Is(err, errOptimizerNotReady) {
136 return
137 }
138
139 optimizerUpdated = time.Now()
140
141 if err != nil {
142 site.log.ERROR.Println("optimizer:", err)
143 }
144 }()
145
146 err = site.optimizerUpdate(site.battery.Devices)
147}
148
149func (site *Site) optimizerUpdate(battery []types.Measurement) error {
150 solarTariff := site.GetTariff(api.TariffUsageSolar)

Callers 3

updateMetersMethod · 0.95
triggerOptimizerMethod · 0.95
OptimizeMethod · 0.95

Calls 4

optimizerUpdateMethod · 0.95
UnlockMethod · 0.80
PrintlnMethod · 0.80
ErrorfMethod · 0.45

Tested by

no test coverage detected