Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Modbus: use context #19301

Merged
merged 2 commits into from
Mar 1, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions charger/abb.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package charger
// SOFTWARE.

import (
"context"
"encoding/binary"
"fmt"
"time"
Expand Down Expand Up @@ -52,11 +53,11 @@ const (
)

func init() {
registry.Add("abb", NewABBFromConfig)
registry.AddCtx("abb", NewABBFromConfig)
}

// NewABBFromConfig creates a ABB charger from generic config
func NewABBFromConfig(other map[string]interface{}) (api.Charger, error) {
func NewABBFromConfig(ctx context.Context, other map[string]interface{}) (api.Charger, error) {
cc := modbus.Settings{
ID: 1,
}
Expand All @@ -65,12 +66,12 @@ func NewABBFromConfig(other map[string]interface{}) (api.Charger, error) {
return nil, err
}

return NewABB(cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewABB(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
}

// NewABB creates ABB charger
func NewABB(uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(uri, device, comset, baudrate, proto, slaveID)
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)
if err != nil {
return nil, err
}
Expand Down
11 changes: 6 additions & 5 deletions charger/abl-em4.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package charger
// SOFTWARE.

import (
"context"
"encoding/binary"
"fmt"

Expand Down Expand Up @@ -48,11 +49,11 @@ type AblEm4 struct {
}

func init() {
registry.Add("abl-em4", NewAblEm4FromConfig)
registry.AddCtx("abl-em4", NewAblEm4FromConfig)
}

// NewAblEm4FromConfig creates an ABL eM4 charger from generic config
func NewAblEm4FromConfig(other map[string]interface{}) (api.Charger, error) {
func NewAblEm4FromConfig(ctx context.Context, other map[string]interface{}) (api.Charger, error) {
cc := struct {
modbus.TcpSettings `mapstructure:",squash"`
Connector uint16
Expand All @@ -67,12 +68,12 @@ func NewAblEm4FromConfig(other map[string]interface{}) (api.Charger, error) {
return nil, err
}

return NewAblEm4(cc.URI, cc.ID, cc.Connector)
return NewAblEm4(ctx, cc.URI, cc.ID, cc.Connector)
}

// NewAblEm4 creates an ABL eM4 charger
func NewAblEm4(uri string, id uint8, connector uint16) (*AblEm4, error) {
conn, err := modbus.NewConnection(uri, "", "", 0, modbus.Tcp, id)
func NewAblEm4(ctx context.Context, uri string, id uint8, connector uint16) (*AblEm4, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
if err != nil {
return nil, err
}
Expand Down
11 changes: 6 additions & 5 deletions charger/abl.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package charger
// SOFTWARE.

import (
"context"
"encoding/binary"
"fmt"
"time"
Expand Down Expand Up @@ -73,13 +74,13 @@ var ablStatus = map[byte]string{
}

func init() {
registry.Add("abl", NewABLeMHFromConfig)
registry.AddCtx("abl", NewABLeMHFromConfig)
}

// https://www.goingelectric.de/forum/viewtopic.php?p=1550459#p1550459

// NewABLeMHFromConfig creates a ABLeMH charger from generic config
func NewABLeMHFromConfig(other map[string]interface{}) (api.Charger, error) {
func NewABLeMHFromConfig(ctx context.Context, other map[string]interface{}) (api.Charger, error) {
cc := struct {
modbus.Settings `mapstructure:",squash"`
Timeout time.Duration
Expand All @@ -93,14 +94,14 @@ func NewABLeMHFromConfig(other map[string]interface{}) (api.Charger, error) {
return nil, err
}

return NewABLeMH(cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.ID, cc.Timeout)
return NewABLeMH(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.ID, cc.Timeout)
}

//go:generate go tool decorate -f decorateABLeMH -b *ABLeMH -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)"

// NewABLeMH creates ABLeMH charger
func NewABLeMH(uri, device, comset string, baudrate int, slaveID uint8, timeout time.Duration) (api.Charger, error) {
conn, err := modbus.NewConnection(uri, device, comset, baudrate, modbus.Ascii, slaveID)
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)
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion charger/alfen.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func NewAlfenFromConfig(ctx context.Context, other map[string]interface{}) (api.

// NewAlfen creates Alfen charger
func NewAlfen(ctx context.Context, uri string, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(uri, "", "", 0, modbus.Tcp, slaveID)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
if err != nil {
return nil, err
}
Expand Down
11 changes: 6 additions & 5 deletions charger/alphatec.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package charger
// SOFTWARE.

import (
"context"
"encoding/binary"
"fmt"
"time"
Expand All @@ -42,11 +43,11 @@ const (
)

func init() {
registry.Add("alphatec", NewAlphatecFromConfig)
registry.AddCtx("alphatec", NewAlphatecFromConfig)
}

// NewAlphatecFromConfig creates a Alphatec charger from generic config
func NewAlphatecFromConfig(other map[string]interface{}) (api.Charger, error) {
func NewAlphatecFromConfig(ctx context.Context, other map[string]interface{}) (api.Charger, error) {
cc := modbus.Settings{
ID: 1,
}
Expand All @@ -55,12 +56,12 @@ func NewAlphatecFromConfig(other map[string]interface{}) (api.Charger, error) {
return nil, err
}

return NewAlphatec(cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
return NewAlphatec(ctx, cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.Protocol(), cc.ID)
}

// NewAlphatec creates Alphatec charger
func NewAlphatec(uri, device, comset string, baudrate int, proto modbus.Protocol, slaveID uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(uri, device, comset, baudrate, proto, slaveID)
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)
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion charger/amperfied.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ func NewAmperfiedFromConfig(ctx context.Context, other map[string]interface{}) (

// NewAmperfied creates Amperfied charger
func NewAmperfied(ctx context.Context, uri string, slaveID uint8, phases bool) (api.Charger, error) {
conn, err := modbus.NewConnection(uri, "", "", 0, modbus.Tcp, slaveID)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
if err != nil {
return nil, err
}
Expand Down
11 changes: 6 additions & 5 deletions charger/bender.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ package charger
// * Set 'Allow UID Disclose' to On

import (
"context"
"encoding/binary"
"fmt"
"math"
Expand Down Expand Up @@ -68,11 +69,11 @@ const (
)

func init() {
registry.Add("bender", NewBenderCCFromConfig)
registry.AddCtx("bender", NewBenderCCFromConfig)
}

// NewBenderCCFromConfig creates a BenderCC charger from generic config
func NewBenderCCFromConfig(other map[string]interface{}) (api.Charger, error) {
func NewBenderCCFromConfig(ctx context.Context, other map[string]interface{}) (api.Charger, error) {
cc := modbus.TcpSettings{
ID: 255,
}
Expand All @@ -81,14 +82,14 @@ func NewBenderCCFromConfig(other map[string]interface{}) (api.Charger, error) {
return nil, err
}

return NewBenderCC(cc.URI, cc.ID)
return NewBenderCC(ctx, cc.URI, cc.ID)
}

//go:generate go tool decorate -f decorateBenderCC -b *BenderCC -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseVoltages,Voltages,func() (float64, float64, float64, error)" -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.Battery,Soc,func() (float64, error)" -t "api.Identifier,Identify,func() (string, error)"

// NewBenderCC creates BenderCC charger
func NewBenderCC(uri string, id uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(uri, "", "", 0, modbus.Tcp, id)
func NewBenderCC(ctx context.Context, uri string, id uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
if err != nil {
return nil, err
}
Expand Down
11 changes: 6 additions & 5 deletions charger/cfos.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package charger

import (
"context"
"encoding/binary"
"fmt"

Expand Down Expand Up @@ -34,13 +35,13 @@ type CfosPowerBrain struct {
}

func init() {
registry.Add("cfos", NewCfosPowerBrainFromConfig)
registry.AddCtx("cfos", NewCfosPowerBrainFromConfig)
}

//go:generate go tool decorate -f decorateCfos -b *CfosPowerBrain -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseSwitcher,Phases1p3p,func(int) error"

// NewCfosPowerBrainFromConfig creates a cFos charger from generic config
func NewCfosPowerBrainFromConfig(other map[string]interface{}) (api.Charger, error) {
func NewCfosPowerBrainFromConfig(ctx context.Context, other map[string]interface{}) (api.Charger, error) {
cc := modbus.TcpSettings{
ID: 1,
}
Expand All @@ -49,14 +50,14 @@ func NewCfosPowerBrainFromConfig(other map[string]interface{}) (api.Charger, err
return nil, err
}

return NewCfosPowerBrain(cc.URI, cc.ID)
return NewCfosPowerBrain(ctx, cc.URI, cc.ID)
}

// NewCfosPowerBrain creates a cFos charger
func NewCfosPowerBrain(uri string, id uint8) (api.Charger, error) {
func NewCfosPowerBrain(ctx context.Context, uri string, id uint8) (api.Charger, error) {
uri = util.DefaultPort(uri, 4701)

conn, err := modbus.NewConnection(uri, "", "", 0, modbus.Tcp, id)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion charger/dadapower.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func NewDadapowerFromConfig(ctx context.Context, other map[string]interface{}) (

// NewDadapower creates a Dadapower charger
func NewDadapower(ctx context.Context, uri string, id uint8) (*Dadapower, error) {
conn, err := modbus.NewConnection(uri, "", "", 0, modbus.Tcp, id)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion charger/daheimladen-mb.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ func NewDaheimLadenMBFromConfig(ctx context.Context, other map[string]interface{

// NewDaheimLadenMB creates DaheimLadenMB charger
func NewDaheimLadenMB(ctx context.Context, uri string, id uint8) (api.Charger, error) {
conn, err := modbus.NewConnection(uri, "", "", 0, modbus.Tcp, id)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion charger/delta.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ func NewDeltaFromConfig(ctx context.Context, other map[string]interface{}) (api.

// 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(uri, device, comset, baudrate, proto, slaveID)
conn, err := modbus.NewConnection(ctx, uri, device, comset, baudrate, proto, slaveID)
if err != nil {
return nil, err
}
Expand Down
13 changes: 7 additions & 6 deletions charger/em2go.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package charger
// SOFTWARE.

import (
"context"
"encoding/binary"
"fmt"
"time"
Expand Down Expand Up @@ -62,14 +63,14 @@ const (
)

func init() {
registry.Add("em2go", NewEm2GoFromConfig)
registry.Add("em2go-home", NewEm2GoFromConfig)
registry.AddCtx("em2go", NewEm2GoFromConfig)
registry.AddCtx("em2go-home", NewEm2GoFromConfig)
}

//go:generate go tool decorate -f decorateEm2Go -b *Em2Go -r api.Charger -t "api.ChargerEx,MaxCurrentMillis,func(float64) error" -t "api.PhaseSwitcher,Phases1p3p,func(int) error" -t "api.PhaseGetter,GetPhases,func() (int, error)"

// NewEm2GoFromConfig creates a Em2Go charger from generic config
func NewEm2GoFromConfig(other map[string]interface{}) (api.Charger, error) {
func NewEm2GoFromConfig(ctx context.Context, other map[string]interface{}) (api.Charger, error) {
cc := modbus.TcpSettings{
ID: 255,
}
Expand All @@ -78,14 +79,14 @@ func NewEm2GoFromConfig(other map[string]interface{}) (api.Charger, error) {
return nil, err
}

return NewEm2Go(cc.URI, cc.ID)
return NewEm2Go(ctx, cc.URI, cc.ID)
}

// NewEm2Go creates Em2Go charger
func NewEm2Go(uri string, slaveID uint8) (api.Charger, error) {
func NewEm2Go(ctx context.Context, uri string, slaveID uint8) (api.Charger, error) {
uri = util.DefaultPort(uri, 502)

conn, err := modbus.NewConnection(uri, "", "", 0, modbus.Tcp, slaveID)
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, slaveID)
if err != nil {
return nil, err
}
Expand Down
11 changes: 6 additions & 5 deletions charger/etrel.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package charger
// SOFTWARE.

import (
"context"
"encoding/binary"
"fmt"
"math"
Expand Down Expand Up @@ -59,11 +60,11 @@ type Etrel struct {
}

func init() {
registry.Add("etrel", NewEtrelFromConfig)
registry.AddCtx("etrel", NewEtrelFromConfig)
}

// NewEtrelFromConfig creates a Etrel charger from generic config
func NewEtrelFromConfig(other map[string]interface{}) (api.Charger, error) {
func NewEtrelFromConfig(ctx context.Context, other map[string]interface{}) (api.Charger, error) {
cc := struct {
Connector int
modbus.TcpSettings `mapstructure:",squash"`
Expand All @@ -78,12 +79,12 @@ func NewEtrelFromConfig(other map[string]interface{}) (api.Charger, error) {
return nil, err
}

return NewEtrel(cc.Connector, cc.URI, cc.ID)
return NewEtrel(ctx, cc.URI, cc.ID, cc.Connector)
}

// NewEtrel creates a Etrel charger
func NewEtrel(connector int, uri string, id uint8) (*Etrel, error) {
conn, err := modbus.NewConnection(uri, "", "", 0, modbus.Tcp, id)
func NewEtrel(ctx context.Context, uri string, id uint8, connector int) (*Etrel, error) {
conn, err := modbus.NewConnection(ctx, uri, "", "", 0, modbus.Tcp, id)
if err != nil {
return nil, err
}
Expand Down
Loading
Loading