package modbus import ( "context" "fmt" "net" "github.com/andig/mbserver" "github.com/evcc-io/evcc/api" "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/modbus" "github.com/evcc-io/evcc/util/sponsor" ) func StartProxy(port int, config modbus.Settings, readOnly ReadOnlyMode) error { conn, err := config.Connection(context.Background()) if err != nil { return err } if !sponsor.IsAuthorized() { return api.ErrSponsorRequired } h := &handler{ log: util.NewLogger(fmt.Sprintf("proxy-%d", port)), readOnly: readOnly, conn: conn, } l, err := net.Listen("tcp", fmt.Sprintf(":%d", port)) if err != nil { return err } h.log.DEBUG.Printf("modbus proxy for %s listening at :%d", config.String(), port) srv, err := mbserver.New(h, mbserver.Logger(&logger{log: h.log})) if err != nil { return err } return srv.Start(l) }