Modbus: unify delay and timeout settings (BC) (#31996)
This commit is contained in:
parent
ff2905a366
commit
02a66252ca
82 changed files with 410 additions and 369 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue