coussej / node-opcua-logger

An OPCUA Client for logging data to InfluxDB! 🔌 🏭
https://www.factry.io
MIT License
181 stars 65 forks source link
influxdb opc-server opc-ua

Influx-OPCUA-logger: An OPCUA Client for logging data to InfluxDB! :electric_plug: :factory:

This application will connect to an OPC UA server, subscribe to the metrics in your configuration and log them to an influxdb instance. It also buffers the data in case influxdb is temporarily unavailable, your data is not lost. Has been running in production in several factories since mid 2016.

Brought to you by Factry.

JavaScript Style Guide

:information_source: This is an alpha release of v2. Please go ahead and try it out, you can contribute by opening issues if you find any bugs!

Features

How to run

From a prebuilt binary

From source

Configuration

Environment variables

The following settings are optional and controlled by setting environment variables.

Config file

The application expects a config file that contains all the details on which data you want to log. This can either be a TOML or a JSON file, whichever you prefer. The application will look for such a file in the current working directory on startup, unless you specifically specify a seperate path in the environment. The contents of the file will be validated against the JSON Schema in the src/schema folder. For reference, two example config files are provided in the example_config folder.

A config file consists of 2 sections. In the first part, you specify the connection details to both the OPCUA server and the InfluxDB server:

# The OPCUA connection parameters. If you want to use anonymous auth, 
# remove the username and password lines.
[opcua]
url             = "opc.tcp://localhost:53530/OPCUA/SimulationServer"
user            = "test"
pass            = "test1"

# The InfluxDB connection parameters. Use a connection url containing all 
# details, ie. http(s)://user:password@host:port/database
[influx]
url              = "http://user:password@localhost:8086/opcua"
writeInterval    = 1000          # optional. defaults to 1000ms
writeMaxPoints   = 1000          # optional. defaults to 1000 points

In the second part, you specify which metrics to collect. For each such metric, you can specify an objects in the [[metrics]] list, like below. A metric should have the following properties:

# For each metrics you want to collect, add a [[metrics]] object.
[[metrics]]
measurement        = "polled1"
datatype           = "number"
tags               = { simulation = "true", location = "ghent" }
nodeId             = "ns=5;s=Sinusoid1"
method             = "polled"
interval           = 1000     

[[metrics]]
measurement        = "monitored2"
datatype           = "boolean"
tags               = { simulation = "true", location = "ghent" }
nodeId             = "ns=3;s=BooleanDataItem"
method             = "monitored"
interval           = 5000  

Contributing

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request

Credits

Disclaimer

The logger contains a 'phone home' functionality, where it sends anonymous usage data to us (# metrics and runtime), so we can get an idea of how much it is being used. If you don't want this, you can set DISABLE_ANALYTICS=true in the environment.

License

MIT