Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
e393c3af3f
commit
4978089aab
4963 changed files with 677545 additions and 0 deletions
390
plugins/inputs/ctrlx_datalayer/README.md
Normal file
390
plugins/inputs/ctrlx_datalayer/README.md
Normal file
|
@ -0,0 +1,390 @@
|
|||
# Bosch Rexroth ctrlX Data Layer Input Plugin
|
||||
|
||||
This plugin gathers data from the [ctrlX Data Layer][ctrlx] a communication
|
||||
middleware running on Bosch Rexroth's [ctrlX CORE devices][core_devs]. The
|
||||
platform is used for professional automation applications like industrial
|
||||
automation, building automation, robotics, IoT Gateways or as classical PLC.
|
||||
|
||||
⭐ Telegraf v1.27.0
|
||||
🏷️ iot, messaging
|
||||
💻 all
|
||||
|
||||
[ctrlx]: https://ctrlx-automation.com
|
||||
[core_devs]: https://ctrlx-core.com
|
||||
|
||||
## Global configuration options <!-- @/docs/includes/plugin_config.md -->
|
||||
|
||||
In addition to the plugin-specific configuration settings, plugins support
|
||||
additional global and plugin configuration settings. These settings are used to
|
||||
modify metrics, tags, and field or create aliases and configure ordering, etc.
|
||||
See the [CONFIGURATION.md][CONFIGURATION.md] for more details.
|
||||
|
||||
[CONFIGURATION.md]: ../../../docs/CONFIGURATION.md#plugins
|
||||
|
||||
## Configuration
|
||||
|
||||
```toml @sample.conf
|
||||
# A ctrlX Data Layer server sent event input plugin
|
||||
[[inputs.ctrlx_datalayer]]
|
||||
## Hostname or IP address of the ctrlX CORE Data Layer server
|
||||
## example: server = "localhost" # Telegraf is running directly on the device
|
||||
## server = "192.168.1.1" # Connect to ctrlX CORE remote via IP
|
||||
## server = "host.example.com" # Connect to ctrlX CORE remote via hostname
|
||||
## server = "10.0.2.2:8443" # Connect to ctrlX CORE Virtual from development environment
|
||||
server = "localhost"
|
||||
|
||||
## Authentication credentials
|
||||
username = "boschrexroth"
|
||||
password = "boschrexroth"
|
||||
|
||||
## Use TLS but skip chain & host verification
|
||||
# insecure_skip_verify = false
|
||||
|
||||
## Timeout for HTTP requests. (default: "10s")
|
||||
# timeout = "10s"
|
||||
|
||||
|
||||
## Create a ctrlX Data Layer subscription.
|
||||
## It is possible to define multiple subscriptions per host. Each subscription can have its own
|
||||
## sampling properties and a list of nodes to subscribe to.
|
||||
## All subscriptions share the same credentials.
|
||||
[[inputs.ctrlx_datalayer.subscription]]
|
||||
## The name of the measurement. (default: "ctrlx")
|
||||
measurement = "memory"
|
||||
|
||||
## Configure the ctrlX Data Layer nodes which should be subscribed.
|
||||
## address - node address in ctrlX Data Layer (mandatory)
|
||||
## name - field name to use in the output (optional, default: base name of address)
|
||||
## tags - extra node tags to be added to the output metric (optional)
|
||||
## Note:
|
||||
## Use either the inline notation or the bracketed notation, not both.
|
||||
## The tags property is only supported in bracketed notation due to toml parser restrictions
|
||||
## Examples:
|
||||
## Inline notation
|
||||
nodes=[
|
||||
{name="available", address="framework/metrics/system/memavailable-mb"},
|
||||
{name="used", address="framework/metrics/system/memused-mb"},
|
||||
]
|
||||
## Bracketed notation
|
||||
# [[inputs.ctrlx_datalayer.subscription.nodes]]
|
||||
# name ="available"
|
||||
# address="framework/metrics/system/memavailable-mb"
|
||||
# ## Define extra tags related to node to be added to the output metric (optional)
|
||||
# [inputs.ctrlx_datalayer.subscription.nodes.tags]
|
||||
# node_tag1="node_tag1"
|
||||
# node_tag2="node_tag2"
|
||||
# [[inputs.ctrlx_datalayer.subscription.nodes]]
|
||||
# name ="used"
|
||||
# address="framework/metrics/system/memused-mb"
|
||||
|
||||
## The switch "output_json_string" enables output of the measurement as json.
|
||||
## That way it can be used in in a subsequent processor plugin, e.g. "Starlark Processor Plugin".
|
||||
# output_json_string = false
|
||||
|
||||
## Define extra tags related to subscription to be added to the output metric (optional)
|
||||
# [inputs.ctrlx_datalayer.subscription.tags]
|
||||
# subscription_tag1 = "subscription_tag1"
|
||||
# subscription_tag2 = "subscription_tag2"
|
||||
|
||||
## The interval in which messages shall be sent by the ctrlX Data Layer to this plugin. (default: 1s)
|
||||
## Higher values reduce load on network by queuing samples on server side and sending as a single TCP packet.
|
||||
# publish_interval = "1s"
|
||||
|
||||
## The interval a "keepalive" message is sent if no change of data occurs. (default: 60s)
|
||||
## Only used internally to detect broken network connections.
|
||||
# keep_alive_interval = "60s"
|
||||
|
||||
## The interval an "error" message is sent if an error was received from a node. (default: 10s)
|
||||
## Higher values reduce load on output target and network in case of errors by limiting frequency of error messages.
|
||||
# error_interval = "10s"
|
||||
|
||||
## The interval that defines the fastest rate at which the node values should be sampled and values captured. (default: 1s)
|
||||
## The sampling frequency should be adjusted to the dynamics of the signal to be sampled.
|
||||
## Higher sampling frequencies increases load on ctrlX Data Layer.
|
||||
## The sampling frequency can be higher, than the publish interval. Captured samples are put in a queue and sent in publish interval.
|
||||
## Note: The minimum sampling interval can be overruled by a global setting in the ctrlX Data Layer configuration ('datalayer/subscriptions/settings').
|
||||
# sampling_interval = "1s"
|
||||
|
||||
## The requested size of the node value queue. (default: 10)
|
||||
## Relevant if more values are captured than can be sent.
|
||||
# queue_size = 10
|
||||
|
||||
## The behaviour of the queue if it is full. (default: "DiscardOldest")
|
||||
## Possible values:
|
||||
## - "DiscardOldest"
|
||||
## The oldest value gets deleted from the queue when it is full.
|
||||
## - "DiscardNewest"
|
||||
## The newest value gets deleted from the queue when it is full.
|
||||
# queue_behaviour = "DiscardOldest"
|
||||
|
||||
## The filter when a new value will be sampled. (default: 0.0)
|
||||
## Calculation rule: If (abs(lastCapturedValue - newValue) > dead_band_value) capture(newValue).
|
||||
# dead_band_value = 0.0
|
||||
|
||||
## The conditions on which a sample should be captured and thus will be sent as a message. (default: "StatusValue")
|
||||
## Possible values:
|
||||
## - "Status"
|
||||
## Capture the value only, when the state of the node changes from or to error state. Value changes are ignored.
|
||||
## - "StatusValue"
|
||||
## Capture when the value changes or the node changes from or to error state.
|
||||
## See also 'dead_band_value' for what is considered as a value change.
|
||||
## - "StatusValueTimestamp":
|
||||
## Capture even if the value is the same, but the timestamp of the value is newer.
|
||||
## Note: This might lead to high load on the network because every sample will be sent as a message
|
||||
## even if the value of the node did not change.
|
||||
# value_change = "StatusValue"
|
||||
|
||||
```
|
||||
|
||||
## Metrics
|
||||
|
||||
All measurements are tagged with the server address of the device and the
|
||||
corresponding node address as defined in the ctrlX Data Layer.
|
||||
|
||||
- measurement name
|
||||
- tags:
|
||||
- `source` (ctrlX Data Layer server where the metrics are gathered from)
|
||||
- `node` (Address of the ctrlX Data Layer node)
|
||||
- fields:
|
||||
- `{name}` (for nodes with simple data types)
|
||||
- `{name}_{index}`(for nodes with array data types)
|
||||
- `{name}_{jsonflat.key}` (for nodes with object data types)
|
||||
|
||||
### Output Format
|
||||
|
||||
The switch "output_json_string" determines the format of the output metric.
|
||||
|
||||
#### Output default format
|
||||
|
||||
With the output default format
|
||||
|
||||
```toml
|
||||
output_json_string=false
|
||||
```
|
||||
|
||||
the output is formatted automatically as follows depending on the data type:
|
||||
|
||||
##### Simple data type
|
||||
|
||||
The value is passed 'as it is' to a metric with pattern:
|
||||
|
||||
```text
|
||||
{name}={value}
|
||||
```
|
||||
|
||||
Simple data types of ctrlX Data Layer:
|
||||
|
||||
```text
|
||||
bool8,int8,uint8,int16,uint16,int32,uint32,int64,uint64,float,double,string,timestamp
|
||||
```
|
||||
|
||||
##### Array data type
|
||||
|
||||
Every value in the array is passed to a metric with pattern:
|
||||
|
||||
```text
|
||||
{name}_{index}={value[index]}
|
||||
```
|
||||
|
||||
example:
|
||||
|
||||
```text
|
||||
myarray=[1,2,3] -> myarray_1=1, myarray_2=2, myarray_3=3
|
||||
```
|
||||
|
||||
Array data types of ctrlX Data Layer:
|
||||
|
||||
```text
|
||||
arbool8,arint8,aruint8,arint16,aruint16,arint32,aruint32,arint64,aruint64,arfloat,ardouble,arstring,artimestamp
|
||||
```
|
||||
|
||||
##### Object data type (JSON)
|
||||
|
||||
Every value of the flattened json is passed to a metric with pattern:
|
||||
|
||||
```text
|
||||
{name}_{jsonflat.key}={jsonflat.value}
|
||||
```
|
||||
|
||||
example:
|
||||
|
||||
```text
|
||||
myobj={"a":1,"b":2,"c":{"d": 3}} -> myobj_a=1, myobj_b=2, myobj_c_d=3
|
||||
```
|
||||
|
||||
#### Output JSON format
|
||||
|
||||
With the output JSON format
|
||||
|
||||
```toml
|
||||
output_json_string=true
|
||||
```
|
||||
|
||||
the output is formatted as JSON string:
|
||||
|
||||
```text
|
||||
{name}="{value}"
|
||||
```
|
||||
|
||||
examples:
|
||||
|
||||
```text
|
||||
input=true -> output="true"
|
||||
```
|
||||
|
||||
```text
|
||||
input=[1,2,3] -> output="[1,2,3]"
|
||||
```
|
||||
|
||||
```text
|
||||
input={"x":4720,"y":9440,"z":{"d": 14160}} -> output="{\"x\":4720,\"y\":9440,\"z\":14160}"
|
||||
```
|
||||
|
||||
The JSON output string can be passed to a processor plugin for transformation
|
||||
e.g. [Parser Processor Plugin][PARSER.md]
|
||||
or [Starlark Processor Plugin][STARLARK.md]
|
||||
|
||||
[PARSER.md]: ../../processors/parser/README.md
|
||||
[STARLARK.md]: ../../processors/starlark/README.md
|
||||
|
||||
example:
|
||||
|
||||
```toml
|
||||
[[inputs.ctrlx_datalayer.subscription]]
|
||||
measurement = "osci"
|
||||
nodes = [
|
||||
{address="oscilloscope/instances/Osci_PLC/rec-values/allsignals"},
|
||||
]
|
||||
output_json_string = true
|
||||
|
||||
[[processors.starlark]]
|
||||
namepass = [
|
||||
'osci',
|
||||
]
|
||||
script = "oscilloscope.star"
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
This plugin was contributed by
|
||||
[Bosch Rexroth](https://www.boschrexroth.com).
|
||||
For questions regarding ctrlX AUTOMATION and this plugin feel
|
||||
free to check out and be part of the
|
||||
[ctrlX AUTOMATION Community](https://ctrlx-automation.com/community)
|
||||
to get additional support or leave some ideas and feedback.
|
||||
|
||||
Also, join
|
||||
[InfluxData Community Slack](https://influxdata.com/slack) or
|
||||
[InfluxData Community Page](https://community.influxdata.com/)
|
||||
if you have questions or comments for the telegraf engineering teams.
|
||||
|
||||
## Example Output
|
||||
|
||||
The plugin handles simple, array and object (JSON) data types.
|
||||
|
||||
### Example with simple data type
|
||||
|
||||
Configuration:
|
||||
|
||||
```toml
|
||||
[[inputs.ctrlx_datalayer.subscription]]
|
||||
measurement="memory"
|
||||
[inputs.ctrlx_datalayer.subscription.tags]
|
||||
sub_tag1="memory_tag1"
|
||||
sub_tag2="memory_tag2"
|
||||
|
||||
[[inputs.ctrlx_datalayer.subscription.nodes]]
|
||||
name ="available"
|
||||
address="framework/metrics/system/memavailable-mb"
|
||||
[inputs.ctrlx_datalayer.subscription.nodes.tags]
|
||||
node_tag1="memory_available_tag1"
|
||||
node_tag2="memory_available_tag2"
|
||||
|
||||
[[inputs.ctrlx_datalayer.subscription.nodes]]
|
||||
name ="used"
|
||||
address="framework/metrics/system/memused-mb"
|
||||
[inputs.ctrlx_datalayer.subscription.nodes.tags]
|
||||
node_tag1="memory_used_node_tag1"
|
||||
node_tag2="memory_used_node_tag2"
|
||||
```
|
||||
|
||||
Source:
|
||||
|
||||
```json
|
||||
"framework/metrics/system/memavailable-mb" : 365.93359375
|
||||
"framework/metrics/system/memused-mb" : 567.67578125
|
||||
```
|
||||
|
||||
Metrics:
|
||||
|
||||
```text
|
||||
memory,source=192.168.1.1,host=host.example.com,node=framework/metrics/system/memavailable-mb,node_tag1=memory_available_tag1,node_tag2=memory_available_tag2,sub_tag1=memory2_tag1,sub_tag2=memory_tag2 available=365.93359375 1680093310249627400
|
||||
memory,source=192.168.1.1,host=host.example.com,node=framework/metrics/system/memused-mb,node_tag1=memory_used_node_tag1,node_tag2=memory_used_node_tag2,sub_tag1=memory2_tag1,sub_tag2=memory_tag2 used=567.67578125 1680093310249667600
|
||||
```
|
||||
|
||||
### Example with array data type
|
||||
|
||||
Configuration:
|
||||
|
||||
```toml
|
||||
[[inputs.ctrlx_datalayer.subscription]]
|
||||
measurement="array"
|
||||
nodes=[
|
||||
{ name="ar_uint8", address="alldata/dynamic/array-of-uint8"},
|
||||
{ name="ar_bool8", address="alldata/dynamic/array-of-bool8"},
|
||||
]
|
||||
```
|
||||
|
||||
Source:
|
||||
|
||||
```json
|
||||
"alldata/dynamic/array-of-bool8" : [true, false, true]
|
||||
"alldata/dynamic/array-of-uint8" : [0, 255]
|
||||
```
|
||||
|
||||
Metrics:
|
||||
|
||||
```text
|
||||
array,source=192.168.1.1,host=host.example.com,node=alldata/dynamic/array-of-bool8 ar_bool8_0=true,ar_bool8_1=false,ar_bool8_2=true 1680095727347018800
|
||||
array,source=192.168.1.1,host=host.example.com,node=alldata/dynamic/array-of-uint8 ar_uint8_0=0,ar_uint8_1=255 1680095727347223300
|
||||
```
|
||||
|
||||
### Example with object data type (JSON)
|
||||
|
||||
Configuration:
|
||||
|
||||
```toml
|
||||
[[inputs.ctrlx_datalayer.subscription]]
|
||||
measurement="motion"
|
||||
nodes=[
|
||||
{name="linear", address="motion/axs/Axis_1/state/values/actual"},
|
||||
{name="rotational", address="motion/axs/Axis_2/state/values/actual"},
|
||||
]
|
||||
```
|
||||
|
||||
Source:
|
||||
|
||||
```json
|
||||
"motion/axs/Axis_1/state/values/actual" : {"actualPos":65.249329860957,"actualVel":5,"actualAcc":0,"actualTorque":0,"distLeft":0,"actualPosUnit":"mm","actualVelUnit":"mm/min","actualAccUnit":"m/s^2","actualTorqueUnit":"Nm","distLeftUnit":"mm"}
|
||||
"motion/axs/Axis_2/state/values/actual" : {"actualPos":120,"actualVel":0,"actualAcc":0,"actualTorque":0,"distLeft":0,"actualPosUnit":"deg","actualVelUnit":"rpm","actualAccUnit":"rad/s^2","actualTorqueUnit":"Nm","distLeftUnit":"deg"}
|
||||
```
|
||||
|
||||
Metrics:
|
||||
|
||||
```text
|
||||
motion,source=192.168.1.1,host=host.example.com,node=motion/axs/Axis_1/state/values/actual linear_actualVel=5,linear_distLeftUnit="mm",linear_actualAcc=0,linear_distLeft=0,linear_actualPosUnit="mm",linear_actualAccUnit="m/s^2",linear_actualTorqueUnit="Nm",linear_actualPos=65.249329860957,linear_actualVelUnit="mm/min",linear_actualTorque=0 1680258290342523500
|
||||
motion,source=192.168.1.1,host=host.example.com,node=motion/axs/Axis_2/state/values/actual rotational_distLeft=0,rotational_actualVelUnit="rpm",rotational_actualAccUnit="rad/s^2",rotational_distLeftUnit="deg",rotational_actualPos=120,rotational_actualVel=0,rotational_actualAcc=0,rotational_actualPosUnit="deg",rotational_actualTorqueUnit="Nm",rotational_actualTorque=0 1680258290342538100
|
||||
```
|
||||
|
||||
If `output_json_string` is set in the configuration:
|
||||
|
||||
```toml
|
||||
output_json_string = true
|
||||
```
|
||||
|
||||
then the metrics will be generated like this:
|
||||
|
||||
```text
|
||||
motion,source=192.168.1.1,host=host.example.com,node=motion/axs/Axis_1/state/values/actual linear="{\"actualAcc\":0,\"actualAccUnit\":\"m/s^2\",\"actualPos\":65.249329860957,\"actualPosUnit\":\"mm\",\"actualTorque\":0,\"actualTorqueUnit\":\"Nm\",\"actualVel\":5,\"actualVelUnit\":\"mm/min\",\"distLeft\":0,\"distLeftUnit\":\"mm\"}" 1680258290342523500
|
||||
motion,source=192.168.1.1,host=host.example.com,node=motion/axs/Axis_2/state/values/actual rotational="{\"actualAcc\":0,\"actualAccUnit\":\"rad/s^2\",\"actualPos\":120,\"actualPosUnit\":\"deg\",\"actualTorque\":0,\"actualTorqueUnit\":\"Nm\",\"actualVel\":0,\"actualVelUnit\":\"rpm\",\"distLeft\":0,\"distLeftUnit\":\"deg\"}" 1680258290342538100
|
||||
```
|
Loading…
Add table
Add a link
Reference in a new issue