Modbus: unify delay and timeout settings (BC) (#31996)

This commit is contained in:
andig 2026-07-23 17:03:28 +02:00 • committed by GitHub
parent ff2905a366
commit 02a66252ca
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
82 changed files with 410 additions and 369 deletions

View file

@ -66,12 +66,12 @@ func NewABBFromConfig(ctx context.Context, other map[string]any) (api.Charger, e
return nil, err
}
return NewABB(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewABB(ctx, cc)
}
// NewABB creates ABB charger
func NewABB(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewABB(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -68,12 +68,12 @@ func NewAblEm4FromConfig(ctx context.Context, other map[string]any) (api.Charger
return nil, err
}
return NewAblEm4(ctx, cc.URI, cc.ID, cc.Connector)
return NewAblEm4(ctx, cc.TcpSettings, cc.Connector)
}
// NewAblEm4 creates an ABL eM4 charger
func NewAblEm4(ctx context.Context, uri string, id uint8, connector uint16) (*AblEm4, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewAblEm4(ctx context.Context, settings modbus.TcpSettings, connector uint16) (*AblEm4, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -82,33 +82,24 @@ func init() {
// NewABLeMHFromConfig creates a ABLeMH charger from generic config
func NewABLeMHFromConfig(ctx context.Context, other map[string]any) (api.Charger, error) {
cc := struct {
modbus.Settings `mapstructure:",squash"`
Timeout time.Duration
}{
Settings: modbus.Settings{
ID: 1,
},
cc := modbus.Settings{
ID: 1,
}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
return NewABLeMH(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.ID, cc.Timeout)
return NewABLeMH(ctx, cc)
}
// NewABLeMH creates ABLeMH charger
func NewABLeMH(ctx context.Context, uri, device, comset string, baudrate int, slaveID uint8, timeout time.Duration) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, modbus.Ascii, slaveID)
func NewABLeMH(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
conn, err := settings.Connection(ctx, modbus.Ascii)
if err != nil {
return nil, err
}
if timeout > 0 {
conn.Timeout(timeout)
}
if !sponsor.IsAuthorized() {
return nil, api.ErrSponsorRequired
}

View file

@ -68,12 +68,12 @@ func NewAlfenFromConfig(ctx context.Context, other map[string]any) (api.Charger,
return nil, err
}
return NewAlfen(ctx, cc.URI, cc.ID)
return NewAlfen(ctx, cc)
}
// NewAlfen creates Alfen charger
func NewAlfen(ctx context.Context, uri string, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewAlfen(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -49,25 +49,24 @@ func init() {
// NewAlphatecFromConfig creates a Alphatec charger from generic config
func NewAlphatecFromConfig(ctx context.Context, other map[string]any) (api.Charger, error) {
cc := modbus.Settings{
ID: 1,
ID: 1,
Delay: 20 * time.Millisecond,
}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
return NewAlphatec(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewAlphatec(ctx, cc)
}
// NewAlphatec creates Alphatec charger
func NewAlphatec(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewAlphatec(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
conn.Delay(20 * time.Millisecond)
if !sponsor.IsAuthorized() {
return nil, api.ErrSponsorRequired
}

View file

@ -73,12 +73,12 @@ func NewAlpitronicHYCFromConfig(ctx context.Context, other map[string]any) (api.
return nil, err
}
return NewAlpitronicHYC(ctx, cc.URI, cc.ID, cc.Connector)
return NewAlpitronicHYC(ctx, cc.TcpSettings, cc.Connector)
}
// NewAlpitronicHYC creates Alpitronic charger
func NewAlpitronicHYC(ctx context.Context, uri string, id uint8, connector uint16) (*AlpitronicHYC, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewAlpitronicHYC(ctx context.Context, settings modbus.TcpSettings, connector uint16) (*AlpitronicHYC, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -110,12 +110,12 @@ func NewAmbiboxFromConfig(ctx context.Context, other map[string]any) (api.Charge
return nil, api.ErrSponsorRequired
}
return NewAmbibox(ctx, cc.URI, cc.ID, cc.Connector)
return NewAmbibox(ctx, cc.TcpSettings, cc.Connector)
}
// NewAmbibox creates an Ambibox charger
func NewAmbibox(ctx context.Context, uri string, id uint8, connector int) (*Ambibox, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewAmbibox(ctx context.Context, settings modbus.TcpSettings, connector int) (*Ambibox, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -76,12 +76,12 @@ func NewAmperfiedFromConfig(ctx context.Context, other map[string]any) (api.Char
return nil, err
}
return NewAmperfied(ctx, cc.URI, cc.ID, cc.Phases1p3p)
return NewAmperfied(ctx, cc.TcpSettings, cc.Phases1p3p)
}
// NewAmperfied creates Amperfied charger
func NewAmperfied(ctx context.Context, uri string, slaveID uint8, phases bool) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewAmperfied(ctx context.Context, settings modbus.TcpSettings, phases bool) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -109,12 +109,12 @@ func NewBenderCCFromConfig(ctx context.Context, other map[string]any) (api.Charg
return nil, err
}
return NewBenderCC(ctx, cc.URI, cc.ID, cc.Cache)
return NewBenderCC(ctx, cc.TcpSettings, cc.Cache)
}
// NewBenderCC creates BenderCC charger
func NewBenderCC(ctx context.Context, uri string, id uint8, cache time.Duration) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewBenderCC(ctx context.Context, settings modbus.TcpSettings, cache time.Duration) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
@ -174,7 +174,7 @@ func NewBenderCC(ctx context.Context, uri string, id uint8, cache time.Duration)
implement.Has(wb, implement.PhaseGetter(wb.getPhasesMennekes))
} else {
// check feature semp phase switching
if wb.supportsSEMPPhaseSwitching(uri, cache) {
if wb.supportsSEMPPhaseSwitching(settings.URI, cache) {
// set initial SEMP power limit to max so modbus control from 6 to 16 A is possible
if err := wb.semp.conn.SendDeviceControl(wb.semp.deviceID, 0xffff); err == nil {
implement.Has(wb, implement.PhaseSwitcher(wb.phases1p3pSEMP))

View file

@ -67,14 +67,14 @@ func NewCfosPowerBrainFromConfig(ctx context.Context, other map[string]any) (api
return nil, err
}
return NewCfosPowerBrain(ctx, cc.URI, cc.ID)
return NewCfosPowerBrain(ctx, cc)
}
// NewCfosPowerBrain creates a cFos charger
func NewCfosPowerBrain(ctx context.Context, uri string, id uint8) (api.Charger, error) {
uri = util.DefaultPort(uri, 4701)
func NewCfosPowerBrain(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
settings.URI = util.DefaultPort(settings.URI, 4701)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -77,12 +77,12 @@ func NewChargeXFromConfig(ctx context.Context, other map[string]any) (api.Charge
return nil, err
}
return NewChargeX(ctx, cc.URI, cc.ID, cc.Connector)
return NewChargeX(ctx, cc.TcpSettings, cc.Connector)
}
// NewChargeX creates ChargeX charger
func NewChargeX(ctx context.Context, uri string, id uint8, connector uint16) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewChargeX(ctx context.Context, settings modbus.TcpSettings, connector uint16) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -76,12 +76,12 @@ func NewCompleoFromConfig(ctx context.Context, other map[string]any) (api.Charge
return nil, err
}
return NewCompleo(ctx, cc.URI, cc.ID, cc.Connector)
return NewCompleo(ctx, cc.TcpSettings, cc.Connector)
}
// NewCompleo creates Compleo charger
func NewCompleo(ctx context.Context, uri string, slaveID uint8, connector uint16) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewCompleo(ctx context.Context, settings modbus.TcpSettings, connector uint16) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -66,12 +66,12 @@ func NewDadapowerFromConfig(ctx context.Context, other map[string]any) (api.Char
return nil, err
}
return NewDadapower(ctx, cc.URI, cc.ID)
return NewDadapower(ctx, cc)
}
// NewDadapower creates a Dadapower charger
func NewDadapower(ctx context.Context, uri string, id uint8) (*Dadapower, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewDadapower(ctx context.Context, settings modbus.TcpSettings) (*Dadapower, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
@ -94,8 +94,8 @@ func NewDadapower(ctx context.Context, uri string, id uint8) (*Dadapower, error)
}
// The charging station may have multiple charging ports - use offset for register addresses for each port
if id > 1 {
wb.regOffset = (uint16(id) - 1) * 1000
if settings.ID > 1 {
wb.regOffset = (uint16(settings.ID) - 1) * 1000
}
go wb.heartbeat(ctx)

View file

@ -87,12 +87,12 @@ func NewDaheimLadenFromConfig(ctx context.Context, other map[string]any) (api.Ch
return nil, err
}
return NewDaheimLaden(ctx, cc.URI, cc.ID, cc.Phases1p3p)
return NewDaheimLaden(ctx, cc.TcpSettings, cc.Phases1p3p)
}
// NewDaheimLaden creates DaheimLaden charger
func NewDaheimLaden(ctx context.Context, uri string, id uint8, phases bool) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewDaheimLaden(ctx context.Context, settings modbus.TcpSettings, phases bool) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -96,12 +96,12 @@ func NewDeltaFromConfig(ctx context.Context, other map[string]any) (api.Charger,
return nil, err
}
return NewDelta(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Settings.Protocol(), cc.ID, cc.Connector)
return NewDelta(ctx, cc.Settings, cc.Connector)
}
// NewDelta creates Delta charger
func NewDelta(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8, connector uint16) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewDelta(ctx context.Context, settings modbus.Settings, connector uint16) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -77,12 +77,12 @@ func NewEgoFromConfig(ctx context.Context, other map[string]any) (api.Charger, e
return nil, err
}
return NewEgo(ctx, &cc.embed, cc.URI, cc.ID)
return NewEgo(ctx, &cc.embed, cc.TcpSettings)
}
// NewEgo creates E.G.O. Smart Heater charger
func NewEgo(ctx context.Context, embed *embed, uri string, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewEgo(ctx context.Context, embed *embed, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -64,33 +64,31 @@ func NewEm2GoDuoFromConfig(ctx context.Context, other map[string]any) (api.Charg
modbus.TcpSettings `mapstructure:",squash"`
Connector int
}{
TcpSettings: modbus.TcpSettings{ID: 255},
Connector: 1,
TcpSettings: modbus.TcpSettings{
ID: 255,
Delay: 60 * time.Millisecond,
},
Connector: 1,
}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
return NewEm2GoDuo(ctx, cc.URI, cc.ID, cc.Connector)
return NewEm2GoDuo(ctx, cc.TcpSettings, cc.Connector)
}
// NewEm2GoDuo creates Em2GoDuo charger
func NewEm2GoDuo(ctx context.Context, uri string, slaveID uint8, connector int) (api.Charger, error) {
func NewEm2GoDuo(ctx context.Context, settings modbus.TcpSettings, connector int) (api.Charger, error) {
if connector < 1 || connector > 2 {
return nil, fmt.Errorf("invalid connector %d, must be 1 or 2", connector)
}
uri = util.DefaultPort(uri, 502)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
// Add delay of 60 milliseconds between requests
conn.Delay(60 * time.Millisecond)
log := util.NewLogger("em2go-duo")
conn.Logger(log.TRACE)

View file

@ -78,28 +78,26 @@ func NewEm2GoFromConfig(ctx context.Context, other map[string]any) (api.Charger,
modbus.TcpSettings `mapstructure:",squash"`
Connector int // TODO remove deprecated
}{
TcpSettings: modbus.TcpSettings{ID: 255},
TcpSettings: modbus.TcpSettings{
ID: 255,
Delay: 60 * time.Millisecond,
},
}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
return NewEm2Go(ctx, cc.URI, cc.ID)
return NewEm2Go(ctx, cc.TcpSettings)
}
// NewEm2Go creates Em2Go charger
func NewEm2Go(ctx context.Context, uri string, slaveID uint8) (api.Charger, error) {
uri = util.DefaultPort(uri, 502)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewEm2Go(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
// Add delay of 60 milliseconds between requests
conn.Delay(60 * time.Millisecond)
log := util.NewLogger("em2go")
conn.Logger(log.TRACE)

View file

@ -69,14 +69,12 @@ func NewEnovatesFromConfig(ctx context.Context, other map[string]any) (api.Charg
return nil, err
}
return NewEnovates(ctx, cc.URI, cc.ID)
return NewEnovates(ctx, cc)
}
// NewEnovates creates an Enovates charger
func NewEnovates(ctx context.Context, uri string, slaveID uint8) (api.Charger, error) {
uri = util.DefaultPort(uri, 502)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewEnovates(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -60,12 +60,12 @@ func NewEProWallboxFromConfig(ctx context.Context, other map[string]any) (api.Ch
return nil, err
}
return NewEProWallbox(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewEProWallbox(ctx, cc)
}
// NewEProWallbox creates eProWallbox charger
func NewEProWallbox(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewEProWallbox(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -77,7 +77,7 @@ func NewEtekFromConfig(ctx context.Context, other map[string]any) (api.Charger,
return nil, err
}
wb, err := NewEtek(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
wb, err := NewEtek(ctx, cc)
if err != nil {
return nil, err
}
@ -113,8 +113,8 @@ func NewEtekFromConfig(ctx context.Context, other map[string]any) (api.Charger,
}
// NewEtek creates an ETEK EKEPC2 charger
func NewEtek(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (*Etek, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewEtek(ctx context.Context, settings modbus.Settings) (*Etek, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -79,12 +79,12 @@ func NewEtrelFromConfig(ctx context.Context, other map[string]any) (api.Charger,
return nil, err
}
return NewEtrel(ctx, cc.URI, cc.ID, cc.Connector)
return NewEtrel(ctx, cc.TcpSettings, cc.Connector)
}
// NewEtrel creates a Etrel charger
func NewEtrel(ctx context.Context, uri string, id uint8, connector int) (*Etrel, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewEtrel(ctx context.Context, settings modbus.TcpSettings, connector int) (*Etrel, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -39,26 +39,26 @@ func NewEvseDINFromConfig(ctx context.Context, other map[string]any) (api.Charge
Baudrate: 9600,
Comset: "8N1",
ID: 1,
Delay: 200 * time.Millisecond,
}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
return NewEvseDIN(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewEvseDIN(ctx, cc)
}
// NewEvseDIN creates EVSE DIN charger
func NewEvseDIN(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (api.Charger, error) {
func NewEvseDIN(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
log := util.NewLogger("evse")
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
conn.Logger(log.TRACE)
conn.Delay(200 * time.Millisecond)
evse := &EvseDIN{
Caps: implement.New(),

View file

@ -71,24 +71,18 @@ func init() {
// NewGoodWeFromConfig creates a GoodWe wallbox charger from generic config.
func NewGoodWeFromConfig(ctx context.Context, other map[string]any) (api.Charger, error) {
cc := struct {
modbus.TcpSettings `mapstructure:",squash"`
}{
TcpSettings: modbus.TcpSettings{ID: 247},
}
cc := modbus.TcpSettings{ID: 247}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
return NewGoodWe(ctx, cc.URI, cc.ID)
return NewGoodWe(ctx, cc)
}
// NewGoodWe creates a GoodWe wallbox charger.
func NewGoodWe(ctx context.Context, uri string, slaveID uint8) (api.Charger, error) {
uri = util.DefaultPort(uri, 502)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewGoodWe(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -64,18 +64,20 @@ func init() {
func NewHeidelbergECFromConfig(ctx context.Context, other map[string]any) (api.Charger, error) {
cc := modbus.Settings{
ID: 1,
// https://github.com/evcc-io/evcc/issues/15437
Delay: 100 * time.Millisecond,
}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
return NewHeidelbergEC(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewHeidelbergEC(ctx, cc)
}
// NewHeidelbergEC creates HeidelbergEC charger
func NewHeidelbergEC(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewHeidelbergEC(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
@ -93,9 +95,6 @@ func NewHeidelbergEC(ctx context.Context, uri, device, comset string, baudrate i
current: 60, // assume min current
}
// https://github.com/evcc-io/evcc/issues/15437
conn.Delay(100 * time.Millisecond)
// disable standby to prevent comm loss
if err := wb.set(hecRegStandbyConfig, hecStandbyDisabled); err != nil {
return nil, err

View file

@ -69,12 +69,12 @@ func NewHesotecFromConfig(ctx context.Context, other map[string]any) (api.Charge
return nil, err
}
return NewHesotec(ctx, cc.URI, cc.ID)
return NewHesotec(ctx, cc)
}
// NewHesotec creates Hesotec charger
func NewHesotec(ctx context.Context, uri string, id uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewHesotec(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -67,7 +67,7 @@ func NewInnogyFromConfig(ctx context.Context, other map[string]any) (api.Charger
return nil, err
}
wb, err := NewInnogy(ctx, cc.URI, cc.ID)
wb, err := NewInnogy(ctx, cc)
if err != nil {
return nil, err
}
@ -83,8 +83,8 @@ func NewInnogyFromConfig(ctx context.Context, other map[string]any) (api.Charger
}
// NewInnogy creates a Innogy charger
func NewInnogy(ctx context.Context, uri string, id uint8) (*Innogy, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewInnogy(ctx context.Context, settings modbus.TcpSettings) (*Innogy, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -167,7 +167,7 @@ func NewKathreinFromConfig(ctx context.Context, other map[string]any) (api.Charg
return nil, err
}
wb, err := NewKathrein(ctx, cc.URI, cc.ID)
wb, err := NewKathrein(ctx, cc)
if err != nil {
return nil, err
}
@ -176,8 +176,8 @@ func NewKathreinFromConfig(ctx context.Context, other map[string]any) (api.Charg
}
// NewKathrein creates Kathrein charger
func NewKathrein(ctx context.Context, uri string, id uint8) (*Kathrein, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewKathrein(ctx context.Context, settings modbus.TcpSettings) (*Kathrein, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -89,7 +89,7 @@ func NewKebaFromConfig(ctx context.Context, other map[string]any) (api.Charger,
return nil, err
}
wb, err := NewKeba(ctx, cc.embed, cc.URI, cc.ID)
wb, err := NewKeba(ctx, cc.embed, cc.TcpSettings)
if err != nil {
return nil, err
}
@ -162,8 +162,8 @@ func NewKebaFromConfig(ctx context.Context, other map[string]any) (api.Charger,
}
// NewKeba creates a new charger
func NewKeba(ctx context.Context, embed embed, uri string, slaveID uint8) (*Keba, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewKeba(ctx context.Context, embed embed, settings modbus.TcpSettings) (*Keba, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -70,12 +70,12 @@ func NewKSEFromConfig(ctx context.Context, other map[string]any) (api.Charger, e
return nil, err
}
return NewKSE(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.ID)
return NewKSE(ctx, cc)
}
// NewKSE creates KSE charger
func NewKSE(ctx context.Context, uri, device, comset string, baudrate int, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, modbus.Rtu, slaveID)
func NewKSE(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
conn, err := settings.Connection(ctx, modbus.Rtu)
if err != nil {
return nil, err
}

View file

@ -71,35 +71,26 @@ func init() {
// NewMennekesCompactFromConfig creates a new Mennekes ModbusTCP charger
func NewMennekesCompactFromConfig(ctx context.Context, other map[string]any) (api.Charger, error) {
cc := struct {
modbus.Settings `mapstructure:",squash"`
Timeout time.Duration
}{
Settings: modbus.Settings{
Baudrate: 57600,
Comset: "8N2",
ID: 50,
},
cc := modbus.Settings{
Baudrate: 57600,
Comset: "8N2",
ID: 50,
}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
return NewMennekesCompact(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Settings.Protocol(), cc.ID, cc.Timeout)
return NewMennekesCompact(ctx, cc)
}
// NewMennekesCompact creates Mennekes charger
func NewMennekesCompact(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8, timeout time.Duration) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewMennekesCompact(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
if timeout > 0 {
conn.Timeout(timeout)
}
if !sponsor.IsAuthorized() {
return nil, api.ErrSponsorRequired
}

View file

@ -62,14 +62,12 @@ func NewMennekesHcc3FromConfig(ctx context.Context, other map[string]any) (api.C
return nil, err
}
return NewMennekesHcc3(ctx, cc.URI, cc.ID)
return NewMennekesHcc3(ctx, cc)
}
// NewMennekesHcc3 creates Mennekes HCC3 charger
func NewMennekesHcc3(ctx context.Context, uri string, slaveID uint8) (api.Charger, error) {
uri = util.DefaultPort(uri, 502)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewMennekesHcc3(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -97,12 +97,12 @@ func newMyPvFromConfig(ctx context.Context, name string, other map[string]any, s
return nil, err
}
return NewMyPv(ctx, name, cc.URI, cc.ID, cc.TempSource, statusC, cc.Scale)
return NewMyPv(ctx, name, cc.TcpSettings, cc.TempSource, statusC, cc.Scale)
}
// NewMyPv creates myPV AC Elwa 2 or Thor charger
func NewMyPv(ctx context.Context, name, uri string, slaveID uint8, tempSource int, statusC uint16, scale float64) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewMyPv(ctx context.Context, name string, settings modbus.TcpSettings, tempSource int, statusC uint16, scale float64) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -84,7 +84,7 @@ func NewNRGKickGen2FromConfig(ctx context.Context, other map[string]any) (api.Ch
return nil, err
}
nrg, err := NewNRGKickGen2(ctx, cc.URI, cc.ID)
nrg, err := NewNRGKickGen2(ctx, cc.TcpSettings)
if err != nil {
return nil, err
}
@ -102,8 +102,8 @@ func NewNRGKickGen2FromConfig(ctx context.Context, other map[string]any) (api.Ch
}
// NewNRGKickGen2 creates NRGKickGen2 charger
func NewNRGKickGen2(ctx context.Context, uri string, slaveID uint8) (*NRGKickGen2, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewNRGKickGen2(ctx context.Context, settings modbus.TcpSettings) (*NRGKickGen2, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -40,12 +40,12 @@ func NewOboFromConfig(ctx context.Context, other map[string]any) (api.Charger, e
return nil, err
}
return NewObo(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewObo(ctx, cc)
}
// NewObo creates OBO Bettermann charger
func NewObo(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewObo(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -61,7 +61,7 @@ func NewOpenWB20FromConfig(ctx context.Context, other map[string]any) (api.Charg
return nil, err
}
wb, err := NewOpenWB20(ctx, cc.URI, cc.ID, cc.Connector)
wb, err := NewOpenWB20(ctx, cc.TcpSettings, cc.Connector)
if err != nil {
return nil, err
}
@ -78,10 +78,10 @@ func NewOpenWB20FromConfig(ctx context.Context, other map[string]any) (api.Charg
}
// NewOpenWB20 creates OpenWB20 charger
func NewOpenWB20(ctx context.Context, uri string, slaveID uint8, connector uint16) (*OpenWB20, error) {
uri = util.DefaultPort(uri, 1502)
func NewOpenWB20(ctx context.Context, settings modbus.TcpSettings, connector uint16) (*OpenWB20, error) {
settings.URI = util.DefaultPort(settings.URI, 1502)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -59,6 +59,7 @@ func NewOpenWbNativeFromConfig(ctx context.Context, other map[string]any) (api.C
Baudrate: 9600,
Comset: "8N1",
ID: 1,
Delay: 200 * time.Millisecond,
},
}
@ -73,14 +74,14 @@ func NewOpenWbNativeFromConfig(ctx context.Context, other map[string]any) (api.C
return nil, fmt.Errorf("invalid cpwait value: %v, needs to be greater than %s", cc.CpWait, minCpWaitTime)
}
return NewOpenWbNative(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID, cc.Phases1p3p, cc.RfId, cc.CpWait, cc.Connector, cc.Chip)
return NewOpenWbNative(ctx, cc.Settings, cc.Phases1p3p, cc.RfId, cc.CpWait, cc.Connector, cc.Chip)
}
// NewOpenWbNative creates OpenWbNative charger
func NewOpenWbNative(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8, hasPhases1p3p bool, rfIdVidPid string, cpWait time.Duration, connector int, chip string) (api.Charger, error) {
func NewOpenWbNative(ctx context.Context, settings modbus.Settings, hasPhases1p3p bool, rfIdVidPid string, cpWait time.Duration, connector int, chip string) (api.Charger, error) {
log := util.NewLogger("openwb-native")
evse, err := NewEvseDIN(ctx, uri, device, comset, baudrate, proto, slaveID)
evse, err := NewEvseDIN(ctx, settings)
if err != nil {
return nil, err
}

View file

@ -82,12 +82,12 @@ func NewPeblarFromConfig(ctx context.Context, other map[string]any) (api.Charger
return nil, err
}
return NewPeblar(ctx, cc.URI, cc.ID)
return NewPeblar(ctx, cc)
}
// NewPeblar creates Peblar charger
func NewPeblar(ctx context.Context, uri string, id uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewPeblar(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -65,7 +65,7 @@ func NewPhoenixCharxFromConfig(ctx context.Context, other map[string]any) (api.C
return nil, err
}
wb, err := NewPhoenixCharx(ctx, cc.URI, cc.ID, cc.Connector)
wb, err := NewPhoenixCharx(ctx, cc.TcpSettings, cc.Connector)
if err != nil {
return nil, err
}
@ -86,8 +86,8 @@ func NewPhoenixCharxFromConfig(ctx context.Context, other map[string]any) (api.C
}
// NewPhoenixCharx creates a Phoenix charger
func NewPhoenixCharx(ctx context.Context, uri string, id uint8, connector uint16) (*PhoenixCharx, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewPhoenixCharx(ctx context.Context, settings modbus.TcpSettings, connector uint16) (*PhoenixCharx, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -46,7 +46,7 @@ func NewPhoenixEMEthFromConfig(ctx context.Context, other map[string]any) (api.C
return nil, err
}
wb, err := NewPhoenixEMEth(ctx, cc.URI, cc.ID)
wb, err := NewPhoenixEMEth(ctx, cc)
if err != nil {
return nil, err
}
@ -63,8 +63,8 @@ func NewPhoenixEMEthFromConfig(ctx context.Context, other map[string]any) (api.C
}
// NewPhoenixEMEth creates a Phoenix charger
func NewPhoenixEMEth(ctx context.Context, uri string, slaveID uint8) (*PhoenixEMEth, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewPhoenixEMEth(ctx context.Context, settings modbus.TcpSettings) (*PhoenixEMEth, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -79,12 +79,12 @@ func NewPhoenixEVEthFromConfig(ctx context.Context, other map[string]any) (api.C
return nil, err
}
return NewPhoenixEVEth(ctx, cc.URI, cc.ID, cc.MilliCurrentSupported)
return NewPhoenixEVEth(ctx, cc.TcpSettings, cc.MilliCurrentSupported)
}
// NewPhoenixEVEth creates a PhoenixEVEth charger
func NewPhoenixEVEth(ctx context.Context, uri string, slaveID uint8, milliCurrentSupported bool) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewPhoenixEVEth(ctx context.Context, settings modbus.TcpSettings, milliCurrentSupported bool) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -35,12 +35,12 @@ func NewPhoenixEVSerFromConfig(ctx context.Context, other map[string]any) (api.C
return nil, err
}
return NewPhoenixEVSer(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewPhoenixEVSer(ctx, cc)
}
// NewPhoenixEVSer creates a Phoenix charger
func NewPhoenixEVSer(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, id uint8) (*PhoenixEVSer, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, id)
func NewPhoenixEVSer(ctx context.Context, settings modbus.Settings) (*PhoenixEVSer, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -21,7 +21,6 @@ import (
"context"
"encoding/binary"
"fmt"
"time"
"github.com/evcc-io/evcc/api"
"github.com/evcc-io/evcc/util"
@ -55,7 +54,6 @@ func NewPrachtAlphaFromConfig(ctx context.Context, other map[string]any) (api.Ch
cc := struct {
Connector uint16
modbus.Settings `mapstructure:",squash"`
Timeout time.Duration
}{
Connector: 1,
Settings: modbus.Settings{
@ -67,20 +65,16 @@ func NewPrachtAlphaFromConfig(ctx context.Context, other map[string]any) (api.Ch
return nil, err
}
return NewPrachtAlpha(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Settings.Protocol(), cc.ID, cc.Timeout, cc.Connector)
return NewPrachtAlpha(ctx, cc.Settings, cc.Connector)
}
// NewPrachtAlpha creates PrachtAlpha charger
func NewPrachtAlpha(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8, timeout time.Duration, vehicle uint16) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewPrachtAlpha(ctx context.Context, settings modbus.Settings, vehicle uint16) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}
if timeout > 0 {
conn.Timeout(timeout)
}
if !sponsor.IsAuthorized() {
return nil, api.ErrSponsorRequired
}

View file

@ -63,7 +63,7 @@ func NewPulsaresFromConfig(ctx context.Context, other map[string]any) (api.Charg
return nil, err
}
wb, err := NewPulsares(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
wb, err := NewPulsares(ctx, cc)
if err != nil {
return nil, err
}
@ -76,8 +76,8 @@ func NewPulsaresFromConfig(ctx context.Context, other map[string]any) (api.Charg
}
// NewPulsares creates Pulsares charger
func NewPulsares(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (*Pulsares, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewPulsares(ctx context.Context, settings modbus.Settings) (*Pulsares, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -62,12 +62,12 @@ func NewRaedianFromConfig(ctx context.Context, other map[string]any) (api.Charge
return nil, err
}
return NewRaedian(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewRaedian(ctx, cc)
}
// NewRaedian creates Raedian charger
func NewRaedian(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (*Raedian, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewRaedian(ctx context.Context, settings modbus.Settings) (*Raedian, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -71,12 +71,12 @@ func NewSchneiderV3FromConfig(ctx context.Context, other map[string]any) (api.Ch
return nil, err
}
return NewSchneiderV3(ctx, cc.URI, cc.ID)
return NewSchneiderV3(ctx, cc)
}
// NewSchneiderV3 creates Schneider charger
func NewSchneiderV3(ctx context.Context, uri string, id uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewSchneiderV3(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -57,12 +57,12 @@ func NewSigenergyFromConfig(ctx context.Context, other map[string]any) (api.Char
return nil, err
}
return NewSigenergy(ctx, cc.URI, cc.ID)
return NewSigenergy(ctx, cc)
}
// NewSigenergy creates a new charger
func NewSigenergy(ctx context.Context, uri string, slaveID uint8) (*Sigenergy, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewSigenergy(ctx context.Context, settings modbus.TcpSettings) (*Sigenergy, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -79,12 +79,12 @@ func NewsmartEVSEFromConfig(ctx context.Context, other map[string]any) (api.Char
return nil, err
}
return NewsmartEVSE(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewsmartEVSE(ctx, cc)
}
// NewsmartEVSE creates a new charger
func NewsmartEVSE(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (*smartEVSE, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
func NewsmartEVSE(ctx context.Context, settings modbus.Settings) (*smartEVSE, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -96,12 +96,12 @@ func NewSolaxFromConfig(ctx context.Context, other map[string]any, isLegacyHw bo
return nil, err
}
return NewSolax(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID, isLegacyHw)
return NewSolax(ctx, cc, isLegacyHw)
}
// NewSolax creates Solax charger
func NewSolax(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, id uint8, isLegacyHw bool) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, id)
func NewSolax(ctx context.Context, settings modbus.Settings, isLegacyHw bool) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -77,12 +77,12 @@ func NewSungrowFromConfig(ctx context.Context, other map[string]any) (api.Charge
return nil, err
}
return NewSungrow(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewSungrow(ctx, cc)
}
// NewSungrow creates Sungrow charger
func NewSungrow(ctx context.Context, uri, device, comset string, baudrate int, proto modbus.Protocol, id uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, id)
func NewSungrow(ctx context.Context, settings modbus.Settings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -69,12 +69,12 @@ func NewVersichargeFromConfig(ctx context.Context, other map[string]any) (api.Ch
return nil, err
}
return NewVersicharge(ctx, cc.URI, cc.ID)
return NewVersicharge(ctx, cc)
}
// NewVersicharge creates a Versicharge charger
func NewVersicharge(ctx context.Context, uri string, id uint8) (*Versicharge, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewVersicharge(ctx context.Context, settings modbus.TcpSettings) (*Versicharge, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -81,12 +81,12 @@ func NewVestelFromConfig(ctx context.Context, other map[string]any) (api.Charger
return nil, err
}
return NewVestel(ctx, cc.URI, cc.ID)
return NewVestel(ctx, cc)
}
// NewVestel creates a Vestel charger
func NewVestel(ctx context.Context, uri string, id uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewVestel(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -98,12 +98,12 @@ func NewVictronFromConfig(ctx context.Context, other map[string]any, regs victro
return nil, err
}
return NewVictron(ctx, cc.URI, cc.ID, regs)
return NewVictron(ctx, cc, regs)
}
// NewVictron creates Victron charger
func NewVictron(ctx context.Context, uri string, slaveID uint8, regs victronRegs) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewVictron(ctx context.Context, settings modbus.TcpSettings, regs victronRegs) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -61,24 +61,20 @@ func init() {
// NewVoltieFromConfig creates a Voltie charger from generic config
func NewVoltieFromConfig(ctx context.Context, other map[string]any) (api.Charger, error) {
cc := struct {
modbus.TcpSettings `mapstructure:",squash"`
}{
TcpSettings: modbus.TcpSettings{
ID: 1,
},
cc := modbus.TcpSettings{
ID: 1,
}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
return NewVoltie(ctx, cc.URI, cc.ID)
return NewVoltie(ctx, cc)
}
// NewVoltie creates a Voltie charger
func NewVoltie(ctx context.Context, uri string, slaveID uint8) (*Voltie, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
func NewVoltie(ctx context.Context, settings modbus.TcpSettings) (*Voltie, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -65,12 +65,12 @@ func NewWebastoNextFromConfig(ctx context.Context, other map[string]any) (api.Ch
return nil, err
}
return NewWebastoNext(ctx, cc.URI, cc.ID)
return NewWebastoNext(ctx, cc)
}
// NewWebastoNext creates WebastoNext charger
func NewWebastoNext(ctx context.Context, uri string, id uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewWebastoNext(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}

View file

@ -69,12 +69,12 @@ func NewWeidmüllerFromConfig(ctx context.Context, other map[string]any) (api.Ch
return nil, err
}
return NewWeidmüller(ctx, cc.URI, cc.ID)
return NewWeidmüller(ctx, cc)
}
// NewWeidmüller creates Weidmüller charger
func NewWeidmüller(ctx context.Context, uri string, id uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
func NewWeidmüller(ctx context.Context, settings modbus.TcpSettings) (api.Charger, error) {
conn, err := settings.Connection(ctx)
if err != nil {
return nil, err
}