diff --git a/provider/convert.go b/provider/convert.go new file mode 100644 index 0000000000..2f3877af24 --- /dev/null +++ b/provider/convert.go @@ -0,0 +1,55 @@ +package provider + +import ( + "fmt" + + "github.com/evcc-io/evcc/util" +) + +type convertProvider struct { + Convert string + Set Config +} + +func init() { + registry.Add("convert", NewConvertFromConfig) +} + +// NewConvertFromConfig creates type conversion provider +func NewConvertFromConfig(other map[string]interface{}) (Provider, error) { + var cc convertProvider + + if err := util.DecodeOther(other, &cc); err != nil { + return nil, err + } + + return &cc, nil +} + +var _ SetFloatProvider = (*convertProvider)(nil) + +func (o *convertProvider) FloatSetter(param string) (func(float64) error, error) { + if o.Convert == "float2int" { + return nil, fmt.Errorf("convert: invalid conversion: %s", o.Convert) + } + + set, err := NewIntSetterFromConfig(param, o.Set) + + return func(val float64) error { + return set(int64(val)) + }, err +} + +var _ SetIntProvider = (*convertProvider)(nil) + +func (o *convertProvider) IntSetter(param string) (func(int64) error, error) { + if o.Convert == "int2float" { + return nil, fmt.Errorf("convert: invalid conversion: %s", o.Convert) + } + + set, err := NewFloatSetterFromConfig(param, o.Set) + + return func(val int64) error { + return set(float64(val)) + }, err +} diff --git a/provider/float_to_int.go b/provider/float_to_int.go deleted file mode 100644 index b87f9dfc40..0000000000 --- a/provider/float_to_int.go +++ /dev/null @@ -1,34 +0,0 @@ -package provider - -import ( - "github.com/evcc-io/evcc/util" -) - -type floatToIntProvider struct { - Set Config -} - -func init() { - registry.Add("float2int", NewFloatToIntFromConfig) -} - -// NewFloatToIntFromConfig creates type conversion provider -func NewFloatToIntFromConfig(other map[string]interface{}) (Provider, error) { - var cc floatToIntProvider - - if err := util.DecodeOther(other, &cc); err != nil { - return nil, err - } - - return &cc, nil -} - -var _ SetFloatProvider = (*floatToIntProvider)(nil) - -func (o *floatToIntProvider) FloatSetter(param string) (func(float64) error, error) { - set, err := NewIntSetterFromConfig(param, o.Set) - - return func(val float64) error { - return set(int64(val)) - }, err -} diff --git a/templates/definition/meter/victron-energy.yaml b/templates/definition/meter/victron-energy.yaml index 00ba636b26..4d66baadbf 100644 --- a/templates/definition/meter/victron-energy.yaml +++ b/templates/definition/meter/victron-energy.yaml @@ -120,7 +120,8 @@ render: | type: input decode: uint16 limitsoc: - source: float2int + source: convert + convert: float2int set: source: modbus uri: {{ .host }}:{{ .port }}