diff --git a/templates/definition/charger/lambda-zewotherm.yaml b/templates/definition/charger/lambda-zewotherm.yaml index 780c207f4a..320a0ddda3 100644 --- a/templates/definition/charger/lambda-zewotherm.yaml +++ b/templates/definition/charger/lambda-zewotherm.yaml @@ -16,17 +16,24 @@ requirements: Energiemanagementeinstellungen am Gerät: - E-Meter Kommunikationsart: "ModBus Client" - - E-Meter Messpunkt: "Pos. E-Überschuss" + - E-Meter Messpunkt: "Pos. E-Überschuss" oder "Neg. E-Überschuss" en: | Energy management settings of the device: - E-Meter communication type: "ModBus Client" - - E-Meter measuring point: "Pos. E-Überschuss" + - E-Meter measuring point: "Pos. Excess Energy" or "Neg. Excess Energy" params: - name: host - name: tempsource type: choice choice: ["warmwater_top", "warmwater_bottom", "buffer_top", "buffer_bottom"] + - name: excess + type: choice + choice: ["plus", "minus"] + default: "plus" + description: + de: E-Überschuss ("plus" oder "minus") + en: Excess Energy ("plus" or "minus") - name: phases deprecated: true - name: watchdog @@ -47,6 +54,7 @@ render: | address: 102 # PV Überschussleistung type: writemultiple # λ erwartet single value als FC16 decode: int16 + scale: {{ if eq .excess "plus" }}1{{ else }}-1{{ end }} power: source: modbus uri: {{ .host }}:502 diff --git a/util/modbus/register.go b/util/modbus/register.go index 4b2f3218a4..6d44f565d6 100644 --- a/util/modbus/register.go +++ b/util/modbus/register.go @@ -178,7 +178,12 @@ func (r Register) EncodeFunc() (func(float64) ([]byte, error), error) { case strings.HasPrefix(enc, "bool"): fallthrough - case strings.HasPrefix(enc, "int") || strings.HasPrefix(enc, "uint"): + case strings.HasPrefix(enc, "int"): + return r.encodeToBytes(func(v float64) uint64 { + return uint64(int64(v)) + }) + + case strings.HasPrefix(enc, "uint"): return r.encodeToBytes(func(v float64) uint64 { return uint64(v) })