diff --git a/go.mod b/go.mod index 8c8109bce..a98e4ea7e 100644 --- a/go.mod +++ b/go.mod @@ -165,7 +165,7 @@ require ( github.com/redis/go-redis/v9 v9.2.1 github.com/riemann/riemann-go-client v0.5.1-0.20211206220514-f58f10cdce16 github.com/robbiet480/go.nut v0.0.0-20220219091450-bd8f121e1fa1 - github.com/robinson/gos7 v0.0.0-20231031082500-fb5a72fd499e + github.com/robinson/gos7 v0.0.0-20240315073918-1f14519e4846 github.com/safchain/ethtool v0.3.0 github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 github.com/sensu/sensu-go/api/core/v2 v2.16.0 diff --git a/go.sum b/go.sum index 070bbb70e..269ac36e0 100644 --- a/go.sum +++ b/go.sum @@ -2071,8 +2071,8 @@ github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff h1:+6NUiITWwE5q1 github.com/robertkrimen/otto v0.0.0-20191219234010-c382bd3c16ff/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= -github.com/robinson/gos7 v0.0.0-20231031082500-fb5a72fd499e h1:Ofp6C2iX58K698sGpIXZFp3furntNlhIjeyLkcrAiek= -github.com/robinson/gos7 v0.0.0-20231031082500-fb5a72fd499e/go.mod h1:AMHIeh1KJ7Xa2RVOMHdv9jXKrpw0D4EWGGQMHLb2doc= +github.com/robinson/gos7 v0.0.0-20240315073918-1f14519e4846 h1:CnAbtX0j07ZVR/TnD5V6ypFTrASJlfr+fc4OY2da9eg= +github.com/robinson/gos7 v0.0.0-20240315073918-1f14519e4846/go.mod h1:AMHIeh1KJ7Xa2RVOMHdv9jXKrpw0D4EWGGQMHLb2doc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= diff --git a/plugins/inputs/s7comm/README.md b/plugins/inputs/s7comm/README.md index b29c3b907..0c3fc43bc 100644 --- a/plugins/inputs/s7comm/README.md +++ b/plugins/inputs/s7comm/README.md @@ -23,6 +23,10 @@ See the [CONFIGURATION.md][CONFIGURATION.md] for more details. rack = 0 slot = 0 + ## Connection or drive type of S7 protocol + ## Available options are "PD" (programming device), "OP" (operator panel) or "basic" (S7 basic communication). + # connection_type = "PD" + ## Max count of fields to be bundled in one batch-request. (PDU size) # pdu_size = 20 diff --git a/plugins/inputs/s7comm/s7comm.go b/plugins/inputs/s7comm/s7comm.go index 28f917556..bb40e33f9 100644 --- a/plugins/inputs/s7comm/s7comm.go +++ b/plugins/inputs/s7comm/s7comm.go @@ -52,6 +52,12 @@ var ( // see https://support.industry.siemens.com/cs/document/36479/date_and_time-format-for-s7-?dti=0&lc=en-DE "DT": 0x0F, // Date and time (7 byte) } + + connectionTypeMap = map[string]int{ + "PD": 1, + "OP": 2, + "basic": 3, + } ) type metricFieldDefinition struct { @@ -84,6 +90,7 @@ type S7comm struct { Server string `toml:"server"` Rack int `toml:"rack"` Slot int `toml:"slot"` + ConnectionType string `toml:"connection_type"` BatchMaxSize int `toml:"pdu_size"` Timeout config.Duration `toml:"timeout"` DebugConnection bool `toml:"debug_connection"` @@ -113,6 +120,12 @@ func (s *S7comm) Init() error { if s.Slot < 0 { return errors.New("'slot' has to be specified") } + if s.ConnectionType == "" { + s.ConnectionType = "PD" + } + if _, found := connectionTypeMap[s.ConnectionType]; !found { + return fmt.Errorf("invalid 'connection_type' %q", s.ConnectionType) + } if len(s.Configs) == 0 { return errors.New("no metric defined") } @@ -127,7 +140,7 @@ func (s *S7comm) Init() error { } // Create handler for the connection - s.handler = gos7.NewTCPClientHandler(s.Server, s.Rack, s.Slot) + s.handler = gos7.NewTCPClientHandlerWithConnectType(s.Server, s.Rack, s.Slot, connectionTypeMap[s.ConnectionType]) s.handler.Timeout = time.Duration(s.Timeout) if s.DebugConnection { s.handler.Logger = log.New(os.Stderr, "D! [inputs.s7comm]", log.LstdFlags) diff --git a/plugins/inputs/s7comm/sample.conf b/plugins/inputs/s7comm/sample.conf index 42d3eb0bd..1d5eb4929 100644 --- a/plugins/inputs/s7comm/sample.conf +++ b/plugins/inputs/s7comm/sample.conf @@ -7,6 +7,10 @@ rack = 0 slot = 0 + ## Connection or drive type of S7 protocol + ## Available options are "PD" (programming device), "OP" (operator panel) or "basic" (S7 basic communication). + # connection_type = "PD" + ## Max count of fields to be bundled in one batch-request. (PDU size) # pdu_size = 20