From 502f25f017307a3f4c0988724caa05947256e80d Mon Sep 17 00:00:00 2001 From: andig Date: Sat, 8 May 2021 20:55:35 +0200 Subject: [PATCH] Fix creating RS485 meters as Sunspec when RTU is not enabled (#977) --- internal/meter/modbus.go | 5 ++++- provider/modbus.go | 2 +- util/modbus/modbus.go | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/internal/meter/modbus.go b/internal/meter/modbus.go index f3ecf6a49..6e28a7b55 100644 --- a/internal/meter/modbus.go +++ b/internal/meter/modbus.go @@ -38,6 +38,9 @@ func NewModbusFromConfig(other map[string]interface{}) (api.Meter, error) { Timeout time.Duration }{ Power: "Power", + Settings: modbus.Settings{ + ID: 1, + }, } if err := util.DecodeOther(other, &cc); err != nil { @@ -65,7 +68,7 @@ func NewModbusFromConfig(other map[string]interface{}) (api.Meter, error) { conn.Logger(log.TRACE) // prepare device - device, err := modbus.NewDevice(cc.Model, cc.SubDevice, *cc.RTU) + device, err := modbus.NewDevice(cc.Model, cc.SubDevice) if err == nil { err = device.Initialize(conn) diff --git a/provider/modbus.go b/provider/modbus.go index 5820dbd78..232783726 100644 --- a/provider/modbus.go +++ b/provider/modbus.go @@ -75,7 +75,7 @@ func NewModbusFromConfig(other map[string]interface{}) (IntProvider, error) { // no registered configured - need device if cc.Register.Decode == "" { - device, err = modbus.NewDevice(cc.Model, cc.SubDevice, *cc.RTU) + device, err = modbus.NewDevice(cc.Model, cc.SubDevice) // prepare device if err == nil { diff --git a/util/modbus/modbus.go b/util/modbus/modbus.go index dd37450f5..450e30f02 100644 --- a/util/modbus/modbus.go +++ b/util/modbus/modbus.go @@ -177,8 +177,8 @@ func NewConnection(uri, device, comset string, baudrate int, rtu bool, slaveID u } // NewDevice creates physical modbus device from config -func NewDevice(model string, subdevice int, isRS485 bool) (device meters.Device, err error) { - if isRS485 { +func NewDevice(model string, subdevice int) (device meters.Device, err error) { + if IsRS485(model) { device, err = rs485.NewDevice(strings.ToUpper(model)) } else { device = sunspec.NewDevice(strings.ToUpper(model), subdevice)