42 lines
1,019 B
Go
42 lines
1,019 B
Go
package smartgrid
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
|
|
"github.com/evcc-io/evcc/api"
|
|
"github.com/evcc-io/evcc/core/circuit"
|
|
"github.com/evcc-io/evcc/util"
|
|
"github.com/evcc-io/evcc/util/config"
|
|
)
|
|
|
|
const GridControl = "gridcontrol"
|
|
|
|
// SetupCircuit returns or registers the grid control circuit
|
|
func SetupCircuit() (api.Circuit, error) {
|
|
if _, err := config.Circuits().ByName(GridControl); err == nil {
|
|
return nil, errors.New("gridcontrol is a reserved name and will be auto-created as root circuit when hems is configured")
|
|
}
|
|
|
|
root := circuit.Root()
|
|
|
|
// create new circuit
|
|
circuit, err := circuit.New(util.NewLogger(GridControl), "", 0, 0, nil, time.Minute)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
dev := config.NewStaticDevice[api.Circuit](config.Named{Name: GridControl}, circuit)
|
|
if err := config.Circuits().Add(dev); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// wrap old root with new grid control parent
|
|
if root != nil {
|
|
if err := root.Wrap(circuit); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return circuit, nil
|
|
}
|