From 84dd7d8f20cfa59d508c49acb485699b45f45331 Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 20 Nov 2020 18:09:39 +0100 Subject: [PATCH] Fix modbus reading values ignored (#458) --- meter/modbus.go | 5 +---- provider/modbus.go | 39 +++++++++++++++++---------------------- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/meter/modbus.go b/meter/modbus.go index d67a0adc2..9aa5fb7f4 100644 --- a/meter/modbus.go +++ b/meter/modbus.go @@ -58,10 +58,7 @@ func NewModbusFromConfig(other map[string]interface{}) (api.Meter, error) { conn.Logger(log.TRACE) // prepare device - var device meters.Device - if err == nil { - device, err = modbus.NewDevice(cc.Model, cc.SubDevice, *cc.RTU) - } + device, err := modbus.NewDevice(cc.Model, cc.SubDevice, *cc.RTU) if err == nil { err = device.Initialize(conn) diff --git a/provider/modbus.go b/provider/modbus.go index 31f638639..ebb895974 100644 --- a/provider/modbus.go +++ b/provider/modbus.go @@ -63,26 +63,6 @@ func NewModbusFromConfig(other map[string]interface{}) (*Modbus, error) { cc.Value = "Power" } - // model + value configured - if cc.Value != "" { - cc.Value = modbus.ReadingName(cc.Value) - if err := modbus.ParseOperation(device, cc.Value, &op); err != nil { - return nil, fmt.Errorf("invalid value %s", cc.Value) - } - - // if sunspec reading configured make sure model is defined or device won't be initialized - if op.SunSpec.Point != "" && cc.Model == "" { - cc.Model = "SunSpec" - } - } - - // register configured - if cc.Register.Decode != "" { - if op.MBMD, err = modbus.RegisterOperation(cc.Register); err != nil { - return nil, err - } - } - // model configured if cc.Model != "" { device, err = modbus.NewDevice(cc.Model, cc.SubDevice, *cc.RTU) @@ -96,10 +76,25 @@ func NewModbusFromConfig(other map[string]interface{}) (*Modbus, error) { err = nil } } + + if err != nil { + return nil, err + } } - if err != nil { - return nil, err + // model + value configured + if cc.Value != "" { + cc.Value = modbus.ReadingName(cc.Value) + if err := modbus.ParseOperation(device, cc.Value, &op); err != nil { + return nil, fmt.Errorf("invalid value %s", cc.Value) + } + } + + // register configured + if cc.Register.Decode != "" { + if op.MBMD, err = modbus.RegisterOperation(cc.Register); err != nil { + return nil, err + } } mb := &Modbus{