SolarMax: add battery discharge control (#16110)
This commit is contained in:
parent
b9c6d2788c
commit
78b7bfd6c3
3 changed files with 163 additions and 0 deletions
45
provider/error.go
Normal file
45
provider/error.go
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
package provider
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/evcc-io/evcc/util"
|
||||
)
|
||||
|
||||
type errorProvider struct {
|
||||
err error
|
||||
}
|
||||
|
||||
func init() {
|
||||
registry.Add("error", NewErrorFromConfig)
|
||||
}
|
||||
|
||||
// NewErrorFromConfig creates error provider
|
||||
func NewErrorFromConfig(other map[string]interface{}) (Provider, error) {
|
||||
var cc struct {
|
||||
Error string
|
||||
}
|
||||
|
||||
if err := util.DecodeOther(other, &cc); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err := knownErrors([]byte(cc.Error))
|
||||
if err == nil {
|
||||
return nil, fmt.Errorf("unknown error: %s", cc.Error)
|
||||
}
|
||||
|
||||
o := &errorProvider{
|
||||
err: err,
|
||||
}
|
||||
|
||||
return o, nil
|
||||
}
|
||||
|
||||
var _ SetIntProvider = (*errorProvider)(nil)
|
||||
|
||||
func (o *errorProvider) IntSetter(param string) (func(int64) error, error) {
|
||||
return func(int64) error {
|
||||
return o.err
|
||||
}, nil
|
||||
}
|
||||
46
provider/random.go
Normal file
46
provider/random.go
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
package provider
|
||||
|
||||
import (
|
||||
"math"
|
||||
"math/rand/v2"
|
||||
|
||||
"github.com/evcc-io/evcc/util"
|
||||
)
|
||||
|
||||
type randomProvider struct {
|
||||
set Config
|
||||
}
|
||||
|
||||
func init() {
|
||||
registry.Add("random", NewRandomFromConfig)
|
||||
}
|
||||
|
||||
// NewRandomFromConfig creates random provider
|
||||
func NewRandomFromConfig(other map[string]interface{}) (Provider, error) {
|
||||
var cc struct {
|
||||
Set Config
|
||||
}
|
||||
|
||||
if err := util.DecodeOther(other, &cc); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
o := &randomProvider{
|
||||
set: cc.Set,
|
||||
}
|
||||
|
||||
return o, nil
|
||||
}
|
||||
|
||||
var _ SetIntProvider = (*randomProvider)(nil)
|
||||
|
||||
func (o *randomProvider) IntSetter(param string) (func(int64) error, error) {
|
||||
set, err := NewIntSetterFromConfig(param, o.set)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return func(int64) error {
|
||||
return set(rand.Int64N(math.MaxInt64-1) + 1)
|
||||
}, nil
|
||||
}
|
||||
|
|
@ -47,5 +47,77 @@ render: |
|
|||
address: 122 # Batterie Soc
|
||||
type: input
|
||||
decode: int16
|
||||
batterymode:
|
||||
source: watchdog
|
||||
timeout: {{ .watchdog }}
|
||||
reset: 1 # reset watchdog on normal
|
||||
set:
|
||||
source: switch
|
||||
switch:
|
||||
- case: 1 # normal
|
||||
set:
|
||||
source: sequence
|
||||
set:
|
||||
- source: const
|
||||
value: 7000
|
||||
set:
|
||||
source: modbus
|
||||
{{- include "modbus" . | indent 12 }}
|
||||
register:
|
||||
address: 140
|
||||
type: writemultiple
|
||||
decode: int16
|
||||
- source: const
|
||||
value: 7000
|
||||
set:
|
||||
source: modbus
|
||||
{{- include "modbus" . | indent 12 }}
|
||||
register:
|
||||
address: 141
|
||||
type: writemultiple
|
||||
decode: int16
|
||||
- source: const
|
||||
value: 0
|
||||
set:
|
||||
source: modbus
|
||||
{{- include "modbus" . | indent 12 }}
|
||||
register:
|
||||
address: 142
|
||||
type: writemultiple
|
||||
decode: int16
|
||||
- case: 2 # hold
|
||||
set:
|
||||
source: sequence
|
||||
set:
|
||||
- source: const
|
||||
value: 0
|
||||
set:
|
||||
source: modbus
|
||||
{{- include "modbus" . | indent 12 }}
|
||||
register:
|
||||
address: 140
|
||||
type: writemultiple
|
||||
decode: int16
|
||||
- source: const
|
||||
value: 0
|
||||
set:
|
||||
source: modbus
|
||||
{{- include "modbus" . | indent 12 }}
|
||||
register:
|
||||
address: 141
|
||||
type: writemultiple
|
||||
decode: int16
|
||||
- source: random
|
||||
set:
|
||||
source: modbus
|
||||
{{- include "modbus" . | indent 12 }}
|
||||
register:
|
||||
address: 142
|
||||
type: writemultiple
|
||||
decode: int16
|
||||
- case: 3 # charge (not implemented)
|
||||
set:
|
||||
source: error
|
||||
error: ErrNotImplemented
|
||||
capacity: {{ .capacity }} # kWh
|
||||
{{- end }}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue